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;
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 = "";
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;
private int easyPrivacyBlockedRequests;
private int fanboysAnnoyanceListBlockedRequests;
private int fanboysSocialBlockingListBlockedRequests;
+ private int ultraListBlockedRequests;
private int ultraPrivacyBlockedRequests;
private int thirdPartyBlockedRequests;
// 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;
// Track swipe to refresh.
private boolean swipeToRefresh;
+ // Track a URL waiting for a proxy.
+ private String waitingForProxyUrlString = "";
+
// The nested scrolling child helper is used throughout the class.
private NestedScrollingChildHelper nestedScrollingChildHelper;
}
+ // 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.
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;
}
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;
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;
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;
// 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;
easyPrivacyBlockedRequests = 0;
fanboysAnnoyanceListBlockedRequests = 0;
fanboysSocialBlockingListBlockedRequests = 0;
+ ultraListBlockedRequests = 0;
ultraPrivacyBlockedRequests = 0;
thirdPartyBlockedRequests = 0;
}
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;
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;
// 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;
// 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;
}
- // 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.
}
+ // Waiting for proxy.
+ public void setWaitingForProxyUrlString(String urlString) {
+ // Store the waiting for proxy URL string.
+ waitingForProxyUrlString = urlString;
+ }
+
+ public String getWaitingForProxyUrlString() {
+ // Return the waiting for proxy URL string.
+ return waitingForProxyUrlString;
+ }
+
+ public void resetWaitingForProxyUrlString() {
+ // Clear the waiting for proxy URL string.
+ waitingForProxyUrlString = "";
+ }
+
+ // 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) {