diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index bde666e6..667849dd 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -1,9 +1,9 @@
-
+
-
+
@@ -11,7 +11,7 @@
-
-
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index c42c8ee0..b1a14887 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -3,6 +3,7 @@
diff --git a/app/build.gradle b/app/build.gradle
index 8318e58d..a85599af 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -38,7 +38,7 @@ android {
minSdkVersion 16
targetSdkVersion 31
versionCode 69
- versionName "5.2.19"
+ versionName "5.2.20"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
@@ -91,6 +91,7 @@ dependencies {
implementation "androidx.gridlayout:gridlayout:1.0.0"
implementation "androidx.biometric:biometric:1.1.0"
implementation "androidx.work:work-runtime-ktx:2.7.1"
+ implementation 'androidx.webkit:webkit:1.4.0'
implementation "com.daimajia.swipelayout:library:1.2.0@aar"
diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json
index 534fea8c..50139528 100644
--- a/app/release/output-metadata.json
+++ b/app/release/output-metadata.json
@@ -12,7 +12,7 @@
"filters": [],
"attributes": [],
"versionCode": 69,
- "versionName": "5.2.19",
+ "versionName": "5.2.20",
"outputFile": "app-release.apk"
}
],
diff --git a/app/src/main/java/xyz/quaver/pupil/Pupil.kt b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
index 2c5e606e..d9278e09 100644
--- a/app/src/main/java/xyz/quaver/pupil/Pupil.kt
+++ b/app/src/main/java/xyz/quaver/pupil/Pupil.kt
@@ -29,10 +29,10 @@ import android.net.Uri
import android.os.Build
import android.util.Log
import android.webkit.*
-import android.widget.Toast
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import androidx.preference.PreferenceManager
+import androidx.webkit.WebViewCompat
import com.facebook.imagepipeline.backends.okhttp3.OkHttpImagePipelineConfigFactory
import com.github.piasy.biv.BigImageViewer
import com.github.piasy.biv.loader.fresco.FrescoImageLoader
@@ -43,6 +43,8 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
import okhttp3.*
import xyz.quaver.io.FileX
import xyz.quaver.pupil.hitomi.evaluationContext
@@ -83,6 +85,7 @@ val _webViewFlow = MutableSharedFlow>()
val webViewFlow = _webViewFlow.asSharedFlow()
var webViewReady = false
var webViewFailed = false
+var oldWebView = false
private var reloadJob: Job? = null
fun reloadWebView() {
@@ -91,6 +94,7 @@ fun reloadWebView() {
reloadJob = CoroutineScope(Dispatchers.IO).launch {
webViewReady = false
webViewFailed = false
+ oldWebView = false
evaluationContext.cancelChildren(CancellationException("reload"))
@@ -156,7 +160,21 @@ fun initWebView(context: Context) {
webViewClient = object: WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
- webViewReady = true
+ webView.evaluateJavascript(
+ """
+ try {
+ new Function('(x => x?.y ?? z)');
+ true;
+ } catch (err) {
+ false;
+ }
+ """.trimIndent()
+ ) {
+ val es2020: Boolean = Json.decodeFromString(it)
+
+ webViewReady = es2020
+ oldWebView = !es2020
+ }
}
override fun onReceivedError(
diff --git a/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt b/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt
index 18e131fa..99314825 100644
--- a/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt
+++ b/app/src/main/java/xyz/quaver/pupil/hitomi/common.kt
@@ -16,6 +16,7 @@
package xyz.quaver.pupil.hitomi
+import android.util.Log
import android.webkit.WebView
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.Flow
@@ -25,10 +26,7 @@ import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
-import xyz.quaver.pupil.webView
-import xyz.quaver.pupil.webViewFailed
-import xyz.quaver.pupil.webViewFlow
-import xyz.quaver.pupil.webViewReady
+import xyz.quaver.pupil.*
import java.util.*
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
@@ -55,9 +53,11 @@ suspend inline fun WebView.evaluate(script: String): T = coroutineSc
while (result == null) {
try {
- result = withContext(evaluationContext) {
- while (webViewFailed || !webViewReady) yield()
+ while (!oldWebView && !(webViewReady && !webViewFailed)) yield()
+ result = if (oldWebView)
+ "null"
+ else withContext(evaluationContext) {
suspendCoroutine { continuation ->
evaluateJavascript(script) {
continuation.resume(it)
@@ -82,9 +82,11 @@ suspend inline fun WebView.evaluatePromise(
while (result == null) {
try {
- result = withContext(evaluationContext) {
- while (webViewFailed || !webViewReady) yield()
+ while (!oldWebView && !(webViewReady && !webViewFailed)) yield()
+ result = if (oldWebView)
+ "null"
+ else withContext(evaluationContext) {
val uid = UUID.randomUUID().toString()
val flow: Flow> = webViewFlow.transformWhile { (currentUid, result) ->
diff --git a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
index 3a3d3f12..1d322359 100644
--- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
+++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt
@@ -19,6 +19,7 @@
package xyz.quaver.pupil.ui
import android.annotation.SuppressLint
+import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import android.os.Build
@@ -37,6 +38,7 @@ import androidx.core.content.ContextCompat
import androidx.core.view.GravityCompat
import androidx.core.view.ViewCompat
import androidx.recyclerview.widget.RecyclerView
+import androidx.webkit.WebViewCompat
import com.google.android.material.navigation.NavigationView
import com.google.android.material.snackbar.Snackbar
import com.google.firebase.crashlytics.FirebaseCrashlytics
@@ -105,6 +107,8 @@ class MainActivity :
private lateinit var binding: MainActivityBinding
+ private var oldWebViewJob: Job? = null
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = MainActivityBinding.inflate(layoutInflater)
@@ -125,9 +129,40 @@ class MainActivity :
if (Preferences["download_folder", ""].isEmpty())
DownloadLocationDialogFragment().show(supportFragmentManager, "Download Location Dialog")
+ oldWebViewJob = CoroutineScope(Dispatchers.Unconfined).launch {
+ do {
+ delay(1000)
+ if (oldWebView) {
+ AlertDialog.Builder(this@MainActivity)
+ .setTitle(android.R.string.dialog_alert_title)
+ .setMessage(R.string.old_webview)
+ .setCancelable(false)
+ .setPositiveButton(android.R.string.ok) { _, _ ->
+ WebViewCompat.getCurrentWebViewPackage(this@MainActivity)?.packageName?.let { packageName ->
+ try {
+ startActivity(
+ Intent(
+ Intent.ACTION_VIEW,
+ Uri.parse("market://details?id=$packageName")
+ )
+ )
+ } catch (e: ActivityNotFoundException) {
+ startActivity(
+ Intent(
+ Intent.ACTION_VIEW,
+ Uri.parse("https://play.google.com/store/apps/details?id=$packageName")
+ )
+ )
+ }
+ }
+ }
+ .show()
+ break
+ }
+ } while (isActive)
+ }
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R &&
- !Preferences["download_folder_ignore_warning", false] &&
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && !Preferences["download_folder_ignore_warning", false] &&
ContextCompat.getExternalFilesDirs(this, null).filterNotNull().map { Uri.fromFile(it).toString() }
.contains(Preferences["download_folder", ""])
) {
@@ -169,6 +204,8 @@ class MainActivity :
override fun onDestroy() {
super.onDestroy()
+ oldWebViewJob?.cancel()
+
(binding.contents.recyclerview.adapter as? GalleryBlockAdapter)?.updateAll = false
}
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index dba21464..db2ebac9 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -157,4 +157,5 @@
並列ダウンロード
アンドロイド11以上では外部からのアプリ内部空間接近が不可能です。ダウンロードフォルダを変更しますか?
ネットワーク
+ WebViewのアップデートが必要です
\ No newline at end of file
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 9cc2e9ca..3a00fd9a 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -157,4 +157,5 @@
병렬 다운로드
안드로이드 11 이상에서는 외부에서 현재 다운로드 폴더에 접근할 수 없습니다. 변경하시겠습니까?
네트워크
+ WebView 업데이트가 필요합니다
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ee76168c..af69a1db 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -51,6 +51,8 @@
From Android 11 and above, current Download folder cannot be accessed by outside apps. Would you like to change the download folder?
+ You are using an old version of WebView. Please update it on PlayStore
+
Home
History
Downloads