From dd7a2718c95d742ff7538986328ed945f9e366cf Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Wed, 3 Jan 2024 05:50:25 +0100 Subject: [PATCH] ignore Android settings for Autofill, fixes #2449 --- src/Kp2aAutofillParserTest/AutofillTest.cs | 6 ++ .../Kp2aAutofillParserTest.csproj | 4 + .../android14-settings.json | 99 +++++++++++++++++++ .../AutofillBase/AutofillServiceBase.cs | 22 ++++- 4 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 src/Kp2aAutofillParserTest/android14-settings.json diff --git a/src/Kp2aAutofillParserTest/AutofillTest.cs b/src/Kp2aAutofillParserTest/AutofillTest.cs index 80c15003..2c9c2a7e 100644 --- a/src/Kp2aAutofillParserTest/AutofillTest.cs +++ b/src/Kp2aAutofillParserTest/AutofillTest.cs @@ -71,6 +71,12 @@ namespace Kp2aAutofillParserTest var resourceName = "Kp2aAutofillParserTest.com-expressvpn-vpn-android13.json"; RunTestFromAutofillInput(resourceName, "com.expressvpn.vpn", null); } + [Fact] + public void TestIgnoresAndroidSettings() + { + var resourceName = "Kp2aAutofillParserTest.android14-settings.json"; + RunTestFromAutofillInput(resourceName, "com.android.settings", null); + } private void RunTestFromAutofillInput(string resourceName, string expectedPackageName = null, string expectedWebDomain = null) { diff --git a/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj b/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj index d702da41..d68279ff 100644 --- a/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj +++ b/src/Kp2aAutofillParserTest/Kp2aAutofillParserTest.csproj @@ -9,6 +9,7 @@ + @@ -54,6 +55,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/src/Kp2aAutofillParserTest/android14-settings.json b/src/Kp2aAutofillParserTest/android14-settings.json new file mode 100644 index 00000000..038c0c55 --- /dev/null +++ b/src/Kp2aAutofillParserTest/android14-settings.json @@ -0,0 +1,99 @@ +{ + "InputFields": [ + { + "IdEntry": null, + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "content_parent", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "content_frame", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "main_content", + "Hint": null, + "ClassName": "android.widget.FrameLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "password_entry", + "Hint": null, + "ClassName": "android.widget.EditText", + "AutofillHints": [ + "passwordAuto" + ], + "IsFocused": true, + "InputType": 18, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null, + "ExpectedAssignedHints": [ "password" ] + }, + { + "IdEntry": "checkbox", + "Hint": null, + "ClassName": "android.widget.CheckBox", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "button_bar", + "Hint": null, + "ClassName": "android.widget.RelativeLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "switch_bar", + "Hint": null, + "ClassName": "android.widget.LinearLayout", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + }, + { + "IdEntry": "action_bar", + "Hint": null, + "ClassName": "android.view.ViewGroup", + "AutofillHints": null, + "IsFocused": false, + "InputType": 0, + "HtmlInfoTag": null, + "HtmlInfoTypeAttribute": null + } + ], + "PackageId": "com.android.settings", + "WebDomain": null +} \ No newline at end of file diff --git a/src/keepass2android/services/AutofillBase/AutofillServiceBase.cs b/src/keepass2android/services/AutofillBase/AutofillServiceBase.cs index ccdb86d8..0eaf278c 100644 --- a/src/keepass2android/services/AutofillBase/AutofillServiceBase.cs +++ b/src/keepass2android/services/AutofillBase/AutofillServiceBase.cs @@ -40,6 +40,26 @@ namespace keepass2android.services.AutofillBase public abstract class AutofillServiceBase: AutofillService { + private HashSet _internal_blacklistedUris = null; + + public HashSet BlacklistedUris + { + get + { + if (_internal_blacklistedUris == null) + { + _internal_blacklistedUris = new HashSet() + { + KeePass.AndroidAppScheme + "android", + KeePass.AndroidAppScheme + "com.android.settings", + KeePass.AndroidAppScheme + this.PackageName + }; + } + + return _internal_blacklistedUris; + + } + } protected override void AttachBaseContext(Context baseContext) { base.AttachBaseContext(LocaleManager.setLocale(baseContext)); @@ -386,7 +406,7 @@ namespace keepass2android.services.AutofillBase private bool CanAutofill(StructureParser.AutofillTargetId query, bool isManual) { - if (query.PackageNameWithPseudoSchema == KeePass.AndroidAppScheme+"android" || query.PackageNameWithPseudoSchema == KeePass.AndroidAppScheme + this.PackageName) + if (BlacklistedUris.Contains(query.PackageNameWithPseudoSchema)) return false; if (!isManual) {