Split security preferences from PrefrencesHelper (#8030)

This commit is contained in:
Andreas
2022-09-18 19:07:48 +02:00
committed by GitHub
parent 877ae041a4
commit b668364afb
13 changed files with 70 additions and 53 deletions

View File

@@ -5,7 +5,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.security.UnlockActivity
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
@@ -24,7 +24,7 @@ interface SecureActivityDelegate {
companion object {
fun onApplicationCreated() {
val lockDelay = Injekt.get<PreferencesHelper>().lockAppAfter().get()
val lockDelay = Injekt.get<SecurityPreferences>().lockAppAfter().get()
if (lockDelay == 0) {
// Restore always active app lock
// Delayed lock will be restored later on activity resume
@@ -33,7 +33,7 @@ interface SecureActivityDelegate {
}
fun onApplicationStopped() {
val preferences = Injekt.get<PreferencesHelper>()
val preferences = Injekt.get<SecurityPreferences>()
if (!preferences.useAuthenticator().get()) return
if (lockState != LockState.ACTIVE) {
preferences.lastAppClosed().set(Date().time)
@@ -49,7 +49,7 @@ interface SecureActivityDelegate {
fun unlock() {
lockState = LockState.INACTIVE
Injekt.get<PreferencesHelper>().lastAppClosed().delete()
Injekt.get<SecurityPreferences>().lastAppClosed().delete()
}
}
}
@@ -67,6 +67,7 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser
private lateinit var activity: AppCompatActivity
private val preferences: PreferencesHelper by injectLazy()
private val securityPreferences: SecurityPreferences by injectLazy()
override fun registerSecureActivity(activity: AppCompatActivity) {
this.activity = activity
@@ -82,31 +83,31 @@ class SecureActivityDelegateImpl : SecureActivityDelegate, DefaultLifecycleObser
}
private fun setSecureScreen() {
val secureScreenFlow = preferences.secureScreen().changes()
val secureScreenFlow = securityPreferences.secureScreen().changes()
val incognitoModeFlow = preferences.incognitoMode().changes()
combine(secureScreenFlow, incognitoModeFlow) { secureScreen, incognitoMode ->
secureScreen == PreferenceValues.SecureScreenMode.ALWAYS ||
secureScreen == PreferenceValues.SecureScreenMode.INCOGNITO && incognitoMode
secureScreen == SecurityPreferences.SecureScreenMode.ALWAYS ||
secureScreen == SecurityPreferences.SecureScreenMode.INCOGNITO && incognitoMode
}
.onEach { activity.window.setSecureScreen(it) }
.launchIn(activity.lifecycleScope)
}
private fun setAppLock() {
if (!preferences.useAuthenticator().get()) return
if (!securityPreferences.useAuthenticator().get()) return
if (activity.isAuthenticationSupported()) {
updatePendingLockStatus()
if (!isAppLocked()) return
activity.startActivity(Intent(activity, UnlockActivity::class.java))
activity.overridePendingTransition(0, 0)
} else {
preferences.useAuthenticator().set(false)
securityPreferences.useAuthenticator().set(false)
}
}
private fun updatePendingLockStatus() {
val lastClosedPref = preferences.lastAppClosed()
val lockDelay = 60000 * preferences.lockAppAfter().get()
val lastClosedPref = securityPreferences.lastAppClosed()
val lockDelay = 60000 * securityPreferences.lockAppAfter().get()
if (lastClosedPref.isSet() && lockDelay > 0) {
// Restore pending status in case app was killed
lockState = LockState.PENDING

View File

@@ -116,6 +116,7 @@ class MainActivity : BaseActivity() {
preferences = preferences,
networkPreferences = Injekt.get(),
sourcePreferences = sourcePreferences,
securityPreferences = Injekt.get(),
)
} else {
false

View File

@@ -5,9 +5,8 @@ import androidx.fragment.app.FragmentActivity
import androidx.preference.Preference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.util.preference.bindTo
import eu.kanade.tachiyomi.util.preference.defaultValue
import eu.kanade.tachiyomi.util.preference.entriesRes
import eu.kanade.tachiyomi.util.preference.infoPreference
import eu.kanade.tachiyomi.util.preference.intListPreference
@@ -19,16 +18,18 @@ import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.startAuthentication
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
import uy.kohesive.injekt.injectLazy
class SettingsSecurityController : SettingsController() {
private val securityPreferences: SecurityPreferences by injectLazy()
override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply {
titleRes = R.string.pref_category_security
if (context.isAuthenticationSupported()) {
switchPreference {
bindTo(preferences.useAuthenticator())
bindTo(securityPreferences.useAuthenticator())
titleRes = R.string.lock_with_biometrics
requireAuthentication(
@@ -39,7 +40,7 @@ class SettingsSecurityController : SettingsController() {
}
intListPreference {
bindTo(preferences.lockAppAfter())
bindTo(securityPreferences.lockAppAfter())
titleRes = R.string.lock_when_idle
val values = arrayOf("0", "1", "2", "5", "10", "-1")
entries = values.mapNotNull {
@@ -79,22 +80,21 @@ class SettingsSecurityController : SettingsController() {
false
}
visibleIf(preferences.useAuthenticator()) { it }
visibleIf(securityPreferences.useAuthenticator()) { it }
}
}
switchPreference {
key = Keys.hideNotificationContent
bindTo(securityPreferences.hideNotificationContent())
titleRes = R.string.hide_notification_content
defaultValue = false
}
listPreference {
bindTo(preferences.secureScreen())
bindTo(securityPreferences.secureScreen())
titleRes = R.string.secure_screen
summary = "%s"
entriesRes = PreferenceValues.SecureScreenMode.values().map { it.titleResId }.toTypedArray()
entryValues = PreferenceValues.SecureScreenMode.values().map { it.name }.toTypedArray()
entriesRes = SecurityPreferences.SecureScreenMode.values().map { it.titleResId }.toTypedArray()
entryValues = SecurityPreferences.SecureScreenMode.values().map { it.name }.toTypedArray()
}
infoPreference(R.string.secure_screen_summary)