From 4c20ba38cbbf14efdf57e4eace528b38a0ee6dd3 Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 2 Aug 2020 16:12:05 -0400 Subject: [PATCH] Revert "Use AndroidX WebKit library" This reverts commit 7e7eb9f39f7b4d3dc8eaf2724030ce6209c989ca. (cherry picked from commit 4857073f303dc0d34dbb688c5b173e2c3fdc35a1) # Conflicts: # app/build.gradle --- app/build.gradle | 24 +++-- .../network/CloudflareInterceptor.kt | 20 ++-- .../tachiyomi/ui/webview/WebViewActivity.kt | 7 +- .../util/system/WebViewClientCompat.kt | 91 +++++++++++++++++++ 4 files changed, 115 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/util/system/WebViewClientCompat.kt diff --git a/app/build.gradle b/app/build.gradle index ad608a02b..2b8f128e0 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -148,17 +148,16 @@ dependencies { implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.preference:preference:1.1.1' - implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha04' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'androidx.webkit:webkit:1.3.0-rc01' + implementation 'androidx.recyclerview:recyclerview:1.2.0-alpha05' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01' - final lifecycle_version = '2.3.0-alpha05' + final lifecycle_version = '2.3.0-alpha06' implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-runtime-ktx:$lifecycle_version" // Job scheduling - final work_version = '2.4.0-rc01' + final work_version = '2.4.0' implementation "androidx.work:work-runtime:$work_version" implementation "androidx.work:work-runtime-ktx:$work_version" @@ -174,11 +173,11 @@ dependencies { implementation 'com.github.pwittchen:reactivenetwork:0.13.0' // Network client - final okhttp_version = '4.7.2' + final okhttp_version = '4.8.0' implementation "com.squareup.okhttp3:okhttp:$okhttp_version" implementation "com.squareup.okhttp3:logging-interceptor:$okhttp_version" implementation "com.squareup.okhttp3:okhttp-dnsoverhttps:$okhttp_version" - implementation 'com.squareup.okio:okio:2.6.0' + implementation 'com.squareup.okio:okio:2.7.0' // TLS 1.3 support for Android < 10 implementation 'org.conscrypt:conscrypt-android:2.4.0' @@ -214,7 +213,7 @@ dependencies { implementation 'androidx.sqlite:sqlite:2.1.0' implementation 'com.github.inorichi.storio:storio-common:8be19de@aar' implementation 'com.github.inorichi.storio:storio-sqlite:8be19de@aar' - implementation 'io.requery:sqlite-android:3.31.0' + implementation 'io.requery:sqlite-android:3.32.2' // Preferences implementation 'com.github.tfcporciuncula:flow-preferences:1.3.0' @@ -239,8 +238,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:4.7.1' // Crash reports - //final acra_version = '5.5.0' - //implementation "ch.acra:acra-http:$acra_version" + //implementation 'ch.acra:acra-http:5.7.0' // Sort implementation 'com.github.gpanther:java-nat-sort:natural-comparator-1.1' @@ -278,7 +276,7 @@ dependencies { implementation "io.github.reactivecircus.flowbinding:flowbinding-viewpager:$flowbinding_version" // Licenses - final aboutlibraries_version = '8.2.0' + final aboutlibraries_version = '8.3.0' implementation "com.mikepenz:aboutlibraries-core:$aboutlibraries_version" implementation "com.mikepenz:aboutlibraries:$aboutlibraries_version" @@ -303,10 +301,10 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$coroutines_version" // For detecting memory leaks; see https://square.github.io/leakcanary/ -// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2' +// debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4' // Debug tool; see https://fbflipper.com/ -// debugImplementation 'com.facebook.flipper:flipper:0.49.0' +// debugImplementation 'com.facebook.flipper:flipper:0.50.0' // debugImplementation 'com.facebook.soloader:soloader:0.9.0' // Text distance (EH) 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 02d5010bd..d517a9e4c 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/network/CloudflareInterceptor.kt +++ b/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 { 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 79fed84c3..2eaed5bd6 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,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() { } 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 } 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 new file mode 100644 index 000000000..d32cc1141 --- /dev/null +++ b/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 + ) + } +}