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 b8fa65858a..22f7f4a8c6 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 345e6982ea..7f63f766dd 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 a355c7642b..f2d4de1199 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