+
+
+ // WebView Fragment ID.
+ public void setWebViewFragmentId(long webViewFragmentId) {
+ // Store the WebView fragment ID.
+ this.webViewFragmentId = webViewFragmentId;
+ }
+
+ public long getWebViewFragmentId() {
+ // Return the WebView fragment ID.
+ return webViewFragmentId;
+ }
+
+
+ // 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.
+ domainSettingsApplied = applied;
+ }
+
+ public boolean getDomainSettingsApplied() {
+ // Return the domain settings applied status.
+ return domainSettingsApplied;
+ }
+
+
+ // Domain settings database ID.
+ public void setDomainSettingsDatabaseId(int databaseId) {
+ // Store the domain settings database ID.
+ domainSettingsDatabaseId = databaseId;
+ }
+
+ public int getDomainSettingsDatabaseId() {
+ // Return the domain settings database ID.
+ return domainSettingsDatabaseId;
+ }
+
+
+ // 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.
+ currentDomainName = domainName;
+ }
+
+ public void resetCurrentDomainName() {
+ // Reset the current domain name.
+ currentDomainName = "";
+ }
+
+ public String getCurrentDomainName() {
+ // Return the current domain name.
+ return currentDomainName;
+ }
+
+
+ // First-party cookies.
+ public void setAcceptFirstPartyCookies(boolean status) {
+ // Store the accept first-party cookies status.
+ acceptFirstPartyCookies = status;
+ }
+
+ public boolean getAcceptFirstPartyCookies() {
+ // Return the accept first-party cookies status.
+ return acceptFirstPartyCookies;
+ }
+
+
+ // 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<String[]> getResourceRequests() {
+ // Return the list of resource requests.
+ return resourceRequests;
+ }
+
+ public void clearResourceRequests() {
+ // Clear the resource requests.
+ resourceRequests.clear();
+ }
+
+
+ // Blocklists.
+ public void enableBlocklist(int blocklist, boolean status) {
+ // Update the status of the indicated blocklist.
+ switch (blocklist) {
+ case EASY_LIST:
+ // Update the status of the blocklist.
+ easyListEnabled = status;
+ break;
+
+ case EASY_PRIVACY:
+ // Update the status of the blocklist.
+ easyPrivacyEnabled = status;
+ break;
+
+ case FANBOYS_ANNOYANCE_LIST:
+ // Update the status of the blocklist.
+ fanboysAnnoyanceListEnabled = status;
+ break;
+
+ case FANBOYS_SOCIAL_BLOCKING_LIST:
+ // Update the status of the blocklist.
+ fanboysSocialBlockingListEnabled = status;
+ break;
+
+ case ULTRA_PRIVACY:
+ // Update the status of the blocklist.
+ ultraPrivacyEnabled = status;
+ break;
+
+ case THIRD_PARTY_REQUESTS:
+ // Update the status of the blocklist.
+ blockAllThirdPartyRequests = status;
+ break;
+ }
+ }
+
+ public boolean isBlocklistEnabled(int blocklist) {
+ // Get the status of the indicated blocklist.
+ switch (blocklist) {
+ case EASY_LIST:
+ // Return the status of the blocklist.
+ return easyListEnabled;
+
+ case EASY_PRIVACY:
+ // Return the status of the blocklist.
+ return easyPrivacyEnabled;
+
+ case FANBOYS_ANNOYANCE_LIST:
+ // Return the status of the blocklist.
+ return fanboysAnnoyanceListEnabled;
+
+ case FANBOYS_SOCIAL_BLOCKING_LIST:
+ // Return the status of the blocklist.
+ return fanboysSocialBlockingListEnabled;
+
+ case ULTRA_PRIVACY:
+ // Return the status of the blocklist.
+ return ultraPrivacyEnabled;
+
+ case THIRD_PARTY_REQUESTS:
+ // Return the status of the blocklist.
+ return blockAllThirdPartyRequests;
+
+ default:
+ // The default value is required but should never be used.
+ return false;
+ }
+ }
+
+
+ // Resource request counters.
+ public void resetRequestsCounters() {
+ // Reset all the resource request counters.
+ blockedRequests = 0;
+ easyListBlockedRequests = 0;
+ easyPrivacyBlockedRequests = 0;
+ fanboysAnnoyanceListBlockedRequests = 0;
+ fanboysSocialBlockingListBlockedRequests = 0;
+ ultraPrivacyBlockedRequests = 0;
+ thirdPartyBlockedRequests = 0;
+ }
+
+ public void incrementRequestsCount(int blocklist) {
+ // Increment the count of the indicated blocklist.
+ switch (blocklist) {
+ case BLOCKED_REQUESTS:
+ // Increment the blocked requests count.
+ blockedRequests++;
+ break;
+
+ case EASY_LIST:
+ // Increment the EasyList blocked requests count.
+ easyListBlockedRequests++;
+ break;
+
+ case EASY_PRIVACY:
+ // Increment the EasyPrivacy blocked requests count.
+ easyPrivacyBlockedRequests++;
+ break;
+
+ case FANBOYS_ANNOYANCE_LIST:
+ // Increment the Fanboy's Annoyance List blocked requests count.
+ fanboysAnnoyanceListBlockedRequests++;
+ break;
+
+ case FANBOYS_SOCIAL_BLOCKING_LIST:
+ // Increment the Fanboy's Social Blocking List blocked requests count.
+ fanboysSocialBlockingListBlockedRequests++;
+ break;
+
+ case ULTRA_PRIVACY:
+ // Increment the UltraPrivacy blocked requests count.
+ ultraPrivacyBlockedRequests++;
+ break;
+
+ case THIRD_PARTY_REQUESTS:
+ // Increment the Third Party blocked requests count.
+ thirdPartyBlockedRequests++;
+ break;
+ }
+ }
+
+ public int getRequestsCount(int blocklist) {
+ // Get the count of the indicated blocklist.
+ switch (blocklist) {
+ case BLOCKED_REQUESTS:
+ // Return the blocked requests count.
+ return blockedRequests;
+
+ case EASY_LIST:
+ // Return the EasyList blocked requests count.
+ return easyListBlockedRequests;
+
+ case EASY_PRIVACY:
+ // Return the EasyPrivacy blocked requests count.
+ return easyPrivacyBlockedRequests;
+
+ case FANBOYS_ANNOYANCE_LIST:
+ // Return the Fanboy's Annoyance List blocked requests count.
+ return fanboysAnnoyanceListBlockedRequests;
+
+ case FANBOYS_SOCIAL_BLOCKING_LIST:
+ // Return the Fanboy's Social Blocking List blocked requests count.
+ return fanboysSocialBlockingListBlockedRequests;
+
+ case ULTRA_PRIVACY:
+ // Return the UltraPrivacy blocked requests count.
+ return ultraPrivacyBlockedRequests;
+
+ case THIRD_PARTY_REQUESTS:
+ // Return the Third Party blocked requests count.
+ return thirdPartyBlockedRequests;
+
+ default:
+ // Return 0. This should never end up being called.
+ return 0;
+ }
+ }
+
+
+ // Pinned SSL certificates.
+ public boolean hasPinnedSslCertificate() {
+ // Return the status of the pinned SSL certificate.
+ return hasPinnedSslCertificate;
+ }
+
+ public void setPinnedSslCertificate(String issuedToCName, String issuedToOName, String issuedToUName, String issuedByCName, String issuedByOName, String issuedByUName, Date startDate, Date endDate) {
+ // Store the pinned SSL certificate information.
+ pinnedSslIssuedToCName = issuedToCName;
+ pinnedSslIssuedToOName = issuedToOName;
+ pinnedSslIssuedToUName = issuedToUName;
+ pinnedSslIssuedByCName = issuedByCName;
+ pinnedSslIssuedByOName = issuedByOName;
+ pinnedSslIssuedByUName = issuedByUName;
+ pinnedSslStartDate = startDate;
+ pinnedSslEndDate = endDate;
+
+ // Set the pinned SSL certificate tracker.
+ hasPinnedSslCertificate = true;
+ }
+
+ public ArrayList<Object> getPinnedSslCertificate() {
+ // Initialize an array list.
+ ArrayList<Object> arrayList = new ArrayList<>();
+
+ // Create the SSL certificate string array.
+ String[] sslCertificateStringArray = new String[] {pinnedSslIssuedToCName, pinnedSslIssuedToOName, pinnedSslIssuedToUName, pinnedSslIssuedByCName, pinnedSslIssuedByOName, pinnedSslIssuedByUName};
+
+ // Create the SSL certificate date array.
+ Date[] sslCertificateDateArray = new Date[] {pinnedSslStartDate, pinnedSslEndDate};
+
+ // Add the arrays to the array list.
+ arrayList.add(sslCertificateStringArray);
+ arrayList.add(sslCertificateDateArray);
+
+ // Return the pinned SSL certificate array list.
+ return arrayList;
+ }
+
+ public void clearPinnedSslCertificate() {
+ // Clear the pinned SSL certificate.
+ pinnedSslIssuedToCName = null;
+ pinnedSslIssuedToOName = null;
+ pinnedSslIssuedToUName = null;
+ pinnedSslIssuedByCName = null;
+ pinnedSslIssuedByOName = null;
+ pinnedSslIssuedByUName = null;
+ pinnedSslStartDate = null;
+ pinnedSslEndDate = null;
+
+ // Clear the pinned SSL certificate tracker.
+ hasPinnedSslCertificate = false;
+ }
+
+
+ // Current IP addresses.
+ public boolean hasCurrentIpAddresses() {
+ // Return the status of the current IP addresses.
+ return hasCurrentIpAddresses;
+ }
+
+ public void setCurrentIpAddresses(String ipAddresses) {
+ // Store the current IP addresses.
+ currentIpAddresses = ipAddresses;
+
+ // Set the current IP addresses tracker.
+ hasCurrentIpAddresses = true;
+ }
+
+ public String getCurrentIpAddresses() {
+ // Return the current IP addresses.
+ return currentIpAddresses;
+ }
+
+ public void clearCurrentIpAddresses() {
+ // Clear the current IP addresses.
+ currentIpAddresses = null;
+
+ // Clear the current IP addresses tracker.
+ hasCurrentIpAddresses = false;
+ }
+
+
+ // Pinned IP addresses.
+ public boolean hasPinnedIpAddresses() {
+ // Return the status of the pinned IP addresses.
+ return hasPinnedIpAddresses;
+ }
+
+ public void setPinnedIpAddresses(String ipAddresses) {
+ // Store the pinned IP addresses.
+ pinnedIpAddresses = ipAddresses;
+
+ // Set the pinned IP addresses tracker.
+ hasPinnedIpAddresses = true;
+ }
+
+ public String getPinnedIpAddresses() {
+ // Return the pinned IP addresses.
+ return pinnedIpAddresses;
+ }
+
+ public void clearPinnedIpAddresses() {
+ // Clear the pinned IP addresses.
+ pinnedIpAddresses = null;
+
+ // Clear the pinned IP addresses tracker.
+ hasPinnedIpAddresses = false;
+ }
+
+
+ // 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;
+ }
+
+
+ // 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.
+ Drawable favoriteIconDrawable = ContextCompat.getDrawable(getContext(), R.drawable.world);
+
+ // Cast the favorite icon drawable to a bitmap drawable.
+ BitmapDrawable favoriteIconBitmapDrawable = (BitmapDrawable) favoriteIconDrawable;
+
+ // Remove the incorrect warning below that the favorite icon bitmap drawable might be null.
+ assert favoriteIconBitmapDrawable != null;
+
+ // Store the default icon bitmap.
+ favoriteOrDefaultIcon = favoriteIconBitmapDrawable.getBitmap();
+ }
+
+ public void setFavoriteOrDefaultIcon(Bitmap icon) {
+ // Scale the favorite icon bitmap down if it is larger than 256 x 256. Filtering uses bilinear interpolation.
+ if ((icon.getHeight() > 256) || (icon.getWidth() > 256)) {
+ favoriteOrDefaultIcon = Bitmap.createScaledBitmap(icon, 256, 256, true);
+ } else {
+ // Store the icon as presented.
+ favoriteOrDefaultIcon = icon;
+ }
+ }
+
+ public Bitmap getFavoriteOrDefaultIcon() {
+ // Return the favorite or default icon.
+ return favoriteOrDefaultIcon;
+ }
+
+
+ // Night mode.
+ public void setNightMode(boolean status) {
+ // Store the night mode status.
+ nightMode = status;
+ }
+
+ public boolean getNightMode() {
+ // Return the night mode status.
+ return nightMode;
+ }
+
+
+ // Swipe to refresh.
+ public void setSwipeToRefresh(boolean status) {
+ // Store the swipe to refresh status.
+ swipeToRefresh = status;
+ }
+
+ public boolean getSwipeToRefresh() {
+ // Return the swipe to refresh status.
+ return swipeToRefresh;
+ }
+
+
+