X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FMainWebViewActivity.java;h=99a2ce30806441bbf5f3f9051f95d0d0899a74b3;hp=bbaff98dd8f74741f5ec9830e30f34588af1731d;hb=a777fe1b2785ac15a70bed633c159b9d4e58b90a;hpb=1719b39d1169ecdb32c53a4f42cc750d5b9237ab diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java index bbaff98d..99a2ce30 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -198,9 +198,16 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook public static String fanboysSocialVersion; public static String ultraPrivacyVersion; - // The request items are public static so they can be accessed by `BlockListHelper`, `RequestsArrayAdapter`, and `ViewRequestsDialog`. They are also used in `onCreate()`. + // The request items are public static so they can be accessed by `BlockListHelper`, `RequestsArrayAdapter`, and `ViewRequestsDialog`. They are also used in `onCreate()` and `onPrepareOptionsMenu()`. public static List resourceRequests; public static String[] whiteListResultStringArray; + int easyListBlockedRequests; + int easyPrivacyBlockedRequests; + int fanboysAnnoyanceListBlockedRequests; + int fanboysSocialBlockingListBlockedRequests; + int ultraPrivacyBlockedRequests; + int thirdPartyBlockedRequests; + public final static int REQUEST_DISPOSITION = 0; public final static int REQUEST_URL = 1; public final static int REQUEST_BLOCKLIST = 2; @@ -374,6 +381,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // `ignorePinnedSslCertificateForDomain` is used in `onCreate()`, `onSslMismatchProceed()`, and `applyDomainSettings()`. private boolean ignorePinnedSslCertificate; + // `orbotStatusBroadcastReciever` is used in `onCreate()` and `onDestroy()`. + private BroadcastReceiver orbotStatusBroadcastReceiver; + // `waitingForOrbot` is used in `onCreate()`, `onResume()`, and `applyAppSettings()`. private boolean waitingForOrbot; @@ -565,7 +575,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook waitingForOrbot = false; // Create an Orbot status `BroadcastReceiver`. - BroadcastReceiver orbotStatusBroadcastReceiver = new BroadcastReceiver() { + orbotStatusBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Store the content of the status message in `orbotStatus`. @@ -879,27 +889,15 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook @Override public void onDrawerStateChanged(int newState) { if ((newState == DrawerLayout.STATE_SETTLING) || (newState == DrawerLayout.STATE_DRAGGING)) { // The drawer is opening or closing. - // Initialize a the blocked requests counter. - int blockedRequests = 0; - - // Count the number of blocked requests. - for (int i = 0; i < resourceRequests.size(); i++) { - // Add the blocked requests. - if (Integer.valueOf(resourceRequests.get(i)[REQUEST_DISPOSITION]) == REQUEST_BLOCKED) { - blockedRequests++; - } - - // Add the third-party requests if they are blocked. - if (blockAllThirdPartyRequests && (Integer.valueOf(resourceRequests.get(i)[REQUEST_DISPOSITION]) == REQUEST_THIRD_PARTY)) { - blockedRequests++; - } - } + // Calculate the total blocked requests counter. + int totalBlockedRequests = easyListBlockedRequests + easyPrivacyBlockedRequests + fanboysAnnoyanceListBlockedRequests + fanboysSocialBlockingListBlockedRequests + + ultraPrivacyBlockedRequests + thirdPartyBlockedRequests; // Update the back, forward, history, and requests menu items. navigationBackMenuItem.setEnabled(mainWebView.canGoBack()); navigationForwardMenuItem.setEnabled(mainWebView.canGoForward()); navigationHistoryMenuItem.setEnabled((mainWebView.canGoBack() || mainWebView.canGoForward())); - navigationRequestsMenuItem.setTitle(getResources().getString(R.string.requests) + " - " + blockedRequests); + navigationRequestsMenuItem.setTitle(getResources().getString(R.string.requests) + " - " + totalBlockedRequests); // Hide the keyboard (if displayed) so we can see the navigation menu. `0` indicates no additional flags. inputMethodManager.hideSoftInputFromWindow(mainWebView.getWindowToken(), 0); @@ -1173,7 +1171,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Replace the header that `WebView` creates for `X-Requested-With` with a null value. The default value is the application ID (com.stoutner.privacybrowser.standard). customHeaders.put("X-Requested-With", ""); - // Initialize the default preference values the first time the program is run. `this` is the context. `false` keeps this command from resetting any current preferences back to default. + // Initialize the default preference values the first time the program is run. `false` keeps this command from resetting any current preferences back to default. PreferenceManager.setDefaultValues(this, R.xml.preferences, false); // Get the intent that started the app. @@ -1366,6 +1364,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Block third-party requests if enabled. if (isThirdPartyRequest && blockAllThirdPartyRequests) { + // Increment the third-party blocked requests counter. + thirdPartyBlockedRequests++; + // Add the request to the log. resourceRequests.add(new String[]{String.valueOf(REQUEST_THIRD_PARTY), url}); @@ -1376,6 +1377,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Check UltraPrivacy if it is enabled. if (ultraPrivacyEnabled) { if (blockListHelper.isBlocked(currentDomain, url, isThirdPartyRequest, ultraPrivacy)) { + // Increment the UltraPrivacy blocked requests counter. + ultraPrivacyBlockedRequests++; + // The resource request was blocked. Return an empty web resource response. return emptyWebResourceResponse; } @@ -1393,6 +1397,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Check EasyList if it is enabled. if (easyListEnabled) { if (blockListHelper.isBlocked(currentDomain, url, isThirdPartyRequest, easyList)) { + // Increment the EasyList blocked requests counter. + easyListBlockedRequests++; + // Reset the whitelist results tracker (because otherwise it will sometimes add results to the list due to a race condition). whiteListResultStringArray = null; @@ -1404,6 +1411,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Check EasyPrivacy if it is enabled. if (easyPrivacyEnabled) { if (blockListHelper.isBlocked(currentDomain, url, isThirdPartyRequest, easyPrivacy)) { + // Increment the EasyPrivacy blocked requests counter. + easyPrivacyBlockedRequests++; + // Reset the whitelist results tracker (because otherwise it will sometimes add results to the list due to a race condition). whiteListResultStringArray = null; @@ -1415,6 +1425,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Check Fanboy’s Annoyance List if it is enabled. if (fanboysAnnoyanceListEnabled) { if (blockListHelper.isBlocked(currentDomain, url, isThirdPartyRequest, fanboysAnnoyanceList)) { + // Increment the Fanboy's Annoyance List blocked requests counter. + fanboysAnnoyanceListBlockedRequests++; + // Reset the whitelist results tracker (because otherwise it will sometimes add results to the list due to a race condition). whiteListResultStringArray = null; @@ -1423,6 +1436,9 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } } else if (fanboysSocialBlockingListEnabled){ // Only check Fanboy’s Social Blocking List if Fanboy’s Annoyance List is disabled. if (blockListHelper.isBlocked(currentDomain, url, isThirdPartyRequest, fanboysSocialList)) { + // Increment the Fanboy's Social Blocking List blocked requests counter. + fanboysSocialBlockingListBlockedRequests++; + // Reset the whitelist results tracker (because otherwise it will sometimes add results to the list due to a race condition). whiteListResultStringArray = null; @@ -1459,6 +1475,14 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Reset the list of resource requests. resourceRequests.clear(); + // Initialize the counters for requests blocked by each blocklist. + easyListBlockedRequests = 0; + easyPrivacyBlockedRequests = 0; + fanboysAnnoyanceListBlockedRequests = 0; + fanboysSocialBlockingListBlockedRequests = 0; + ultraPrivacyBlockedRequests = 0; + thirdPartyBlockedRequests = 0; + // If night mode is enabled, hide `mainWebView` until after the night mode CSS is applied. if (nightMode) { mainWebView.setVisibility(View.INVISIBLE); @@ -1800,6 +1824,7 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook @Override public void onPause() { + // Run the default commands. super.onPause(); // Pause `mainWebView`. @@ -1815,6 +1840,15 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook } } + @Override + public void onDestroy() { + // Unregister the Orbot status broadcast receiver. + this.unregisterReceiver(orbotStatusBroadcastReceiver); + + // Run the default commands. + super.onDestroy(); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. @@ -1935,11 +1969,22 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook if (Build.VERSION.SDK_INT < 26) { WebViewDatabase mainWebViewDatabase = WebViewDatabase.getInstance(this); clearFormDataMenuItem.setEnabled(mainWebViewDatabase.hasFormData()); + } else { + // Disable clear form data because it is not supported on current version of Android. + clearFormDataMenuItem.setEnabled(false); } // Enable Clear Data if any of the submenu items are enabled. clearDataMenuItem.setEnabled(clearCookiesMenuItem.isEnabled() || clearDOMStorageMenuItem.isEnabled() || clearFormDataMenuItem.isEnabled()); + // Update the display names for the blocklists with the number of blocked requests. + easyListMenuItem.setTitle(easyListBlockedRequests + " - " + getString(R.string.easylist)); + easyPrivacyMenuItem.setTitle(easyPrivacyBlockedRequests + " - " + getString(R.string.easyprivacy)); + fanboysAnnoyanceListMenuItem.setTitle(fanboysAnnoyanceListBlockedRequests + " - " + getString(R.string.fanboys_annoyance_list)); + fanboysSocialBlockingListMenuItem.setTitle(fanboysSocialBlockingListBlockedRequests + " - " + getString(R.string.fanboys_social_blocking_list)); + ultraPrivacyMenuItem.setTitle(ultraPrivacyBlockedRequests + " - " + getString(R.string.ultraprivacy)); + blockAllThirdParyRequestsMenuItem.setTitle(thirdPartyBlockedRequests + " - " + getString(R.string.block_all_third_party_requests)); + // Disable Fanboy's Social Blocking List if Fanboy's Annoyance List is checked. fanboysSocialBlockingListMenuItem.setEnabled(!fanboysAnnoyanceListEnabled);