diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt index fd6bf10c8..77936f411 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryActivity.kt @@ -59,6 +59,7 @@ import com.kunzisoft.keepass.credentialprovider.SpecialMode import com.kunzisoft.keepass.credentialprovider.UserVerificationData import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.checkUserVerification import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.isUserVerificationNeeded +import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.requestUnprotectField import com.kunzisoft.keepass.credentialprovider.magikeyboard.MagikeyboardService import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.element.Attachment @@ -329,15 +330,11 @@ class EntryActivity : DatabaseLockActivity() { when (entryState) { is EntryViewModel.EntryState.Loading -> {} is EntryViewModel.EntryState.RequestUnprotectField -> { - val fieldView = entryState.protectedFieldView - if (fieldView.isCurrentlyProtected()) { - checkUserVerification( - userVerificationViewModel = mUserVerificationViewModel, - dataToVerify = UserVerificationData(protectedFieldView = fieldView) - ) - } else { - fieldView.protect() - } + requestUnprotectField( + userVerificationViewModel = mUserVerificationViewModel, + database = mDatabase, + protectedFieldView = entryState.protectedFieldView + ) mEntryViewModel.actionPerformed() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt index ec41a8bf4..da8476373 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/EntryEditActivity.kt @@ -63,8 +63,7 @@ import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.buildSpecia import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveRegisterInfo import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper.retrieveSearchInfo import com.kunzisoft.keepass.credentialprovider.TypeMode -import com.kunzisoft.keepass.credentialprovider.UserVerificationData -import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.checkUserVerification +import com.kunzisoft.keepass.credentialprovider.UserVerificationHelper.Companion.requestUnprotectField import com.kunzisoft.keepass.credentialprovider.passkey.util.PasskeyHelper.buildPasskeyResponseAndSetResult import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.element.Attachment @@ -100,6 +99,7 @@ import com.kunzisoft.keepass.view.asError import com.kunzisoft.keepass.view.hideByFading import com.kunzisoft.keepass.view.setTransparentNavigationBar import com.kunzisoft.keepass.view.showActionErrorIfNeeded +import com.kunzisoft.keepass.view.showError import com.kunzisoft.keepass.view.updateLockPaddingStart import com.kunzisoft.keepass.viewmodels.ColorPickerViewModel import com.kunzisoft.keepass.viewmodels.EntryEditViewModel @@ -403,15 +403,11 @@ class EntryEditActivity : DatabaseLockActivity(), mEntryEditViewModel.actionPerformed() } is EntryEditViewModel.EntryEditState.RequestUnprotectField -> { - val fieldView = uiState.protectedFieldView - if (fieldView.isCurrentlyProtected()) { - checkUserVerification( - userVerificationViewModel = mUserVerificationViewModel, - dataToVerify = UserVerificationData(protectedFieldView = fieldView) - ) - } else { - fieldView.protect() - } + requestUnprotectField( + userVerificationViewModel = mUserVerificationViewModel, + database = mDatabase, + protectedFieldView = uiState.protectedFieldView + ) mEntryEditViewModel.actionPerformed() } } @@ -424,6 +420,7 @@ class EntryEditActivity : DatabaseLockActivity(), when (uVState) { is UserVerificationViewModel.UIState.Loading -> {} is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> { + coordinatorLayout?.showError(uVState.error) mUserVerificationViewModel.onUserVerificationReceived() } is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> { diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/UserVerificationHelper.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/UserVerificationHelper.kt index fc3d26563..c5cad4f4f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/UserVerificationHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/UserVerificationHelper.kt @@ -14,10 +14,12 @@ import androidx.fragment.app.FragmentActivity import com.kunzisoft.keepass.R import com.kunzisoft.keepass.activities.dialogs.CheckDatabaseCredentialDialogFragment import com.kunzisoft.keepass.credentialprovider.passkey.data.UserVerificationRequirement +import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.model.EntryInfo import com.kunzisoft.keepass.settings.PreferencesUtil.isUserVerificationDeviceCredential import com.kunzisoft.keepass.utils.getEnumExtra import com.kunzisoft.keepass.utils.putEnumExtra +import com.kunzisoft.keepass.view.ProtectedFieldView import com.kunzisoft.keepass.view.toastError import com.kunzisoft.keepass.viewmodels.UserVerificationViewModel @@ -102,6 +104,24 @@ class UserVerificationHelper { activity?.checkUserVerification(userVerificationViewModel, dataToVerify) } + fun FragmentActivity.requestUnprotectField( + userVerificationViewModel: UserVerificationViewModel, + database: ContextualDatabase?, + protectedFieldView: ProtectedFieldView + ) { + if (protectedFieldView.isCurrentlyProtected()) { + checkUserVerification( + userVerificationViewModel = userVerificationViewModel, + dataToVerify = UserVerificationData( + database = database, + protectedFieldView = protectedFieldView + ) + ) + } else { + protectedFieldView.protect() + } + } + /** * Displays a dialog to verify the user */ @@ -111,7 +131,7 @@ class UserVerificationHelper { ) { if (isAuthenticatorsAllowed() && isUserVerificationDeviceCredential(this)) { showUserVerificationDeviceCredential(userVerificationViewModel, dataToVerify) - } else { + } else if (dataToVerify.database != null) { showUserVerificationDatabaseCredential(userVerificationViewModel, dataToVerify) } }