Merge "[Expand AutofillPresentationEvent] : Log autofill service and IME uid" into tm-qpr-dev am: d631c7acf4

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19877434

Change-Id: I47af0073b7420f91e9d5572e60abf22b3ac3f509
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Simranjit Kohli
2022-09-08 20:45:34 +00:00
committed by Automerger Merge Worker
2 changed files with 68 additions and 4 deletions

View File

@@ -41,7 +41,12 @@ import static com.android.server.autofill.Helper.sVerbose;
import android.annotation.IntDef;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.provider.Settings;
import android.service.autofill.Dataset;
import android.text.TextUtils;
import android.util.Slog;
import android.view.autofill.AutofillId;
import android.view.autofill.AutofillManager;
@@ -61,7 +66,7 @@ public final class PresentationStatsEventLogger {
* Reasons why presentation was not shown. These are wrappers around
* {@link com.android.os.AtomsProto.AutofillPresentationEventReported.PresentationEventResult}.
*/
@IntDef(prefix = { "NOT_SHOWN_REASON" }, value = {
@IntDef(prefix = {"NOT_SHOWN_REASON"}, value = {
NOT_SHOWN_REASON_ANY_SHOWN,
NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED,
NOT_SHOWN_REASON_VIEW_CHANGED,
@@ -72,6 +77,7 @@ public final class PresentationStatsEventLogger {
})
@Retention(RetentionPolicy.SOURCE)
public @interface NotShownReason {}
public static final int NOT_SHOWN_REASON_ANY_SHOWN = AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__ANY_SHOWN;
public static final int NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED = AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__NONE_SHOWN_VIEW_FOCUS_CHANGED;
public static final int NOT_SHOWN_REASON_VIEW_CHANGED = AUTOFILL_PRESENTATION_EVENT_REPORTED__PRESENTATION_EVENT_RESULT__NONE_SHOWN_VIEW_CHANGED;
@@ -172,6 +178,45 @@ public final class PresentationStatsEventLogger {
});
}
public void maybeSetInlinePresentationAndSuggestionHostUid(Context context, int userId) {
mEventInternal.ifPresent(event -> {
event.mDisplayPresentationType = UI_TYPE_INLINE;
String imeString = Settings.Secure.getStringForUser(context.getContentResolver(),
Settings.Secure.DEFAULT_INPUT_METHOD, userId);
if (TextUtils.isEmpty(imeString)) {
Slog.w(TAG, "No default IME found");
return;
}
ComponentName imeComponent = ComponentName.unflattenFromString(imeString);
if (imeComponent == null) {
Slog.w(TAG, "No default IME found");
return;
}
int imeUid;
String packageName = imeComponent.getPackageName();
try {
imeUid = context.getPackageManager().getApplicationInfoAsUser(packageName,
PackageManager.ApplicationInfoFlags.of(0), userId).uid;
} catch (PackageManager.NameNotFoundException e) {
Slog.w(TAG, "Couldn't find packageName: " + packageName);
return;
}
event.mInlineSuggestionHostUid = imeUid;
});
}
public void maybeSetAutofillServiceUid(int uid) {
mEventInternal.ifPresent(event -> {
event.mAutofillServiceUid = uid;
});
}
public void maybeSetIsNewRequest(boolean isRequestTriggered) {
mEventInternal.ifPresent(event -> {
event.mIsRequestTriggered = isRequestTriggered;
});
}
public void logAndEndEvent() {
if (!mEventInternal.isPresent()) {
Slog.w(TAG, "Shouldn't be logging AutofillPresentationEventReported again for same "
@@ -190,7 +235,10 @@ public final class PresentationStatsEventLogger {
+ " mCountNotShownImePresentationNotDrawn="
+ event.mCountNotShownImePresentationNotDrawn
+ " mCountNotShownImeUserNotSeen=" + event.mCountNotShownImeUserNotSeen
+ " mDisplayPresentationType=" + event.mDisplayPresentationType);
+ " mDisplayPresentationType=" + event.mDisplayPresentationType
+ " mAutofillServiceUid=" + event.mAutofillServiceUid
+ " mInlineSuggestionHostUid=" + event.mInlineSuggestionHostUid
+ " mIsRequestTriggered=" + event.mIsRequestTriggered);
}
// TODO(b/234185326): Distinguish empty responses from other no presentation reasons.
@@ -208,7 +256,10 @@ public final class PresentationStatsEventLogger {
event.mCountFilteredUserTyping,
event.mCountNotShownImePresentationNotDrawn,
event.mCountNotShownImeUserNotSeen,
event.mDisplayPresentationType);
event.mDisplayPresentationType,
event.mAutofillServiceUid,
event.mInlineSuggestionHostUid,
event.mIsRequestTriggered);
mEventInternal = Optional.empty();
}
@@ -222,6 +273,9 @@ public final class PresentationStatsEventLogger {
int mCountNotShownImePresentationNotDrawn;
int mCountNotShownImeUserNotSeen;
int mDisplayPresentationType = AUTOFILL_PRESENTATION_EVENT_REPORTED__DISPLAY_PRESENTATION_TYPE__UNKNOWN_AUTOFILL_DISPLAY_PRESENTATION_TYPE;
int mAutofillServiceUid = -1;
int mInlineSuggestionHostUid = -1;
boolean mIsRequestTriggered;
PresentationStatsEventInternal() {}
}

View File

@@ -66,6 +66,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.pm.ServiceInfo;
import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
@@ -77,6 +78,7 @@ import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder.DeathRecipient;
import android.os.Parcelable;
import android.os.Process;
import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -2968,6 +2970,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
mSessionFlags.mFillDialogDisabled = true;
}
mPresentationStatsEventLogger.startNewEvent();
mPresentationStatsEventLogger.maybeSetAutofillServiceUid(getAutofillServiceUid());
requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_SESSION, flags);
break;
case ACTION_VALUE_CHANGED:
@@ -3057,6 +3060,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
}
mPresentationStatsEventLogger.startNewEvent();
mPresentationStatsEventLogger.maybeSetAutofillServiceUid(getAutofillServiceUid());
if (requestNewFillResponseOnViewEnteredIfNecessaryLocked(id, viewState, flags)) {
return;
}
@@ -3292,7 +3296,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
// shown, inflated, and filtered.
mPresentationStatsEventLogger.maybeSetCountShown(
response.getDatasets(), mCurrentViewId);
mPresentationStatsEventLogger.maybeSetDisplayPresentationType(UI_TYPE_INLINE);
mPresentationStatsEventLogger.maybeSetInlinePresentationAndSuggestionHostUid(
mContext, userId);
return;
}
}
@@ -4639,4 +4644,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
return "UNKNOWN_SESSION_STATE_" + sessionState;
}
}
private int getAutofillServiceUid() {
ServiceInfo serviceInfo = mService.getServiceInfo();
return serviceInfo == null ? Process.INVALID_UID : serviceInfo.applicationInfo.uid;
}
}