refactor: Split security preferences from PreferencesHelper

This commit is contained in:
Ahmad Ansori Palembani 2024-06-17 14:19:53 +07:00
parent 48d542f5a6
commit b43fccacd7
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
7 changed files with 26 additions and 15 deletions

View file

@ -31,20 +31,19 @@ import eu.kanade.tachiyomi.appwidget.components.LockedWidget
import eu.kanade.tachiyomi.appwidget.components.UpdatesWidget import eu.kanade.tachiyomi.appwidget.components.UpdatesWidget
import eu.kanade.tachiyomi.appwidget.util.appWidgetBackgroundRadius import eu.kanade.tachiyomi.appwidget.util.appWidgetBackgroundRadius
import eu.kanade.tachiyomi.appwidget.util.calculateRowAndColumnCount import eu.kanade.tachiyomi.appwidget.util.calculateRowAndColumnCount
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.recents.RecentsPresenter import eu.kanade.tachiyomi.ui.recents.RecentsPresenter
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.launchIO import eu.kanade.tachiyomi.util.system.launchIO
import kotlinx.coroutines.MainScope import kotlinx.coroutines.MainScope
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.Calendar import java.util.*
import java.util.Date
import kotlin.math.min import kotlin.math.min
class UpdatesGridGlanceWidget : GlanceAppWidget() { class UpdatesGridGlanceWidget : GlanceAppWidget() {
private val app: Application by injectLazy() private val app: Application by injectLazy()
private val preferences: PreferencesHelper by injectLazy() private val preferences: SecurityPreferences by injectLazy()
private val coroutineScope = MainScope() private val coroutineScope = MainScope()

View file

@ -169,8 +169,6 @@ object PreferenceKeys {
const val languageBadge = "display_language_badge" const val languageBadge = "display_language_badge"
const val useBiometrics = "use_biometrics"
const val lockAfter = "lock_after" const val lockAfter = "lock_after"
const val lastUnlock = "last_unlock" const val lastUnlock = "last_unlock"

View file

@ -294,8 +294,6 @@ class PreferencesHelper(val context: Context, val preferenceStore: PreferenceSto
fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false) fun skipDupe() = preferenceStore.getBoolean("skip_dupe", false)
fun useBiometrics() = preferenceStore.getBoolean(Keys.useBiometrics, false)
fun lockAfter() = preferenceStore.getInt(Keys.lockAfter, 0) fun lockAfter() = preferenceStore.getInt(Keys.lockAfter, 0)
fun lastUnlock() = preferenceStore.getLong(Keys.lastUnlock, 0) fun lastUnlock() = preferenceStore.getLong(Keys.lastUnlock, 0)

View file

@ -6,16 +6,18 @@ import android.os.Build
import android.view.Window import android.view.Window
import android.view.WindowManager import android.view.WindowManager
import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.data.preference.PreferenceValues import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.ui.main.SearchActivity import eu.kanade.tachiyomi.ui.main.SearchActivity
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil import eu.kanade.tachiyomi.util.system.AuthenticatorUtil
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.Date import java.util.*
object SecureActivityDelegate { object SecureActivityDelegate {
private val preferences by injectLazy<PreferencesHelper>() private val preferences: PreferencesHelper by injectLazy()
private val securityPreferences: SecurityPreferences by injectLazy()
var locked: Boolean = true var locked: Boolean = true
@ -40,7 +42,7 @@ object SecureActivityDelegate {
@Suppress("DEPRECATION") @Suppress("DEPRECATION")
fun promptLockIfNeeded(activity: Activity?, requireSuccess: Boolean = false) { fun promptLockIfNeeded(activity: Activity?, requireSuccess: Boolean = false) {
if (activity == null || AuthenticatorUtil.isAuthenticating) return if (activity == null || AuthenticatorUtil.isAuthenticating) return
val lockApp = preferences.useBiometrics().get() val lockApp = securityPreferences.useBiometrics().get()
if (lockApp && BiometricManager.from(activity).canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL or BiometricManager.Authenticators.BIOMETRIC_WEAK) == BiometricManager.BIOMETRIC_SUCCESS) { if (lockApp && BiometricManager.from(activity).canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL or BiometricManager.Authenticators.BIOMETRIC_WEAK) == BiometricManager.BIOMETRIC_SUCCESS) {
if (isAppLocked()) { if (isAppLocked()) {
val intent = Intent(activity, BiometricActivity::class.java) val intent = Intent(activity, BiometricActivity::class.java)
@ -53,12 +55,12 @@ object SecureActivityDelegate {
} }
} }
} else if (lockApp) { } else if (lockApp) {
preferences.useBiometrics().set(false) securityPreferences.useBiometrics().set(false)
} }
} }
fun shouldBeLocked(): Boolean { fun shouldBeLocked(): Boolean {
val lockApp = preferences.useBiometrics().get() val lockApp = securityPreferences.useBiometrics().get()
if (lockApp && isAppLocked()) return true if (lockApp && isAppLocked()) return true
return false return false
} }

View file

@ -3,6 +3,7 @@ package eu.kanade.tachiyomi.ui.setting.controllers
import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentActivity
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.PreferenceValues import eu.kanade.tachiyomi.data.preference.PreferenceValues
import eu.kanade.tachiyomi.data.preference.changesIn import eu.kanade.tachiyomi.data.preference.changesIn
@ -18,14 +19,17 @@ import eu.kanade.tachiyomi.ui.setting.requireAuthentication
import eu.kanade.tachiyomi.ui.setting.switchPreference import eu.kanade.tachiyomi.ui.setting.switchPreference
import eu.kanade.tachiyomi.ui.setting.titleRes import eu.kanade.tachiyomi.ui.setting.titleRes
import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported
import uy.kohesive.injekt.injectLazy
class SettingsSecurityController : SettingsLegacyController() { class SettingsSecurityController : SettingsLegacyController() {
private val securityPreferences: SecurityPreferences by injectLazy()
override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply {
titleRes = R.string.security titleRes = R.string.security
if (context.isAuthenticationSupported()) { if (context.isAuthenticationSupported()) {
switchPreference { switchPreference {
key = PreferenceKeys.useBiometrics bindTo(securityPreferences.useBiometrics())
titleRes = R.string.lock_with_biometrics titleRes = R.string.lock_with_biometrics
defaultValue = false defaultValue = false
@ -53,7 +57,7 @@ class SettingsSecurityController : SettingsLegacyController() {
entryValues = values entryValues = values
defaultValue = 0 defaultValue = 0
preferences.useBiometrics().changesIn(viewScope) { isVisible = it } securityPreferences.useBiometrics().changesIn(viewScope) { isVisible = it }
} }
} }

View file

@ -3,6 +3,7 @@ package yokai.core.di
import android.app.Application import android.app.Application
import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore import eu.kanade.tachiyomi.core.preference.AndroidPreferenceStore
import eu.kanade.tachiyomi.core.preference.PreferenceStore import eu.kanade.tachiyomi.core.preference.PreferenceStore
import eu.kanade.tachiyomi.core.security.SecurityPreferences
import eu.kanade.tachiyomi.core.storage.AndroidStorageFolderProvider import eu.kanade.tachiyomi.core.storage.AndroidStorageFolderProvider
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.track.TrackPreferences import eu.kanade.tachiyomi.data.track.TrackPreferences
@ -39,6 +40,8 @@ class PreferenceModule(val application: Application) : InjektModule {
addSingletonFactory { NetworkPreferences(get()) } addSingletonFactory { NetworkPreferences(get()) }
addSingletonFactory { SecurityPreferences(get()) }
addSingletonFactory { addSingletonFactory {
PreferencesHelper( PreferencesHelper(
context = application, context = application,

View file

@ -0,0 +1,7 @@
package eu.kanade.tachiyomi.core.security
import eu.kanade.tachiyomi.core.preference.PreferenceStore
class SecurityPreferences(private val preferenceStore: PreferenceStore) {
fun useBiometrics() = preferenceStore.getBoolean("use_biometrics", false)
}