Просмотр исходного кода

Revert "Use AndroidX WebKit library"

This reverts commit 7e7eb9f39f7b4d3dc8eaf2724030ce6209c989ca.
arkon 4 лет назад
Родитель
Сommit
4857073f30

+ 0 - 1
app/build.gradle

@@ -139,7 +139,6 @@ dependencies {
     implementation 'androidx.preference:preference:1.1.1'
     implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05'
     implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01'
-    implementation 'androidx.webkit:webkit:1.3.0-rc01'
 
     final lifecycle_version = '2.3.0-alpha06'
     implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

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

@@ -2,18 +2,16 @@ 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.lang.launchUI
+import eu.kanade.tachiyomi.util.system.WebViewClientCompat
 import eu.kanade.tachiyomi.util.system.WebViewUtil
 import eu.kanade.tachiyomi.util.system.isOutdated
 import eu.kanade.tachiyomi.util.system.setDefaultSettings
@@ -116,7 +114,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
                     }
 
                     // HTTP error codes are only received since M
-                    if (WebViewFeature.isFeatureSupported(WebViewFeature.RECEIVE_WEB_RESOURCE_ERROR) &&
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                         url == origRequestUrl && !challengeFound
                     ) {
                         // The first request didn't return the challenge, abort.
@@ -124,13 +122,15 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
                     }
                 }
 
-                override fun onReceivedHttpError(
+                override fun onReceivedErrorCompat(
                     view: WebView,
-                    request: WebResourceRequest,
-                    errorResponse: WebResourceResponse
+                    errorCode: Int,
+                    description: String?,
+                    failingUrl: String,
+                    isMainFrame: Boolean
                 ) {
-                    if (request.isForMainFrame) {
-                        if (errorResponse.statusCode == 503) {
+                    if (isMainFrame) {
+                        if (errorCode == 503) {
                             // Found the Cloudflare challenge page.
                             challengeFound = true
                         } else {

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

@@ -9,19 +9,18 @@ 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 android.widget.Toast
 import androidx.core.graphics.ColorUtils
 import androidx.core.view.isInvisible
 import androidx.core.view.isVisible
-import androidx.webkit.WebViewClientCompat
 import eu.kanade.tachiyomi.BuildConfig
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.databinding.WebviewActivityBinding
 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.util.system.WebViewClientCompat
 import eu.kanade.tachiyomi.util.system.WebViewUtil
 import eu.kanade.tachiyomi.util.system.getResourceColor
 import eu.kanade.tachiyomi.util.system.openInBrowser
@@ -100,8 +99,8 @@ class WebViewActivity : BaseActivity<WebviewActivityBinding>() {
             }
 
             binding.webview.webViewClient = object : WebViewClientCompat() {
-                override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
-                    view.loadUrl(request.url.toString())
+                override fun shouldOverrideUrlCompat(view: WebView, url: String): Boolean {
+                    view.loadUrl(url)
                     return true
                 }
 

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

@@ -0,0 +1,91 @@
+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
+        )
+    }
+}