diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt index 2a7cab8f2..e93039556 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/autofill/AutofillHelper.kt @@ -258,7 +258,7 @@ object AutofillHelper { } } } - for (field in entryInfo.customFields) { + for (field in entryInfo.getCustomFieldsForFilling()) { if (field.name == TemplateField.LABEL_HOLDER) { struct.creditCardHolderId?.let { ccNameId -> datasetBuilder.addValueToDatasetBuilder( diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt index bc6f3073b..459d7a6a8 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/magikeyboard/MagikeyboardService.kt @@ -41,9 +41,9 @@ import androidx.core.graphics.BlendModeCompat import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.kunzisoft.keepass.R -import com.kunzisoft.keepass.credentialprovider.activity.EntrySelectionLauncherActivity -import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper import com.kunzisoft.keepass.adapters.FieldsAdapter +import com.kunzisoft.keepass.credentialprovider.EntrySelectionHelper +import com.kunzisoft.keepass.credentialprovider.activity.EntrySelectionLauncherActivity import com.kunzisoft.keepass.database.ContextualDatabase import com.kunzisoft.keepass.database.DatabaseTaskProvider import com.kunzisoft.keepass.database.element.Field @@ -324,9 +324,9 @@ class MagikeyboardService : InputMethodService(), KeyboardView.OnKeyboardActionL actionGoAutomatically() } KEY_FIELDS -> { - getEntryInfo()?.customFields?.let { customFields -> + getEntryInfo()?.getCustomFieldsForFilling()?.let { customFields -> fieldsAdapter?.apply { - setFields(customFields.filter { it.name != OTP_TOKEN_FIELD}) + setFields(customFields) notifyDataSetChanged() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/services/ClipboardEntryNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/ClipboardEntryNotificationService.kt index b33213891..98cf199c6 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/ClipboardEntryNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/ClipboardEntryNotificationService.kt @@ -274,10 +274,12 @@ class ClipboardEntryNotificationService : LockNotificationService() { val containsPasswordToCopy = entry.password.isNotEmpty() && PreferencesUtil.allowCopyProtectedFields(context) val containsOTPToCopy = entry.containsCustomField(OTP_TOKEN_FIELD) - val containsExtraFieldToCopy = entry.customFields.isNotEmpty() - && (entry.containsCustomFieldsNotProtected() + val customFields = entry.getCustomFieldsForFilling() + val containsExtraFieldToCopy = customFields.isNotEmpty() + && (customFields.any { !it.protectedValue.isProtected } || - (entry.containsCustomFieldsProtected() && PreferencesUtil.allowCopyProtectedFields(context)) + (customFields.any { it.protectedValue.isProtected } + && PreferencesUtil.allowCopyProtectedFields(context)) ) var startService = false @@ -320,7 +322,7 @@ class ClipboardEntryNotificationService : LockNotificationService() { if (containsExtraFieldToCopy) { try { var anonymousFieldNumber = 0 - entry.customFields.forEach { field -> + entry.getCustomFieldsForFilling().forEach { field -> //If value is not protected or allowed if ((!field.protectedValue.isProtected || PreferencesUtil.allowCopyProtectedFields(context)) diff --git a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt index 18e3d23c5..b616708ec 100644 --- a/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt +++ b/database/src/main/java/com/kunzisoft/keepass/database/search/SearchHelper.kt @@ -24,10 +24,10 @@ import com.kunzisoft.keepass.database.element.Entry import com.kunzisoft.keepass.database.element.Group import com.kunzisoft.keepass.database.element.node.NodeHandler import com.kunzisoft.keepass.database.element.node.NodeId -import com.kunzisoft.keepass.model.PasskeyEntryFields import com.kunzisoft.keepass.model.PasskeyEntryFields.FIELD_RELYING_PARTY -import com.kunzisoft.keepass.otp.OtpEntryFields +import com.kunzisoft.keepass.model.PasskeyEntryFields.isPasskeyExclusion import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_FIELD +import com.kunzisoft.keepass.otp.OtpEntryFields.isOtpExclusion import com.kunzisoft.keepass.utils.UuidUtil import com.kunzisoft.keepass.utils.inTheSameDomainAs @@ -186,8 +186,8 @@ class SearchHelper { } if (searchParameters.searchInOther) { if(entry.getExtraFields().any { field -> - OtpEntryFields.searchExcluded(field) - && PasskeyEntryFields.searchExcluded(field) + field.isOtpExclusion() + && field.isPasskeyExclusion() && checkSearchQuery(field.protectedValue.toString(), searchParameters) }) return true diff --git a/database/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt b/database/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt index 73e2e223a..6efe51c5f 100644 --- a/database/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt +++ b/database/src/main/java/com/kunzisoft/keepass/model/EntryInfo.kt @@ -30,10 +30,12 @@ import com.kunzisoft.keepass.database.element.Tags import com.kunzisoft.keepass.database.element.entry.AutoType import com.kunzisoft.keepass.database.element.security.ProtectedString import com.kunzisoft.keepass.database.element.template.TemplateField +import com.kunzisoft.keepass.model.PasskeyEntryFields.isPasskeyExclusion import com.kunzisoft.keepass.model.PasskeyEntryFields.setPasskey import com.kunzisoft.keepass.otp.OtpElement import com.kunzisoft.keepass.otp.OtpEntryFields import com.kunzisoft.keepass.otp.OtpEntryFields.OTP_TOKEN_FIELD +import com.kunzisoft.keepass.otp.OtpEntryFields.isOtpExclusion import com.kunzisoft.keepass.utils.readBooleanCompat import com.kunzisoft.keepass.utils.readListCompat import com.kunzisoft.keepass.utils.readParcelableCompat @@ -99,12 +101,11 @@ class EntryInfo : NodeInfo { parcel.writeBooleanCompat(isTemplate) } - fun containsCustomFieldsProtected(): Boolean { - return customFields.any { it.protectedValue.isProtected } - } - - fun containsCustomFieldsNotProtected(): Boolean { - return customFields.any { !it.protectedValue.isProtected } + fun getCustomFieldsForFilling(): List { + return customFields.filter { + !it.isOtpExclusion() + && !it.isPasskeyExclusion() + } } fun containsCustomField(label: String): Boolean { diff --git a/database/src/main/java/com/kunzisoft/keepass/model/PasskeyEntryFields.kt b/database/src/main/java/com/kunzisoft/keepass/model/PasskeyEntryFields.kt index f14e97b12..57691f4ab 100644 --- a/database/src/main/java/com/kunzisoft/keepass/model/PasskeyEntryFields.kt +++ b/database/src/main/java/com/kunzisoft/keepass/model/PasskeyEntryFields.kt @@ -120,8 +120,12 @@ object PasskeyEntryFields { return newCustomFields } - fun searchExcluded(field: Field): Boolean { - return when(field.name) { + /** + * Field ignored for a search or a form filling + */ + fun Field.isPasskeyExclusion(): Boolean { + return when(name) { + PASSKEY_FIELD -> true FIELD_USERNAME -> true FIELD_PRIVATE_KEY -> true FIELD_CREDENTIAL_ID -> true diff --git a/database/src/main/java/com/kunzisoft/keepass/otp/OtpEntryFields.kt b/database/src/main/java/com/kunzisoft/keepass/otp/OtpEntryFields.kt index 78976e1aa..d99c401c0 100644 --- a/database/src/main/java/com/kunzisoft/keepass/otp/OtpEntryFields.kt +++ b/database/src/main/java/com/kunzisoft/keepass/otp/OtpEntryFields.kt @@ -487,8 +487,11 @@ object OtpEntryFields { return newCustomFields } - fun searchExcluded(field: Field): Boolean { - return when(field.name) { + /** + * Field ignored for a search or a form filling + */ + fun Field.isOtpExclusion(): Boolean { + return when(name) { OTP_FIELD -> true TOTP_SEED_FIELD -> true TOTP_SETTING_FIELD -> true