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.