fix: error code 28 #2105

This commit is contained in:
J-Jamet
2025-08-13 19:03:15 +02:00
parent da0f02e536
commit c12eb3d643
2 changed files with 16 additions and 36 deletions

View File

@@ -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,8 +159,7 @@ class DeviceUnlockFragment: Fragment() {
mBiometricPrompt?.cancelAuthentication()
}
private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode, modeChanged: Boolean) {
if (modeChanged) {
private fun toggleDeviceCredentialMode(deviceUnlockMode: DeviceUnlockMode) {
try {
when (deviceUnlockMode) {
DeviceUnlockMode.BIOMETRIC_UNAVAILABLE -> setNotAvailableMode()
@@ -180,7 +174,6 @@ class DeviceUnlockFragment: Fragment() {
mDeviceUnlockViewModel.setException(e)
}
}
}
private fun manageDeviceCredentialPrompt(
state: DeviceUnlockPromptMode

View File

@@ -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())
}
// listen for encryption
changeMode(DeviceUnlockMode.STORE_CREDENTIAL)
initEncryptData()
} else if (containsCipherDatabase) {
if (deviceUnlockManager == null
|| isModeChanging(DeviceUnlockMode.EXTRACT_CREDENTIAL)) {
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,