Pārlūkot izejas kodu

Use AndroidX WebKit library

arkon 4 gadi atpakaļ
vecāks
revīzija
7e7eb9f39f

+ 1 - 0
app/build.gradle

@@ -134,6 +134,7 @@ dependencies {
     implementation 'androidx.browser:browser:1.2.0'
     implementation 'androidx.multidex:multidex:2.0.1'
     implementation 'androidx.biometric:biometric:1.0.1'
+    implementation 'androidx.webkit:webkit:1.3.0-beta01'
 
     final lifecycle_version = '2.2.0'
     implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

+ 11 - 11
app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt

@@ -2,15 +2,17 @@ package eu.kanade.tachiyomi.network
 
 import android.annotation.SuppressLint
 import android.content.Context
-import android.os.Build
 import android.os.Handler
 import android.os.Looper
+import android.webkit.WebResourceRequest
+import android.webkit.WebResourceResponse
 import android.webkit.WebSettings
 import android.webkit.WebView
 import android.widget.Toast
+import androidx.webkit.WebViewClientCompat
+import androidx.webkit.WebViewFeature
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.source.online.HttpSource
-import eu.kanade.tachiyomi.util.system.WebViewClientCompat
 import eu.kanade.tachiyomi.util.system.isOutdated
 import eu.kanade.tachiyomi.util.system.toast
 import java.io.IOException
@@ -103,7 +105,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
                     }
 
                     // HTTP error codes are only received since M
-                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
+                    if (WebViewFeature.isFeatureSupported(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR) &&
                         url == origRequestUrl && !challengeFound
                     ) {
                         // The first request didn't return the challenge, abort.
@@ -111,16 +113,14 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
                     }
                 }
 
-                override fun onReceivedErrorCompat(
+                override fun onReceivedHttpError(
                     view: WebView,
-                    errorCode: Int,
-                    description: String?,
-                    failingUrl: String,
-                    isMainFrame: Boolean
+                    request: WebResourceRequest,
+                    errorResponse: WebResourceResponse
                 ) {
-                    if (isMainFrame) {
-                        if (errorCode == 503) {
-                            // Found the cloudflare challenge page.
+                    if (request.isForMainFrame) {
+                        if (errorResponse.statusCode == 503) {
+                            // Found the Cloudflare challenge page.
                             challengeFound = true
                         } else {
                             // Unlock thread, the challenge wasn't found.

+ 5 - 4
app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt

@@ -9,8 +9,10 @@ import android.os.Bundle
 import android.view.Menu
 import android.view.MenuItem
 import android.webkit.WebChromeClient
+import android.webkit.WebResourceRequest
 import android.webkit.WebView
 import androidx.core.graphics.ColorUtils
+import androidx.webkit.WebViewClientCompat
 import eu.kanade.tachiyomi.BuildConfig
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
@@ -18,7 +20,6 @@ import eu.kanade.tachiyomi.source.SourceManager
 import eu.kanade.tachiyomi.source.online.HttpSource
 import eu.kanade.tachiyomi.ui.base.activity.BaseActivity
 import eu.kanade.tachiyomi.ui.main.ForceCloseActivity
-import eu.kanade.tachiyomi.util.system.WebViewClientCompat
 import eu.kanade.tachiyomi.util.system.getResourceColor
 import eu.kanade.tachiyomi.util.system.openInBrowser
 import eu.kanade.tachiyomi.util.system.toast
@@ -92,8 +93,8 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() {
             }
 
             binding.webview.webViewClient = object : WebViewClientCompat() {
-                override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
-                    view.loadUrl(url)
+                override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
+                    view.loadUrl(request.url.toString())
                     return true
                 }
 
@@ -111,7 +112,7 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() {
                     invalidateOptionsMenu()
                 }
 
-                override fun onPageCommitVisible(view: WebView?, url: String?) {
+                override fun onPageCommitVisible(view: WebView, url: String) {
                     super.onPageCommitVisible(view, url)
 
                     // Reset to top when page refreshes

+ 0 - 91
app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt

@@ -1,91 +0,0 @@
-package eu.kanade.tachiyomi.util.system
-
-import android.annotation.TargetApi
-import android.os.Build
-import android.webkit.WebResourceError
-import android.webkit.WebResourceRequest
-import android.webkit.WebResourceResponse
-import android.webkit.WebView
-import android.webkit.WebViewClient
-
-@Suppress("OverridingDeprecatedMember")
-abstract class WebViewClientCompat : WebViewClient() {
-
-    open fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
-        return false
-    }
-
-    open fun shouldInterceptRequestCompat(view: WebView, url: String): WebResourceResponse? {
-        return null
-    }
-
-    open fun onReceivedErrorCompat(
-        view: WebView,
-        errorCode: Int,
-        description: String?,
-        failingUrl: String,
-        isMainFrame: Boolean
-    ) {
-    }
-
-    @TargetApi(Build.VERSION_CODES.N)
-    final override fun shouldOverrideUrlLoading(
-        view: WebView,
-        request: WebResourceRequest
-    ): Boolean {
-        return shouldOverrideUrlCompat(view, request.url.toString())
-    }
-
-    final override fun shouldOverrideUrlLoading(view: WebView, url: String): Boolean {
-        return shouldOverrideUrlCompat(view, url)
-    }
-
-    final override fun shouldInterceptRequest(
-        view: WebView,
-        request: WebResourceRequest
-    ): WebResourceResponse? {
-        return shouldInterceptRequestCompat(view, request.url.toString())
-    }
-
-    final override fun shouldInterceptRequest(
-        view: WebView,
-        url: String
-    ): WebResourceResponse? {
-        return shouldInterceptRequestCompat(view, url)
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    final override fun onReceivedError(
-        view: WebView,
-        request: WebResourceRequest,
-        error: WebResourceError
-    ) {
-        onReceivedErrorCompat(
-            view, error.errorCode, error.description?.toString(),
-            request.url.toString(), request.isForMainFrame
-        )
-    }
-
-    final override fun onReceivedError(
-        view: WebView,
-        errorCode: Int,
-        description: String?,
-        failingUrl: String
-    ) {
-        onReceivedErrorCompat(view, errorCode, description, failingUrl, failingUrl == view.url)
-    }
-
-    @TargetApi(Build.VERSION_CODES.M)
-    final override fun onReceivedHttpError(
-        view: WebView,
-        request: WebResourceRequest,
-        error: WebResourceResponse
-    ) {
-        onReceivedErrorCompat(
-            view, error.statusCode, error.reasonPhrase,
-            request.url
-                .toString(),
-            request.isForMainFrame
-        )
-    }
-}