From dff239141ddcdcac76ec3c915e53999720f06697 Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 19 Apr 2020 16:10:49 -0400 Subject: [PATCH] Force close app if Webview isn't available --- .../kanade/tachiyomi/ui/main/MainActivity.kt | 8 ++++++++ .../tachiyomi/util/system/WebviewUtil.kt | 20 +++++++++++++------ app/src/main/res/values/strings.xml | 1 + 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index b8fa65858..22f7f4a8c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -32,6 +32,8 @@ import eu.kanade.tachiyomi.ui.source.SourceController import eu.kanade.tachiyomi.ui.source.global_search.GlobalSearchController import eu.kanade.tachiyomi.util.lang.launchInUI import eu.kanade.tachiyomi.util.lang.launchUI +import eu.kanade.tachiyomi.util.system.WebviewUtil +import eu.kanade.tachiyomi.util.system.toast import java.util.Date import java.util.concurrent.TimeUnit import kotlinx.coroutines.Dispatchers @@ -64,6 +66,12 @@ class MainActivity : BaseActivity() { binding = MainActivityBinding.inflate(layoutInflater) + // Enforce Webview availability + if (!WebviewUtil.supportsWebview(this)) { + toast(R.string.information_webview_required, Toast.LENGTH_LONG) + finishAndRemoveTask() + } + // Do not let the launcher create a new activity http://stackoverflow.com/questions/16283079 if (!isTaskRoot) { finish() diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebviewUtil.kt b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebviewUtil.kt index 345e6982e..7f63f766d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/system/WebviewUtil.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/system/WebviewUtil.kt @@ -1,15 +1,23 @@ package eu.kanade.tachiyomi.util.system +import android.content.Context +import android.content.pm.PackageManager import android.webkit.WebView -private val WEBVIEW_UA_VERSION_REGEX by lazy { - Regex(""".*Chrome/(\d+)\..*""") +object WebviewUtil { + val WEBVIEW_UA_VERSION_REGEX by lazy { + Regex(""".*Chrome/(\d+)\..*""") + } + + const val MINIMUM_WEBVIEW_VERSION = 79 + + fun supportsWebview(context: Context): Boolean { + return context.packageManager.hasSystemFeature(PackageManager.FEATURE_WEBVIEW) + } } -private const val MINIMUM_WEBVIEW_VERSION = 79 - fun WebView.isOutdated(): Boolean { - return getWebviewMajorVersion(this) < MINIMUM_WEBVIEW_VERSION + return getWebviewMajorVersion(this) < WebviewUtil.MINIMUM_WEBVIEW_VERSION } // Based on https://stackoverflow.com/a/29218966 @@ -19,7 +27,7 @@ private fun getWebviewMajorVersion(webview: WebView): Int { // Next call to getUserAgentString() will get us the default webview.settings.userAgentString = null - val uaRegexMatch = WEBVIEW_UA_VERSION_REGEX.matchEntire(webview.settings.userAgentString) + val uaRegexMatch = WebviewUtil.WEBVIEW_UA_VERSION_REGEX.matchEntire(webview.settings.userAgentString) val webViewVersion: Int = if (uaRegexMatch != null && uaRegexMatch.groupValues.size > 1) { uaRegexMatch.groupValues[1].toInt() } else { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a355c7642..f2d4de119 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -593,6 +593,7 @@ Your library is empty, add series to your library from the sources. You have no categories. Hit the plus button to create one for organizing your library. Failed to bypass Cloudflare + Webview is required for Tachiyomi Please update the WebView app for better compatibility