Free Download Manager v6.23.0.5754版本的 MD5 值为:01223946462417ce314ac322c50926ba

以下内容为反编译后的 WebViewActivity.java 源代码,内容仅作参考


package org.freedownloadmanager.fdm;

import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.webkit.WebBackForwardList;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.PopupMenu;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.common.internal.ImagesContract;
import java.io.UnsupportedEncodingException;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookiePolicy;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;

public class WebViewActivity extends AppCompatActivity implements AppEventsReceiver {
    public static boolean firstOpening = true;
    public static boolean m_isCreated = false;
    public BookmarkTools bookmarkTools;
    String current_page_url = "";
    public boolean m_allowAutoPasteFromClipboard = true;
    private EditText m_editText;
    private Button m_menuBtn;
    private ProgressBar m_progressBar;
    private Button m_refreshBtn;
    private Button m_stopBtn;
    private WebView m_webView;

    private void showHistory() {
    }

    @Override
    public void onCreate(Bundle bundle) {
        m_isCreated = true;
        Window window = getWindow();
        window.addFlags(Integer.MIN_VALUE);
        window.clearFlags(67108864);
        super.onCreate(bundle);
        setContentView(R.layout.activity_web_view);
        this.bookmarkTools = new BookmarkTools(getApplicationContext());
        CookieHandler.setDefault(new CookieManager(new PersistentCookieStore(this), CookiePolicy.ACCEPT_ALL));
        this.m_refreshBtn = (Button) findViewById(R.id.refreshBtn);
        this.m_stopBtn = (Button) findViewById(R.id.stopBtn);
        this.m_progressBar = (ProgressBar) findViewById(R.id.progressBar);
        m_editTextInit();
        m_menuBtnInit();
        m_webViewInit();
        AppEventsManager.registerReceiver(this, true);
        if (getIntent() != null) {
            processIntent(getIntent());
        }
        if (bundle == null) {
            if (this.m_allowAutoPasteFromClipboard) {
                this.m_editText.requestFocus();
            } else {
                this.m_webView.requestFocus();
            }
        }
        if (MyJavaNatives.nativeFunctionsRegistered) {
            return;
        }
        Tools.showMainActivity(this);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        processIntent(intent);
    }

    protected void processIntent(Intent intent) {
        if (intent != null && (intent.getFlags() & 1048576) == 0) {
            String stringExtra = intent.getStringExtra("EXTRA_OPEN_URL");
            if (stringExtra == null || stringExtra.isEmpty()) {
                String action = intent.getAction();
                String type = intent.getType();
                if (action == null) {
                    return;
                }
                if ((action.equals("android.intent.action.SEND") || action.equals(getPackageName() + ".internal.browser.intent.action.SEND")) && type != null && "text/plain".equals(type)) {
                    stringExtra = intent.getStringExtra("android.intent.extra.TEXT");
                }
            }
            if (isOkUrl(stringExtra)) {
                this.m_allowAutoPasteFromClipboard = false;
                this.m_webView.loadUrl(stringExtra);
            }
        }
    }

    @Override
    protected void onDestroy() {
        AppEventsManager.registerReceiver(this, false);
        m_isCreated = false;
        super.onDestroy();
    }

    @Override
    protected void onStart() {
        super.onStart();
        MyJavaNatives.waOnActivityStopped(1, false);
    }

    @Override
    protected void onStop() {
        super.onStop();
        MyJavaNatives.waOnActivityStopped(1, true);
    }

    @Override
    public void onActivityResult(int i, int i2, Intent intent) {
        super.onActivityResult(i, i2, intent);
        if (i == 1 && i2 == -1) {
            String stringExtra = intent.getStringExtra(ImagesContract.URL);
            this.current_page_url = stringExtra;
            this.m_editText.setText(stringExtra);
            loadLink();
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle bundle) {
        Log.v("[DEBUG]", "onSaveInstanceState");
        super.onSaveInstanceState(bundle);
        this.m_webView.saveState(bundle);
    }

    @Override
    protected void onRestoreInstanceState(Bundle bundle) {
        Log.v("[DEBUG]", "onRestoreInstanceState");
        super.onRestoreInstanceState(bundle);
        this.m_webView.restoreState(bundle);
    }

    private void m_editTextInit() {
        this.m_editText = (EditText) findViewById(R.id.editText);
        setStrings();
        this.m_editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if (i == 2) {
                    WebViewActivity.this.loadLink();
                    ((InputMethodManager) textView.getContext().getSystemService("input_method")).hideSoftInputFromWindow(textView.getWindowToken(), 0);
                }
                return false;
            }
        });
        this.m_editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean z) {
            }
        });
    }

    private void m_menuBtnInit() {
        Button button = (Button) findViewById(R.id.menuBtn);
        this.m_menuBtn = button;
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                PopupMenu popupMenu = new PopupMenu(WebViewActivity.this, view);
                popupMenu.getMenuInflater().inflate(R.menu.main_menu, popupMenu.getMenu());
                popupMenu.getMenu().findItem(R.id.backToFdm).setTitle(MyJavaNatives.waQtStringArg(MyJavaNatives.translate("Browser MainMenu", "Back to %1"), MyJavaNatives.waAppName(true)));
                popupMenu.getMenu().findItem(R.id.bookmarks).setTitle(MyJavaNatives.translate("Browser MainMenu", "Bookmarks"));
                popupMenu.getMenu().findItem(R.id.downloadMedia).setTitle(MyJavaNatives.translate("Browser MainMenu", "Download media"));
                if (WebViewActivity.this.canAddBookmark()) {
                    if (WebViewActivity.this.isCurrentPageBookmarked()) {
                        popupMenu.getMenu().findItem(R.id.addBookmark).setTitle(MyJavaNatives.translate("Browser MainMenu", "Remove bookmark"));
                    } else {
                        popupMenu.getMenu().findItem(R.id.addBookmark).setTitle(MyJavaNatives.translate("Browser MainMenu", "Add bookmark"));
                    }
                    popupMenu.getMenu().findItem(R.id.addBookmark).setEnabled(true);
                } else {
                    popupMenu.getMenu().findItem(R.id.addBookmark).setTitle(MyJavaNatives.translate("Browser MainMenu", "Add bookmark"));
                    popupMenu.getMenu().findItem(R.id.addBookmark).setEnabled(false);
                }
                popupMenu.getMenu().findItem(R.id.downloadMedia).setEnabled(MyJavaNatives.nativeFunctionsRegistered && MyJavaNatives.bibHasMedia(WebViewActivity.this.m_webView.getUrl()));
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem menuItem) {
                        switch (menuItem.getItemId()) {
                            case R.id.addBookmark:
                                WebViewActivity.this.addBookmarkClick();
                                return true;
                            case R.id.backToFdm:
                                Tools.showMainActivity(WebViewActivity.this);
                                return true;
                            case R.id.bookmarks:
                                WebViewActivity.this.startActivityForResult(new Intent(WebViewActivity.this, (Class<?>) BookmarkActivity.class), 1);
                                return true;
                            case R.id.downloadMedia:
                                MyJavaNatives.bibDownloadMedia(WebViewActivity.this.m_webView.getUrl());
                                Tools.showMainActivity(WebViewActivity.this);
                                return true;
                            default:
                                return false;
                        }
                    }
                });
                popupMenu.show();
            }
        });
    }

    private String getUrl4Bookmark() {
        return this.m_webView.getUrl();
    }

    public boolean canAddBookmark() {
        String url4Bookmark = getUrl4Bookmark();
        return url4Bookmark != null && this.m_editText.getText().toString().equals(url4Bookmark.toString());
    }

    public boolean isCurrentPageBookmarked() {
        return this.bookmarkTools.searchBookmark(getUrl4Bookmark()).intValue() >= 0;
    }

    public void addBookmarkClick() {
        if (canAddBookmark()) {
            String url4Bookmark = getUrl4Bookmark();
            Integer searchBookmark = this.bookmarkTools.searchBookmark(url4Bookmark);
            if (searchBookmark.intValue() >= 0) {
                this.bookmarkTools.removeBookmark(searchBookmark);
            } else {
                this.bookmarkTools.addBookmark(url4Bookmark, this.m_webView.getTitle().trim());
            }
        }
    }

    public void printBackForwardList() {
        WebBackForwardList copyBackForwardList = this.m_webView.copyBackForwardList();
        int size = copyBackForwardList.getSize();
        for (int i = 0; i < size; i++) {
            Log.v("[DEBUG]", "The URL at index: " + Integer.toString(i) + " is " + copyBackForwardList.getItemAtIndex(i).getUrl());
        }
    }

    private void m_webViewInit() {
        WebView webView = (WebView) findViewById(R.id.webView);
        this.m_webView = webView;
        webView.getSettings().setJavaScriptEnabled(true);
        NetworkRequestsKeeper networkRequestsKeeper = new NetworkRequestsKeeper();
        this.m_webView.setWebViewClient(new MyWebViewClient(this, this.m_webView, networkRequestsKeeper));
        this.m_webView.setDownloadListener(new BibDownloadListener(this, this.m_webView, networkRequestsKeeper));
        this.m_webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView webView2, int i) {
                WebViewActivity.this.m_progressBar.setProgress(i);
            }
        });
    }

    @Override
    public void onWindowFocusChanged(boolean z) {
        super.onWindowFocusChanged(z);
        if (firstOpening && z && this.m_allowAutoPasteFromClipboard) {
            firstOpening = false;
            String urlFromClipboard = getUrlFromClipboard();
            this.current_page_url = urlFromClipboard;
            this.m_editText.setText(urlFromClipboard);
            this.m_editText.selectAll();
        }
    }

    private String getUrlFromClipboard() {
        ClipDescription primaryClipDescription;
        ClipData primaryClip;
        ClipData.Item itemAt;
        CharSequence text;
        String obj;
        ClipboardManager clipboardManager = (ClipboardManager) getSystemService("clipboard");
        if (clipboardManager == null || !clipboardManager.hasPrimaryClip() || (primaryClipDescription = clipboardManager.getPrimaryClipDescription()) == null || !primaryClipDescription.hasMimeType("text/plain") || (primaryClip = clipboardManager.getPrimaryClip()) == null || (itemAt = primaryClip.getItemAt(0)) == null || (text = itemAt.getText()) == null || (obj = text.toString()) == null) {
            return "";
        }
        String trim = obj.trim();
        return isOkUrl(trim) ? trim : "";
    }

    public void loadLink() {
        String obj = this.m_editText.getText().toString();
        if (!isOkUrl(obj)) {
            if (obj.indexOf(32) != -1 || obj.indexOf(46) == -1) {
                obj = "https://www.google.com/search?q=" + encodeValue(obj);
            } else {
                obj = "https://" + obj;
            }
        }
        this.m_webView.loadUrl(obj);
    }

    protected boolean isOkUrl(String str) {
        return (str == null || str.isEmpty() || !str.matches("^(https?|ftp):\\/\\/.*$")) ? false : true;
    }

    private static String encodeValue(String str) {
        try {
            return URLEncoder.encode(str, StandardCharsets.UTF_8.name());
        } catch (UnsupportedEncodingException unused) {
            return str;
        }
    }

    public void onRefreshClick(View view) {
        loadLink();
    }

    public void onStopClick(View view) {
        this.m_webView.stopLoading();
    }

    @Override
    public boolean onKeyDown(int i, KeyEvent keyEvent) {
        if (i == 4 && this.m_webView.canGoBack()) {
            this.m_webView.goBack();
            return true;
        }
        return super.onKeyDown(i, keyEvent);
    }

    @Override
    public void onInterfaceLanguageChanged() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                WebViewActivity.this.onInterfaceLanguageChangedUi();
            }
        });
    }

    protected void onInterfaceLanguageChangedUi() {
        setStrings();
    }

    private void setStrings() {
        this.m_editText.setHint(MyJavaNatives.translate("Browser", "Enter URL"));
    }

    public class MyWebViewClient extends BibWebViewClient {
        MyWebViewClient(Context context, WebView webView, NetworkRequestsKeeper networkRequestsKeeper) {
            super(context, webView, networkRequestsKeeper);
        }

        @Override
        public void onPageStarted(WebView webView, String str, Bitmap bitmap) {
            super.onPageStarted(webView, str, bitmap);
            WebViewActivity.this.current_page_url = str;
            WebViewActivity.this.m_progressBar.setVisibility(0);
            WebViewActivity.this.m_refreshBtn.setVisibility(8);
            WebViewActivity.this.m_stopBtn.setVisibility(0);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView webView, String str) {
            String url = webView.getUrl();
            String lowerCase = url.toLowerCase();
            if (lowerCase.startsWith("http:") || lowerCase.startsWith("https:")) {
                HashMap hashMap = new HashMap();
                hashMap.put("Referer", url);
                webView.loadUrl(str, hashMap);
                return true;
            }
            webView.loadUrl(str);
            return true;
        }

        @Override
        public void onPageFinished(WebView webView, String str) {
            super.onPageFinished(webView, str);
            WebViewActivity.this.m_progressBar.setVisibility(8);
            WebViewActivity.this.m_refreshBtn.setVisibility(0);
            WebViewActivity.this.m_stopBtn.setVisibility(8);
        }

        @Override
        public void doUpdateVisitedHistory(WebView webView, String str, boolean z) {
            WebViewActivity.this.m_editText.setText(str.equals("about:blank") ? "" : str);
            super.doUpdateVisitedHistory(webView, str, z);
        }
    }
}