diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt index 525725ab6..5d01cc367 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/prefs/AppSettings.kt @@ -27,6 +27,7 @@ import org.koitharu.kotatsu.explore.data.SourcesSortOrder import org.koitharu.kotatsu.list.domain.ListSortOrder import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.util.find +import org.koitharu.kotatsu.parsers.util.isNumeric import org.koitharu.kotatsu.parsers.util.mapNotNullToSet import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.reader.domain.ReaderColorFilter @@ -191,11 +192,13 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) { var appPassword: String? get() = prefs.getString(KEY_APP_PASSWORD, null) set(value) = prefs.edit { - if (value != null) putString(KEY_APP_PASSWORD, value) else remove( - KEY_APP_PASSWORD, - ) + if (value != null) putString(KEY_APP_PASSWORD, value) else remove(KEY_APP_PASSWORD) } + var isAppPasswordNumeric: Boolean + get() = prefs.getBoolean(KEY_APP_PASSWORD_NUMERIC, false) + set(value) = prefs.edit { putBoolean(KEY_APP_PASSWORD_NUMERIC, value) } + val isLoggingEnabled: Boolean get() = prefs.getBoolean(KEY_LOGGING_ENABLED, false) @@ -531,6 +534,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) { const val KEY_READER_MODE = "reader_mode" const val KEY_READER_MODE_DETECT = "reader_mode_detect" const val KEY_APP_PASSWORD = "app_password" + const val KEY_APP_PASSWORD_NUMERIC = "app_password_num" const val KEY_PROTECT_APP = "protect_app" const val KEY_PROTECT_APP_BIOMETRIC = "protect_app_bio" const val KEY_APP_VERSION = "app_version" diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt index ff6bf07bf..8ad250394 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectActivity.kt @@ -44,6 +44,12 @@ class ProtectActivity : viewBinding.buttonNext.setOnClickListener(this) viewBinding.buttonCancel.setOnClickListener(this) + viewBinding.editPassword.inputType = if (viewModel.isNumericPassword) { + EditorInfo.TYPE_CLASS_NUMBER or EditorInfo.TYPE_NUMBER_VARIATION_PASSWORD + } else { + EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_PASSWORD + } + viewModel.onError.observeEvent(this, this::onError) viewModel.isLoading.observe(this, this::onLoadingStateChanged) viewModel.onUnlockSuccess.observeEvent(this) { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt index 7f0d8f5b5..b9a407a4e 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/protect/ProtectViewModel.kt @@ -8,6 +8,7 @@ import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.ui.BaseViewModel import org.koitharu.kotatsu.core.util.ext.MutableEventFlow import org.koitharu.kotatsu.core.util.ext.call +import org.koitharu.kotatsu.parsers.util.isNumeric import org.koitharu.kotatsu.parsers.util.md5 import javax.inject.Inject @@ -26,6 +27,9 @@ class ProtectViewModel @Inject constructor( val isBiometricEnabled get() = settings.isBiometricProtectionEnabled + val isNumericPassword + get() = settings.isAppPasswordNumeric + fun tryUnlock(password: String) { if (job?.isActive == true) { return diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt index 73b5597b3..95180d359 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/protect/ProtectSetupViewModel.kt @@ -12,6 +12,7 @@ import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.ui.BaseViewModel import org.koitharu.kotatsu.core.util.ext.MutableEventFlow import org.koitharu.kotatsu.core.util.ext.call +import org.koitharu.kotatsu.parsers.util.isNumeric import org.koitharu.kotatsu.parsers.util.md5 import javax.inject.Inject @@ -39,6 +40,7 @@ class ProtectSetupViewModel @Inject constructor( } else { if (firstPassword.value == password) { settings.appPassword = password.md5() + settings.isAppPasswordNumeric = password.isNumeric() onPasswordSet.call(Unit) } else { onPasswordMismatch.call(Unit)