refactoring: simplify autofill code
This commit is contained in:
@@ -95,7 +95,7 @@ namespace Kp2aAutofillParserTest
|
|||||||
StructureParserBase<TestInputField> parser =
|
StructureParserBase<TestInputField> parser =
|
||||||
new StructureParserBase<TestInputField>(new TestLogger(), new TestDalSourceTrustAll());
|
new StructureParserBase<TestInputField>(new TestLogger(), new TestDalSourceTrustAll());
|
||||||
|
|
||||||
var result = parser.ParseForFill(false, autofillView);
|
var result = parser.ParseForFill(autofillView);
|
||||||
if (expectedPackageName != null)
|
if (expectedPackageName != null)
|
||||||
Assert.Equal(expectedPackageName, result.PackageName);
|
Assert.Equal(expectedPackageName, result.PackageName);
|
||||||
if (expectedWebDomain != null)
|
if (expectedWebDomain != null)
|
||||||
|
|||||||
@@ -803,12 +803,12 @@ namespace Kp2aAutofillParser
|
|||||||
|
|
||||||
public AutofillTargetId ParseForFill(bool isManual, AutofillView<FieldT> autofillView)
|
public AutofillTargetId ParseForFill(bool isManual, AutofillView<FieldT> autofillView)
|
||||||
{
|
{
|
||||||
return Parse(true, isManual, autofillView);
|
return Parse(true, autofillView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AutofillTargetId ParseForSave(AutofillView<FieldT> autofillView)
|
public AutofillTargetId ParseForSave(AutofillView<FieldT> autofillView)
|
||||||
{
|
{
|
||||||
return Parse(false, true, autofillView);
|
return Parse(false, autofillView);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -816,8 +816,7 @@ namespace Kp2aAutofillParser
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>The parse.</returns>
|
/// <returns>The parse.</returns>
|
||||||
/// <param name="forFill">If set to <c>true</c> for fill.</param>
|
/// <param name="forFill">If set to <c>true</c> for fill.</param>
|
||||||
/// <param name="isManualRequest"></param>
|
protected virtual AutofillTargetId Parse(bool forFill, AutofillView<FieldT> autofillView)
|
||||||
protected virtual AutofillTargetId Parse(bool forFill, bool isManualRequest, AutofillView<FieldT> autofillView)
|
|
||||||
{
|
{
|
||||||
AutofillTargetId result = new AutofillTargetId()
|
AutofillTargetId result = new AutofillTargetId()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -63,8 +63,6 @@ namespace keepass2android
|
|||||||
|
|
||||||
prefs.Edit().PutStringSet("AutoFillDisabledQueries", disabledValues).Commit();
|
prefs.Edit().PutStringSet("AutoFillDisabledQueries", disabledValues).Commit();
|
||||||
|
|
||||||
bool isManual = Intent.GetBooleanExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, false);
|
|
||||||
|
|
||||||
Intent reply = new Intent();
|
Intent reply = new Intent();
|
||||||
FillResponse.Builder builder = new FillResponse.Builder();
|
FillResponse.Builder builder = new FillResponse.Builder();
|
||||||
AssistStructure structure = (AssistStructure)Intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure);
|
AssistStructure structure = (AssistStructure)Intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure);
|
||||||
@@ -77,7 +75,7 @@ namespace keepass2android
|
|||||||
StructureParser parser = new StructureParser(this, structure);
|
StructureParser parser = new StructureParser(this, structure);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
parser.ParseForFill(isManual);
|
parser.ParseForFill();
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Java.Lang.SecurityException e)
|
catch (Java.Lang.SecurityException e)
|
||||||
|
|||||||
@@ -28,13 +28,11 @@ namespace keepass2android.services.AutofillBase
|
|||||||
{
|
{
|
||||||
public interface IAutofillIntentBuilder
|
public interface IAutofillIntentBuilder
|
||||||
{
|
{
|
||||||
PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage,
|
PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning);
|
||||||
bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning);
|
|
||||||
|
|
||||||
PendingIntent GetAuthPendingIntentForWarning(Context context, PwUuid entryUuid, AutofillServiceBase.DisplayWarning warning);
|
PendingIntent GetAuthPendingIntentForWarning(Context context, PwUuid entryUuid, AutofillServiceBase.DisplayWarning warning);
|
||||||
|
|
||||||
PendingIntent GetDisablePendingIntentForResponse(Context context, string query,
|
PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable);
|
||||||
bool isManualRequest, bool isDisable);
|
|
||||||
Intent GetRestartAppIntent(Context context);
|
Intent GetRestartAppIntent(Context context);
|
||||||
|
|
||||||
int AppIconResource { get; }
|
int AppIconResource { get; }
|
||||||
@@ -150,7 +148,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
var parser = new StructureParser(this, structure);
|
var parser = new StructureParser(this, structure);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
query = parser.ParseForFill(isManual);
|
query = parser.ParseForFill();
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Java.Lang.SecurityException e)
|
catch (Java.Lang.SecurityException e)
|
||||||
@@ -213,16 +211,14 @@ namespace keepass2android.services.AutofillBase
|
|||||||
{
|
{
|
||||||
if (query.WebDomain != null)
|
if (query.WebDomain != null)
|
||||||
AddQueryDataset(query.WebDomain,
|
AddQueryDataset(query.WebDomain,
|
||||||
query.WebDomain, query.PackageName,
|
query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset,
|
||||||
isManual, autofillIds, responseBuilder, !hasEntryDataset,
|
|
||||||
query.IncompatiblePackageAndDomain
|
query.IncompatiblePackageAndDomain
|
||||||
? DisplayWarning.FillDomainInUntrustedApp
|
? DisplayWarning.FillDomainInUntrustedApp
|
||||||
: DisplayWarning.None,
|
: DisplayWarning.None,
|
||||||
AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count));
|
AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count));
|
||||||
else
|
else
|
||||||
AddQueryDataset(query.PackageNameWithPseudoSchema,
|
AddQueryDataset(query.PackageNameWithPseudoSchema,
|
||||||
query.WebDomain, query.PackageName,
|
query.WebDomain, query.PackageName, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None,
|
||||||
isManual, autofillIds, responseBuilder, !hasEntryDataset, DisplayWarning.None,
|
|
||||||
AutofillHelper.ExtractSpec(inlinePresentationSpecs, entryDatasets.Count));
|
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);
|
string text = GetString(Resource.String.autofill_sign_in_prompt);
|
||||||
RemoteViews overlayPresentation = AutofillHelper.NewRemoteViews(base.PackageName,
|
RemoteViews overlayPresentation = AutofillHelper.NewRemoteViews(base.PackageName,
|
||||||
text, AppNames.LauncherIcon);
|
text, AppNames.LauncherIcon);
|
||||||
@@ -396,7 +392,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
if (isQueryDisabled && !isManual)
|
if (isQueryDisabled && !isManual)
|
||||||
return;
|
return;
|
||||||
bool isForDisable = !isQueryDisabled;
|
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) });
|
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,
|
RemoteViews presentation = AutofillHelper.NewRemoteViews(base.PackageName,
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ namespace keepass2android.services.AutofillBase
|
|||||||
public static string ExtraQueryPackageString => "EXTRA_QUERY_PACKAGE_STRING";
|
public static string ExtraQueryPackageString => "EXTRA_QUERY_PACKAGE_STRING";
|
||||||
public static string ExtraQueryDomainString => "EXTRA_QUERY_DOMAIN_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 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 ExtraAutoReturnFromQuery => "EXTRA_AUTO_RETURN_FROM_QUERY";
|
||||||
public static string ExtraDisplayWarning => "EXTRA_DISPLAY_WARNING";
|
public static string ExtraDisplayWarning => "EXTRA_DISPLAY_WARNING";
|
||||||
|
|
||||||
@@ -185,7 +184,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
ReplyIntent = null;
|
ReplyIntent = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void OnSuccess(FilledAutofillFieldCollection<ViewNodeInputField> clientFormDataMap, bool isManual)
|
protected void OnSuccess(FilledAutofillFieldCollection<ViewNodeInputField> clientFormDataMap)
|
||||||
{
|
{
|
||||||
var intent = Intent;
|
var intent = Intent;
|
||||||
AssistStructure structure = (AssistStructure)intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure);
|
AssistStructure structure = (AssistStructure)intent.GetParcelableExtra(AutofillManager.ExtraAssistStructure);
|
||||||
@@ -196,7 +195,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
StructureParser parser = new StructureParser(this, structure);
|
StructureParser parser = new StructureParser(this, structure);
|
||||||
parser.ParseForFill(isManual);
|
parser.ParseForFill();
|
||||||
AutofillFieldMetadataCollection autofillFields = parser.AutofillFields;
|
AutofillFieldMetadataCollection autofillFields = parser.AutofillFields;
|
||||||
var partitionData = AutofillHintsHelper.FilterForPartition(clientFormDataMap, parser.AutofillFields.FocusedAutofillCanonicalHints);
|
var partitionData = AutofillHintsHelper.FilterForPartition(clientFormDataMap, parser.AutofillFields.FocusedAutofillCanonicalHints);
|
||||||
|
|
||||||
@@ -229,7 +228,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
|
|
||||||
private void ReturnSuccess()
|
private void ReturnSuccess()
|
||||||
{
|
{
|
||||||
OnSuccess(GetDataset(), Intent.GetBooleanExtra(ExtraIsManualRequest, false));
|
OnSuccess(GetDataset());
|
||||||
Finish();
|
Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
domainSuffixParserCache = new PublicSuffixRuleCache(context);
|
domainSuffixParserCache = new PublicSuffixRuleCache(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AutofillView<ViewNodeInputField> GetAutofillView(bool isManualRequest)
|
public AutofillView<ViewNodeInputField> GetAutofillView()
|
||||||
{
|
{
|
||||||
AutofillView<ViewNodeInputField> autofillView = new AutofillView<ViewNodeInputField>();
|
AutofillView<ViewNodeInputField> autofillView = new AutofillView<ViewNodeInputField>();
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
var node = _structure.GetWindowNodeAt(i);
|
var node = _structure.GetWindowNodeAt(i);
|
||||||
|
|
||||||
var view = node.RootViewNode;
|
var view = node.RootViewNode;
|
||||||
ParseRecursive(autofillView, view, isManualRequest);
|
ParseRecursive(autofillView, view);
|
||||||
}
|
}
|
||||||
|
|
||||||
autofillView.PackageId = autofillView.PackageId ?? _structure.ActivityComponent.PackageName;
|
autofillView.PackageId = autofillView.PackageId ?? _structure.ActivityComponent.PackageName;
|
||||||
@@ -93,7 +93,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ParseRecursive(AutofillView<ViewNodeInputField> autofillView, AssistStructure.ViewNode viewNode, bool isManualRequest)
|
void ParseRecursive(AutofillView<ViewNodeInputField> autofillView, AssistStructure.ViewNode viewNode)
|
||||||
{
|
{
|
||||||
String webDomain = viewNode.WebDomain;
|
String webDomain = viewNode.WebDomain;
|
||||||
if ((autofillView.PackageId == null) && (!string.IsNullOrWhiteSpace(viewNode.IdPackage)) &&
|
if ((autofillView.PackageId == null) && (!string.IsNullOrWhiteSpace(viewNode.IdPackage)) &&
|
||||||
@@ -129,7 +129,7 @@ namespace keepass2android.services.AutofillBase
|
|||||||
{
|
{
|
||||||
for (int i = 0; i < childrenSize; i++)
|
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<ViewNodeInputField> autofillView)
|
protected override AutofillTargetId Parse(bool forFill, AutofillView<ViewNodeInputField> autofillView)
|
||||||
{
|
{
|
||||||
if (autofillView == null)
|
if (autofillView == null)
|
||||||
Kp2aLog.Log("Received null autofill view!");
|
Kp2aLog.Log("Received null autofill view!");
|
||||||
var result = base.Parse(forFill, isManualRequest, autofillView);
|
var result = base.Parse(forFill, autofillView);
|
||||||
|
|
||||||
Kp2aLog.Log("Parsing done");
|
Kp2aLog.Log("Parsing done");
|
||||||
|
|
||||||
@@ -185,14 +185,14 @@ namespace keepass2android.services.AutofillBase
|
|||||||
|
|
||||||
public AutofillTargetId ParseForSave()
|
public AutofillTargetId ParseForSave()
|
||||||
{
|
{
|
||||||
var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(true);
|
var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView();
|
||||||
return Parse(false, true, autofillView);
|
return Parse(false, autofillView);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StructureParserBase<ViewNodeInputField>.AutofillTargetId ParseForFill(bool isManual)
|
public StructureParserBase<ViewNodeInputField>.AutofillTargetId ParseForFill()
|
||||||
{
|
{
|
||||||
var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView(isManual);
|
var autofillView = new AutofillViewFromAssistStructureFinder(_context, _structure).GetAutofillView();
|
||||||
return Parse(true, isManual, autofillView);
|
return Parse(true, autofillView);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,14 +17,12 @@ namespace keepass2android.services
|
|||||||
{
|
{
|
||||||
private static int _pendingIntentRequestCode = 0;
|
private static int _pendingIntentRequestCode = 0;
|
||||||
|
|
||||||
public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage,
|
public PendingIntent GetAuthPendingIntentForResponse(Context context, string query, string queryDomain, string queryPackage, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning)
|
||||||
bool isManualRequest, bool autoReturnFromQuery, AutofillServiceBase.DisplayWarning warning)
|
|
||||||
{
|
{
|
||||||
Intent intent = new Intent(context, typeof(ChooseForAutofillActivity));
|
Intent intent = new Intent(context, typeof(ChooseForAutofillActivity));
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query);
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryDomainString, queryDomain);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryDomainString, queryDomain);
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryPackageString, queryPackage);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryPackageString, queryPackage);
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest);
|
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraAutoReturnFromQuery, autoReturnFromQuery);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraAutoReturnFromQuery, autoReturnFromQuery);
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraDisplayWarning, (int)warning);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraDisplayWarning, (int)warning);
|
||||||
return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable));
|
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));
|
return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Mutable));
|
||||||
}
|
}
|
||||||
|
|
||||||
public PendingIntent GetDisablePendingIntentForResponse(Context context, string query,
|
public PendingIntent GetDisablePendingIntentForResponse(Context context, string query, bool isDisable)
|
||||||
bool isManualRequest, bool isDisable)
|
|
||||||
{
|
{
|
||||||
Intent intent = new Intent(context, typeof(DisableAutofillForQueryActivity));
|
Intent intent = new Intent(context, typeof(DisableAutofillForQueryActivity));
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query);
|
intent.PutExtra(ChooseForAutofillActivityBase.ExtraQueryString, query);
|
||||||
intent.PutExtra(ChooseForAutofillActivityBase.ExtraIsManualRequest, isManualRequest);
|
|
||||||
intent.PutExtra(DisableAutofillForQueryActivity.ExtraIsDisable, isDisable);
|
intent.PutExtra(DisableAutofillForQueryActivity.ExtraIsDisable, isDisable);
|
||||||
|
|
||||||
return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Immutable));
|
return PendingIntent.GetActivity(context, _pendingIntentRequestCode++, intent, Util.AddMutabilityFlag(PendingIntentFlags.CancelCurrent, PendingIntentFlags.Immutable));
|
||||||
|
|||||||
Reference in New Issue
Block a user