From c12eb3d643c8a2577529e0dadb57a3496e11524f Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Wed, 13 Aug 2025 19:03:15 +0200 Subject: [PATCH] fix: error code 28 #2105 --- .../keepass/biometric/DeviceUnlockFragment.kt | 35 ++++++++----------- .../viewmodels/DeviceUnlockViewModel.kt | 17 ++------- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt b/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt index 5814623f3..e0faaffd7 100644 --- a/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt +++ b/app/src/main/java/com/kunzisoft/keepass/biometric/DeviceUnlockFragment.kt @@ -133,14 +133,9 @@ class DeviceUnlockFragment: Fragment() { viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) { mDeviceUnlockViewModel.uiState.collect { uiState -> // Change mode - toggleDeviceCredentialMode( - uiState.newDeviceUnlockMode, - uiState.deviceUnlockModeChange - ) + toggleDeviceCredentialMode(uiState.newDeviceUnlockMode) // Prompt - manageDeviceCredentialPrompt( - uiState.cryptoPromptState - ) + manageDeviceCredentialPrompt(uiState.cryptoPromptState) // Advanced menu mAllowAdvancedUnlockMenu = uiState.allowAdvancedUnlockMenu activity?.invalidateOptionsMenu() @@ -164,21 +159,19 @@ class DeviceUnlockFragment: Fragment() { mBiometricPrompt?.cancelAuthentication() } - private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode, modeChanged: Boolean) { - if (modeChanged) { - try { - when (deviceUnlockMode) { - DeviceUnlockMode.BIOMETRIC_UNAVAILABLE -> setNotAvailableMode() - DeviceUnlockMode.BIOMETRIC_SECURITY_UPDATE_REQUIRED -> setSecurityUpdateRequiredMode() - DeviceUnlockMode.DEVICE_CREDENTIAL_OR_BIOMETRIC_NOT_CONFIGURED -> setNotConfiguredMode() - DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE -> setKeyManagerNotAvailableMode() - DeviceUnlockMode.WAIT_CREDENTIAL -> setWaitCredentialMode() - DeviceUnlockMode.STORE_CREDENTIAL -> setStoreCredentialMode() - DeviceUnlockMode.EXTRACT_CREDENTIAL -> setExtractCredentialMode() - } - } catch (e: Exception) { - mDeviceUnlockViewModel.setException(e) + private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode) { + try { + when (deviceUnlockMode) { + DeviceUnlockMode.BIOMETRIC_UNAVAILABLE -> setNotAvailableMode() + DeviceUnlockMode.BIOMETRIC_SECURITY_UPDATE_REQUIRED -> setSecurityUpdateRequiredMode() + DeviceUnlockMode.DEVICE_CREDENTIAL_OR_BIOMETRIC_NOT_CONFIGURED -> setNotConfiguredMode() + DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE -> setKeyManagerNotAvailableMode() + DeviceUnlockMode.WAIT_CREDENTIAL -> setWaitCredentialMode() + DeviceUnlockMode.STORE_CREDENTIAL -> setStoreCredentialMode() + DeviceUnlockMode.EXTRACT_CREDENTIAL -> setExtractCredentialMode() } + } catch (e: Exception) { + mDeviceUnlockViewModel.setException(e) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt index a428e13a1..e5694aab5 100644 --- a/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt +++ b/app/src/main/java/com/kunzisoft/keepass/viewmodels/DeviceUnlockViewModel.kt @@ -93,26 +93,16 @@ class DeviceUnlockViewModel(application: Application): AndroidViewModel(applicat checkUnlockAvailability() } - private fun isModeChanging(newMode: DeviceUnlockMode): Boolean { - return deviceUnlockMode != newMode - } - @RequiresApi(Build.VERSION_CODES.M) fun selectMode(containsCipherDatabase: Boolean) { try { if (isConditionToStoreCredentialVerified) { - if (deviceUnlockManager == null - || isModeChanging(DeviceUnlockMode.STORE_CREDENTIAL)) { - deviceUnlockManager = DeviceUnlockManager(getApplication()) - } + deviceUnlockManager = DeviceUnlockManager(getApplication()) // listen for encryption changeMode(DeviceUnlockMode.STORE_CREDENTIAL) initEncryptData() } else if (containsCipherDatabase) { - if (deviceUnlockManager == null - || isModeChanging(DeviceUnlockMode.EXTRACT_CREDENTIAL)) { - deviceUnlockManager = DeviceUnlockManager(getApplication()) - } + deviceUnlockManager = DeviceUnlockManager(getApplication()) // biometric available but no stored password found yet for this DB // listen for decryption changeMode(DeviceUnlockMode.EXTRACT_CREDENTIAL) @@ -377,13 +367,11 @@ class DeviceUnlockViewModel(application: Application): AndroidViewModel(applicat @RequiresApi(Build.VERSION_CODES.M) private fun changeMode(deviceUnlockMode: DeviceUnlockMode) { - val modeChanged = this.deviceUnlockMode == deviceUnlockMode this.deviceUnlockMode = deviceUnlockMode cipherDatabaseAction.containsCipherDatabase(databaseUri) { containsCipher -> _uiState.update { currentState -> currentState.copy( newDeviceUnlockMode = deviceUnlockMode, - deviceUnlockModeChange = modeChanged, allowAdvancedUnlockMenu = containsCipher && deviceUnlockMode != DeviceUnlockMode.BIOMETRIC_UNAVAILABLE && deviceUnlockMode != DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE @@ -444,7 +432,6 @@ enum class DeviceUnlockPromptMode { data class DeviceUnlockState( val newDeviceUnlockMode: DeviceUnlockMode = DeviceUnlockMode.BIOMETRIC_UNAVAILABLE, - val deviceUnlockModeChange: Boolean = true, val allowAdvancedUnlockMenu: Boolean = false, val credentialRequiredCipher: Cipher? = null, val cipherEncryptDatabase: CipherEncryptDatabase? = null,