From 0c7bf96bf59cca0380e83d9185af798d492a1c49 Mon Sep 17 00:00:00 2001 From: tarsin Date: Wed, 25 May 2022 15:55:54 +0800 Subject: [PATCH] No "require unlock" available when keyguard is not enabled --- .../java/com/hippo/ehviewer/Settings.java | 4 +++ .../com/hippo/ehviewer/ui/MainActivity.java | 4 +-- .../ehviewer/ui/fragment/PrivacyFragment.kt | 36 +++++++++++-------- .../hippo/ehviewer/ui/scene/SecurityScene.kt | 17 +++++---- 4 files changed, 37 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index 819a801f3..be92ea0bb 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -1032,6 +1032,10 @@ public class Settings { return getBoolean(KEY_SECURITY, false); } + public static void putSecurity(boolean value) { + putBoolean(KEY_SECURITY, value); + } + public static boolean getEnableFingerprint() { return getBoolean(KEY_ENABLE_FINGERPRINT, true); } 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 7f48591c5..f83df3060 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/MainActivity.java @@ -142,7 +142,7 @@ public final class MainActivity extends StageActivity @NonNull @Override protected Announcer getLaunchAnnouncer() { - if (Settings.getSecurity()) { + if (Settings.getSecurity() && SecurityScene.Companion.isAuthenticationSupported(this)) { return new Announcer(SecurityScene.class); } else if (Settings.getShowWarning()) { return new Announcer(WarningScene.class); @@ -160,7 +160,7 @@ public final class MainActivity extends StageActivity // Sometimes scene can't show directly private Announcer processAnnouncer(Announcer announcer) { if (0 == getSceneCount()) { - if (Settings.getSecurity()) { + if (Settings.getSecurity() && SecurityScene.Companion.isAuthenticationSupported(this)) { Bundle newArgs = new Bundle(); newArgs.putString(SecurityScene.KEY_TARGET_SCENE, announcer.getClazz().getName()); newArgs.putBundle(SecurityScene.KEY_TARGET_ARGS, announcer.getArgs()); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.kt b/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.kt index c7da50119..27d00a87b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/PrivacyFragment.kt @@ -1,23 +1,29 @@ -package com.hippo.ehviewer.ui.fragment; +package com.hippo.ehviewer.ui.fragment -import android.os.Bundle; - -import androidx.annotation.Nullable; - -import com.hippo.ehviewer.R; +import android.os.Bundle +import androidx.preference.SwitchPreferenceCompat +import com.hippo.ehviewer.R +import com.hippo.ehviewer.Settings +import com.hippo.ehviewer.ui.scene.SecurityScene.Companion.isAuthenticationSupported /** * Created by Mo10 on 2018/2/10. */ - -public class PrivacyFragment extends BasePreferenceFragment { - @Override - public void onCreatePreferencesFix(@Nullable Bundle savedInstanceState, String rootKey) { - addPreferencesFromResource(R.xml.privacy_settings); +class PrivacyFragment : BasePreferenceFragment() { + override fun onCreatePreferencesFix(savedInstanceState: Bundle?, rootKey: String?) { + addPreferencesFromResource(R.xml.privacy_settings) } - @Override - public int getFragmentTitle() { - return R.string.settings_privacy; + override fun onStart() { + super.onStart() + if (!isAuthenticationSupported(requireContext())) { + Settings.putSecurity(false) + findPreference("require_unlock")?.isEnabled = false + findPreference("require_unlock")?.isChecked = false + } } -} + + override fun getFragmentTitle(): Int { + return R.string.settings_privacy + } +} \ No newline at end of file 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 19b796144..7a3e1fbe3 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 @@ -15,6 +15,7 @@ */ package com.hippo.ehviewer.ui.scene +import android.content.Context import android.os.Bundle import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators.DEVICE_CREDENTIAL @@ -32,18 +33,12 @@ class SecurityScene : SolidScene() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - if (isAuthenticationSupported()) + if (isAuthenticationSupported(requireContext())) startAuthentication(getString(R.string.settings_privacy_require_unlock)) else startSceneForCheckStep(CHECK_STEP_SECURITY, arguments) } - private fun isAuthenticationSupported(): Boolean { - val authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK or DEVICE_CREDENTIAL - return BiometricManager.from(requireContext()) - .canAuthenticate(authenticators) == BiometricManager.BIOMETRIC_SUCCESS - } - private fun startAuthentication( title: String, subtitle: String? = null, @@ -67,4 +62,12 @@ class SecurityScene : SolidScene() { startSceneForCheckStep(CHECK_STEP_SECURITY, arguments) } } + + companion object { + fun isAuthenticationSupported(context: Context): Boolean { + val authenticators = BiometricManager.Authenticators.BIOMETRIC_WEAK or DEVICE_CREDENTIAL + return BiometricManager.from(context) + .canAuthenticate(authenticators) == BiometricManager.BIOMETRIC_SUCCESS + } + } } \ No newline at end of file