package eu.kanade.presentation.more.settings.screen import androidx.annotation.StringRes import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource import androidx.fragment.app.FragmentActivity import eu.kanade.presentation.more.settings.Preference import eu.kanade.presentation.util.collectAsState import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.core.security.SecurityPreferences import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.authenticate import eu.kanade.tachiyomi.util.system.AuthenticatorUtil.isAuthenticationSupported import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.get class SettingsSecurityScreen : SearchableSettings { @ReadOnlyComposable @Composable @StringRes override fun getTitleRes() = R.string.pref_category_security @Composable override fun getPreferences(): List { val context = LocalContext.current val securityPreferences = remember { Injekt.get() } val authSupported = remember { context.isAuthenticationSupported() } val useAuthPref = securityPreferences.useAuthenticator() val useAuth by useAuthPref.collectAsState() return listOf( Preference.PreferenceItem.SwitchPreference( pref = useAuthPref, title = stringResource(R.string.lock_with_biometrics), enabled = authSupported, onValueChanged = { (context as FragmentActivity).authenticate( title = context.getString(R.string.lock_with_biometrics), ) }, ), Preference.PreferenceItem.ListPreference( pref = securityPreferences.lockAppAfter(), title = stringResource(R.string.lock_when_idle), enabled = authSupported && useAuth, entries = LockAfterValues .associateWith { when (it) { -1 -> stringResource(R.string.lock_never) 0 -> stringResource(R.string.lock_always) else -> pluralStringResource(id = R.plurals.lock_after_mins, count = it, it) } }, onValueChanged = { (context as FragmentActivity).authenticate( title = context.getString(R.string.lock_when_idle), ) }, ), Preference.PreferenceItem.SwitchPreference( pref = securityPreferences.hideNotificationContent(), title = stringResource(R.string.hide_notification_content), ), Preference.PreferenceItem.ListPreference( pref = securityPreferences.secureScreen(), title = stringResource(R.string.secure_screen), entries = SecurityPreferences.SecureScreenMode.values() .associateWith { stringResource(it.titleResId) }, ), Preference.PreferenceItem.InfoPreference(stringResource(R.string.secure_screen_summary)), ) } } private val LockAfterValues = listOf( 0, // Always 1, 2, 5, 10, -1, // Never )