diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index 3530023d2..832fd3b03 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -110,6 +110,7 @@ public class EhApplication extends SceneApplication { private static final long DEBUG_PRINT_INTERVAL = 3000L; public static boolean locked = true; + public static long locked_last_leave_time = 0; private static EhApplication instance; diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.java b/app/src/main/java/com/hippo/ehviewer/Settings.java index f7f698a69..b1c900533 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.java +++ b/app/src/main/java/com/hippo/ehviewer/Settings.java @@ -90,6 +90,7 @@ public class Settings { ********************/ public static final String KEY_SAVE_PARSE_ERROR_BODY = "save_parse_error_body"; public static final String KEY_SECURITY = "require_unlock"; + public static final String KEY_SECURITY_DELAY = "require_unlock_delay"; public static final String DEFAULT_SECURITY = ""; public static final String KEY_ENABLE_FINGERPRINT = "enable_fingerprint"; public static final String KEY_READ_CACHE_SIZE = "read_cache_size"; @@ -1063,6 +1064,9 @@ public class Settings { public static void putSecurity(boolean value) { putBoolean(KEY_SECURITY, value); } + public static int getSecurityDelay() { + return getInt(KEY_SECURITY_DELAY, 0); + } public static boolean getEnableFingerprint() { return getBoolean(KEY_ENABLE_FINGERPRINT, true); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt index a15b3341c..f95c59201 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.kt @@ -32,6 +32,7 @@ import androidx.annotation.StyleRes import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import com.hippo.ehviewer.EhApplication +import com.hippo.ehviewer.EhApplication.locked_last_leave_time import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings import com.hippo.ehviewer.ui.SecurityActivity.Companion.isAuthenticationSupported @@ -100,7 +101,10 @@ abstract class EhActivity : AppCompatActivity() { } override fun onResume() { - if (Settings.getSecurity() && isAuthenticationSupported(this) && EhApplication.locked) { + val locked_resume_time = System.currentTimeMillis() / 1000 + val locked_delay_time = locked_resume_time - locked_last_leave_time + if (Settings.getSecurity() && locked_delay_time >= Settings.getSecurityDelay() * 60 + && isAuthenticationSupported(this) && EhApplication.locked ) { startActivity(Intent(this, SecurityActivity::class.java)) } super.onResume() @@ -114,6 +118,11 @@ abstract class EhActivity : AppCompatActivity() { } } + override fun onPause() { + super.onPause() + locked_last_leave_time = System.currentTimeMillis() / 1000 + } + private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { 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 418b6aed7..08e018f32 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 @@ -19,6 +19,7 @@ package com.hippo.ehviewer.ui.fragment import android.os.Bundle +import androidx.preference.SeekBarPreference import androidx.preference.SwitchPreferenceCompat import com.hippo.ehviewer.R import com.hippo.ehviewer.Settings @@ -28,20 +29,44 @@ import com.hippo.ehviewer.ui.SecurityActivity.Companion.isAuthenticationSupporte * Created by Mo10 on 2018/2/10. */ class PrivacyFragment : BasePreferenceFragment() { + private lateinit var requireUnlock: SwitchPreferenceCompat + private lateinit var unlockDelay: SeekBarPreference override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { addPreferencesFromResource(R.xml.privacy_settings) + requireUnlock = findPreference("require_unlock")!! + unlockDelay = findPreference("require_unlock_delay")!! + requireUnlock.setOnPreferenceChangeListener { _, newValue -> + unlockDelay.isEnabled = newValue as Boolean + setUnlockDelaySummary(unlockDelay.value) + true + } + unlockDelay.setOnPreferenceChangeListener { _, newValue -> + setUnlockDelaySummary(newValue as Int) + true + } } override fun onStart() { super.onStart() if (!isAuthenticationSupported(requireContext())) { Settings.putSecurity(false) - findPreference("require_unlock")?.isEnabled = false - findPreference("require_unlock")?.isChecked = false + requireUnlock.isEnabled = false + requireUnlock.isChecked = false + } else { + unlockDelay.isEnabled = requireUnlock.isChecked == true + setUnlockDelaySummary(unlockDelay.value) } } override fun getFragmentTitle(): Int { return R.string.settings_privacy } + + private fun setUnlockDelaySummary(value: Int) { + unlockDelay.summary = if (value == 0) { + getString(R.string.settings_privacy_require_unlock_delay_summary_immediately) + } else { + getString(R.string.settings_privacy_require_unlock_delay_summary, value.toString()) + } + } } \ No newline at end of file diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index bfe64516a..f2bbc1c0d 100755 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -761,6 +761,9 @@ 依赖库之版本 需要解锁 + 锁定延迟 + 离开应用并在 %s 分钟内返回时不需要解锁 + 无论何时回到应用均要求解锁 代理类型 屏蔽项类型 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 45070e242..dd2e9a562 100755 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -825,6 +825,9 @@ Library Version Require Unlock + Lock Delay + No unlock is required when leaving App and returning within %s minute(s) + Unlock is required whenever you return to this App Proxy Type Blocker Type diff --git a/app/src/main/res/xml/privacy_settings.xml b/app/src/main/res/xml/privacy_settings.xml index 52a29ff3d..746a473c9 100644 --- a/app/src/main/res/xml/privacy_settings.xml +++ b/app/src/main/res/xml/privacy_settings.xml @@ -24,6 +24,16 @@ android:title="@string/settings_privacy_require_unlock" app:iconSpaceReserved="false" /> + +