From 01d778650cc1756c9aa3fc9afe97077ce562d99e Mon Sep 17 00:00:00 2001 From: J-Jamet Date: Thu, 18 Sep 2025 12:26:56 +0200 Subject: [PATCH] feat: Setting for auto select #2165 --- .../passkey/PasskeyProviderService.kt | 10 +++++++--- .../com/kunzisoft/keepass/settings/PreferencesUtil.kt | 6 ++++++ app/src/main/res/values/donottranslate.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ app/src/main/res/xml/preferences_passkeys.xml | 5 +++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/passkey/PasskeyProviderService.kt b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/passkey/PasskeyProviderService.kt index ab1ac8273..2af9d0115 100644 --- a/app/src/main/java/com/kunzisoft/keepass/credentialprovider/passkey/PasskeyProviderService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/credentialprovider/passkey/PasskeyProviderService.kt @@ -53,6 +53,7 @@ import com.kunzisoft.keepass.database.DatabaseTaskProvider import com.kunzisoft.keepass.database.exception.RegisterInReadOnlyDatabaseException import com.kunzisoft.keepass.database.helper.SearchHelper import com.kunzisoft.keepass.model.SearchInfo +import com.kunzisoft.keepass.settings.PreferencesUtil.isPasskeyAutoSelectEnable import com.kunzisoft.keepass.view.toastError import java.io.IOException import java.time.Instant @@ -63,6 +64,7 @@ class PasskeyProviderService : CredentialProviderService() { private var mDatabaseTaskProvider: DatabaseTaskProvider? = null private var mDatabase: ContextualDatabase? = null private lateinit var defaultIcon: Icon + private var isAutoSelectAllowed: Boolean = false override fun onCreate() { super.onCreate() @@ -79,6 +81,8 @@ class PasskeyProviderService : CredentialProviderService() { ).apply { setTintBlendMode(BlendMode.DST) } + + isAutoSelectAllowed = isPasskeyAutoSelectEnable(this) } override fun onDestroy() { @@ -160,7 +164,7 @@ class PasskeyProviderService : CredentialProviderService() { pendingIntent = usagePendingIntent, beginGetPublicKeyCredentialOption = option, displayName = passkeyEntry.getVisualTitle(), - isAutoSelectAllowed = true + isAutoSelectAllowed = isAutoSelectAllowed ) ) } @@ -183,7 +187,7 @@ class PasskeyProviderService : CredentialProviderService() { pendingIntent = pendingIntent, beginGetPublicKeyCredentialOption = option, lastUsedTime = Instant.now(), - isAutoSelectAllowed = false + isAutoSelectAllowed = isAutoSelectAllowed ) ) } @@ -205,7 +209,7 @@ class PasskeyProviderService : CredentialProviderService() { pendingIntent = pendingIntent, beginGetPublicKeyCredentialOption = option, lastUsedTime = Instant.now(), - isAutoSelectAllowed = true + isAutoSelectAllowed = isAutoSelectAllowed ) ) } diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt b/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt index e592021db..762b51196 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt @@ -692,6 +692,12 @@ object PreferencesUtil { context.resources.getBoolean(R.bool.passkeys_backup_eligibility_default)) } + fun isPasskeyAutoSelectEnable(context: Context): Boolean { + val prefs = PreferenceManager.getDefaultSharedPreferences(context) + return prefs.getBoolean(context.getString(R.string.passkeys_auto_select_key), + context.resources.getBoolean(R.bool.passkeys_auto_select_default)) + } + fun isPasskeyBackupStateEnable(context: Context): Boolean { if (!isPasskeyBackupEligibilityEnable(context)) return false diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index ac6a15604..bed60f49d 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -135,6 +135,8 @@ passkeys_explanation_key settings_passkeys_key passkeys_privileged_apps_key + passkeys_auto_select_key + false passkeys_backup_eligibility_key true passkeys_backup_state_key diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 03758f18a..430dc2c97 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -430,6 +430,8 @@ Signature missing WARNING: The passkey was created from another client or the signature has been deleted. Ensure the app you want to authenticate is part of the same service and is legitimate to avoid security issues. %1$s is unrecognised and attempts to authenticate with an existing passkey.\n\nAdd app signature to passkey entry? + Auto select + Auto select if only one entry and the database is open, only if the requesting app is compatible Backup Eligibility Determine at creation time whether the public key credential source is allowed to be backed up Backup State diff --git a/app/src/main/res/xml/preferences_passkeys.xml b/app/src/main/res/xml/preferences_passkeys.xml index 502403320..2bf319d8d 100644 --- a/app/src/main/res/xml/preferences_passkeys.xml +++ b/app/src/main/res/xml/preferences_passkeys.xml @@ -24,6 +24,11 @@ android:key="@string/passkeys_privileged_apps_key" android:title="@string/passkeys_privileged_apps_title" android:summary="@string/passkeys_privileged_apps_summary"/> +