From 7a62cf901d6c7340cf8521ef21d0a47f975572b2 Mon Sep 17 00:00:00 2001 From: Joanne Chung Date: Fri, 29 Apr 2022 20:53:26 +0800 Subject: [PATCH] Add dialog present support for AutofillService. Bug: 229057036 Test: manual. Can show filldialog with Autofill sample Change-Id: If3266fbbba12cbcf8b4641da53d6b809f56d83f7 --- .../inlinefillservice/InlineFillService.java | 9 +++++++-- .../android/inlinefillservice/ResponseHelper.java | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/samples/InlineFillService/src/com/example/android/inlinefillservice/InlineFillService.java b/samples/InlineFillService/src/com/example/android/inlinefillservice/InlineFillService.java index cce61378f..1fa58c1c1 100644 --- a/samples/InlineFillService/src/com/example/android/inlinefillservice/InlineFillService.java +++ b/samples/InlineFillService/src/com/example/android/inlinefillservice/InlineFillService.java @@ -134,8 +134,13 @@ public class InlineFillService extends AutofillService { response.addDataset(InlineRequestHelper.createInlineActionDataset(context, fields, inlineRequest.get(), R.drawable.ic_settings)); } + // 3. Add fill dialog + RemoteViews dialogPresentation = + ResponseHelper.newDatasetPresentation(packageName, "Dialog Header"); + response.setDialogHeader(dialogPresentation); + response.setFillDialogTriggerIds(fields.valueAt(0), fields.valueAt(1)); - // 3.Add save info + // 4.Add save info Collection ids = fields.values(); AutofillId[] requiredIds = new AutofillId[ids.size()]; ids.toArray(requiredIds); @@ -143,7 +148,7 @@ public class InlineFillService extends AutofillService { // We're simple, so we're generic new SaveInfo.Builder(SaveInfo.SAVE_DATA_TYPE_GENERIC, requiredIds).build()); - // 4.Profit! + // 5.Profit! return response.build(); } diff --git a/samples/InlineFillService/src/com/example/android/inlinefillservice/ResponseHelper.java b/samples/InlineFillService/src/com/example/android/inlinefillservice/ResponseHelper.java index f6e6ab7e8..d33f19cde 100644 --- a/samples/InlineFillService/src/com/example/android/inlinefillservice/ResponseHelper.java +++ b/samples/InlineFillService/src/com/example/android/inlinefillservice/ResponseHelper.java @@ -59,8 +59,10 @@ class ResponseHelper { // Set presentation final Presentations.Builder fieldPresentationsBuilder = new Presentations.Builder(); + // Dropdown presentation final RemoteViews presentation = newDatasetPresentation(packageName, displayValue); fieldPresentationsBuilder.setMenuPresentation(presentation); + // Inline presentation if (inlineRequest.isPresent()) { Log.d(TAG, "Found InlineSuggestionsRequest in FillRequest: " + inlineRequest); final InlinePresentation inlinePresentation = @@ -68,6 +70,11 @@ class ResponseHelper { displayValue, index); fieldPresentationsBuilder.setInlinePresentation(inlinePresentation); } + // Dialog presentation + RemoteViews dialogPresentation = + newDatasetPresentation(packageName, "Dialog Presentation " + (index + 1)); + fieldPresentationsBuilder.setDialogPresentation(dialogPresentation); + fieldBuilder.setPresentations(fieldPresentationsBuilder.build()); dataset.setField(id, fieldBuilder.build()); } @@ -92,15 +99,22 @@ class ResponseHelper { Field.Builder fieldBuilder = new Field.Builder(); fieldBuilder.setValue(AutofillValue.forText(value)); + // Dropdown presentation final Presentations.Builder fieldPresentationsBuilder = new Presentations.Builder(); fieldPresentationsBuilder.setMenuPresentation(presentation); + // Inline presentation if (inlineRequest.isPresent()) { final InlinePresentation inlinePresentation = InlineRequestHelper.createInlineDataset(context, inlineRequest.get(), displayValue, index); fieldPresentationsBuilder.setInlinePresentation(inlinePresentation); } + // Dialog presentation + RemoteViews dialogPresentation = + newDatasetPresentation(packageName, "Dialog Presentation " + (index + 1)); + fieldPresentationsBuilder.setDialogPresentation(dialogPresentation); + fieldBuilder.setPresentations(fieldPresentationsBuilder.build()); lockedDataset.setField(id, fieldBuilder.build()); lockedDataset.setId(null).setAuthentication(authentication);