X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fviews%2FNestedScrollWebView.kt;h=fb8e84e4982e3b8f957232a085b03f9f988dedd3;hb=12042264a50769030361cf51b0ac197050209f0f;hp=4011f5a5aba4fe689a628fbd8523afa306e634f6;hpb=e2d4437956f57b50bda1f27c9b4eea9367de7758;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt index 4011f5a5..fb8e84e4 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2019-2022 Soren Stoutner . + * Copyright 2019-2023 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -31,7 +31,7 @@ import android.webkit.HttpAuthHandler import android.webkit.SslErrorHandler import android.webkit.WebView -import androidx.core.content.ContextCompat +import androidx.appcompat.content.res.AppCompatResources.getDrawable import androidx.core.view.NestedScrollingChild2 import androidx.core.view.NestedScrollingChildHelper import androidx.core.view.ViewCompat @@ -117,7 +117,8 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS // Define the private variables. private val nestedScrollingChildHelper: NestedScrollingChildHelper = NestedScrollingChildHelper(this) - private lateinit var favoriteOrDefaultIcon: Bitmap + private lateinit var favoriteIcon: Bitmap + private var favoriteIconHeight = 0 private var previousYPosition = 0 // The previous Y position needs to be tracked between motion events. private var hasPinnedSslCertificate = false private var pinnedSslIssuedToCName = "" @@ -137,7 +138,6 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS private var ultraListBlockedRequests = 0 private var ultraPrivacyBlockedRequests = 0 private var thirdPartyBlockedRequests = 0 - private var xRequestedWithHeader = mutableMapOf() init { // Enable nested scrolling by default. @@ -150,19 +150,25 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS // Favorite or default icon. fun initializeFavoriteIcon() { - // Get the default favorite icon drawable. `ContextCompat` must be used until API >= 21. - val favoriteIconDrawable = ContextCompat.getDrawable(context, R.drawable.world) + // Get the default favorite icon drawable. + val favoriteIconDrawable = getDrawable(context, R.drawable.world) // Cast the favorite icon drawable to a bitmap drawable. val favoriteIconBitmapDrawable = (favoriteIconDrawable as BitmapDrawable?)!! // Store the default icon bitmap. - favoriteOrDefaultIcon = favoriteIconBitmapDrawable.bitmap + favoriteIcon = favoriteIconBitmapDrawable.bitmap + + // Set the favorite icon height to be 0. This way any favorite icons presented by the website will overwrite it. + favoriteIconHeight = 0 } - fun setFavoriteOrDefaultIcon(icon: Bitmap) { + fun setFavoriteIcon(icon: Bitmap) { + // Store the current favorite icon height. + favoriteIconHeight = icon.height + // Scale the favorite icon bitmap down if it is larger than 256 x 256. Filtering uses bilinear interpolation. - favoriteOrDefaultIcon = if (icon.height > 256 || icon.width > 256) { + favoriteIcon = if (icon.height > 256 || icon.width > 256) { Bitmap.createScaledBitmap(icon, 256, 256, true) } else { // Store the icon as presented. @@ -170,11 +176,15 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS } } - fun getFavoriteOrDefaultIcon(): Bitmap { - // Return the favorite or default icon. This is the only way to return a non-nullable variable while retaining the custom initialization and setter functions above. - return favoriteOrDefaultIcon + fun getFavoriteIcon(): Bitmap { + // Return the favorite icon. This is the only way to return a non-nullable variable while retaining the custom initialization and setter functions above. + return favoriteIcon } + fun getFavoriteIconHeight(): Int { + // Return the favorite icon height. + return favoriteIconHeight + } // Reset the handlers. fun resetSslErrorHandler() { @@ -296,24 +306,6 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS } - // X-Requested-With header. - fun getXRequestedWithHeader() : MutableMap { - // Return the X-Requested-With header. - return xRequestedWithHeader - } - - fun setXRequestedWithHeader() { - // Set the X-Requested-With header to use a null value. - if (xRequestedWithHeader.isEmpty()) - xRequestedWithHeader["X-Requested-With"] = "" - } - - fun resetXRequestedWithHeader() { - // Clear the map, which resets the X-Requested-With header to use the default value of the application ID (com.stoutner.privacybrowser.standard). - xRequestedWithHeader.clear() - } - - // Publicly expose the scroll ranges. fun getHorizontalScrollRange(): Int { // Return the horizontal scroll range. @@ -402,7 +394,7 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS } - // Save and restore state. + // Save the state. fun saveNestedScrollWebViewState(): Bundle { // Create a saved state bundle. val savedState = Bundle() @@ -442,6 +434,7 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS return savedState } + // Restore the state. fun restoreNestedScrollWebViewState(savedState: Bundle) { // Restore the class variables. domainSettingsApplied = savedState.getBoolean(DOMAIN_SETTINGS_APPLIED) @@ -559,4 +552,4 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS // Dispatch a nested fling with the specified velocity. return nestedScrollingChildHelper.dispatchNestedFling(velocityX, velocityY, consumed) } -} \ No newline at end of file +}