X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fviews%2FNestedScrollWebView.kt;h=ad34be8327baa58234dc08ae8735554eec6ee5f2;hp=2900e0ab8c2d63e0b7129fc9fd877bcdeedb9234;hb=2bd8b7edef80b4b10cb809a198b4624c6c740c86;hpb=6ea3e4ebd779594b45ad8f51cc40761bb6d89030 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 2900e0ab..ad34be83 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/views/NestedScrollWebView.kt @@ -1,24 +1,25 @@ /* - * Copyright © 2019-2021 Soren Stoutner . + * Copyright © 2019-2022 Soren Stoutner . * - * This file is part of Privacy Browser . + * This file is part of Privacy Browser Android . * - * Privacy Browser is free software: you can redistribute it and/or modify + * Privacy Browser Android is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * - * Privacy Browser is distributed in the hope that it will be useful, + * Privacy Browser Android is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with Privacy Browser. If not, see . + * along with Privacy Browser Android. If not, see . */ package com.stoutner.privacybrowser.views +import android.animation.ObjectAnimator import android.annotation.SuppressLint import android.content.Context import android.graphics.Bitmap @@ -26,9 +27,9 @@ import android.graphics.drawable.BitmapDrawable import android.os.Bundle import android.util.AttributeSet import android.view.MotionEvent -import android.webkit.WebView -import android.webkit.SslErrorHandler import android.webkit.HttpAuthHandler +import android.webkit.SslErrorHandler +import android.webkit.WebView import androidx.core.content.ContextCompat import androidx.core.view.NestedScrollingChild2 @@ -36,6 +37,7 @@ import androidx.core.view.NestedScrollingChildHelper import androidx.core.view.ViewCompat import com.stoutner.privacybrowser.R +import com.stoutner.privacybrowser.activities.MainWebViewActivity import java.util.Collections import java.util.Date @@ -78,9 +80,8 @@ private const val FONT_SIZE = "font_size" // NestedScrollWebView extends WebView to handle nested scrolls (scrolling the app bar off the screen). It also stores extra information about the state of the WebView used by Privacy Browser. class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeSet: AttributeSet? = null, defaultStyle: Int = android.R.attr.webViewStyle) : WebView(context, attributeSet, defaultStyle), NestedScrollingChild2 { - companion object { - // Define the companion object blocklists constants. These can be moved to class constants once all of the code has transitioned to Kotlin. + // Define the public companion object constants. These can be moved to public class constants once the entire project has migrated to Kotlin. const val BLOCKED_REQUESTS = 0 const val EASYLIST = 1 const val EASYPRIVACY = 2 @@ -207,22 +208,15 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS hasPinnedSslCertificate = true } - fun getPinnedSslCertificate(): ArrayList { - // Initialize an array list. - val arrayList = ArrayList() - + fun getPinnedSslCertificate(): Pair, Array> { // Create the SSL certificate string array. val sslCertificateStringArray = arrayOf(pinnedSslIssuedToCName, pinnedSslIssuedToOName, pinnedSslIssuedToUName, pinnedSslIssuedByCName, pinnedSslIssuedByOName, pinnedSslIssuedByUName) // Create the SSL certificate date array. val sslCertificateDateArray = arrayOf(pinnedSslStartDate, pinnedSslEndDate) - // Add the arrays to the array list. - arrayList.add(sslCertificateStringArray) - arrayList.add(sslCertificateDateArray) - - // Return the pinned SSL certificate array list. - return arrayList + // Return the pinned SSL certificate pair. + return Pair(sslCertificateStringArray, sslCertificateDateArray) } fun clearPinnedSslCertificate() { @@ -312,6 +306,19 @@ class NestedScrollWebView @JvmOverloads constructor(context: Context, attributeS return computeVerticalScrollRange() } + override fun onOverScrolled(scrollX: Int, scrollY: Int, clampedX: Boolean, clampedY: Boolean) { + // Run the default commands. + super.onOverScrolled(scrollX, scrollY, clampedX, clampedY) + + // Display the bottom app bar if it has been hidden and the WebView was over-scrolled at the top of the screen. + if ((MainWebViewActivity.appBarLayout.translationY != 0f) && (scrollY == 0) && clampedY) { + // Animate the bottom app bar onto the screen. + val objectAnimator = ObjectAnimator.ofFloat(MainWebViewActivity.appBarLayout, "translationY", 0f) + + // Make it so. + objectAnimator.start() + } + } // Handle touches. @SuppressLint("ClickableViewAccessibility")