diff --git a/app/build.gradle b/app/build.gradle index b4096f3d6f..5702f4a3b0 100644 --- a/app/build.gradle +++ b/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" diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt index fcfaacd710..5b3d47064b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/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. diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt index 7776944298..af9ea3e59e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/webview/WebViewActivity.kt +++ b/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() { } 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() { 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 diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt deleted file mode 100644 index d32cc11410..0000000000 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt +++ /dev/null @@ -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 - ) - } -}