fix: ProtectField #2283

This commit is contained in:
J-Jamet
2025-12-03 12:43:27 +01:00
parent b394a99e40
commit eb41233e57
3 changed files with 35 additions and 21 deletions

View File

@@ -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()
}
}

View File

@@ -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 -> {

View File

@@ -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)
}
}