X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fviews%2FNestedScrollWebView.java;h=f877745580097b4054484118f16db0eb54859ca3;hp=7ef26d6ed6d4981e0363f994624b80469d49766c;hb=3f3b7c8fbe988fe730a5fbb53169489566655595;hpb=f0393ca22075be3e5fe9199c7db87381256236fa diff --git a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java index 7ef26d6e..f8777455 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java +++ b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.java @@ -25,6 +25,8 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.MotionEvent; +import android.webkit.HttpAuthHandler; +import android.webkit.SslErrorHandler; import android.webkit.WebView; import androidx.annotation.NonNull; @@ -36,38 +38,52 @@ 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; + // Store the handlers. + private SslErrorHandler sslErrorHandler; + private HttpAuthHandler httpAuthHandler; + // Track if domain settings are applied to this nested scroll WebView and, if so, the database ID. 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 = ""; // Track the status of first-party cookies. private boolean acceptFirstPartyCookies; + // Track the domain settings JavaScript status. This can be removed once night mode does not require JavaScript. + private boolean domainSettingsJavaScriptEnabled; + // Track the resource requests. - private ArrayList resourceRequests = new ArrayList<>(); + private List 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; @@ -75,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; @@ -101,7 +118,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild private boolean ignorePinnedDomainInformation; // The default or favorite icon. - Bitmap favoriteOrDefaultIcon; + private Bitmap favoriteOrDefaultIcon; // Track night mode. private boolean nightMode; @@ -155,6 +172,40 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild } + // SSL error handler. + public void setSslErrorHandler(SslErrorHandler sslErrorHandler) { + // Store the current SSL error handler. + this.sslErrorHandler = sslErrorHandler; + } + + public SslErrorHandler getSslErrorHandler() { + // Return the current SSL error handler. + return sslErrorHandler; + } + + public void resetSslErrorHandler() { + // Reset the current SSL error handler. + sslErrorHandler = null; + } + + + // HTTP authentication handler. + public void setHttpAuthHandler(HttpAuthHandler httpAuthHandler) { + // Store the current HTTP authentication handler. + this.httpAuthHandler = httpAuthHandler; + } + + public HttpAuthHandler getHttpAuthHandler() { + // Return the current HTTP authentication handler. + return httpAuthHandler; + } + + public void resetHttpAuthHandler() { + // Reset the current HTTP authentication handler. + httpAuthHandler = null; + } + + // Domain settings. public void setDomainSettingsApplied(boolean applied) { // Store the domain settings applied status. @@ -179,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. @@ -208,14 +271,26 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild } + // Domain settings JavaScript enabled. This can be removed once night mode does not require JavaScript. + public void setDomainSettingsJavaScriptEnabled(boolean status) { + // Store the domain settings JavaScript status. + domainSettingsJavaScriptEnabled = status; + } + + public boolean getDomainSettingsJavaScriptEnabled() { + // Return the domain settings JavaScript status. + return domainSettingsJavaScriptEnabled; + } + + // Resource requests. public void addResourceRequest(String[] resourceRequest) { // Add the resource request to the list. resourceRequests.add(resourceRequest); } - public ArrayList getResourceRequests() { - // Return the list of resource requests. + public List getResourceRequests() { + // Return the list of resource requests as an array list. return resourceRequests; } @@ -229,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; @@ -249,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; @@ -264,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; @@ -280,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; @@ -303,6 +387,7 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild easyPrivacyBlockedRequests = 0; fanboysAnnoyanceListBlockedRequests = 0; fanboysSocialBlockingListBlockedRequests = 0; + ultraListBlockedRequests = 0; ultraPrivacyBlockedRequests = 0; thirdPartyBlockedRequests = 0; } @@ -315,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; @@ -335,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; @@ -354,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; @@ -370,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; @@ -496,18 +590,19 @@ public class NestedScrollWebView extends WebView implements NestedScrollingChild } - // Ignore pinned information. The syntax looks better as written, even if it is always inverted. + // Ignore pinned information. + public void setIgnorePinnedDomainInformation(boolean status) { + // Set the status of the ignore pinned domain information tracker. + ignorePinnedDomainInformation = status; + } + + // The syntax looks better as written, even if it is always inverted. @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean ignorePinnedDomainInformation() { // Return the status of the ignore pinned domain information tracker. return ignorePinnedDomainInformation; } - public void setIgnorePinnedDomainInformation(boolean status) { - // Set the status of the ignore pinned domain information tracker. - ignorePinnedDomainInformation = status; - } - // Favorite or default icon. public void initializeFavoriteIcon() { @@ -564,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) {