// `fullScreenVideoFrameLayout` is used in `onCreate()` and `onConfigurationChanged()`.
private FrameLayout fullScreenVideoFrameLayout;
- // `swipeRefreshLayout` is used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsMenuSelected()`, and `onRestart()`.
+ // `swipeRefreshLayout` is used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsItemSelected()`, and `onRestart()`.
private SwipeRefreshLayout swipeRefreshLayout;
// `urlAppBarRelativeLayout` is used in `onCreate()` and `applyDomainSettings()`.
// `searchURL` is used in `loadURLFromTextBox()` and `applyAppSettings()`.
private String searchURL;
- // The block list variables are used in `onCreate()` and `applyAppSettings()`.
+ // The block list variables are used in `onCreate()`, `onPrepareOptionsMenu()`, `onOptionsItemSelected()`, and `applyAppSettings()`.
private boolean easyListEnabled;
private boolean easyPrivacyEnabled;
private boolean fanboysAnnoyanceListEnabled;
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 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 fontSizeMenuItem = menu.findItem(R.id.font_size);
MenuItem swipeToRefreshMenuItem = menu.findItem(R.id.swipe_to_refresh);
MenuItem displayImagesMenuItem = menu.findItem(R.id.display_images);
toggleThirdPartyCookiesMenuItem.setChecked(thirdPartyCookiesEnabled);
toggleDomStorageMenuItem.setChecked(domStorageEnabled);
toggleSaveFormDataMenuItem.setChecked(saveFormDataEnabled); // Form data can be removed once the minimum API >= 26.
+ easyListMenuItem.setChecked(easyListEnabled);
+ easyPrivacyMenuItem.setChecked(easyPrivacyEnabled);
+ fanboysAnnoyanceListMenuItem.setChecked(fanboysAnnoyanceListEnabled);
+ fanboysSocialBlockingListMenuItem.setChecked(fanboysSocialBlockingListEnabled);
swipeToRefreshMenuItem.setChecked(swipeRefreshLayout.isEnabled());
displayImagesMenuItem.setChecked(mainWebView.getSettings().getLoadsImagesAutomatically());
// Enable third-party cookies if first-party cookies are enabled.
toggleThirdPartyCookiesMenuItem.setEnabled(firstPartyCookiesEnabled);
- // Enable `DOM Storage` if JavaScript is enabled.
+ // Enable DOM Storage if JavaScript is enabled.
toggleDomStorageMenuItem.setEnabled(javaScriptEnabled);
- // Enable `Clear Cookies` if there are any.
+ // Enable Clear Cookies if there are any.
clearCookiesMenuItem.setEnabled(cookieManager.hasCookies());
- // Get a count of the number of files in the `Local Storage` directory.
+ // Get a count of the number of files in the Local Storage directory.
File localStorageDirectory = new File (privateDataDirectoryString + "/app_webview/Local Storage/");
int localStorageDirectoryNumberOfFiles = 0;
if (localStorageDirectory.exists()) {
localStorageDirectoryNumberOfFiles = localStorageDirectory.list().length;
}
- // Get a count of the number of files in the `IndexedDB` directory.
+ // Get a count of the number of files in the IndexedDB directory.
File indexedDBDirectory = new File (privateDataDirectoryString + "/app_webview/IndexedDB");
int indexedDBDirectoryNumberOfFiles = 0;
if (indexedDBDirectory.exists()) {
indexedDBDirectoryNumberOfFiles = indexedDBDirectory.list().length;
}
- // Enable `Clear DOM Storage` if there is any.
+ // Enable Clear DOM Storage if there is any.
clearDOMStorageMenuItem.setEnabled(localStorageDirectoryNumberOfFiles > 0 || indexedDBDirectoryNumberOfFiles > 0);
- // Enable `Clear Form Data` is there is any. This can be removed once the minimum API >= 26.
+ // Enable Clear Form Data is there is any. This can be removed once the minimum API >= 26.
if (Build.VERSION.SDK_INT < 26) {
WebViewDatabase mainWebViewDatabase = WebViewDatabase.getInstance(this);
clearFormDataMenuItem.setEnabled(mainWebViewDatabase.hasFormData());
}
- // Enable `Clear Data` if any of the submenu items are enabled.
+ // Enable Clear Data if any of the submenu items are enabled.
clearDataMenuItem.setEnabled(clearCookiesMenuItem.isEnabled() || clearDOMStorageMenuItem.isEnabled() || clearFormDataMenuItem.isEnabled());
+ // Disable Fanboy's Social Blocking List if Fanboy's Annoyance List is checked.
+ fanboysSocialBlockingListMenuItem.setEnabled(!fanboysAnnoyanceListEnabled);
+
// Initialize font size variables.
int fontSize = mainWebView.getSettings().getTextZoom();
String fontSizeTitle;
startActivity(viewSourceIntent);
return true;
+ case R.id.easylist:
+ // Toggle the EasyList status.
+ easyListEnabled = !easyListEnabled;
+
+ // Update the menu checkbox.
+ menuItem.setChecked(easyListEnabled);
+
+ // Reload the main WebView.
+ mainWebView.reload();
+ return true;
+
+ case R.id.easyprivacy:
+ // Toggle the EasyPrivacy status.
+ easyPrivacyEnabled = !easyPrivacyEnabled;
+
+ // Update the menu checkbox.
+ menuItem.setChecked(easyPrivacyEnabled);
+
+ // Reload the main WebView.
+ mainWebView.reload();
+ return true;
+
+ case R.id.fanboys_annoyance_list:
+ // Toggle Fanboy's Annoyance List status.
+ fanboysAnnoyanceListEnabled = !fanboysAnnoyanceListEnabled;
+
+ // Update the menu checkbox.
+ menuItem.setChecked(fanboysAnnoyanceListEnabled);
+
+ // Update the staus of Fanboy's Social Blocking List.
+ MenuItem fanboysSocialBlockingListMenuItem = mainMenu.findItem(R.id.fanboys_social_blocking_list);
+ fanboysSocialBlockingListMenuItem.setEnabled(!fanboysAnnoyanceListEnabled);
+
+ // Reload the main WebView.
+ mainWebView.reload();
+ return true;
+
+ case R.id.fanboys_social_blocking_list:
+ // Toggle Fanboy's Social Blocking List status.
+ fanboysSocialBlockingListEnabled = !fanboysSocialBlockingListEnabled;
+
+ // Update teh menu checkbox.
+ menuItem.setChecked(fanboysSocialBlockingListEnabled);
+
+ // Reload the main WebView.
+ mainWebView.reload();
+ return true;
+
case R.id.share:
// Setup the share string.
String shareString = webViewTitle + " – " + urlTextBox.getText().toString();
appBar.setCustomView(R.layout.requests_spinner);
appBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_HOME_AS_UP);
- // Initialize the resource array lists.
+ // Initialize the resource array lists. A list is needed for all the resource requests, or the activity can crash if `MainWebViewActivity.resourceRequests` is modified after the activity loads.
+ List<String[]> allResourceRequests = new ArrayList<>();
List<String[]> defaultResourceRequests = new ArrayList<>();
List<String[]> allowedResourceRequests = new ArrayList<>();
List<String[]> blockedResourceRequests = new ArrayList<>();
for (String[] request : MainWebViewActivity.resourceRequests) {
switch (Integer.valueOf(request[MainWebViewActivity.REQUEST_DISPOSITION])) {
case MainWebViewActivity.REQUEST_DEFAULT:
+ // Add the request to the list of all requests.
+ allResourceRequests.add(request);
+
+ // Add the request to the list of default requests.
defaultResourceRequests.add(request);
break;
case MainWebViewActivity.REQUEST_ALLOWED:
+ // Add the request to the list of all requests.
+ allResourceRequests.add(request);
+
+ // Add the request to the list of allowed requests.
allowedResourceRequests.add(request);
break;
case MainWebViewActivity.REQUEST_BLOCKED:
+ // Add the request to the list of all requests.
+ allResourceRequests.add(request);
+
+ // Add the request to the list of blocked requests.
blockedResourceRequests.add(request);
break;
}
// Setup a matrix cursor for the resource lists.
MatrixCursor spinnerCursor = new MatrixCursor(new String[]{"_id", "Requests"});
- spinnerCursor.addRow(new Object[]{0, getString(R.string.all) + " - " + MainWebViewActivity.resourceRequests.size()});
+ spinnerCursor.addRow(new Object[]{0, getString(R.string.all) + " - " + allResourceRequests.size()});
spinnerCursor.addRow(new Object[]{1, getString(R.string.default_label) + " - " + defaultResourceRequests.size()});
spinnerCursor.addRow(new Object[]{2, getString(R.string.allowed_plural) + " - " + allowedResourceRequests.size()});
spinnerCursor.addRow(new Object[]{3, getString(R.string.blocked_plural) + " - " + blockedResourceRequests.size()});
switch (position) {
case 0: // All requests.
// Get an adapter for all the request.
- ArrayAdapter<String[]> allResourceRequestsArrayAdapter = new RequestsArrayAdapter(getApplicationContext(), MainWebViewActivity.resourceRequests);
+ ArrayAdapter<String[]> allResourceRequestsArrayAdapter = new RequestsArrayAdapter(getApplicationContext(), allResourceRequests);
// Display the adapter in the list view.
resourceRequestsListView.setAdapter(allResourceRequestsArrayAdapter);
});
// Create an array adapter with the list of the resource requests.
- ArrayAdapter<String[]> resourceRequestsArrayAdapter = new RequestsArrayAdapter(getApplicationContext(), MainWebViewActivity.resourceRequests);
+ ArrayAdapter<String[]> resourceRequestsArrayAdapter = new RequestsArrayAdapter(getApplicationContext(), allResourceRequests);
// Populate the list view with the resource requests adapter.
resourceRequestsListView.setAdapter(resourceRequestsArrayAdapter);
public class OrbotProxyHelper {
public static void setProxy(Context privacyBrowserContext, Activity parentActivity, String proxyHost, String proxyPort) {
// Set the proxy values
- System.setProperty("http.proxyHost", proxyHost);
- System.setProperty("http.proxyPort", proxyPort);
- System.setProperty("https.proxyHost", proxyHost);
- System.setProperty("https.proxyPort", proxyPort);
+ System.setProperty("proxyHost", proxyHost);
+ System.setProperty("proxyPort", proxyPort);
+
+ // These entries shouldn't be needed if the above general settings are applied. But I leave them in here for troubleshooting just in case.
+ //System.setProperty("http.proxyHost", proxyHost);
+ //System.setProperty("http.proxyPort", proxyPort);
+ //System.setProperty("https.proxyHost", proxyHost);
+ //System.setProperty("https.proxyPort", proxyPort);
// Use reflection to apply the new proxy values.
try {
</menu>
</item>
+ <item
+ android:id="@+id/blocklists"
+ android:title="@string/blocklists"
+ android:orderInCategory="800"
+ app:showAsAction="never" >
+
+ <menu>
+ <item
+ android:id="@+id/easylist"
+ android:title="@string/easylist"
+ android:orderInCategory="810"
+ android:checkable="true"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/easyprivacy"
+ android:title="@string/easyprivacy"
+ android:orderInCategory="820"
+ android:checkable="true"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/fanboys_annoyance_list"
+ android:title="@string/options_fanboys_annoyance_list"
+ android:orderInCategory="830"
+ android:checkable="true"
+ app:showAsAction="never" />
+
+ <item
+ android:id="@+id/fanboys_social_blocking_list"
+ android:title="@string/options_fanboys_social_blocking_list"
+ android:orderInCategory="840"
+ android:checkable="true"
+ app:showAsAction="never" />
+ </menu>
+ </item>
+
<item
android:id="@+id/layout"
android:title="@string/layout"
- android:orderInCategory="800"
+ android:orderInCategory="900"
app:showAsAction="never" >
<menu>
<item
android:id="@+id/font_size"
android:title="@string/font_size"
- android:orderInCategory="810"
+ android:orderInCategory="910"
app:showAsAction="never" >
<menu>
<item
android:id="@+id/font_size_twenty_five_percent"
android:title="@string/twenty_five_percent"
- android:orderInCategory="811"
+ android:orderInCategory="911"
app:showAsAction="never" />
<item
android:id="@+id/font_size_fifty_percent"
android:title="@string/fifty_percent"
- android:orderInCategory="812"
+ android:orderInCategory="912"
app:showAsAction="never" />
<item
android:id="@+id/font_size_seventy_five_percent"
android:title="@string/seventy_five_percent"
- android:orderInCategory="813"
+ android:orderInCategory="913"
app:showAsAction="never" />
<item
android:id="@+id/font_size_one_hundred_percent"
android:title="@string/one_hundred_percent"
- android:orderInCategory="814"
+ android:orderInCategory="914"
app:showAsAction="never" />
<item
android:id="@+id/font_size_one_hundred_twenty_five_percent"
android:title="@string/one_hundred_twenty_five_percent"
- android:orderInCategory="815"
+ android:orderInCategory="915"
app:showAsAction="never" />
<item
android:id="@+id/font_size_one_hundred_fifty_percent"
android:title="@string/one_hundred_fifty_percent"
- android:orderInCategory="816"
+ android:orderInCategory="916"
app:showAsAction="never" />
<item
android:id="@+id/font_size_one_hundred_seventy_five_percent"
android:title="@string/one_hundred_seventy_five_percent"
- android:orderInCategory="817"
+ android:orderInCategory="917"
app:showAsAction="never" />
<item
android:id="@+id/font_size_two_hundred_percent"
android:title="@string/two_hundred_percent"
- android:orderInCategory="818"
+ android:orderInCategory="918"
app:showAsAction="never" />
</group>
</menu>
<item
android:id="@+id/swipe_to_refresh"
android:title="@string/swipe_to_refresh_options_menu"
- android:orderInCategory="820"
+ android:orderInCategory="920"
android:checkable="true"
app:showAsAction="never" />
<item
android:id="@+id/display_images"
android:title="@string/display_images"
- android:orderInCategory="830"
+ android:orderInCategory="930"
android:checkable="true"
app:showAsAction="never" />
<item
android:id="@+id/view_source"
android:title="@string/view_source"
- android:orderInCategory="840"
+ android:orderInCategory="940"
app:showAsAction="never" />
</menu>
</item>
<item
android:id="@+id/share"
android:title="@string/share"
- android:orderInCategory="900"
+ android:orderInCategory="1000"
app:showAsAction="never" />
<item
android:id="@+id/find_on_page"
android:title="@string/find_on_page"
- android:orderInCategory="1000"
+ android:orderInCategory="1100"
app:showAsAction="never|collapseActionView" />
<item
android:id="@+id/print"
android:title="@string/print"
- android:orderInCategory="1100"
+ android:orderInCategory="1200"
app:showAsAction="never" />
<item
android:id="@+id/add_to_homescreen"
android:title="@string/add_to_home_screen"
- android:orderInCategory="1200"
+ android:orderInCategory="1300"
app:showAsAction="never" />
<item
android:id="@+id/refresh"
android:title="@string/refresh"
- android:orderInCategory="1300"
+ android:orderInCategory="1400"
app:showAsAction="never" />
<item
android:id="@+id/ad_consent"
android:title="@string/ad_consent"
- android:orderInCategory="1400"
+ android:orderInCategory="1500"
app:showAsAction="never" />
</menu>
\ No newline at end of file
<string name="clear_cookies">Clear Cookies</string>
<string name="clear_dom_storage">Clear DOM Storage</string>
<string name="clear_form_data">Clear Form Data</string>
+ <string name="options_fanboys_annoyance_list">Fanboy’s Annoyance List</string>
+ <string name="options_fanboys_social_blocking_list">Fanboy’s Social Blocking List</string>
<string name="layout">Layout</string>
<string name="font_size">Font Size</string>
<string name="twenty_five_percent">25%</string>
<string name="easylist_summary">Main ad blocking list.</string>
<string name="easyprivacy">EasyPrivacy</string>
<string name="easyprivacy_summary">Main tracker blocking list.</string>
- <string name="fanboy_annoyance_list">Fanboy’s annoyance list</string>
- <string name="fanboy_annoyance_list_summary">Block annoying popups and links. Includes Fanboy’s social blocking lists.</string>
- <string name="fanboy_social_blocking_list">Fanboy’s social blocking list</string>
- <string name="fanboy_social_blocking_list_summary">Blocks third-party social media content.</string>
+ <string name="fanboys_annoyance_list">Fanboy’s annoyance list</string>
+ <string name="fanboys_annoyance_list_summary">Block annoying popups and links. Includes Fanboy’s social blocking lists.</string>
+ <string name="fanboys_social_blocking_list">Fanboy’s social blocking list</string>
+ <string name="fanboys_social_blocking_list_summary">Blocks third-party social media content.</string>
<string name="tor">Tor</string>
<string name="proxy_through_orbot">Proxy through Orbot</string>
<string name="proxy_through_orbot_summary">Proxy all web traffic through Orbot on localhost:8118.</string>
<SwitchPreference
android:key="fanboy_annoyance_list"
- android:title="@string/fanboy_annoyance_list"
- android:summary="@string/fanboy_annoyance_list_summary"
+ android:title="@string/fanboys_annoyance_list"
+ android:summary="@string/fanboys_annoyance_list_summary"
android:defaultValue="true" />
<SwitchPreference
android:key="fanboy_social_blocking_list"
- android:title="@string/fanboy_social_blocking_list"
- android:summary="@string/fanboy_social_blocking_list_summary"
+ android:title="@string/fanboys_social_blocking_list"
+ android:summary="@string/fanboys_social_blocking_list_summary"
android:defaultValue="true" />
</PreferenceCategory>