]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java
Fix applying domain settings when navigating history. https://redmine.stoutner.com...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / views / NestedScrollWebView.java
index cf1e56ce46d4a420581115010ce22fc881c20a0a..f877745580097b4054484118f16db0eb54859ca3 100644 (file)
@@ -38,18 +38,21 @@ import androidx.core.view.ViewCompat;
 import com.stoutner.privacybrowser.R;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 
 // NestedScrollWebView extends WebView to handle nested scrolls (scrolling the app bar off the screen).
 public class NestedScrollWebView extends WebView implements NestedScrollingChild2 {
     // These constants identify the blocklists.
     public final static int BLOCKED_REQUESTS = 0;
-    public final static int EASY_LIST = 1;
-    public final static int EASY_PRIVACY = 2;
+    public final static int EASYLIST = 1;
+    public final static int EASYPRIVACY = 2;
     public final static int FANBOYS_ANNOYANCE_LIST = 3;
     public final static int FANBOYS_SOCIAL_BLOCKING_LIST = 4;
-    public final static int ULTRA_PRIVACY = 5;
-    public final static int THIRD_PARTY_REQUESTS = 6;
+    public final static int ULTRALIST = 5;
+    public final static int ULTRAPRIVACY = 6;
+    public final static int THIRD_PARTY_REQUESTS = 7;
 
     // Keep a copy of the WebView fragment ID.
     private long webViewFragmentId;
@@ -62,6 +65,9 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     private boolean domainSettingsApplied;
     private int domainSettingsDatabaseId;
 
+    // Keep track of the current URL.  This is used to not block resource requests to the main URL.
+    private String currentUrl;
+
     // Keep track of when the domain name changes so that domain settings can be reapplied.  This should never be null.
     private String currentDomainName = "";
 
@@ -72,11 +78,12 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     private boolean domainSettingsJavaScriptEnabled;
 
     // Track the resource requests.
-    private ArrayList<String[]> resourceRequests = new ArrayList<>();
+    private List<String[]> resourceRequests = Collections.synchronizedList(new ArrayList<>());  // Using a synchronized list makes adding resource requests thread safe.
     private boolean easyListEnabled;
     private boolean easyPrivacyEnabled;
     private boolean fanboysAnnoyanceListEnabled;
     private boolean fanboysSocialBlockingListEnabled;
+    private boolean ultraListEnabled;
     private boolean ultraPrivacyEnabled;
     private boolean blockAllThirdPartyRequests;
     private int blockedRequests;
@@ -84,6 +91,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     private int easyPrivacyBlockedRequests;
     private int fanboysAnnoyanceListBlockedRequests;
     private int fanboysSocialBlockingListBlockedRequests;
+    private int ultraListBlockedRequests;
     private int ultraPrivacyBlockedRequests;
     private int thirdPartyBlockedRequests;
 
@@ -109,9 +117,6 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     // The ignore pinned domain information tracker.  This is set when a user proceeds past a pinned mismatch dialog to prevent the dialog from showing again until after the domain changes.
     private boolean ignorePinnedDomainInformation;
 
-    // Track navigation of history.
-    private boolean navigatingHistory;
-
     // The default or favorite icon.
     private Bitmap favoriteOrDefaultIcon;
 
@@ -225,6 +230,18 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     }
 
 
+    // Current URL.
+    public void setCurrentUrl(String url) {
+        // Store the current URL.
+        currentUrl = url;
+    }
+
+    public String getCurrentUrl() {
+        // Return the current URL.
+        return currentUrl;
+    }
+
+
     // Current domain name.  To function well when called, the domain name should never be allowed to be null.
     public void setCurrentDomainName(@NonNull String domainName) {
         // Store the current domain name.
@@ -272,8 +289,8 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
         resourceRequests.add(resourceRequest);
     }
 
-    public ArrayList<String[]> getResourceRequests() {
-        // Return the list of resource requests.
+    public List<String[]> getResourceRequests() {
+        // Return the list of resource requests as an array list.
         return resourceRequests;
     }
 
@@ -287,12 +304,12 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     public void enableBlocklist(int blocklist, boolean status) {
         // Update the status of the indicated blocklist.
         switch (blocklist) {
-            case EASY_LIST:
+            case EASYLIST:
                 // Update the status of the blocklist.
                 easyListEnabled = status;
                 break;
 
-            case EASY_PRIVACY:
+            case EASYPRIVACY:
                 // Update the status of the blocklist.
                 easyPrivacyEnabled = status;
                 break;
@@ -307,7 +324,12 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 fanboysSocialBlockingListEnabled = status;
                 break;
 
-            case ULTRA_PRIVACY:
+            case ULTRALIST:
+                // Update the status of the blocklist.
+                ultraListEnabled = status;
+                break;
+
+            case ULTRAPRIVACY:
                 // Update the status of the blocklist.
                 ultraPrivacyEnabled = status;
                 break;
@@ -322,11 +344,11 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     public boolean isBlocklistEnabled(int blocklist) {
         // Get the status of the indicated blocklist.
         switch (blocklist) {
-            case EASY_LIST:
+            case EASYLIST:
                 // Return the status of the blocklist.
                 return easyListEnabled;
 
-            case EASY_PRIVACY:
+            case EASYPRIVACY:
                 // Return the status of the blocklist.
                 return easyPrivacyEnabled;
 
@@ -338,7 +360,11 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 // Return the status of the blocklist.
                 return fanboysSocialBlockingListEnabled;
 
-            case ULTRA_PRIVACY:
+            case ULTRALIST:
+                // Return the status of the blocklist.
+                return ultraListEnabled;
+
+            case ULTRAPRIVACY:
                 // Return the status of the blocklist.
                 return ultraPrivacyEnabled;
 
@@ -361,6 +387,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
         easyPrivacyBlockedRequests = 0;
         fanboysAnnoyanceListBlockedRequests = 0;
         fanboysSocialBlockingListBlockedRequests = 0;
+        ultraListBlockedRequests = 0;
         ultraPrivacyBlockedRequests = 0;
         thirdPartyBlockedRequests = 0;
     }
@@ -373,12 +400,12 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 blockedRequests++;
                 break;
 
-            case EASY_LIST:
+            case EASYLIST:
                 // Increment the EasyList blocked requests count.
                 easyListBlockedRequests++;
                 break;
 
-            case EASY_PRIVACY:
+            case EASYPRIVACY:
                 // Increment the EasyPrivacy blocked requests count.
                 easyPrivacyBlockedRequests++;
                 break;
@@ -393,7 +420,12 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 fanboysSocialBlockingListBlockedRequests++;
                 break;
 
-            case ULTRA_PRIVACY:
+            case ULTRALIST:
+                // Increment the UltraList blocked requests count.
+                ultraListBlockedRequests++;
+                break;
+
+            case ULTRAPRIVACY:
                 // Increment the UltraPrivacy blocked requests count.
                 ultraPrivacyBlockedRequests++;
                 break;
@@ -412,11 +444,11 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 // Return the blocked requests count.
                 return blockedRequests;
 
-            case EASY_LIST:
+            case EASYLIST:
                 // Return the EasyList blocked requests count.
                 return easyListBlockedRequests;
 
-            case EASY_PRIVACY:
+            case EASYPRIVACY:
                 // Return the EasyPrivacy blocked requests count.
                 return easyPrivacyBlockedRequests;
 
@@ -428,7 +460,11 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
                 // Return the Fanboy's Social Blocking List blocked requests count.
                 return fanboysSocialBlockingListBlockedRequests;
 
-            case ULTRA_PRIVACY:
+            case ULTRALIST:
+                // Return the UltraList blocked requests count.
+                return ultraListBlockedRequests;
+
+            case ULTRAPRIVACY:
                 // Return the UltraPrivacy blocked requests count.
                 return ultraPrivacyBlockedRequests;
 
@@ -568,18 +604,6 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     }
 
 
-    // Navigating history.
-    public void setNavigatingHistory(boolean status) {
-        // Set the status of navigating history.
-        navigatingHistory = status;
-    }
-
-    public boolean getNavigatingHistory() {
-        // Return the status of navigating history.
-        return navigatingHistory;
-    }
-
-
     // Favorite or default icon.
     public void initializeFavoriteIcon() {
         // Get the default favorite icon drawable.  `ContextCompat` must be used until API >= 21.
@@ -635,6 +659,18 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild
     }
 
 
+    // Scroll range.
+    public int getHorizontalScrollRange() {
+        // Return the horizontal scroll range.
+        return computeHorizontalScrollRange();
+    }
+
+    public int getVerticalScrollRange() {
+        // Return the vertical scroll range.
+        return computeVerticalScrollRange();
+    }
+
+
 
     @Override
     public boolean onTouchEvent(MotionEvent motionEvent) {