From c8f6714373d8f5218ca11fe0fa2a35ce38364756 Mon Sep 17 00:00:00 2001 From: Philipp Crocoll Date: Tue, 24 Jun 2025 17:10:08 +0200 Subject: [PATCH] refactoring: simplify autofill code --- src/Kp2aAutofillParser.Tests/AutofillTest.cs | 2 +- src/Kp2aAutofillParser/AutofillParser.cs | 7 +++--- .../DisableAutofillForQueryActivity.cs | 4 +--- .../AutofillBase/AutofillServiceBase.cs | 20 +++++++---------- .../ChooseForAutofillActivityBase.cs | 7 +++--- .../services/AutofillBase/StructureParser.cs | 22 +++++++++---------- .../services/Kp2aAutofillIntentBuilder.cs | 8 ++----- 7 files changed, 29 insertions(+), 41 deletions(-) diff --git a/src/Kp2aAutofillParser.Tests/AutofillTest.cs b/src/Kp2aAutofillParser.Tests/AutofillTest.cs index eeefc2f1..95261e7b 100644 --- a/src/Kp2aAutofillParser.Tests/AutofillTest.cs +++ b/src/Kp2aAutofillParser.Tests/AutofillTest.cs @@ -95,7 +95,7 @@ namespace Kp2aAutofillParserTest StructureParserBase parser = new StructureParserBase(new TestLogger(), new TestDalSourceTrustAll()); - var result = parser.ParseForFill(false, autofillView); + var result = parser.ParseForFill(autofillView); if (expectedPackageName != null) Assert.Equal(expectedPackageName, result.PackageName); if (expectedWebDomain != null) diff --git a/src/Kp2aAutofillParser/AutofillParser.cs b/src/Kp2aAutofillParser/AutofillParser.cs index 9464021c..3a6e52c6 100644 --- a/src/Kp2aAutofillParser/AutofillParser.cs +++ b/src/Kp2aAutofillParser/AutofillParser.cs @@ -803,12 +803,12 @@ namespace Kp2aAutofillParser public AutofillTargetId ParseForFill(bool isManual, AutofillView autofillView) { - return Parse(true, isManual, autofillView); + return Parse(true, autofillView); } public AutofillTargetId ParseForSave(AutofillView autofillView) { - return Parse(false, true, autofillView); + return Parse(false, autofillView); } /// @@ -816,8 +816,7 @@ namespace Kp2aAutofillParser /// /// The parse. /// If set to true for fill. - /// - protected virtual AutofillTargetId Parse(bool forFill, bool isManualRequest, AutofillView autofillView) + protected virtual AutofillTargetId Parse(bool forFill, AutofillView autofillView) { AutofillTargetId result = new AutofillTargetId() { diff --git a/src/keepass2android-app/DisableAutofillForQueryActivity.cs b/src/keepass2android-app/DisableAutofillForQueryActivity.cs index 3f5eac86..16211742 100644 --- a/src/keepass2android-app/DisableAutofillForQueryActivity.cs +++ b/src/keepass2android-app/DisableAutofillForQueryActivity.cs @@ -63,8 +63,6 @@ namespace keepass2android prefs.Edit().PutStringSet("AutoFillDisabledQueries", disabledValues).Commit(); - bool isManual = Intent.GetBooleanExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, false); - Intent reply = new Intent(); FillResponse.Builder builder = new FillResponse.Builder(); AssistStructure structure = (AssistStructure)Intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure); @@ -77,7 +75,7 @@ namespace keepass2android StructureParser parser = new StructureParser(this, structure); try { - parser.ParseForFill(isManual); + parser.ParseForFill(); } catch (Java.Lang.SecurityException e) diff --git a/src/keepass2android-app/services/AutofillBase/AutofillServiceBase.cs b/src/keepass2android-app/services/AutofillBase/AutofillServiceBase.cs index 2d0316a1..53189906 100644 --- a/src/keepass2android-app/services/AutofillBase/AutofillServiceBase.cs +++ b/src/keepass2android-app/services/AutofillBase/AutofillServiceBase.cs @@ -28,13 +28,11 @@ namespace keepass2android.services.AutofillBase { public interface IAutofillIntentBuilder { - PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, - bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning); + PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning); PendingIntent GetAuthPendingIntentForWarning(Context context, PwUuid entryUuid, AutofillServiceBase.DisplayWarning warning); - PendingIntent GetDisablePendingIntentForResponse(Context context, string query, - bool isManualRequest, bool isDisable); + PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable); Intent GetRestartAppIntent(Context context); int AppIconResource { get; } @@ -150,7 +148,7 @@ namespace keepass2android.services.AutofillBase var parser = new StructureParser(this, structure); try { - query = parser.ParseForFill(isManual); + query = parser.ParseForFill(); } catch (Java.Lang.SecurityException e) @@ -213,16 +211,14 @@ namespace keepass2android.services.AutofillBase { if (query.WebDomain != null) AddQueryDataset(query.WebDomain, - query.WebDomain, query.PackageName, - isManual, autofillIds, responseBuilder, !hasEntryDataset, + query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset, query.IncompatiblePackageAndDomain ? DisplayWarning.FillDomainInUntrustedApp : DisplayWarning.None, AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count)); else AddQueryDataset(query.PackageNameWithPseudoSchema, - query.WebDomain, query.PackageName, - isManual, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None, + query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None, AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count)); } @@ -340,9 +336,9 @@ namespace keepass2android.services.AutofillBase } - private void AddQueryDataset(string query, string queryDomain, string queryPackage, bool isManual, AutofillId[] autofillIds, FillResponse.Builder responseBuilder, bool autoReturnFromQuery, DisplayWarning warning, InlinePresentationSpec inlinePresentationSpec) + private void AddQueryDataset(string query, string queryDomain, string queryPackage, AutofillId[] autofillIds, FillResponse.Builder responseBuilder, bool autoReturnFromQuery, DisplayWarning warning, InlinePresentationSpec inlinePresentationSpec) { - PendingIntent pendingIntent = IntentBuilder.GetAuthPendingIntentForResponse(this, query, queryDomain, queryPackage, isManual, autoReturnFromQuery, warning); + PendingIntent pendingIntent = IntentBuilder.GetAuthPendingIntentForResponse(this, query, queryDomain, queryPackage, autoReturnFromQuery, warning); string text = GetString(Resource.String.autofill_sign_in_prompt); RemoteViews overlayPresentation = AutofillHelper.NewRemoteViews(base.PackageName, text, AppNames.LauncherIcon); @@ -396,7 +392,7 @@ namespace keepass2android.services.AutofillBase if (isQueryDisabled && !isManual) return; bool isForDisable = !isQueryDisabled; - var pendingIntent = IntentBuilder.GetDisablePendingIntentForResponse(this, query, isManual, isForDisable); + var pendingIntent = IntentBuilder.GetDisablePendingIntentForResponse(this, query, isForDisable); string text = GetString(isForDisable ? Resource.String.autofill_disable : Resource.String.autofill_enable_for, new Java.Lang.Object[] { GetDisplayNameForQuery(query, this) }); RemoteViews presentation = AutofillHelper.NewRemoteViews(base.PackageName, diff --git a/src/keepass2android-app/services/AutofillBase/ChooseForAutofillActivityBase.cs b/src/keepass2android-app/services/AutofillBase/ChooseForAutofillActivityBase.cs index 092284c7..3d8a18ef 100644 --- a/src/keepass2android-app/services/AutofillBase/ChooseForAutofillActivityBase.cs +++ b/src/keepass2android-app/services/AutofillBase/ChooseForAutofillActivityBase.cs @@ -27,7 +27,6 @@ namespace keepass2android.services.AutofillBase public static string ExtraQueryPackageString => "EXTRA_QUERY_PACKAGE_STRING"; public static string ExtraQueryDomainString => "EXTRA_QUERY_DOMAIN_STRING"; public static string ExtraUseLastOpenedEntry => "EXTRA_USE_LAST_OPENED_ENTRY"; //if set to true, no query UI is displayed. Can be used to just show a warning - public static string ExtraIsManualRequest => "EXTRA_IS_MANUAL_REQUEST"; public static string ExtraAutoReturnFromQuery => "EXTRA_AUTO_RETURN_FROM_QUERY"; public static string ExtraDisplayWarning => "EXTRA_DISPLAY_WARNING"; @@ -185,7 +184,7 @@ namespace keepass2android.services.AutofillBase ReplyIntent = null; } - protected void OnSuccess(FilledAutofillFieldCollection clientFormDataMap, bool isManual) + protected void OnSuccess(FilledAutofillFieldCollection clientFormDataMap) { var intent = Intent; AssistStructure structure = (AssistStructure)intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure); @@ -196,7 +195,7 @@ namespace keepass2android.services.AutofillBase return; } StructureParser parser = new StructureParser(this, structure); - parser.ParseForFill(isManual); + parser.ParseForFill(); AutofillFieldMetadataCollection autofillFields = parser.AutofillFields; var partitionData = AutofillHintsHelper.FilterForPartition(clientFormDataMap, parser.AutofillFields.FocusedAutofillCanonicalHints); @@ -229,7 +228,7 @@ namespace keepass2android.services.AutofillBase private void ReturnSuccess() { - OnSuccess(GetDataset(), Intent.GetBooleanExtra(ExtraIsManualRequest, false)); + OnSuccess(GetDataset()); Finish(); } diff --git a/src/keepass2android-app/services/AutofillBase/StructureParser.cs b/src/keepass2android-app/services/AutofillBase/StructureParser.cs index 2ababeb1..9e53d4fc 100644 --- a/src/keepass2android-app/services/AutofillBase/StructureParser.cs +++ b/src/keepass2android-app/services/AutofillBase/StructureParser.cs @@ -72,7 +72,7 @@ namespace keepass2android.services.AutofillBase domainSuffixParserCache = new PublicSuffixRuleCache(context); } - public AutofillView GetAutofillView(bool isManualRequest) + public AutofillView GetAutofillView() { AutofillView autofillView = new AutofillView(); @@ -83,7 +83,7 @@ namespace keepass2android.services.AutofillBase var node = _structure.GetWindowNodeAt(i); var view = node.RootViewNode; - ParseRecursive(autofillView, view, isManualRequest); + ParseRecursive(autofillView, view); } autofillView.PackageId = autofillView.PackageId ?? _structure.ActivityComponent.PackageName; @@ -93,7 +93,7 @@ namespace keepass2android.services.AutofillBase } - void ParseRecursive(AutofillView autofillView, AssistStructure.ViewNode viewNode, bool isManualRequest) + void ParseRecursive(AutofillView autofillView, AssistStructure.ViewNode viewNode) { String webDomain = viewNode.WebDomain; if ((autofillView.PackageId == null) && (!string.IsNullOrWhiteSpace(viewNode.IdPackage)) && @@ -129,7 +129,7 @@ namespace keepass2android.services.AutofillBase { for (int i = 0; i < childrenSize; i++) { - ParseRecursive(autofillView, viewNode.GetChildAt(i), isManualRequest); + ParseRecursive(autofillView, viewNode.GetChildAt(i)); } } } @@ -159,11 +159,11 @@ namespace keepass2android.services.AutofillBase } - protected override AutofillTargetId Parse(bool forFill, bool isManualRequest, AutofillView autofillView) + protected override AutofillTargetId Parse(bool forFill, AutofillView autofillView) { if (autofillView == null) Kp2aLog.Log("Received null autofill view!"); - var result = base.Parse(forFill, isManualRequest, autofillView); + var result = base.Parse(forFill, autofillView); Kp2aLog.Log("Parsing done"); @@ -185,14 +185,14 @@ namespace keepass2android.services.AutofillBase public AutofillTargetId ParseForSave() { - var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(true); - return Parse(false, true, autofillView); + var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(); + return Parse(false, autofillView); } - public StructureParserBase.AutofillTargetId ParseForFill(bool isManual) + public StructureParserBase.AutofillTargetId ParseForFill() { - var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(isManual); - return Parse(true, isManual, autofillView); + var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(); + return Parse(true, autofillView); } diff --git a/src/keepass2android-app/services/Kp2aAutofillIntentBuilder.cs b/src/keepass2android-app/services/Kp2aAutofillIntentBuilder.cs index 9d1aa348..a5be5dd3 100644 --- a/src/keepass2android-app/services/Kp2aAutofillIntentBuilder.cs +++ b/src/keepass2android-app/services/Kp2aAutofillIntentBuilder.cs @@ -17,14 +17,12 @@ namespace keepass2android.services { private static int _pendingIntentRequestCode = 0; - public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, - bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning) + public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning) { Intent intent = new Intent(context, typeof(ChooseForAutofillActivity)); intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query); intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryDomainString, queryDomain); intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryPackageString, queryPackage); - intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest); intent.PutExtra(ChooseForAutofillActivityBase.ExtraAutoReturnFromQuery, autoReturnFromQuery); intent.PutExtra(ChooseForAutofillActivityBase.ExtraDisplayWarning, (int)warning); return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable)); @@ -40,12 +38,10 @@ namespace keepass2android.services return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable)); } - public PendingIntent GetDisablePendingIntentForResponse(Context context, string query, - bool isManualRequest, bool isDisable) + public PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable) { Intent intent = new Intent(context, typeof(DisableAutofillForQueryActivity)); intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query); - intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest); intent.PutExtra(DisableAutofillForQueryActivity.ExtraIsDisable, isDisable); return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Immutable));