protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); string requestedUrl = Intent.GetStringExtra(ChooseForAutofillActivityBase.ExtraQueryString); if (requestedUrl == null) { Toast.MakeText(this, "Cannot execute query for null.", ToastLength.Long).Show(); RestartApp(); return; } var prefs = PreferenceManager.GetDefaultSharedPreferences(this); bool isDisable = Intent.GetBooleanExtra(ExtraIsDisable, true); var disabledValues = prefs.GetStringSet("AutoFillDisabledQueries", new HashSet <string>() { }).ToHashSet(); if (isDisable) { disabledValues.Add(requestedUrl); } else { disabledValues.Remove(requestedUrl); } 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); StructureParser parser = new StructureParser(this, structure); try { parser.ParseForFill(isManual); } catch (Java.Lang.SecurityException e) { Log.Warn(CommonUtil.Tag, "Security exception handling request"); SetResult(Result.Canceled); return; } AutofillFieldMetadataCollection autofillFields = parser.AutofillFields; var autofillIds = autofillFields.GetAutofillIds(); builder.SetIgnoredIds(autofillIds); Bundle state = new Bundle(); state.PutStringArray("AutoFillDisabledQueries", disabledValues.ToArray()); builder.SetClientState(state); try { var response = builder.Build(); reply.PutExtra(AutofillManager.ExtraAuthenticationResult, response); } catch (Exception e) { Kp2aLog.LogUnexpectedError(e); throw; } SetResult(Result.Ok, reply); Finish(); }
public override void OnFillRequest(FillRequest request, CancellationSignal cancellationSignal, FillCallback callback) { bool isManual = (request.Flags & FillRequest.FlagManualRequest) != 0; CommonUtil.logd("onFillRequest " + (isManual ? "manual" : "auto")); var structure = request.FillContexts[request.FillContexts.Count - 1].Structure; //TODO support package signature verification as soon as this is supported in Keepass storage var clientState = request.ClientState; CommonUtil.logd("onFillRequest(): data=" + CommonUtil.BundleToString(clientState)); cancellationSignal.CancelEvent += (sender, e) => { Log.Warn(CommonUtil.Tag, "Cancel autofill not implemented yet."); }; // Parse AutoFill data in Activity string query = null; var parser = new StructureParser(this, structure); try { query = parser.ParseForFill(isManual); } catch (Java.Lang.SecurityException e) { Log.Warn(CommonUtil.Tag, "Security exception handling request"); callback.OnFailure(e.Message); return; } AutofillFieldMetadataCollection autofillFields = parser.AutofillFields; var autofillIds = autofillFields.GetAutofillIds(); if (autofillIds.Length != 0 && CanAutofill(query, isManual)) { var responseBuilder = new FillResponse.Builder(); var entryDataset = AddEntryDataset(query, parser); bool hasEntryDataset = entryDataset != null; if (entryDataset != null) { responseBuilder.AddDataset(entryDataset); } AddQueryDataset(query, isManual, autofillIds, responseBuilder, !hasEntryDataset); AddDisableDataset(query, autofillIds, responseBuilder, isManual); responseBuilder.SetSaveInfo(new SaveInfo.Builder(parser.AutofillFields.SaveType, parser.AutofillFields.GetAutofillIds()).Build()); callback.OnSuccess(responseBuilder.Build()); } else { var builder = new FillResponse.Builder(); builder.SetClientState(new Bundle()); callback.OnSuccess(builder.Build()); } }