Merge "[Expand AutofillPresentationEvent] : Log autofill service and IME uid" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
d631c7acf4
@@ -41,7 +41,12 @@ import static com.android.server.autofill.Helper.sVerbose;
|
|||||||
|
|
||||||
import android.annotation.IntDef;
|
import android.annotation.IntDef;
|
||||||
import android.annotation.Nullable;
|
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.service.autofill.Dataset;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Slog;
|
import android.util.Slog;
|
||||||
import android.view.autofill.AutofillId;
|
import android.view.autofill.AutofillId;
|
||||||
import android.view.autofill.AutofillManager;
|
import android.view.autofill.AutofillManager;
|
||||||
@@ -61,7 +66,7 @@ public final class PresentationStatsEventLogger {
|
|||||||
* Reasons why presentation was not shown. These are wrappers around
|
* Reasons why presentation was not shown. These are wrappers around
|
||||||
* {@link com.android.os.AtomsProto.AutofillPresentationEventReported.PresentationEventResult}.
|
* {@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_ANY_SHOWN,
|
||||||
NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED,
|
NOT_SHOWN_REASON_VIEW_FOCUS_CHANGED,
|
||||||
NOT_SHOWN_REASON_VIEW_CHANGED,
|
NOT_SHOWN_REASON_VIEW_CHANGED,
|
||||||
@@ -72,6 +77,7 @@ public final class PresentationStatsEventLogger {
|
|||||||
})
|
})
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
public @interface NotShownReason {}
|
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_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_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;
|
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() {
|
public void logAndEndEvent() {
|
||||||
if (!mEventInternal.isPresent()) {
|
if (!mEventInternal.isPresent()) {
|
||||||
Slog.w(TAG, "Shouldn't be logging AutofillPresentationEventReported again for same "
|
Slog.w(TAG, "Shouldn't be logging AutofillPresentationEventReported again for same "
|
||||||
@@ -190,7 +235,10 @@ public final class PresentationStatsEventLogger {
|
|||||||
+ " mCountNotShownImePresentationNotDrawn="
|
+ " mCountNotShownImePresentationNotDrawn="
|
||||||
+ event.mCountNotShownImePresentationNotDrawn
|
+ event.mCountNotShownImePresentationNotDrawn
|
||||||
+ " mCountNotShownImeUserNotSeen=" + event.mCountNotShownImeUserNotSeen
|
+ " 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.
|
// TODO(b/234185326): Distinguish empty responses from other no presentation reasons.
|
||||||
@@ -208,7 +256,10 @@ public final class PresentationStatsEventLogger {
|
|||||||
event.mCountFilteredUserTyping,
|
event.mCountFilteredUserTyping,
|
||||||
event.mCountNotShownImePresentationNotDrawn,
|
event.mCountNotShownImePresentationNotDrawn,
|
||||||
event.mCountNotShownImeUserNotSeen,
|
event.mCountNotShownImeUserNotSeen,
|
||||||
event.mDisplayPresentationType);
|
event.mDisplayPresentationType,
|
||||||
|
event.mAutofillServiceUid,
|
||||||
|
event.mInlineSuggestionHostUid,
|
||||||
|
event.mIsRequestTriggered);
|
||||||
mEventInternal = Optional.empty();
|
mEventInternal = Optional.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,6 +273,9 @@ public final class PresentationStatsEventLogger {
|
|||||||
int mCountNotShownImePresentationNotDrawn;
|
int mCountNotShownImePresentationNotDrawn;
|
||||||
int mCountNotShownImeUserNotSeen;
|
int mCountNotShownImeUserNotSeen;
|
||||||
int mDisplayPresentationType = AUTOFILL_PRESENTATION_EVENT_REPORTED__DISPLAY_PRESENTATION_TYPE__UNKNOWN_AUTOFILL_DISPLAY_PRESENTATION_TYPE;
|
int mDisplayPresentationType = AUTOFILL_PRESENTATION_EVENT_REPORTED__DISPLAY_PRESENTATION_TYPE__UNKNOWN_AUTOFILL_DISPLAY_PRESENTATION_TYPE;
|
||||||
|
int mAutofillServiceUid = -1;
|
||||||
|
int mInlineSuggestionHostUid = -1;
|
||||||
|
boolean mIsRequestTriggered;
|
||||||
|
|
||||||
PresentationStatsEventInternal() {}
|
PresentationStatsEventInternal() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.IntentSender;
|
import android.content.IntentSender;
|
||||||
|
import android.content.pm.ServiceInfo;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
@@ -77,6 +78,7 @@ import android.os.Handler;
|
|||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.IBinder.DeathRecipient;
|
import android.os.IBinder.DeathRecipient;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import android.os.Process;
|
||||||
import android.os.RemoteCallback;
|
import android.os.RemoteCallback;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
@@ -2968,6 +2970,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
|
|||||||
mSessionFlags.mFillDialogDisabled = true;
|
mSessionFlags.mFillDialogDisabled = true;
|
||||||
}
|
}
|
||||||
mPresentationStatsEventLogger.startNewEvent();
|
mPresentationStatsEventLogger.startNewEvent();
|
||||||
|
mPresentationStatsEventLogger.maybeSetAutofillServiceUid(getAutofillServiceUid());
|
||||||
requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_SESSION, flags);
|
requestNewFillResponseLocked(viewState, ViewState.STATE_STARTED_SESSION, flags);
|
||||||
break;
|
break;
|
||||||
case ACTION_VALUE_CHANGED:
|
case ACTION_VALUE_CHANGED:
|
||||||
@@ -3057,6 +3060,7 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
|
|||||||
}
|
}
|
||||||
|
|
||||||
mPresentationStatsEventLogger.startNewEvent();
|
mPresentationStatsEventLogger.startNewEvent();
|
||||||
|
mPresentationStatsEventLogger.maybeSetAutofillServiceUid(getAutofillServiceUid());
|
||||||
if (requestNewFillResponseOnViewEnteredIfNecessaryLocked(id, viewState, flags)) {
|
if (requestNewFillResponseOnViewEnteredIfNecessaryLocked(id, viewState, flags)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3292,7 +3296,8 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
|
|||||||
// shown, inflated, and filtered.
|
// shown, inflated, and filtered.
|
||||||
mPresentationStatsEventLogger.maybeSetCountShown(
|
mPresentationStatsEventLogger.maybeSetCountShown(
|
||||||
response.getDatasets(), mCurrentViewId);
|
response.getDatasets(), mCurrentViewId);
|
||||||
mPresentationStatsEventLogger.maybeSetDisplayPresentationType(UI_TYPE_INLINE);
|
mPresentationStatsEventLogger.maybeSetInlinePresentationAndSuggestionHostUid(
|
||||||
|
mContext, userId);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4639,4 +4644,9 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
|
|||||||
return "UNKNOWN_SESSION_STATE_" + sessionState;
|
return "UNKNOWN_SESSION_STATE_" + sessionState;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getAutofillServiceUid() {
|
||||||
|
ServiceInfo serviceInfo = mService.getServiceInfo();
|
||||||
|
return serviceInfo == null ? Process.INVALID_UID : serviceInfo.applicationInfo.uid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user