/*
- * Copyright © 2015-2020 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2015-2021 Soren Stoutner <soren@stoutner.com>.
*
* Download cookie code contributed 2017 Hendrik Knackstedt. Copyright assigned to Soren Stoutner <soren@stoutner.com>.
*
// The search URL is set in `applyAppSettings()` and used in `onNewIntent()`, `loadUrlFromTextBox()`, `initializeApp()`, and `initializeWebView()`.
private String searchURL;
- // The options menu is set in `onCreateOptionsMenu()` and used in `onOptionsItemSelected()`, `updatePrivacyIcons()`, and `initializeWebView()`.
- private Menu optionsMenu;
-
// The blocklists are populated in `finishedPopulatingBlocklists()` and accessed from `initializeWebView()`.
private ArrayList<List<String[]>> easyList;
private ArrayList<List<String[]>> easyPrivacy;
private String saveWebpageFilePath;
// Declare the class views.
+ private FrameLayout rootFrameLayout;
private DrawerLayout drawerLayout;
+ private RelativeLayout mainContentRelativeLayout;
private AppBarLayout appBarLayout;
private Toolbar toolbar;
+ private RelativeLayout urlRelativeLayout;
+ private EditText urlEditText;
+ private ActionBar actionBar;
private LinearLayout findOnPageLinearLayout;
private LinearLayout tabsLinearLayout;
private TabLayout tabLayout;
private SwipeRefreshLayout swipeRefreshLayout;
private ViewPager webViewPager;
+ private FrameLayout fullScreenVideoFrameLayout;
+
+ // Declare the class menus.
+ private Menu optionsMenu;
+
+ // Declare the class menu items.
+ private MenuItem navigationBackMenuItem;
+ private MenuItem navigationForwardMenuItem;
+ private MenuItem navigationHistoryMenuItem;
+ private MenuItem navigationRequestsMenuItem;
+ private MenuItem optionsPrivacyMenuItem;
+ private MenuItem optionsRefreshMenuItem;
+ private MenuItem optionsFirstPartyCookiesMenuItem;
+ private MenuItem optionsThirdPartyCookiesMenuItem;
+ private MenuItem optionsDomStorageMenuItem;
+ private MenuItem optionsSaveFormDataMenuItem;
+ private MenuItem optionsClearDataMenuItem;
+ private MenuItem optionsClearCookiesMenuItem;
+ private MenuItem optionsClearDomStorageMenuItem;
+ private MenuItem optionsClearFormDataMenuItem;
+ private MenuItem optionsBlocklistsMenuItem;
+ private MenuItem optionsEasyListMenuItem;
+ private MenuItem optionsEasyPrivacyMenuItem;
+ private MenuItem optionsFanboysAnnoyanceListMenuItem;
+ private MenuItem optionsFanboysSocialBlockingListMenuItem;
+ private MenuItem optionsUltraListMenuItem;
+ private MenuItem optionsUltraPrivacyMenuItem;
+ private MenuItem optionsBlockAllThirdPartyRequestsMenuItem;
+ private MenuItem optionsProxyMenuItem;
+ private MenuItem optionsProxyNoneMenuItem;
+ private MenuItem optionsProxyTorMenuItem;
+ private MenuItem optionsProxyI2pMenuItem;
+ private MenuItem optionsProxyCustomMenuItem;
+ private MenuItem optionsUserAgentMenuItem;
+ private MenuItem optionsUserAgentPrivacyBrowserMenuItem;
+ private MenuItem optionsUserAgentWebViewDefaultMenuItem;
+ private MenuItem optionsUserAgentFirefoxOnAndroidMenuItem;
+ private MenuItem optionsUserAgentChromeOnAndroidMenuItem;
+ private MenuItem optionsUserAgentSafariOnIosMenuItem;
+ private MenuItem optionsUserAgentFirefoxOnLinuxMenuItem;
+ private MenuItem optionsUserAgentChromiumOnLinuxMenuItem;
+ private MenuItem optionsUserAgentFirefoxOnWindowsMenuItem;
+ private MenuItem optionsUserAgentChromeOnWindowsMenuItem;
+ private MenuItem optionsUserAgentEdgeOnWindowsMenuItem;
+ private MenuItem optionsUserAgentInternetExplorerOnWindowsMenuItem;
+ private MenuItem optionsUserAgentSafariOnMacosMenuItem;
+ private MenuItem optionsUserAgentCustomMenuItem;
+ private MenuItem optionsSwipeToRefreshMenuItem;
+ private MenuItem optionsWideViewportMenuItem;
+ private MenuItem optionsDisplayImagesMenuItem;
+ private MenuItem optionsDarkWebViewMenuItem;
+ private MenuItem optionsFontSizeMenuItem;
+ private MenuItem optionsAddOrEditDomainMenuItem;
@Override
// Remove the warning about needing to override `performClick()` when using an `OnTouchListener` with `WebView`.
setContentView(R.layout.main_framelayout);
// Get handles for the views.
+ rootFrameLayout = findViewById(R.id.root_framelayout);
drawerLayout = findViewById(R.id.drawerlayout);
+ mainContentRelativeLayout = findViewById(R.id.main_content_relativelayout);
appBarLayout = findViewById(R.id.appbar_layout);
toolbar = findViewById(R.id.toolbar);
findOnPageLinearLayout = findViewById(R.id.find_on_page_linearlayout);
tabLayout = findViewById(R.id.tablayout);
swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
webViewPager = findViewById(R.id.webviewpager);
+ fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
+
+ // Get a handle for the navigation view.
+ NavigationView navigationView = findViewById(R.id.navigationview);
+
+ // Get a handle for the navigation menu.
+ Menu navigationMenu = navigationView.getMenu();
+
+ // Get handles for the navigation menu items.
+ navigationBackMenuItem = navigationMenu.findItem(R.id.back);
+ navigationForwardMenuItem = navigationMenu.findItem(R.id.forward);
+ navigationHistoryMenuItem = navigationMenu.findItem(R.id.history);
+ navigationRequestsMenuItem = navigationMenu.findItem(R.id.requests);
+
+ // Listen for touches on the navigation menu.
+ navigationView.setNavigationItemSelectedListener(this);
// Get a handle for the app compat delegate.
AppCompatDelegate appCompatDelegate = getDelegate();
appCompatDelegate.setSupportActionBar(toolbar);
// Get a handle for the action bar.
- ActionBar actionBar = appCompatDelegate.getSupportActionBar();
+ actionBar = appCompatDelegate.getSupportActionBar();
- // This is needed to get rid of the Android Studio warning that the action bar might be null.
+ // Remove the incorrect lint warning below that the action bar might be null.
assert actionBar != null;
// Add the custom layout, which shows the URL text bar.
actionBar.setCustomView(R.layout.url_app_bar);
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
+ // Get handles for the views in the URL app bar.
+ urlRelativeLayout = findViewById(R.id.url_relativelayout);
+ urlEditText = findViewById(R.id.url_edittext);
+
// Create the hamburger icon at the start of the AppBar.
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open_navigation_drawer, R.string.close_navigation_drawer);
// Replace the intent that started the app with this one.
setIntent(intent);
- // Check to see if the app is being restarted.
- if (savedStateArrayList == null || savedStateArrayList.size() == 0) { // The activity is running for the first time.
+ // Check to see if the app is being restarted from a saved state.
+ if (savedStateArrayList == null || savedStateArrayList.size() == 0) { // The activity is not being restarted from a saved state.
// Get the information from the intent.
String intentAction = intent.getAction();
Uri intentUriData = intent.getData();
+ String intentStringExtra = intent.getStringExtra(Intent.EXTRA_TEXT);
// Determine if this is a web search.
boolean isWebSearch = ((intentAction != null) && intentAction.equals(Intent.ACTION_WEB_SEARCH));
// Only process the URI if it contains data or it is a web search. If the user pressed the desktop icon after the app was already running the URI will be null.
- if (intentUriData != null || isWebSearch) {
+ if (intentUriData != null || intentStringExtra != null || isWebSearch) {
// Get the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
// Add the base search URL.
url = searchURL + encodedUrlString;
- } else { // The intent should contain a URL.
+ } else if (intentUriData != null) { // The intent contains a URL formatted as a URI.
// Set the intent data as the URL.
url = intentUriData.toString();
+ } else { // The intent contains a string, which might be a URL.
+ // Set the intent string as the URL.
+ url = intentStringExtra;
}
// Add a new tab if specified in the preferences.
updatePrivacyIcons(true);
}
- // `onResume()` runs after `onStart()`, which runs after `onCreate()` and `onRestart()`.
+ // `onStart()` runs after `onCreate()` or `onRestart()`. This is used instead of `onResume()` so the commands aren't called every time the screen is partially hidden.
@Override
- public void onResume() {
+ public void onStart() {
// Run the default commands.
- super.onResume();
+ super.onStart();
// Resume any WebViews.
for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
// Get the nested scroll WebView from the tab fragment.
NestedScrollWebView nestedScrollWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
- // Resume the nested scroll WebView JavaScript timers.
- nestedScrollWebView.resumeTimers();
-
// Resume the nested scroll WebView.
nestedScrollWebView.onResume();
}
}
+ // Resume the nested scroll WebView JavaScript timers. This is a global command that resumes JavaScript timers on all WebViews.
+ if (currentWebView != null) {
+ currentWebView.resumeTimers();
+ }
+
// Reapply the proxy settings if the system is using a proxy. This redisplays the appropriate alert dialog.
if (!proxyMode.equals(ProxyHelper.NONE)) {
applyProxy(false);
// Reapply any system UI flags and the ad in the free flavor.
if (displayingFullScreenVideo || inFullScreenBrowsingMode) { // The system is displaying a website or a video in full screen mode.
- // Get a handle for the root frame layouts.
- FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
-
/* Hide the system bars.
* SYSTEM_UI_FLAG_FULLSCREEN hides the status bar at the top of the screen.
* SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN makes the root frame layout fill the area that is normally reserved for the status bar.
rootFrameLayout.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
} else if (BuildConfig.FLAVOR.contentEquals("free")) { // The system in not in full screen mode.
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
// Resume the ad.
- AdHelper.resumeAd(findViewById(R.id.adview));
+ AdHelper.resumeAd(adView);
}
}
+ // `onStop()` runs after `onPause()`. It is used instead of `onPause()` so the commands are not called every time the screen is partially hidden.
@Override
- public void onPause() {
+ public void onStop() {
// Run the default commands.
- super.onPause();
+ super.onStop();
for (int i = 0; i < webViewPagerAdapter.getCount(); i++) {
// Get the WebView tab fragment.
// Pause the nested scroll WebView.
nestedScrollWebView.onPause();
-
- // Pause the nested scroll WebView JavaScript timers.
- nestedScrollWebView.pauseTimers();
}
}
+ // Pause the WebView JavaScript timers. This is a global command that pauses JavaScript on all WebViews.
+ if (currentWebView != null) {
+ currentWebView.pauseTimers();
+ }
+
// Pause the ad or it will continue to consume resources in the background on the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
// Pause the ad.
- AdHelper.pauseAd(findViewById(R.id.adview));
+ AdHelper.pauseAd(adView);
}
}
// Store a handle for the options menu so it can be used by `onOptionsItemSelected()` and `updatePrivacyIcons()`.
optionsMenu = menu;
+ // Get handles for the class menu items.
+ optionsPrivacyMenuItem = menu.findItem(R.id.javascript);
+ optionsRefreshMenuItem = menu.findItem(R.id.refresh);
+ optionsFirstPartyCookiesMenuItem = menu.findItem(R.id.first_party_cookies);
+ optionsThirdPartyCookiesMenuItem = menu.findItem(R.id.third_party_cookies);
+ optionsDomStorageMenuItem = menu.findItem(R.id.dom_storage);
+ optionsSaveFormDataMenuItem = menu.findItem(R.id.save_form_data); // Form data can be removed once the minimum API >= 26.
+ optionsClearDataMenuItem = menu.findItem(R.id.clear_data);
+ optionsClearCookiesMenuItem = menu.findItem(R.id.clear_cookies);
+ optionsClearDomStorageMenuItem = menu.findItem(R.id.clear_dom_storage);
+ optionsClearFormDataMenuItem = menu.findItem(R.id.clear_form_data); // Form data can be removed once the minimum API >= 26.
+ optionsBlocklistsMenuItem = menu.findItem(R.id.blocklists);
+ optionsEasyListMenuItem = menu.findItem(R.id.easylist);
+ optionsEasyPrivacyMenuItem = menu.findItem(R.id.easyprivacy);
+ optionsFanboysAnnoyanceListMenuItem = menu.findItem(R.id.fanboys_annoyance_list);
+ optionsFanboysSocialBlockingListMenuItem = menu.findItem(R.id.fanboys_social_blocking_list);
+ optionsUltraListMenuItem = menu.findItem(R.id.ultralist);
+ optionsUltraPrivacyMenuItem = menu.findItem(R.id.ultraprivacy);
+ optionsBlockAllThirdPartyRequestsMenuItem = menu.findItem(R.id.block_all_third_party_requests);
+ optionsProxyMenuItem = menu.findItem(R.id.proxy);
+ optionsProxyNoneMenuItem = menu.findItem(R.id.proxy_none);
+ optionsProxyTorMenuItem = menu.findItem(R.id.proxy_tor);
+ optionsProxyI2pMenuItem = menu.findItem(R.id.proxy_i2p);
+ optionsProxyCustomMenuItem = menu.findItem(R.id.proxy_custom);
+ optionsUserAgentMenuItem = menu.findItem(R.id.user_agent);
+ optionsUserAgentPrivacyBrowserMenuItem = menu.findItem(R.id.user_agent_privacy_browser);
+ optionsUserAgentWebViewDefaultMenuItem = menu.findItem(R.id.user_agent_webview_default);
+ optionsUserAgentFirefoxOnAndroidMenuItem = menu.findItem(R.id.user_agent_firefox_on_android);
+ optionsUserAgentChromeOnAndroidMenuItem = menu.findItem(R.id.user_agent_chrome_on_android);
+ optionsUserAgentSafariOnIosMenuItem = menu.findItem(R.id.user_agent_safari_on_ios);
+ optionsUserAgentFirefoxOnLinuxMenuItem = menu.findItem(R.id.user_agent_firefox_on_linux);
+ optionsUserAgentChromiumOnLinuxMenuItem = menu.findItem(R.id.user_agent_chromium_on_linux);
+ optionsUserAgentFirefoxOnWindowsMenuItem = menu.findItem(R.id.user_agent_firefox_on_windows);
+ optionsUserAgentChromeOnWindowsMenuItem = menu.findItem(R.id.user_agent_chrome_on_windows);
+ optionsUserAgentEdgeOnWindowsMenuItem = menu.findItem(R.id.user_agent_edge_on_windows);
+ optionsUserAgentInternetExplorerOnWindowsMenuItem = menu.findItem(R.id.user_agent_internet_explorer_on_windows);
+ optionsUserAgentSafariOnMacosMenuItem = menu.findItem(R.id.user_agent_safari_on_macos);
+ optionsUserAgentCustomMenuItem = menu.findItem(R.id.user_agent_custom);
+ optionsSwipeToRefreshMenuItem = menu.findItem(R.id.swipe_to_refresh);
+ optionsWideViewportMenuItem = menu.findItem(R.id.wide_viewport);
+ optionsDisplayImagesMenuItem = menu.findItem(R.id.display_images);
+ optionsDarkWebViewMenuItem = menu.findItem(R.id.dark_webview);
+ optionsFontSizeMenuItem = menu.findItem(R.id.font_size);
+ optionsAddOrEditDomainMenuItem = menu.findItem(R.id.add_or_edit_domain);
+
+ // Get handles for the method menu items.
+ MenuItem bookmarksMenuItem = menu.findItem(R.id.bookmarks);
+ MenuItem adConsentMenuItem = menu.findItem(R.id.ad_consent);
+
// Set the initial status of the privacy icons. `false` does not call `invalidateOptionsMenu` as the last step.
updatePrivacyIcons(false);
- // Get handles for the menu items.
- MenuItem toggleFirstPartyCookiesMenuItem = menu.findItem(R.id.toggle_first_party_cookies);
- MenuItem toggleThirdPartyCookiesMenuItem = menu.findItem(R.id.toggle_third_party_cookies);
- MenuItem toggleDomStorageMenuItem = menu.findItem(R.id.toggle_dom_storage);
- MenuItem toggleSaveFormDataMenuItem = menu.findItem(R.id.toggle_save_form_data); // Form data can be removed once the minimum API >= 26.
- MenuItem clearFormDataMenuItem = menu.findItem(R.id.clear_form_data); // Form data can be removed once the minimum API >= 26.
- MenuItem refreshMenuItem = menu.findItem(R.id.refresh);
- MenuItem darkWebViewMenuItem = menu.findItem(R.id.dark_webview);
- MenuItem adConsentMenuItem = menu.findItem(R.id.ad_consent);
-
// Only display third-party cookies if API >= 21
- toggleThirdPartyCookiesMenuItem.setVisible(Build.VERSION.SDK_INT >= 21);
+ optionsThirdPartyCookiesMenuItem.setVisible(Build.VERSION.SDK_INT >= 21);
// Only display the form data menu items if the API < 26.
- toggleSaveFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
- clearFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
+ optionsSaveFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
+ optionsClearFormDataMenuItem.setVisible(Build.VERSION.SDK_INT < 26);
// Disable the clear form data menu item if the API >= 26 so that the status of the main Clear Data is calculated correctly.
- clearFormDataMenuItem.setEnabled(Build.VERSION.SDK_INT < 26);
+ optionsClearFormDataMenuItem.setEnabled(Build.VERSION.SDK_INT < 26);
// Only display the dark WebView menu item if API >= 21.
- darkWebViewMenuItem.setVisible(Build.VERSION.SDK_INT >= 21);
+ optionsDarkWebViewMenuItem.setVisible(Build.VERSION.SDK_INT >= 21);
// Only show Ad Consent if this is the free flavor.
adConsentMenuItem.setVisible(BuildConfig.FLAVOR.contentEquals("free"));
// Get the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- // Get the dark theme and app bar preferences..
- boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean("display_additional_app_bar_icons", false);
+ // Get the dark theme and app bar preferences.
+ boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false);
// Set the status of the additional app bar icons. Setting the refresh menu item to `SHOW_AS_ACTION_ALWAYS` makes it appear even on small devices like phones.
if (displayAdditionalAppBarIcons) {
- toggleFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- toggleDomStorageMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
- refreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ optionsRefreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+ bookmarksMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+ optionsFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
} else { //Do not display the additional icons.
- toggleFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
- toggleDomStorageMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
- refreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ optionsRefreshMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ bookmarksMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ optionsFirstPartyCookiesMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
}
// Replace Refresh with Stop if a URL is already loading.
if (currentWebView != null && currentWebView.getProgress() != 100) {
// Set the title.
- refreshMenuItem.setTitle(R.string.stop);
+ optionsRefreshMenuItem.setTitle(R.string.stop);
// Set the icon if it is displayed in the app bar.
if (displayAdditionalAppBarIcons) {
// Set the icon according to the current theme status.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- refreshMenuItem.setIcon(R.drawable.close_day);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
} else {
- refreshMenuItem.setIcon(R.drawable.close_night);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
}
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
- // Get handles for the menu items.
- MenuItem addOrEditDomain = menu.findItem(R.id.add_or_edit_domain);
- MenuItem firstPartyCookiesMenuItem = menu.findItem(R.id.toggle_first_party_cookies);
- MenuItem thirdPartyCookiesMenuItem = menu.findItem(R.id.toggle_third_party_cookies);
- MenuItem domStorageMenuItem = menu.findItem(R.id.toggle_dom_storage);
- MenuItem saveFormDataMenuItem = menu.findItem(R.id.toggle_save_form_data); // Form data can be removed once the minimum API >= 26.
- MenuItem clearDataMenuItem = menu.findItem(R.id.clear_data);
- MenuItem clearCookiesMenuItem = menu.findItem(R.id.clear_cookies);
- MenuItem clearDOMStorageMenuItem = menu.findItem(R.id.clear_dom_storage);
- MenuItem clearFormDataMenuItem = menu.findItem(R.id.clear_form_data); // Form data can be removed once the minimum API >= 26.
- MenuItem blocklistsMenuItem = menu.findItem(R.id.blocklists);
- MenuItem easyListMenuItem = menu.findItem(R.id.easylist);
- MenuItem easyPrivacyMenuItem = menu.findItem(R.id.easyprivacy);
- MenuItem fanboysAnnoyanceListMenuItem = menu.findItem(R.id.fanboys_annoyance_list);
- MenuItem fanboysSocialBlockingListMenuItem = menu.findItem(R.id.fanboys_social_blocking_list);
- MenuItem ultraListMenuItem = menu.findItem(R.id.ultralist);
- MenuItem ultraPrivacyMenuItem = menu.findItem(R.id.ultraprivacy);
- MenuItem blockAllThirdPartyRequestsMenuItem = menu.findItem(R.id.block_all_third_party_requests);
- MenuItem proxyMenuItem = menu.findItem(R.id.proxy);
- MenuItem userAgentMenuItem = menu.findItem(R.id.user_agent);
- MenuItem fontSizeMenuItem = menu.findItem(R.id.font_size);
- MenuItem swipeToRefreshMenuItem = menu.findItem(R.id.swipe_to_refresh);
- MenuItem wideViewportMenuItem = menu.findItem(R.id.wide_viewport);
- MenuItem displayImagesMenuItem = menu.findItem(R.id.display_images);
- MenuItem darkWebViewMenuItem = menu.findItem(R.id.dark_webview);
-
// Get a handle for the cookie manager.
CookieManager cookieManager = CookieManager.getInstance();
if (currentWebView != null) {
// Set the add or edit domain text.
if (currentWebView.getDomainSettingsApplied()) {
- addOrEditDomain.setTitle(R.string.edit_domain_settings);
+ optionsAddOrEditDomainMenuItem.setTitle(R.string.edit_domain_settings);
} else {
- addOrEditDomain.setTitle(R.string.add_domain_settings);
+ optionsAddOrEditDomainMenuItem.setTitle(R.string.add_domain_settings);
}
// Get the current user agent from the WebView.
fontSize = currentWebView.getSettings().getTextZoom();
// Set the status of the menu item checkboxes.
- domStorageMenuItem.setChecked(currentWebView.getSettings().getDomStorageEnabled());
- saveFormDataMenuItem.setChecked(currentWebView.getSettings().getSaveFormData()); // Form data can be removed once the minimum API >= 26.
- easyListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.EASYLIST));
- easyPrivacyMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.EASYPRIVACY));
- fanboysAnnoyanceListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST));
- fanboysSocialBlockingListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST));
- ultraListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.ULTRALIST));
- ultraPrivacyMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.ULTRAPRIVACY));
- blockAllThirdPartyRequestsMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.THIRD_PARTY_REQUESTS));
- swipeToRefreshMenuItem.setChecked(currentWebView.getSwipeToRefresh());
- wideViewportMenuItem.setChecked(currentWebView.getSettings().getUseWideViewPort());
- displayImagesMenuItem.setChecked(currentWebView.getSettings().getLoadsImagesAutomatically());
+ optionsDomStorageMenuItem.setChecked(currentWebView.getSettings().getDomStorageEnabled());
+ optionsSaveFormDataMenuItem.setChecked(currentWebView.getSettings().getSaveFormData()); // Form data can be removed once the minimum API >= 26.
+ optionsEasyListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.EASYLIST));
+ optionsEasyPrivacyMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.EASYPRIVACY));
+ optionsFanboysAnnoyanceListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST));
+ optionsFanboysSocialBlockingListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST));
+ optionsUltraListMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.ULTRALIST));
+ optionsUltraPrivacyMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.ULTRAPRIVACY));
+ optionsBlockAllThirdPartyRequestsMenuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.THIRD_PARTY_REQUESTS));
+ optionsSwipeToRefreshMenuItem.setChecked(currentWebView.getSwipeToRefresh());
+ optionsWideViewportMenuItem.setChecked(currentWebView.getSettings().getUseWideViewPort());
+ optionsDisplayImagesMenuItem.setChecked(currentWebView.getSettings().getLoadsImagesAutomatically());
// Initialize the display names for the blocklists with the number of blocked requests.
- blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + currentWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- easyListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.EASYLIST) + " - " + getString(R.string.easylist));
- easyPrivacyMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.EASYPRIVACY) + " - " + getString(R.string.easyprivacy));
- fanboysAnnoyanceListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " + getString(R.string.fanboys_annoyance_list));
- fanboysSocialBlockingListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " + getString(R.string.fanboys_social_blocking_list));
- ultraListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.ULTRALIST) + " - " + getString(R.string.ultralist));
- ultraPrivacyMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.ULTRAPRIVACY) + " - " + getString(R.string.ultraprivacy));
- blockAllThirdPartyRequestsMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " + getString(R.string.block_all_third_party_requests));
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + currentWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsEasyListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.EASYLIST) + " - " + getString(R.string.easylist));
+ optionsEasyPrivacyMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.EASYPRIVACY) + " - " + getString(R.string.easyprivacy));
+ optionsFanboysAnnoyanceListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " + getString(R.string.fanboys_annoyance_list));
+ optionsFanboysSocialBlockingListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " + getString(R.string.fanboys_social_blocking_list));
+ optionsUltraListMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.ULTRALIST) + " - " + getString(R.string.ultralist));
+ optionsUltraPrivacyMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.ULTRAPRIVACY) + " - " + getString(R.string.ultraprivacy));
+ optionsBlockAllThirdPartyRequestsMenuItem.setTitle(currentWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " + getString(R.string.block_all_third_party_requests));
// Only modify third-party cookies if the API >= 21.
if (Build.VERSION.SDK_INT >= 21) {
// Set the status of the third-party cookies checkbox.
- thirdPartyCookiesMenuItem.setChecked(cookieManager.acceptThirdPartyCookies(currentWebView));
+ optionsThirdPartyCookiesMenuItem.setChecked(cookieManager.acceptThirdPartyCookies(currentWebView));
// Enable third-party cookies if first-party cookies are enabled.
- thirdPartyCookiesMenuItem.setEnabled(cookieManager.acceptCookie());
+ optionsThirdPartyCookiesMenuItem.setEnabled(cookieManager.acceptCookie());
}
// Enable DOM Storage if JavaScript is enabled.
- domStorageMenuItem.setEnabled(currentWebView.getSettings().getJavaScriptEnabled());
+ optionsDomStorageMenuItem.setEnabled(currentWebView.getSettings().getJavaScriptEnabled());
// Set the checkbox status for dark WebView if the WebView supports it.
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
- darkWebViewMenuItem.setChecked(WebSettingsCompat.getForceDark(currentWebView.getSettings()) == WebSettingsCompat.FORCE_DARK_ON);
+ optionsDarkWebViewMenuItem.setChecked(WebSettingsCompat.getForceDark(currentWebView.getSettings()) == WebSettingsCompat.FORCE_DARK_ON);
}
}
// Set the checked status of the first party cookies menu item.
- firstPartyCookiesMenuItem.setChecked(cookieManager.acceptCookie());
+ optionsFirstPartyCookiesMenuItem.setChecked(cookieManager.acceptCookie());
// Enable Clear Cookies if there are any.
- clearCookiesMenuItem.setEnabled(cookieManager.hasCookies());
+ optionsClearCookiesMenuItem.setEnabled(cookieManager.hasCookies());
// Get the application's private data directory, which will be something like `/data/user/0/com.stoutner.privacybrowser.standard`, which links to `/data/data/com.stoutner.privacybrowser.standard`.
String privateDataDirectoryString = getApplicationInfo().dataDir;
}
// Enable Clear DOM Storage if there is any.
- clearDOMStorageMenuItem.setEnabled(localStorageDirectoryNumberOfFiles > 0 || indexedDBDirectoryNumberOfFiles > 0);
+ optionsClearDomStorageMenuItem.setEnabled(localStorageDirectoryNumberOfFiles > 0 || indexedDBDirectoryNumberOfFiles > 0);
// Enable Clear Form Data is there is any. This can be removed once the minimum API >= 26.
if (Build.VERSION.SDK_INT < 26) {
WebViewDatabase webViewDatabase = WebViewDatabase.getInstance(this);
// Enable the clear form data menu item if there is anything to clear.
- clearFormDataMenuItem.setEnabled(webViewDatabase.hasFormData());
+ optionsClearFormDataMenuItem.setEnabled(webViewDatabase.hasFormData());
}
// Enable Clear Data if any of the submenu items are enabled.
- clearDataMenuItem.setEnabled(clearCookiesMenuItem.isEnabled() || clearDOMStorageMenuItem.isEnabled() || clearFormDataMenuItem.isEnabled());
+ optionsClearDataMenuItem.setEnabled(optionsClearCookiesMenuItem.isEnabled() || optionsClearDomStorageMenuItem.isEnabled() || optionsClearFormDataMenuItem.isEnabled());
// Disable Fanboy's Social Blocking List menu item if Fanboy's Annoyance List is checked.
- fanboysSocialBlockingListMenuItem.setEnabled(!fanboysAnnoyanceListMenuItem.isChecked());
+ optionsFanboysSocialBlockingListMenuItem.setEnabled(!optionsFanboysAnnoyanceListMenuItem.isChecked());
// Set the proxy title and check the applied proxy.
switch (proxyMode) {
case ProxyHelper.NONE:
// Set the proxy title.
- proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_none));
+ optionsProxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_none));
// Check the proxy None radio button.
- menu.findItem(R.id.proxy_none).setChecked(true);
+ optionsProxyNoneMenuItem.setChecked(true);
break;
case ProxyHelper.TOR:
// Set the proxy title.
- proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_tor));
+ optionsProxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_tor));
// Check the proxy Tor radio button.
- menu.findItem(R.id.proxy_tor).setChecked(true);
+ optionsProxyTorMenuItem.setChecked(true);
break;
case ProxyHelper.I2P:
// Set the proxy title.
- proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_i2p));
+ optionsProxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_i2p));
// Check the proxy I2P radio button.
- menu.findItem(R.id.proxy_i2p).setChecked(true);
+ optionsProxyI2pMenuItem.setChecked(true);
break;
case ProxyHelper.CUSTOM:
// Set the proxy title.
- proxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_custom));
+ optionsProxyMenuItem.setTitle(getString(R.string.proxy) + " - " + getString(R.string.proxy_custom));
// Check the proxy Custom radio button.
- menu.findItem(R.id.proxy_custom).setChecked(true);
+ optionsProxyCustomMenuItem.setChecked(true);
break;
}
// Select the current user agent menu item. A switch statement cannot be used because the user agents are not compile time constants.
if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[0])) { // Privacy Browser.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_privacy_browser));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_privacy_browser));
// Select the Privacy Browser radio box.
- menu.findItem(R.id.user_agent_privacy_browser).setChecked(true);
+ optionsUserAgentPrivacyBrowserMenuItem.setChecked(true);
} else if (currentUserAgent.equals(webViewDefaultUserAgent)) { // WebView Default.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_webview_default));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_webview_default));
// Select the WebView Default radio box.
- menu.findItem(R.id.user_agent_webview_default).setChecked(true);
+ optionsUserAgentWebViewDefaultMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[2])) { // Firefox on Android.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_android));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_android));
// Select the Firefox on Android radio box.
- menu.findItem(R.id.user_agent_firefox_on_android).setChecked(true);
+ optionsUserAgentFirefoxOnAndroidMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[3])) { // Chrome on Android.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chrome_on_android));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chrome_on_android));
// Select the Chrome on Android radio box.
- menu.findItem(R.id.user_agent_chrome_on_android).setChecked(true);
+ optionsUserAgentChromeOnAndroidMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[4])) { // Safari on iOS.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_safari_on_ios));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_safari_on_ios));
// Select the Safari on iOS radio box.
- menu.findItem(R.id.user_agent_safari_on_ios).setChecked(true);
+ optionsUserAgentSafariOnIosMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[5])) { // Firefox on Linux.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_linux));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_linux));
// Select the Firefox on Linux radio box.
- menu.findItem(R.id.user_agent_firefox_on_linux).setChecked(true);
+ optionsUserAgentFirefoxOnLinuxMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[6])) { // Chromium on Linux.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chromium_on_linux));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chromium_on_linux));
// Select the Chromium on Linux radio box.
- menu.findItem(R.id.user_agent_chromium_on_linux).setChecked(true);
+ optionsUserAgentChromiumOnLinuxMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[7])) { // Firefox on Windows.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_windows));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_firefox_on_windows));
// Select the Firefox on Windows radio box.
- menu.findItem(R.id.user_agent_firefox_on_windows).setChecked(true);
+ optionsUserAgentFirefoxOnWindowsMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[8])) { // Chrome on Windows.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chrome_on_windows));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_chrome_on_windows));
// Select the Chrome on Windows radio box.
- menu.findItem(R.id.user_agent_chrome_on_windows).setChecked(true);
+ optionsUserAgentChromeOnWindowsMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[9])) { // Edge on Windows.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_edge_on_windows));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_edge_on_windows));
// Select the Edge on Windows radio box.
- menu.findItem(R.id.user_agent_edge_on_windows).setChecked(true);
+ optionsUserAgentEdgeOnWindowsMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[10])) { // Internet Explorer on Windows.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_internet_explorer_on_windows));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_internet_explorer_on_windows));
// Select the Internet on Windows radio box.
- menu.findItem(R.id.user_agent_internet_explorer_on_windows).setChecked(true);
+ optionsUserAgentInternetExplorerOnWindowsMenuItem.setChecked(true);
} else if (currentUserAgent.equals(getResources().getStringArray(R.array.user_agent_data)[11])) { // Safari on macOS.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_safari_on_macos));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_safari_on_macos));
// Select the Safari on macOS radio box.
- menu.findItem(R.id.user_agent_safari_on_macos).setChecked(true);
+ optionsUserAgentSafariOnMacosMenuItem.setChecked(true);
} else { // Custom user agent.
// Update the user agent menu item title.
- userAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_custom));
+ optionsUserAgentMenuItem.setTitle(getString(R.string.options_user_agent) + " - " + getString(R.string.user_agent_custom));
// Select the Custom radio box.
- menu.findItem(R.id.user_agent_custom).setChecked(true);
+ optionsUserAgentCustomMenuItem.setChecked(true);
}
// Set the font size title.
- fontSizeMenuItem.setTitle(getString(R.string.font_size) + " - " + fontSize + "%");
+ optionsFontSizeMenuItem.setTitle(getString(R.string.font_size) + " - " + fontSize + "%");
// Run all the other default commands.
super.onPrepareOptionsMenu(menu);
int menuItemId = menuItem.getItemId();
// Run the commands that correlate to the selected menu item.
- if (menuItemId == R.id.toggle_javascript) { // JavaScript.
+ if (menuItemId == R.id.javascript) { // JavaScript.
// Toggle the JavaScript status.
currentWebView.getSettings().setJavaScriptEnabled(!currentWebView.getSettings().getJavaScriptEnabled());
// Consume the event.
return true;
- } else if (menuItemId == R.id.toggle_first_party_cookies) { // First-party cookies.
+ } else if (menuItemId == R.id.first_party_cookies) { // First-party cookies.
// Switch the first-party cookie status.
cookieManager.setAcceptCookie(!cookieManager.acceptCookie());
// Consume the event.
return true;
- } else if (menuItemId == R.id.toggle_third_party_cookies) { // Third-party cookies.
+ } else if (menuItemId == R.id.third_party_cookies) { // Third-party cookies.
// Only act if the API >= 21. Otherwise, there are no third-party cookie controls.
if (Build.VERSION.SDK_INT >= 21) {
// Toggle the status of thirdPartyCookiesEnabled.
// Consume the event.
return true;
- } else if (menuItemId == R.id.toggle_dom_storage) { // DOM storage.
+ } else if (menuItemId == R.id.dom_storage) { // DOM storage.
// Toggle the status of domStorageEnabled.
currentWebView.getSettings().setDomStorageEnabled(!currentWebView.getSettings().getDomStorageEnabled());
// Consume the event.
return true;
- } else if (menuItemId == R.id.toggle_save_form_data) { // Form data. This can be removed once the minimum API >= 26.
+ } else if (menuItemId == R.id.save_form_data) { // Form data. This can be removed once the minimum API >= 26.
// Switch the status of saveFormDataEnabled.
currentWebView.getSettings().setSaveFormData(!currentWebView.getSettings().getSaveFormData());
// Update the menu checkbox.
menuItem.setChecked(currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST));
- // Get a handle for the Fanboy's Social Block List menu item.
- MenuItem fanboysSocialBlockingListMenuItem = optionsMenu.findItem(R.id.fanboys_social_blocking_list);
-
// Update the staus of Fanboy's Social Blocking List.
- fanboysSocialBlockingListMenuItem.setEnabled(!currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST));
+ optionsFanboysSocialBlockingListMenuItem.setEnabled(!currentWebView.isBlocklistEnabled(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST));
// Reload the current WebView.
currentWebView.reload();
// Toggle the stored status of swipe to refresh.
currentWebView.setSwipeToRefresh(!currentWebView.getSwipeToRefresh());
- // Get a handle for the swipe refresh layout.
- SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
-
// Update the swipe refresh layout.
if (currentWebView.getSwipeToRefresh()) { // Swipe to refresh is enabled.
// Only enable the swipe refresh layout if the WebView is scrolled to the top. It is updated every time the scroll changes.
- swipeRefreshLayout.setEnabled(currentWebView.getY() == 0);
+ swipeRefreshLayout.setEnabled(currentWebView.getScrollY() == 0);
} else { // Swipe to refresh is disabled.
// Disable the swipe refresh layout.
swipeRefreshLayout.setEnabled(false);
Intent viewSourceIntent = new Intent(this, ViewSourceActivity.class);
// Add the variables to the intent.
- viewSourceIntent.putExtra("user_agent", currentWebView.getSettings().getUserAgentString());
- viewSourceIntent.putExtra("current_url", currentWebView.getUrl());
+ viewSourceIntent.putExtra(ViewSourceActivityKt.CURRENT_URL, currentWebView.getUrl());
+ viewSourceIntent.putExtra(ViewSourceActivityKt.USER_AGENT, currentWebView.getSettings().getUserAgentString());
// Make it so.
startActivity(viewSourceIntent);
// Reload the ad for the free flavor if not in full screen mode.
if (BuildConfig.FLAVOR.contentEquals("free") && !inFullScreenBrowsingMode) {
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
// Reload the ad. The AdView is destroyed and recreated, which changes the ID, every time it is reloaded to handle possible rotations.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
+ // `getContext()` can be used instead of `getActivity.getApplicationContext()` once the minimum API >= 23.
+ AdHelper.loadAd(adView, getApplicationContext(), this, getString(R.string.ad_unit_id));
}
// `invalidateOptionsMenu` should recalculate the number of action buttons from the menu to display on the app bar, but it doesn't because of the this bug:
}
@Override
- public void onSaveBookmarkFolder(DialogFragment dialogFragment, int selectedFolderDatabaseId, Bitmap favoriteIconBitmap) {
+ public void onSaveBookmarkFolder(DialogFragment dialogFragment, int selectedFolderDatabaseId, @NonNull Bitmap favoriteIconBitmap) {
// Remove the incorrect lint warning below that the dialog fragment might be null.
assert dialogFragment != null;
// close the bookmarks drawer.
drawerLayout.closeDrawer(GravityCompat.END);
} else if (displayingFullScreenVideo) { // A full screen video is shown.
- // Get a handle for the layouts.
- FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
- RelativeLayout mainContentRelativeLayout = findViewById(R.id.main_content_relativelayout);
- FrameLayout fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
-
// Re-enable the screen timeout.
fullScreenVideoFrameLayout.setKeepScreenOn(false);
if (fullScreenBrowsingModeEnabled && inFullScreenBrowsingMode) { // Privacy Browser is currently in full screen browsing mode.
// Hide the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
- AdHelper.hideAd(findViewById(R.id.adview));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Hide the banner ad.
+ AdHelper.hideAd(adView);
}
/* Hide the system bars.
// Reload the ad for the free flavor if not in full screen mode.
if (BuildConfig.FLAVOR.contentEquals("free") && !inFullScreenBrowsingMode) {
- // Reload the ad.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Reload the ad. `getContext()` can be used instead of `getActivity.getApplicationContext()` once the minimum API >= 23.
+ AdHelper.loadAd(adView, getApplicationContext(), this, getString(R.string.ad_unit_id));
}
} else if (currentWebView.canGoBack()) { // There is at least one item in the current WebView history.
// Get the current web back forward list.
}
private void loadUrlFromTextBox() {
- // Get a handle for the URL edit text.
- EditText urlEditText = findViewById(R.id.url_edittext);
-
// Get the text from urlTextBox and convert it to a string. trim() removes white spaces from the beginning and end of the string.
String unformattedUrlString = urlEditText.getText().toString().trim();
assert dialog != null;
// Get a handle for the edit texts.
- EditText urlEditText = dialog.findViewById(R.id.url_edittext);
+ EditText dialogUrlEditText = dialog.findViewById(R.id.url_edittext);
EditText fileNameEditText = dialog.findViewById(R.id.file_name_edittext);
// Store the URL.
saveWebpageUrl = originalUrlString;
} else {
// Get the URL from the edit text, which may have been modified.
- saveWebpageUrl = urlEditText.getText().toString();
+ saveWebpageUrl = dialogUrlEditText.getText().toString();
}
// Get the file path from the edit text.
redColorSpan = new ForegroundColorSpan(getResources().getColor(R.color.red_900));
}
- // Get handles for the URL views.
- EditText urlEditText = findViewById(R.id.url_edittext);
-
// Remove the formatting from the URL edit text when the user is editing the text.
urlEditText.setOnFocusChangeListener((View v, boolean hasFocus) -> {
if (hasFocus) { // The user is editing the URL text box.
this.registerReceiver(orbotStatusBroadcastReceiver, new IntentFilter("org.torproject.android.intent.action.STATUS"));
// Get handles for views that need to be modified.
- NavigationView navigationView = findViewById(R.id.navigationview);
- SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
ListView bookmarksListView = findViewById(R.id.bookmarks_drawer_listview);
FloatingActionButton launchBookmarksActivityFab = findViewById(R.id.launch_bookmarks_activity_fab);
FloatingActionButton createBookmarkFolderFab = findViewById(R.id.create_bookmark_folder_fab);
FloatingActionButton createBookmarkFab = findViewById(R.id.create_bookmark_fab);
EditText findOnPageEditText = findViewById(R.id.find_on_page_edittext);
- // Listen for touches on the navigation menu.
- navigationView.setNavigationItemSelectedListener(this);
-
- // Get handles for the navigation menu and the back and forward menu items.
- Menu navigationMenu = navigationView.getMenu();
- MenuItem navigationBackMenuItem = navigationMenu.findItem(R.id.back);
- MenuItem navigationForwardMenuItem = navigationMenu.findItem(R.id.forward);
- MenuItem navigationHistoryMenuItem = navigationMenu.findItem(R.id.history);
- MenuItem navigationRequestsMenuItem = navigationMenu.findItem(R.id.requests);
-
// Update the web view pager every time a tab is modified.
webViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
searchURL = searchString;
}
- // Get a handle for the app compat delegate.
- AppCompatDelegate appCompatDelegate = getDelegate();
-
- // Get handles for the views that need to be modified.
- FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
- ActionBar actionBar = appCompatDelegate.getSupportActionBar();
-
- // Remove the incorrect lint warning below that the action bar might be null.
- assert actionBar != null;
-
// Apply the proxy.
applyProxy(false);
// Hide the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
- AdHelper.hideAd(findViewById(R.id.adview));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Hide the banner ad.
+ AdHelper.hideAd(adView);
}
/* Hide the system bars.
// Show the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
// Initialize the ads. If this isn't the first run, `loadAd()` will be automatically called instead.
- AdHelper.initializeAds(findViewById(R.id.adview), getApplicationContext(), getSupportFragmentManager(), getString(R.string.google_app_id), getString(R.string.ad_unit_id));
+ // `getContext()` can be used instead of `getActivity.getApplicationContext()` once the minimum API >= 23.
+ AdHelper.initializeAds(adView, getApplicationContext(), this, getSupportFragmentManager(), getString(R.string.ad_unit_id));
}
// Remove the `SYSTEM_UI` flags from the root frame layout.
// Get a handle for the cookie manager.
CookieManager cookieManager = CookieManager.getInstance();
- // Get handles for the views.
- RelativeLayout urlRelativeLayout = findViewById(R.id.url_relativelayout);
- SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
-
// Initialize the user agent array adapter and string array.
ArrayAdapter<CharSequence> userAgentNamesArray = ArrayAdapter.createFromResource(this, R.array.user_agent_names, R.layout.spinner_item);
String[] userAgentDataArray = getResources().getStringArray(R.array.user_agent_data);
// Update the swipe refresh layout.
if (defaultSwipeToRefresh) { // Swipe to refresh is enabled.
// Only enable the swipe refresh layout if the WebView is scrolled to the top. It is updated every time the scroll changes.
- swipeRefreshLayout.setEnabled(currentWebView.getY() == 0);
+ swipeRefreshLayout.setEnabled(currentWebView.getScrollY() == 0);
} else { // Swipe to refresh is disabled.
// Disable the swipe refresh layout.
swipeRefreshLayout.setEnabled(false);
nestedScrollWebView.setSwipeToRefresh(true);
// Only enable the swipe refresh layout if the WebView is scrolled to the top. It is updated every time the scroll changes.
- swipeRefreshLayout.setEnabled(currentWebView.getY() == 0);
+ swipeRefreshLayout.setEnabled(currentWebView.getScrollY() == 0);
break;
case DomainsDatabaseHelper.DISABLED:
// Update the swipe refresh layout.
if (defaultSwipeToRefresh) { // Swipe to refresh is enabled.
// Only enable the swipe refresh layout if the WebView is scrolled to the top. It is updated every time the scroll changes.
- swipeRefreshLayout.setEnabled(currentWebView.getY() == 0);
+ swipeRefreshLayout.setEnabled(currentWebView.getScrollY() == 0);
} else { // Swipe to refresh is disabled.
// Disable the swipe refresh layout.
swipeRefreshLayout.setEnabled(false);
// Set the loading of webpage images.
nestedScrollWebView.getSettings().setLoadsImagesAutomatically(displayWebpageImages);
- // Set a transparent background on URL edit text.
+ // Set a transparent background on the URL relative layout.
urlRelativeLayout.setBackground(ResourcesCompat.getDrawable(getResources(), R.color.transparent, null));
}
private void updatePrivacyIcons(boolean runInvalidateOptionsMenu) {
// Only update the privacy icons if the options menu and the current WebView have already been populated.
if ((optionsMenu != null) && (currentWebView != null)) {
- // Get handles for the menu items.
- MenuItem privacyMenuItem = optionsMenu.findItem(R.id.toggle_javascript);
- MenuItem firstPartyCookiesMenuItem = optionsMenu.findItem(R.id.toggle_first_party_cookies);
- MenuItem domStorageMenuItem = optionsMenu.findItem(R.id.toggle_dom_storage);
- MenuItem refreshMenuItem = optionsMenu.findItem(R.id.refresh);
-
// Update the privacy icon.
if (currentWebView.getSettings().getJavaScriptEnabled()) { // JavaScript is enabled.
- privacyMenuItem.setIcon(R.drawable.javascript_enabled);
+ optionsPrivacyMenuItem.setIcon(R.drawable.javascript_enabled);
} else if (currentWebView.getAcceptFirstPartyCookies()) { // JavaScript is disabled but cookies are enabled.
- privacyMenuItem.setIcon(R.drawable.warning);
+ optionsPrivacyMenuItem.setIcon(R.drawable.warning);
} else { // All the dangerous features are disabled.
- privacyMenuItem.setIcon(R.drawable.privacy_mode);
+ optionsPrivacyMenuItem.setIcon(R.drawable.privacy_mode);
}
// Get the current theme status.
// Update the first-party cookies icon.
if (currentWebView.getAcceptFirstPartyCookies()) { // First-party cookies are enabled.
- firstPartyCookiesMenuItem.setIcon(R.drawable.cookies_enabled);
+ optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_enabled);
} else { // First-party cookies are disabled.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- firstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_day);
+ optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_day);
} else {
- firstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_night);
+ optionsFirstPartyCookiesMenuItem.setIcon(R.drawable.cookies_disabled_night);
}
}
- // Update the DOM storage icon.
- if (currentWebView.getSettings().getJavaScriptEnabled() && currentWebView.getSettings().getDomStorageEnabled()) { // Both JavaScript and DOM storage are enabled.
- domStorageMenuItem.setIcon(R.drawable.dom_storage_enabled);
- } else if (currentWebView.getSettings().getJavaScriptEnabled()) { // JavaScript is enabled but DOM storage is disabled.
+ // Update the refresh icon.
+ if (optionsRefreshMenuItem.getTitle() == getString(R.string.refresh)) { // The refresh icon is displayed.
+ // Set the icon according to the theme.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- domStorageMenuItem.setIcon(R.drawable.dom_storage_disabled_day);
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
} else {
- domStorageMenuItem.setIcon(R.drawable.dom_storage_disabled_night);
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
}
- } else { // JavaScript is disabled, so DOM storage is ghosted.
+ } else { // The stop icon is displayed.
+ // Set the icon according to the theme.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- domStorageMenuItem.setIcon(R.drawable.dom_storage_ghosted_day);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
} else {
- domStorageMenuItem.setIcon(R.drawable.dom_storage_ghosted_night);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
}
}
- // Update the refresh icon.
- if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- refreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
- } else {
- refreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
- }
-
// `invalidateOptionsMenu()` calls `onPrepareOptionsMenu()` and redraws the icons in the app bar.
if (runInvalidateOptionsMenu) {
invalidateOptionsMenu();
}
private void highlightUrlText() {
- // Get a handle for the URL edit text.
- EditText urlEditText = findViewById(R.id.url_edittext);
-
// Only highlight the URL text if the box is not currently selected.
if (!urlEditText.hasFocus()) {
// Get the URL string.
ultraList = combinedBlocklists.get(4);
ultraPrivacy = combinedBlocklists.get(5);
- // Check to see if the activity has been restarted.
+ // Check to see if the activity has been restarted with a saved state.
if ((savedStateArrayList == null) || (savedStateArrayList.size() == 0)) { // The activity has not been restarted or it was restarted on start to force the night theme.
// Add the first tab.
addNewTab("", true);
// Get the information from the intent.
String intentAction = intent.getAction();
Uri intentUriData = intent.getData();
+ String intentStringExtra = intent.getStringExtra(Intent.EXTRA_TEXT);
// Determine if this is a web search.
boolean isWebSearch = ((intentAction != null) && intentAction.equals(Intent.ACTION_WEB_SEARCH));
// Only process the URI if it contains data or it is a web search. If the user pressed the desktop icon after the app was already running the URI will be null.
- if (intentUriData != null || isWebSearch) {
+ if (intentUriData != null || intentStringExtra != null || isWebSearch) {
// Get the shared preferences.
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
// Add the base search URL.
url = searchURL + encodedUrlString;
- } else { // The intent should contain a URL.
- // Set the intent data as the url.
+ } else if (intentUriData != null) { // The intent contains a URL formatted as a URI.
+ // Set the intent data as the URL.
url = intentUriData.toString();
+ } else { // The intent contains a string, which might be a URL.
+ // Set the intent string as the URL.
+ url = intentStringExtra;
}
// Add a new tab if specified in the preferences.
}
private void closeCurrentTab() {
- // Pause the current WebView.
+ // Pause the current WebView. This prevents buffered audio from playing after the tab is closed.
currentWebView.onPause();
- // Pause the current WebView JavaScript timers.
- currentWebView.pauseTimers();
-
// Get the current tab number.
int currentTabNumber = tabLayout.getSelectedTabPosition();
}
private void setCurrentWebView(int pageNumber) {
- // Get handles for the URL views.
- RelativeLayout urlRelativeLayout = findViewById(R.id.url_relativelayout);
- EditText urlEditText = findViewById(R.id.url_edittext);
- SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
-
// Stop the swipe to refresh indicator if it is running
swipeRefreshLayout.setRefreshing(false);
WebViewTabFragment webViewTabFragment = webViewPagerAdapter.getPageFragment(pageNumber);
// Get the fragment view.
- View fragmentView = webViewTabFragment.getView();
+ View webViewFragmentView = webViewTabFragment.getView();
// Set the current WebView if the fragment view is not null.
- if (fragmentView != null) { // The fragment has been populated.
+ if (webViewFragmentView != null) { // The fragment has been populated.
// Store the current WebView.
- currentWebView = fragmentView.findViewById(R.id.nestedscroll_webview);
+ currentWebView = webViewFragmentView.findViewById(R.id.nestedscroll_webview);
// Update the status of swipe to refresh.
if (currentWebView.getSwipeToRefresh()) { // Swipe to refresh is enabled.
// Enable the swipe refresh layout if the WebView is scrolled all the way to the top. It is updated every time the scroll changes.
- swipeRefreshLayout.setEnabled(currentWebView.getY() == 0);
+ swipeRefreshLayout.setEnabled(currentWebView.getScrollY() == 0);
} else { // Swipe to refresh is disabled.
// Disable the swipe refresh layout.
swipeRefreshLayout.setEnabled(false);
}
}
- // Get a handle for the app compat delegate.
- AppCompatDelegate appCompatDelegate = getDelegate();
-
- // Get handles for the activity views.
- FrameLayout rootFrameLayout = findViewById(R.id.root_framelayout);
- RelativeLayout mainContentRelativeLayout = findViewById(R.id.main_content_relativelayout);
- ActionBar actionBar = appCompatDelegate.getSupportActionBar();
- LinearLayout tabsLinearLayout = findViewById(R.id.tabs_linearlayout);
- EditText urlEditText = findViewById(R.id.url_edittext);
- SwipeRefreshLayout swipeRefreshLayout = findViewById(R.id.swiperefreshlayout);
-
- // Remove the incorrect lint warning below that the action bar might be null.
- assert actionBar != null;
-
// Get a handle for the activity
Activity activity = this;
// Hide the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
- AdHelper.hideAd(findViewById(R.id.adview));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Hide the banner ad.
+ AdHelper.hideAd(adView);
}
/* Hide the system bars.
// Show the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
- // Reload the ad.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Reload the ad. `getContext()` can be used instead of `getActivity.getApplicationContext()` once the minimum API >= 23.
+ AdHelper.loadAd(adView, getApplicationContext(), activity, getString(R.string.ad_unit_id));
}
// Remove the `SYSTEM_UI` flags from the root frame layout.
// Enter full screen video.
@Override
public void onShowCustomView(View video, CustomViewCallback callback) {
- // Get a handle for the full screen video frame layout.
- FrameLayout fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
-
// Set the full screen video flag.
displayingFullScreenVideo = true;
// Pause the ad if this is the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
// The AdView is destroyed and recreated, which changes the ID, every time it is reloaded to handle possible rotations.
- AdHelper.pauseAd(findViewById(R.id.adview));
+ AdHelper.pauseAd(adView);
}
// Hide the keyboard.
// Exit full screen video.
@Override
public void onHideCustomView() {
- // Get a handle for the full screen video frame layout.
- FrameLayout fullScreenVideoFrameLayout = findViewById(R.id.full_screen_video_framelayout);
-
// Re-enable the screen timeout.
fullScreenVideoFrameLayout.setKeepScreenOn(false);
// Hide the banner ad in the free flavor.
if (BuildConfig.FLAVOR.contentEquals("free")) {
- AdHelper.hideAd(findViewById(R.id.adview));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Hide the banner ad.
+ AdHelper.hideAd(adView);
}
/* Hide the system bars.
// Reload the ad for the free flavor if not in full screen mode.
if (BuildConfig.FLAVOR.contentEquals("free") && !inFullScreenBrowsingMode) {
- // Reload the ad.
- AdHelper.loadAd(findViewById(R.id.adview), getApplicationContext(), getString(R.string.ad_unit_id));
+ // Get a handle for the ad view. This cannot be a class variable because it changes with each ad load.
+ View adView = findViewById(R.id.adview);
+
+ // Reload the ad. `getContext()` can be used instead of `getActivity.getApplicationContext()` once the minimum API >= 23.
+ AdHelper.loadAd(adView, getApplicationContext(), activity, getString(R.string.ad_unit_id));
}
}
// Sanitize the URL.
url = sanitizeUrl(url);
- // Get a handle for the navigation view.
- NavigationView navigationView = findViewById(R.id.navigationview);
-
- // Get a handle for the navigation menu.
- Menu navigationMenu = navigationView.getMenu();
-
- // Get a handle for the navigation requests menu item.
- MenuItem navigationRequestsMenuItem = navigationMenu.findItem(R.id.requests);
-
// Create an empty web resource response to be used if the resource request is blocked.
WebResourceResponse emptyWebResourceResponse = new WebResourceResponse("text/plain", "utf8", new ByteArrayInputStream("".getBytes()));
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.block_all_third_party_requests).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " +
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsBlockAllThirdPartyRequestsMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " +
getString(R.string.block_all_third_party_requests));
}
});
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.ultralist).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRALIST) + " - " + getString(R.string.ultralist));
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsUltraListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRALIST) + " - " + getString(R.string.ultralist));
}
});
}
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.ultraprivacy).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRAPRIVACY) + " - " + getString(R.string.ultraprivacy));
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsUltraPrivacyMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRAPRIVACY) + " - " + getString(R.string.ultraprivacy));
}
});
}
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.easylist).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASYLIST) + " - " + getString(R.string.easylist));
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsEasyListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASYLIST) + " - " + getString(R.string.easylist));
}
});
}
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.easyprivacy).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASYPRIVACY) + " - " + getString(R.string.easyprivacy));
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsEasyPrivacyMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASYPRIVACY) + " - " + getString(R.string.easyprivacy));
}
});
}
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.fanboys_annoyance_list).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " +
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsFanboysAnnoyanceListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " +
getString(R.string.fanboys_annoyance_list));
}
});
// Update the options menu if it has been populated.
if (optionsMenu != null) {
- optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
- optionsMenu.findItem(R.id.fanboys_social_blocking_list).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " +
+ optionsBlocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS));
+ optionsFanboysSocialBlockingListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " +
getString(R.string.fanboys_social_blocking_list));
}
});
// Replace Refresh with Stop if the options menu has been created. (The first WebView typically begins loading before the menu items are instantiated.)
if (optionsMenu != null) {
- // Get a handle for the refresh menu item.
- MenuItem refreshMenuItem = optionsMenu.findItem(R.id.refresh);
-
// Set the title.
- refreshMenuItem.setTitle(R.string.stop);
+ optionsRefreshMenuItem.setTitle(R.string.stop);
// Get the app bar and theme preferences.
- boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean("display_additional_app_bar_icons", false);
+ boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false);
// If the icon is displayed in the AppBar, set it according to the theme.
if (displayAdditionalAppBarIcons) {
// Set the stop icon according to the theme.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- refreshMenuItem.setIcon(R.drawable.close_day);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_day);
} else {
- refreshMenuItem.setIcon(R.drawable.close_night);
+ optionsRefreshMenuItem.setIcon(R.drawable.close_blue_night);
}
}
}
// Update the Refresh menu item if the options menu has been created.
if (optionsMenu != null) {
- // Get a handle for the refresh menu item.
- MenuItem refreshMenuItem = optionsMenu.findItem(R.id.refresh);
-
// Reset the Refresh title.
- refreshMenuItem.setTitle(R.string.refresh);
+ optionsRefreshMenuItem.setTitle(R.string.refresh);
// Get the app bar and theme preferences.
- boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean("display_additional_app_bar_icons", false);
+ boolean displayAdditionalAppBarIcons = sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false);
// If the icon is displayed in the app bar, reset it according to the theme.
if (displayAdditionalAppBarIcons) {
// Set the icon according to the theme.
if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
- refreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_day);
} else {
- refreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
+ optionsRefreshMenuItem.setIcon(R.drawable.refresh_enabled_night);
}
}
}
// Get the information from the intent.
String launchingIntentAction = launchingIntent.getAction();
Uri launchingIntentUriData = launchingIntent.getData();
+ String launchingIntentStringExtra = launchingIntent.getStringExtra(Intent.EXTRA_TEXT);
// Parse the launching intent URL.
if ((launchingIntentAction != null) && launchingIntentAction.equals(Intent.ACTION_WEB_SEARCH)) { // The intent contains a search string.
// Store the web search as the URL to load.
urlToLoadString = searchURL + encodedUrlString;
- } else if (launchingIntentUriData != null){ // The intent contains a URL.
- // Store the URL.
+ } else if (launchingIntentUriData != null) { // The launching intent contains a URL formatted as a URI.
+ // Store the URI as a URL.
urlToLoadString = launchingIntentUriData.toString();
-
- // Reset the intent. This prevents a duplicate tab from being created on a subsequent restart if loading an link from a new intent on restart.
- // For example, this prevents a duplicate tab if a link is loaded from the Guide after changing the theme in the guide and then changing the theme again in the main activity.
- setIntent(new Intent());
+ } else if (launchingIntentStringExtra != null) { // The launching intent contains text that might be a URL.
+ // Store the URL.
+ urlToLoadString = launchingIntentStringExtra;
} else if (!url.equals("")) { // The activity has been restarted.
// Load the saved URL.
urlToLoadString = url;
} else { // Load the URL.
loadUrl(nestedScrollWebView, urlToLoadString);
}
+
+ // Reset the intent. This prevents a duplicate tab from being created on a subsequent restart if loading an link from a new intent on restart.
+ // For example, this prevents a duplicate tab if a link is loaded from the Guide after changing the theme in the guide and then changing the theme again in the main activity.
+ setIntent(new Intent());
} else { // This is not the first tab.
// Load the URL.
loadUrl(nestedScrollWebView, url);