mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Require authentication to toggle showing NSFW sources
This commit is contained in:
		@@ -1,5 +1,6 @@
 | 
			
		||||
package eu.kanade.tachiyomi.ui.setting
 | 
			
		||||
 | 
			
		||||
import androidx.fragment.app.FragmentActivity
 | 
			
		||||
import androidx.preference.PreferenceScreen
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
 | 
			
		||||
@@ -7,6 +8,7 @@ import eu.kanade.tachiyomi.util.preference.defaultValue
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.infoPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.onChange
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.preferenceCategory
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.requireAuthentication
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.summaryRes
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.switchPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.titleRes
 | 
			
		||||
@@ -51,6 +53,12 @@ class SettingsBrowseController : SettingsController() {
 | 
			
		||||
                titleRes = R.string.pref_show_nsfw_source
 | 
			
		||||
                summaryRes = R.string.requires_app_restart
 | 
			
		||||
                defaultValue = true
 | 
			
		||||
 | 
			
		||||
                requireAuthentication(
 | 
			
		||||
                    activity as? FragmentActivity,
 | 
			
		||||
                    activity!!.getString(R.string.pref_category_nsfw_content),
 | 
			
		||||
                    activity!!.getString(R.string.confirm_lock_change),
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            infoPreference(R.string.parental_controls_info)
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.data.preference.asImmediateFlow
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.defaultValue
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.intListPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.requireAuthentication
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.summaryRes
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.switchPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.titleRes
 | 
			
		||||
@@ -28,32 +29,14 @@ class SettingsSecurityController : SettingsController() {
 | 
			
		||||
                key = Keys.useAuthenticator
 | 
			
		||||
                titleRes = R.string.lock_with_biometrics
 | 
			
		||||
                defaultValue = false
 | 
			
		||||
                onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
 | 
			
		||||
                    (activity as? FragmentActivity)?.startAuthentication(
 | 
			
		||||
                        activity!!.getString(R.string.lock_with_biometrics),
 | 
			
		||||
                        activity!!.getString(R.string.confirm_lock_change),
 | 
			
		||||
                        callback = object : AuthenticatorUtil.AuthenticationCallback() {
 | 
			
		||||
                            override fun onAuthenticationSucceeded(
 | 
			
		||||
                                activity: FragmentActivity?,
 | 
			
		||||
                                result: BiometricPrompt.AuthenticationResult
 | 
			
		||||
                            ) {
 | 
			
		||||
                                super.onAuthenticationSucceeded(activity, result)
 | 
			
		||||
                                isChecked = newValue as Boolean
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            override fun onAuthenticationError(
 | 
			
		||||
                                activity: FragmentActivity?,
 | 
			
		||||
                                errorCode: Int,
 | 
			
		||||
                                errString: CharSequence
 | 
			
		||||
                            ) {
 | 
			
		||||
                                super.onAuthenticationError(activity, errorCode, errString)
 | 
			
		||||
                                activity?.toast(errString.toString())
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    )
 | 
			
		||||
                    false
 | 
			
		||||
                }
 | 
			
		||||
                requireAuthentication(
 | 
			
		||||
                    activity as? FragmentActivity,
 | 
			
		||||
                    activity!!.getString(R.string.lock_with_biometrics),
 | 
			
		||||
                    activity!!.getString(R.string.confirm_lock_change),
 | 
			
		||||
                )
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            intListPreference {
 | 
			
		||||
                key = Keys.lockAppAfter
 | 
			
		||||
                titleRes = R.string.lock_when_idle
 | 
			
		||||
@@ -107,6 +90,7 @@ class SettingsSecurityController : SettingsController() {
 | 
			
		||||
            summaryRes = R.string.secure_screen_summary
 | 
			
		||||
            defaultValue = false
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        switchPreference {
 | 
			
		||||
            key = Keys.hideNotificationContent
 | 
			
		||||
            titleRes = R.string.hide_notification_content
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,8 @@ package eu.kanade.tachiyomi.util.preference
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.StringRes
 | 
			
		||||
import androidx.appcompat.content.res.AppCompatResources
 | 
			
		||||
import androidx.biometric.BiometricPrompt
 | 
			
		||||
import androidx.fragment.app.FragmentActivity
 | 
			
		||||
import androidx.preference.CheckBoxPreference
 | 
			
		||||
import androidx.preference.DialogPreference
 | 
			
		||||
import androidx.preference.EditTextPreference
 | 
			
		||||
@@ -14,7 +16,11 @@ import androidx.preference.PreferenceManager
 | 
			
		||||
import androidx.preference.PreferenceScreen
 | 
			
		||||
import androidx.preference.SwitchPreferenceCompat
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
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.getResourceColor
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.toast
 | 
			
		||||
import eu.kanade.tachiyomi.widget.preference.AdaptiveTitlePreferenceCategory
 | 
			
		||||
import eu.kanade.tachiyomi.widget.preference.IntListPreference
 | 
			
		||||
import eu.kanade.tachiyomi.widget.preference.SwitchPreferenceCategory
 | 
			
		||||
@@ -125,6 +131,37 @@ inline fun Preference.onChange(crossinline block: (Any?) -> Boolean) {
 | 
			
		||||
    setOnPreferenceChangeListener { _, newValue -> block(newValue) }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
inline fun SwitchPreferenceCompat.requireAuthentication(activity: FragmentActivity?, title: String, subtitle: String?) {
 | 
			
		||||
    onPreferenceChangeListener = Preference.OnPreferenceChangeListener { _, newValue ->
 | 
			
		||||
        if (context.isAuthenticationSupported()) {
 | 
			
		||||
            activity?.startAuthentication(
 | 
			
		||||
                title,
 | 
			
		||||
                subtitle,
 | 
			
		||||
                callback = object : AuthenticatorUtil.AuthenticationCallback() {
 | 
			
		||||
                    override fun onAuthenticationSucceeded(
 | 
			
		||||
                        activity: FragmentActivity?,
 | 
			
		||||
                        result: BiometricPrompt.AuthenticationResult
 | 
			
		||||
                    ) {
 | 
			
		||||
                        super.onAuthenticationSucceeded(activity, result)
 | 
			
		||||
                        isChecked = newValue as Boolean
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    override fun onAuthenticationError(
 | 
			
		||||
                        activity: FragmentActivity?,
 | 
			
		||||
                        errorCode: Int,
 | 
			
		||||
                        errString: CharSequence
 | 
			
		||||
                    ) {
 | 
			
		||||
                        super.onAuthenticationError(activity, errorCode, errString)
 | 
			
		||||
                        activity?.toast(errString.toString())
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        false
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var Preference.defaultValue: Any?
 | 
			
		||||
    get() = null // set only
 | 
			
		||||
    set(value) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user