diff --git a/api/current.txt b/api/current.txt index 25801cac203e4..1bcce6d783fc3 100644 --- a/api/current.txt +++ b/api/current.txt @@ -41046,6 +41046,7 @@ package android.service.autofill { method public int getType(); field public static final int TYPE_AUTHENTICATION_SELECTED = 2; // 0x2 field public static final int TYPE_CONTEXT_COMMITTED = 4; // 0x4 + field public static final int TYPE_DATASETS_SHOWN = 5; // 0x5 field public static final int TYPE_DATASET_AUTHENTICATION_SELECTED = 1; // 0x1 field public static final int TYPE_DATASET_SELECTED = 0; // 0x0 field public static final int TYPE_SAVE_SHOWN = 3; // 0x3 diff --git a/core/java/android/service/autofill/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java index c65e773283cb4..1cd2d62ce55fe 100644 --- a/core/java/android/service/autofill/FillEventHistory.java +++ b/core/java/android/service/autofill/FillEventHistory.java @@ -224,13 +224,21 @@ public final class FillEventHistory implements Parcelable { */ public static final int TYPE_CONTEXT_COMMITTED = 4; + /** + * A dataset selector was shown. + * + *

This event is fired whenever the autofill UI was presented to the user.

+ */ + public static final int TYPE_DATASETS_SHOWN = 5; + /** @hide */ @IntDef(prefix = { "TYPE_" }, value = { TYPE_DATASET_SELECTED, TYPE_DATASET_AUTHENTICATION_SELECTED, TYPE_AUTHENTICATION_SELECTED, TYPE_SAVE_SHOWN, - TYPE_CONTEXT_COMMITTED + TYPE_CONTEXT_COMMITTED, + TYPE_DATASETS_SHOWN }) @Retention(RetentionPolicy.SOURCE) @interface EventIds{} @@ -473,7 +481,7 @@ public final class FillEventHistory implements Parcelable { @Nullable ArrayList> manuallyFilledDatasetIds, @Nullable AutofillId[] detectedFieldIds, @Nullable FieldClassification[] detectedFieldClassifications) { - mEventType = Preconditions.checkArgumentInRange(eventType, 0, TYPE_CONTEXT_COMMITTED, + mEventType = Preconditions.checkArgumentInRange(eventType, 0, TYPE_DATASETS_SHOWN, "eventType"); mDatasetId = datasetId; mClientState = clientState; diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java index aada96771324a..1e1e07d32588d 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerServiceImpl.java @@ -768,6 +768,19 @@ final class AutofillManagerServiceImpl } } + /** + * Updates the last fill response when a dataset is shown. + */ + void logDatasetShown(int sessionId, @Nullable Bundle clientState) { + synchronized (mLock) { + if (isValidEventLocked("logDatasetShown", sessionId)) { + mEventHistory.addEvent( + new Event(Event.TYPE_DATASETS_SHOWN, null, clientState, null, null, null, + null, null, null, null, null)); + } + } + } + /** * Updates the last fill response when an autofill context is committed. */ diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 988db6a871004..46c2a85d06916 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -2497,6 +2497,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mService.getServicePackageName(), mComponentName, serviceLabel, serviceIcon, this, id, mCompatMode); + mService.logDatasetShown(id, mClientState); + synchronized (mLock) { if (mUiShownTime == 0) { // Log first time UI is shown.