mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
fix: error code 28 #2105
This commit is contained in:
@@ -133,14 +133,9 @@ class DeviceUnlockFragment: Fragment() {
|
|||||||
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
mDeviceUnlockViewModel.uiState.collect { uiState ->
|
mDeviceUnlockViewModel.uiState.collect { uiState ->
|
||||||
// Change mode
|
// Change mode
|
||||||
toggleDeviceCredentialMode(
|
toggleDeviceCredentialMode(uiState.newDeviceUnlockMode)
|
||||||
uiState.newDeviceUnlockMode,
|
|
||||||
uiState.deviceUnlockModeChange
|
|
||||||
)
|
|
||||||
// Prompt
|
// Prompt
|
||||||
manageDeviceCredentialPrompt(
|
manageDeviceCredentialPrompt(uiState.cryptoPromptState)
|
||||||
uiState.cryptoPromptState
|
|
||||||
)
|
|
||||||
// Advanced menu
|
// Advanced menu
|
||||||
mAllowAdvancedUnlockMenu = uiState.allowAdvancedUnlockMenu
|
mAllowAdvancedUnlockMenu = uiState.allowAdvancedUnlockMenu
|
||||||
activity?.invalidateOptionsMenu()
|
activity?.invalidateOptionsMenu()
|
||||||
@@ -164,21 +159,19 @@ class DeviceUnlockFragment: Fragment() {
|
|||||||
mBiometricPrompt?.cancelAuthentication()
|
mBiometricPrompt?.cancelAuthentication()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode, modeChanged: Boolean) {
|
private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode) {
|
||||||
if (modeChanged) {
|
try {
|
||||||
try {
|
when (deviceUnlockMode) {
|
||||||
when (deviceUnlockMode) {
|
DeviceUnlockMode.BIOMETRIC_UNAVAILABLE -> setNotAvailableMode()
|
||||||
DeviceUnlockMode.BIOMETRIC_UNAVAILABLE -> setNotAvailableMode()
|
DeviceUnlockMode.BIOMETRIC_SECURITY_UPDATE_REQUIRED -> setSecurityUpdateRequiredMode()
|
||||||
DeviceUnlockMode.BIOMETRIC_SECURITY_UPDATE_REQUIRED -> setSecurityUpdateRequiredMode()
|
DeviceUnlockMode.DEVICE_CREDENTIAL_OR_BIOMETRIC_NOT_CONFIGURED -> setNotConfiguredMode()
|
||||||
DeviceUnlockMode.DEVICE_CREDENTIAL_OR_BIOMETRIC_NOT_CONFIGURED -> setNotConfiguredMode()
|
DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE -> setKeyManagerNotAvailableMode()
|
||||||
DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE -> setKeyManagerNotAvailableMode()
|
DeviceUnlockMode.WAIT_CREDENTIAL -> setWaitCredentialMode()
|
||||||
DeviceUnlockMode.WAIT_CREDENTIAL -> setWaitCredentialMode()
|
DeviceUnlockMode.STORE_CREDENTIAL -> setStoreCredentialMode()
|
||||||
DeviceUnlockMode.STORE_CREDENTIAL -> setStoreCredentialMode()
|
DeviceUnlockMode.EXTRACT_CREDENTIAL -> setExtractCredentialMode()
|
||||||
DeviceUnlockMode.EXTRACT_CREDENTIAL -> setExtractCredentialMode()
|
|
||||||
}
|
|
||||||
} catch (e: Exception) {
|
|
||||||
mDeviceUnlockViewModel.setException(e)
|
|
||||||
}
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
mDeviceUnlockViewModel.setException(e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,26 +93,16 @@ class DeviceUnlockViewModel(application: Application): AndroidViewModel(applicat
|
|||||||
checkUnlockAvailability()
|
checkUnlockAvailability()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isModeChanging(newMode: DeviceUnlockMode): Boolean {
|
|
||||||
return deviceUnlockMode != newMode
|
|
||||||
}
|
|
||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
fun selectMode(containsCipherDatabase: Boolean) {
|
fun selectMode(containsCipherDatabase: Boolean) {
|
||||||
try {
|
try {
|
||||||
if (isConditionToStoreCredentialVerified) {
|
if (isConditionToStoreCredentialVerified) {
|
||||||
if (deviceUnlockManager == null
|
deviceUnlockManager = DeviceUnlockManager(getApplication())
|
||||||
|| isModeChanging(DeviceUnlockMode.STORE_CREDENTIAL)) {
|
|
||||||
deviceUnlockManager = DeviceUnlockManager(getApplication())
|
|
||||||
}
|
|
||||||
// listen for encryption
|
// listen for encryption
|
||||||
changeMode(DeviceUnlockMode.STORE_CREDENTIAL)
|
changeMode(DeviceUnlockMode.STORE_CREDENTIAL)
|
||||||
initEncryptData()
|
initEncryptData()
|
||||||
} else if (containsCipherDatabase) {
|
} else if (containsCipherDatabase) {
|
||||||
if (deviceUnlockManager == null
|
deviceUnlockManager = DeviceUnlockManager(getApplication())
|
||||||
|| isModeChanging(DeviceUnlockMode.EXTRACT_CREDENTIAL)) {
|
|
||||||
deviceUnlockManager = DeviceUnlockManager(getApplication())
|
|
||||||
}
|
|
||||||
// biometric available but no stored password found yet for this DB
|
// biometric available but no stored password found yet for this DB
|
||||||
// listen for decryption
|
// listen for decryption
|
||||||
changeMode(DeviceUnlockMode.EXTRACT_CREDENTIAL)
|
changeMode(DeviceUnlockMode.EXTRACT_CREDENTIAL)
|
||||||
@@ -377,13 +367,11 @@ class DeviceUnlockViewModel(application: Application): AndroidViewModel(applicat
|
|||||||
|
|
||||||
@RequiresApi(Build.VERSION_CODES.M)
|
@RequiresApi(Build.VERSION_CODES.M)
|
||||||
private fun changeMode(deviceUnlockMode: DeviceUnlockMode) {
|
private fun changeMode(deviceUnlockMode: DeviceUnlockMode) {
|
||||||
val modeChanged = this.deviceUnlockMode == deviceUnlockMode
|
|
||||||
this.deviceUnlockMode = deviceUnlockMode
|
this.deviceUnlockMode = deviceUnlockMode
|
||||||
cipherDatabaseAction.containsCipherDatabase(databaseUri) { containsCipher ->
|
cipherDatabaseAction.containsCipherDatabase(databaseUri) { containsCipher ->
|
||||||
_uiState.update { currentState ->
|
_uiState.update { currentState ->
|
||||||
currentState.copy(
|
currentState.copy(
|
||||||
newDeviceUnlockMode = deviceUnlockMode,
|
newDeviceUnlockMode = deviceUnlockMode,
|
||||||
deviceUnlockModeChange = modeChanged,
|
|
||||||
allowAdvancedUnlockMenu = containsCipher
|
allowAdvancedUnlockMenu = containsCipher
|
||||||
&& deviceUnlockMode != DeviceUnlockMode.BIOMETRIC_UNAVAILABLE
|
&& deviceUnlockMode != DeviceUnlockMode.BIOMETRIC_UNAVAILABLE
|
||||||
&& deviceUnlockMode != DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE
|
&& deviceUnlockMode != DeviceUnlockMode.KEY_MANAGER_UNAVAILABLE
|
||||||
@@ -444,7 +432,6 @@ enum class DeviceUnlockPromptMode {
|
|||||||
|
|
||||||
data class DeviceUnlockState(
|
data class DeviceUnlockState(
|
||||||
val newDeviceUnlockMode: DeviceUnlockMode = DeviceUnlockMode.BIOMETRIC_UNAVAILABLE,
|
val newDeviceUnlockMode: DeviceUnlockMode = DeviceUnlockMode.BIOMETRIC_UNAVAILABLE,
|
||||||
val deviceUnlockModeChange: Boolean = true,
|
|
||||||
val allowAdvancedUnlockMenu: Boolean = false,
|
val allowAdvancedUnlockMenu: Boolean = false,
|
||||||
val credentialRequiredCipher: Cipher? = null,
|
val credentialRequiredCipher: Cipher? = null,
|
||||||
val cipherEncryptDatabase: CipherEncryptDatabase? = null,
|
val cipherEncryptDatabase: CipherEncryptDatabase? = null,
|
||||||
|
|||||||
Reference in New Issue
Block a user