diff --git a/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt b/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt index 0d6d7cd0d..ae28cd63e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/autofill/KeeAutofillService.kt @@ -58,20 +58,22 @@ class KeeAutofillService : AutofillService() { // Build search info only if applicationId or webDomain are not blocked var searchAllowed = true - parseResult.applicationId?.let { + parseResult.applicationId?.let { appId -> if (applicationIdBlocklist?.any { appIdBlocked -> - it.contains(appIdBlocked) + appId.contains(appIdBlocked) } == true ) { searchAllowed = false + Log.d(TAG, "Autofill not allowed for $appId") } } - parseResult.domain?.let { + parseResult.domain?.let { domain -> if (webDomainBlocklist?.any { webDomainBlocked -> - it.contains(webDomainBlocked) + domain.contains(webDomainBlocked) } == true ) { searchAllowed = false + Log.d(TAG, "Autofill not allowed for $domain") } } 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 995c56551..0968af9dc 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/PreferencesUtil.kt @@ -375,13 +375,15 @@ object PreferencesUtil { fun applicationIdBlocklist(context: Context): Set { val prefs = PreferenceManager.getDefaultSharedPreferences(context) - return prefs.getStringSet(context.getString(R.string.autofill_application_id_blocklist_key), null) + return prefs.getStringSet(context.getString(R.string.autofill_application_id_blocklist_key), + context.resources.getStringArray(R.array.autofill_application_id_blocklist_default).toMutableSet()) ?: emptySet() } fun webDomainBlocklist(context: Context): Set { val prefs = PreferenceManager.getDefaultSharedPreferences(context) - return prefs.getStringSet(context.getString(R.string.autofill_web_domain_blocklist_key), null) + return prefs.getStringSet(context.getString(R.string.autofill_web_domain_blocklist_key), + context.resources.getStringArray(R.array.autofill_web_domain_blocklist_default).toMutableSet()) ?: emptySet() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preference/InputListPreference.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preference/InputListPreference.kt index 21965e957..708ba3fd1 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preference/InputListPreference.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preference/InputListPreference.kt @@ -23,8 +23,6 @@ import android.content.Context import android.util.AttributeSet import androidx.preference.DialogPreference import com.kunzisoft.keepass.R -import com.kunzisoft.keepass.icons.IconPackChooser -import java.util.ArrayList open class InputListPreference @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistAppIdPreferenceDialogFragmentCompat.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistAppIdPreferenceDialogFragmentCompat.kt index a783b91c3..d691ee92e 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistAppIdPreferenceDialogFragmentCompat.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistAppIdPreferenceDialogFragmentCompat.kt @@ -20,6 +20,7 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment import android.os.Bundle +import com.kunzisoft.keepass.R import com.kunzisoft.keepass.model.SearchInfo class AutofillBlocklistAppIdPreferenceDialogFragmentCompat @@ -32,6 +33,13 @@ class AutofillBlocklistAppIdPreferenceDialogFragmentCompat return SearchInfo().apply { this.applicationId = newSearchInfo } } + override fun getDefaultValues(): Set { + return context?.resources + ?.getStringArray(R.array.autofill_application_id_blocklist_default) + ?.toMutableSet() + ?: emptySet() + } + companion object { fun newInstance(key: String): AutofillBlocklistAppIdPreferenceDialogFragmentCompat { val fragment = AutofillBlocklistAppIdPreferenceDialogFragmentCompat() diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistPreferenceDialogFragmentCompat.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistPreferenceDialogFragmentCompat.kt index 11383d2b0..d85342276 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistPreferenceDialogFragmentCompat.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistPreferenceDialogFragmentCompat.kt @@ -43,6 +43,8 @@ abstract class AutofillBlocklistPreferenceDialogFragmentCompat abstract fun buildSearchInfoFromString(searchInfoString: String): SearchInfo? + abstract fun getDefaultValues(): Set + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -55,7 +57,7 @@ abstract class AutofillBlocklistPreferenceDialogFragmentCompat } } ?: run { // Or from preference - preference.getPersistedStringSet(emptySet()).forEach { searchInfoString -> + preference.getPersistedStringSet(getDefaultValues()).forEach { searchInfoString -> addSearchInfo(searchInfoString) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistWebDomainPreferenceDialogFragmentCompat.kt b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistWebDomainPreferenceDialogFragmentCompat.kt index 82c7aa0c5..2698ec66a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistWebDomainPreferenceDialogFragmentCompat.kt +++ b/app/src/main/java/com/kunzisoft/keepass/settings/preferencedialogfragment/AutofillBlocklistWebDomainPreferenceDialogFragmentCompat.kt @@ -20,8 +20,8 @@ package com.kunzisoft.keepass.settings.preferencedialogfragment import android.os.Bundle +import com.kunzisoft.keepass.R import com.kunzisoft.keepass.model.SearchInfo -import java.net.URI class AutofillBlocklistWebDomainPreferenceDialogFragmentCompat : AutofillBlocklistPreferenceDialogFragmentCompat() { @@ -35,6 +35,13 @@ class AutofillBlocklistWebDomainPreferenceDialogFragmentCompat return SearchInfo().apply { webDomain = newSearchInfo } } + override fun getDefaultValues(): Set { + return context?.resources + ?.getStringArray(R.array.autofill_web_domain_blocklist_default) + ?.toMutableSet() + ?: emptySet() + } + companion object { fun newInstance(key: String): AutofillBlocklistWebDomainPreferenceDialogFragmentCompat { val fragment = AutofillBlocklistWebDomainPreferenceDialogFragmentCompat() diff --git a/app/src/main/res/layout/activity_password.xml b/app/src/main/res/layout/activity_password.xml index 5f64a1808..b73f9453d 100644 --- a/app/src/main/res/layout/activity_password.xml +++ b/app/src/main/res/layout/activity_password.xml @@ -22,7 +22,6 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/container" - android:importantForAutofill="noExcludeDescendants" android:layout_width="match_parent" android:layout_height="match_parent" tools:targetApi="o"> @@ -155,7 +154,8 @@ android:hint="@string/password" android:inputType="textPassword" android:importantForAccessibility="no" - android:importantForAutofill="no" + android:importantForAutofill="yes" + android:autofillHints="password|" android:imeOptions="actionDone" android:maxLines="1"/> diff --git a/app/src/main/res/layout/fragment_set_password.xml b/app/src/main/res/layout/fragment_set_password.xml index 98543a365..816d1d124 100644 --- a/app/src/main/res/layout/fragment_set_password.xml +++ b/app/src/main/res/layout/fragment_set_password.xml @@ -27,7 +27,6 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" - android:importantForAutofill="noExcludeDescendants" tools:targetApi="o"> @@ -81,7 +81,8 @@ android:layout_height="wrap_content" android:inputType="textPassword" android:importantForAccessibility="no" - android:importantForAutofill="no" + android:importantForAutofill="yes" + android:autofillHints="newPassword" android:maxLines="1" android:hint="@string/hint_conf_pass"/> diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 10b67434b..4a9ff1765 100644 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -135,7 +135,14 @@ autofill_auto_search_key true autofill_application_id_blocklist_key + + com.kunzisoft.keepass.libre + com.kunzisoft.keepass.free + com.kunzisoft.keepass.pro + autofill_web_domain_blocklist_key + + settings_advanced_unlock_key