diff --git a/core/java/android/view/autofill/AutofillManager.java b/core/java/android/view/autofill/AutofillManager.java index 2ef7419ac1b10..ea750765799f3 100644 --- a/core/java/android/view/autofill/AutofillManager.java +++ b/core/java/android/view/autofill/AutofillManager.java @@ -468,7 +468,8 @@ public final class AutofillManager { COMMIT_REASON_ACTIVITY_FINISHED, COMMIT_REASON_VIEW_COMMITTED, COMMIT_REASON_VIEW_CLICKED, - COMMIT_REASON_VIEW_CHANGED + COMMIT_REASON_VIEW_CHANGED, + COMMIT_REASON_SESSION_DESTROYED }) @Retention(RetentionPolicy.SOURCE) public @interface AutofillCommitReason {} @@ -507,6 +508,12 @@ public final class AutofillManager { * @hide */ public static final int COMMIT_REASON_VIEW_CHANGED = 4; + /** + * Autofill context was committed because of the session was destroyed. + * + * @hide + */ + public static final int COMMIT_REASON_SESSION_DESTROYED = 5; /** * Makes an authentication id from a request id and a dataset id. diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index c95623a519c41..bf9d21482bb67 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -42,6 +42,7 @@ import static android.view.autofill.AutofillManager.ACTION_START_SESSION; import static android.view.autofill.AutofillManager.ACTION_VALUE_CHANGED; import static android.view.autofill.AutofillManager.ACTION_VIEW_ENTERED; import static android.view.autofill.AutofillManager.ACTION_VIEW_EXITED; +import static android.view.autofill.AutofillManager.COMMIT_REASON_SESSION_DESTROYED; import static android.view.autofill.AutofillManager.COMMIT_REASON_UNKNOWN; import static android.view.autofill.AutofillManager.FLAG_SMART_SUGGESTION_SYSTEM; import static android.view.autofill.AutofillManager.getSmartSuggestionModeToString; @@ -85,7 +86,6 @@ import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_O import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_REQUIRED_ID_CHANGE; import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_TRIGGER_ID_SET; import static com.android.server.autofill.SaveEventLogger.SAVE_UI_SHOWN_REASON_UNKNOWN; -import static com.android.server.autofill.SessionCommittedEventLogger.COMMIT_REASON_SESSION_DESTROYED; import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_RECEIVER_EXTRAS; import static com.android.server.wm.ActivityTaskManagerInternal.ASSIST_KEY_STRUCTURE; @@ -2730,6 +2730,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState mHandler.sendMessage(obtainMessage(Session::handleLogContextCommitted, this, Event.NO_SAVE_UI_REASON_NONE, COMMIT_REASON_UNKNOWN)); + logAllEvents(COMMIT_REASON_UNKNOWN); } /** @@ -2743,6 +2744,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState @AutofillCommitReason int commitReason) { mHandler.sendMessage(obtainMessage(Session::handleLogContextCommitted, this, saveDialogNotShowReason, commitReason)); + logAllEvents(commitReason); } private void handleLogContextCommitted(@NoSaveReason int saveDialogNotShowReason, @@ -2974,6 +2976,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState changedFieldIds, changedDatasetIds, manuallyFilledFieldIds, manuallyFilledDatasetIds, detectedFieldIds, detectedFieldClassifications, mComponentName, mCompatMode, saveDialogNotShowReason); + logAllEvents(commitReason); } /** @@ -5679,6 +5682,19 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } } + @GuardedBy("mLock") + private void logAllEvents(@AutofillCommitReason int val) { + mSessionCommittedEventLogger.maybeSetCommitReason(val); + mSessionCommittedEventLogger.maybeSetRequestCount(mRequestCount); + mSessionCommittedEventLogger.maybeSetSessionDurationMillis( + SystemClock.elapsedRealtime() - mStartTime); + mFillRequestEventLogger.logAndEndEvent(); + mFillResponseEventLogger.logAndEndEvent(); + mPresentationStatsEventLogger.logAndEndEvent(); + mSaveEventLogger.logAndEndEvent(); + mSessionCommittedEventLogger.logAndEndEvent(); + } + /** * Destroy this session and perform any clean up work. * @@ -5693,15 +5709,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState @GuardedBy("mLock") RemoteFillService destroyLocked() { // Log unlogged events. - mSessionCommittedEventLogger.maybeSetCommitReason(COMMIT_REASON_SESSION_DESTROYED); - mSessionCommittedEventLogger.maybeSetRequestCount(mRequestCount); - mSessionCommittedEventLogger.maybeSetSessionDurationMillis( - SystemClock.elapsedRealtime() - mStartTime); - mSessionCommittedEventLogger.logAndEndEvent(); - mPresentationStatsEventLogger.logAndEndEvent(); - mSaveEventLogger.logAndEndEvent(); - mFillResponseEventLogger.logAndEndEvent(); - mFillRequestEventLogger.logAndEndEvent(); + logAllEvents(COMMIT_REASON_SESSION_DESTROYED); if (mDestroyed) { return null; diff --git a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java index 541ec80e58ae4..cd37073a14040 100644 --- a/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java +++ b/services/autofill/java/com/android/server/autofill/SessionCommittedEventLogger.java @@ -16,13 +16,8 @@ package com.android.server.autofill; +import static android.view.autofill.AutofillManager.COMMIT_REASON_UNKNOWN; import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_ACTIVITY_FINISHED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_SESSION_DESTROYED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_UNKNOWN; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CHANGED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CLICKED; -import static com.android.internal.util.FrameworkStatsLog.AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_COMMITTED; import static com.android.server.autofill.Helper.sVerbose; import android.annotation.IntDef; @@ -32,7 +27,7 @@ import android.content.pm.PackageManager; import android.provider.Settings; import android.text.TextUtils; import android.util.Slog; - +import android.view.autofill.AutofillManager.AutofillCommitReason; import com.android.internal.util.FrameworkStatsLog; import java.lang.annotation.Retention; @@ -45,35 +40,6 @@ import java.util.Optional; public final class SessionCommittedEventLogger { private static final String TAG = "SessionCommittedEventLogger"; - /** - * Reasons why presentation was not shown. These are wrappers around - * {@link com.android.os.AtomsProto.AutofillSessionCommitted.AutofillCommitReason}. - */ - @IntDef(prefix = {"COMMIT_REASON"}, value = { - COMMIT_REASON_UNKNOWN, - COMMIT_REASON_ACTIVITY_FINISHED, - COMMIT_REASON_VIEW_COMMITTED, - COMMIT_REASON_VIEW_CLICKED, - COMMIT_REASON_VIEW_CHANGED, - COMMIT_REASON_SESSION_DESTROYED - }) - @Retention(RetentionPolicy.SOURCE) - public @interface CommitReason { - } - - public static final int COMMIT_REASON_UNKNOWN = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_UNKNOWN; - public static final int COMMIT_REASON_ACTIVITY_FINISHED = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_ACTIVITY_FINISHED; - public static final int COMMIT_REASON_VIEW_COMMITTED = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_COMMITTED; - public static final int COMMIT_REASON_VIEW_CLICKED = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CLICKED; - public static final int COMMIT_REASON_VIEW_CHANGED = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_VIEW_CHANGED; - public static final int COMMIT_REASON_SESSION_DESTROYED = - AUTOFILL_SESSION_COMMITTED__COMMIT_REASON__COMMIT_REASON_SESSION_DESTROYED; - private final int mSessionId; private Optional mEventInternal; @@ -110,9 +76,9 @@ public final class SessionCommittedEventLogger { /** * Set commit_reason as long as mEventInternal presents. */ - public void maybeSetCommitReason(@CommitReason int val) { + public void maybeSetCommitReason(@AutofillCommitReason int val) { mEventInternal.ifPresent(event -> { - event.mCommitReason = val; + event.mCommitReason = val; }); }