From 10170a274b686715e89311bca3a32f1e290baf1a Mon Sep 17 00:00:00 2001 From: tarsin Date: Sun, 10 Jul 2022 22:08:11 +0800 Subject: [PATCH] Only need unlock when process is paused --- app/build.gradle | 1 + .../main/java/com/hippo/ehviewer/EhApplication.java | 13 +++++++++++++ .../java/com/hippo/ehviewer/ui/MainActivity.java | 3 ++- .../com/hippo/ehviewer/ui/scene/SecurityScene.kt | 2 ++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 99571f21d..82ba9756b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -97,6 +97,7 @@ dependencies { implementation 'androidx.biometric:biometric-ktx:1.2.0-alpha04' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.fragment:fragment:1.5.0' + implementation "androidx.lifecycle:lifecycle-process:2.5.0" implementation 'androidx.preference:preference:1.2.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01' diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 144168a99..fbd20b031 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -38,6 +38,9 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDelegate; import androidx.collection.LruCache; import androidx.core.os.LocaleListCompat; +import androidx.lifecycle.DefaultLifecycleObserver; +import androidx.lifecycle.LifecycleOwner; +import androidx.lifecycle.ProcessLifecycleOwner; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.hippo.Native; @@ -104,6 +107,8 @@ public class EhApplication extends SceneApplication { private static final boolean DEBUG_PRINT_IMAGE_COUNT = false; private static final long DEBUG_PRINT_INTERVAL = 3000L; + public static boolean locked = false; + private static EhApplication instance; private final IntIdGenerator mIdGenerator = new IntIdGenerator(); @@ -297,9 +302,17 @@ public class EhApplication extends SceneApplication { return application.mFavouriteStatusRouter; } + static class EhlifecycleObserver implements DefaultLifecycleObserver { + @Override + public void onPause(@NonNull LifecycleOwner owner) { + locked = true; + } + } + @SuppressLint("StaticFieldLeak") @Override public void onCreate() { + ProcessLifecycleOwner.get().getLifecycle().addObserver(new EhlifecycleObserver()); instance = this; Thread.UncaughtExceptionHandler handler = Thread.getDefaultUncaughtExceptionHandler(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java index 2f50ee2e5..eca823fe4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -47,6 +47,7 @@ import com.google.android.material.navigation.NavigationView; import com.google.android.material.snackbar.Snackbar; import com.hippo.app.EditTextDialogBuilder; import com.hippo.ehviewer.AppConfig; +import com.hippo.ehviewer.EhApplication; import com.hippo.ehviewer.R; import com.hippo.ehviewer.Settings; import com.hippo.ehviewer.client.EhTagDatabase; @@ -420,7 +421,7 @@ public final class MainActivity extends StageActivity @Override protected void onResume() { - if (Settings.getSecurity() && SecurityScene.Companion.isAuthenticationSupported(this)) { + if (Settings.getSecurity() && SecurityScene.Companion.isAuthenticationSupported(this) && EhApplication.locked) { startScene(new Announcer(SecurityScene.class), true); } super.onResume(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.kt index be37478dd..ceb95c2d0 100755 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/SecurityScene.kt @@ -27,6 +27,7 @@ import androidx.biometric.auth.AuthPromptCallback import androidx.biometric.auth.startClass2BiometricOrCredentialAuthentication import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity +import com.hippo.ehviewer.EhApplication import com.hippo.ehviewer.R class SecurityScene : SolidScene() { @@ -82,6 +83,7 @@ class SecurityScene : SolidScene() { } private fun onSuccess() { + EhApplication.locked = false if (stackIndex == 0) startSceneForCheckStep(CHECK_STEP_SECURITY, arguments) finish()