fix picture-in-picture logging
+ log uid and activity name Test: manual test. Will add cts test Change-Id: I3d3e77b24779e439eacc06007fae62c037a19fd6
This commit is contained in:
@ -993,21 +993,18 @@ message AppStartFullyDrawnChanged {
|
||||
* frameworks/base/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java
|
||||
*/
|
||||
message PictureInPictureStateChanged {
|
||||
// -1 if it is not available
|
||||
optional int32 uid = 1;
|
||||
|
||||
optional string package_name = 2;
|
||||
optional string short_name = 2;
|
||||
|
||||
optional string class_name = 3;
|
||||
|
||||
// Picture-in-Picture action occurred, similar to
|
||||
// frameworks/base/proto/src/metrics_constants.proto
|
||||
enum State {
|
||||
ENTERED = 1;
|
||||
EXPANDED_TO_FULL_SCREEN = 2;
|
||||
MINIMIZED = 3;
|
||||
DISMISSED = 4;
|
||||
}
|
||||
optional State state = 4;
|
||||
optional State state = 3;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -16,7 +16,10 @@
|
||||
|
||||
package com.android.internal.os.logging;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.util.Pair;
|
||||
import android.util.StatsLog;
|
||||
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
@ -31,43 +34,49 @@ public class MetricsLoggerWrapper {
|
||||
private static final int METRIC_VALUE_DISMISSED_BY_TAP = 0;
|
||||
private static final int METRIC_VALUE_DISMISSED_BY_DRAG = 1;
|
||||
|
||||
public static void logPictureInPictureDismissByTap(Context context) {
|
||||
public static void logPictureInPictureDismissByTap(Context context,
|
||||
Pair<ComponentName, Integer> topActivityInfo) {
|
||||
MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
|
||||
METRIC_VALUE_DISMISSED_BY_TAP);
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
getUid(context, topActivityInfo.first, topActivityInfo.second),
|
||||
topActivityInfo.first.flattenToString(),
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);
|
||||
}
|
||||
|
||||
public static void logPictureInPictureDismissByDrag(Context context) {
|
||||
public static void logPictureInPictureDismissByDrag(Context context,
|
||||
Pair<ComponentName, Integer> topActivityInfo) {
|
||||
MetricsLogger.action(context,
|
||||
MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
|
||||
METRIC_VALUE_DISMISSED_BY_DRAG);
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
getUid(context, topActivityInfo.first, topActivityInfo.second),
|
||||
topActivityInfo.first.flattenToString(),
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);
|
||||
}
|
||||
|
||||
public static void logPictureInPictureMinimize(Context context, boolean isMinimized) {
|
||||
public static void logPictureInPictureMinimize(Context context, boolean isMinimized,
|
||||
Pair<ComponentName, Integer> topActivityInfo) {
|
||||
MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MINIMIZED,
|
||||
isMinimized);
|
||||
if (isMinimized) {
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__MINIMIZED);
|
||||
} else {
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN);
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
getUid(context, topActivityInfo.first, topActivityInfo.second),
|
||||
topActivityInfo.first.flattenToString(),
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__MINIMIZED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get uid from component name and user Id
|
||||
* @return uid. -1 if not found.
|
||||
*/
|
||||
private static int getUid(Context context, ComponentName componentName, int userId) {
|
||||
int uid = -1;
|
||||
try {
|
||||
uid = context.getPackageManager().getApplicationInfoAsUser(
|
||||
componentName.getPackageName(), 0, userId).uid;
|
||||
} catch (NameNotFoundException e) {
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
|
||||
public static void logPictureInPictureMenuVisible(Context context, boolean menuStateFull) {
|
||||
@ -76,24 +85,21 @@ public class MetricsLoggerWrapper {
|
||||
}
|
||||
|
||||
public static void logPictureInPictureEnter(Context context,
|
||||
boolean supportsEnterPipOnTaskSwitch) {
|
||||
int uid, String shortComponentName, boolean supportsEnterPipOnTaskSwitch) {
|
||||
MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED,
|
||||
supportsEnterPipOnTaskSwitch);
|
||||
if (supportsEnterPipOnTaskSwitch) {
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__ENTERED);
|
||||
}
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, uid,
|
||||
shortComponentName,
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__ENTERED);
|
||||
}
|
||||
|
||||
public static void logPictureInPictureFullScreen(Context context) {
|
||||
public static void logPictureInPictureFullScreen(Context context, int uid,
|
||||
String shortComponentName) {
|
||||
MetricsLogger.action(context,
|
||||
MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN);
|
||||
StatsLog.write(StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
|
||||
context.getUserId(),
|
||||
context.getApplicationInfo().packageName,
|
||||
context.getApplicationInfo().className,
|
||||
uid,
|
||||
shortComponentName,
|
||||
StatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN);
|
||||
}
|
||||
|
||||
|
@ -16,9 +16,9 @@
|
||||
|
||||
package com.android.systemui.pip.phone;
|
||||
|
||||
import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_NONE;
|
||||
import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_CLOSE;
|
||||
import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_FULL;
|
||||
import static com.android.systemui.pip.phone.PipMenuActivityController.MENU_STATE_NONE;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@ -42,7 +42,7 @@ import android.view.accessibility.AccessibilityEvent;
|
||||
import android.view.accessibility.AccessibilityManager;
|
||||
import android.view.accessibility.AccessibilityNodeInfo;
|
||||
import android.view.accessibility.AccessibilityWindowInfo;
|
||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||
|
||||
import com.android.internal.os.logging.MetricsLoggerWrapper;
|
||||
import com.android.internal.policy.PipSnapAlgorithm;
|
||||
import com.android.systemui.R;
|
||||
@ -158,8 +158,9 @@ public class PipTouchHandler {
|
||||
|
||||
@Override
|
||||
public void onPipDismiss() {
|
||||
MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext,
|
||||
PipUtils.getTopPinnedActivity(mContext, mActivityManager));
|
||||
mMotionHelper.dismissPip();
|
||||
MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -458,7 +459,8 @@ public class PipTouchHandler {
|
||||
return;
|
||||
}
|
||||
if (mIsMinimized != isMinimized) {
|
||||
MetricsLoggerWrapper.logPictureInPictureMinimize(mContext, isMinimized);
|
||||
MetricsLoggerWrapper.logPictureInPictureMinimize(mContext,
|
||||
isMinimized, PipUtils.getTopPinnedActivity(mContext, mActivityManager));
|
||||
}
|
||||
mIsMinimized = isMinimized;
|
||||
mSnapAlgorithm.setMinimized(isMinimized);
|
||||
@ -661,9 +663,10 @@ public class PipTouchHandler {
|
||||
if (ENABLE_DISMISS_DRAG_TO_EDGE) {
|
||||
// Check if the user dragged or flung the PiP offscreen to dismiss it
|
||||
if (mMotionHelper.shouldDismissPip() || isFlingToBot) {
|
||||
MetricsLoggerWrapper.logPictureInPictureDismissByDrag(mContext,
|
||||
PipUtils.getTopPinnedActivity(mContext, mActivityManager));
|
||||
mMotionHelper.animateDismiss(mMotionHelper.getBounds(), vel.x,
|
||||
vel.y, mUpdateScrimListener);
|
||||
MetricsLoggerWrapper.logPictureInPictureDismissByDrag(mContext);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -8655,8 +8655,8 @@ public class ActivityManagerService extends IActivityManager.Stub
|
||||
final PinnedActivityStack stack = r.getStack();
|
||||
stack.setPictureInPictureAspectRatio(aspectRatio);
|
||||
stack.setPictureInPictureActions(actions);
|
||||
|
||||
MetricsLoggerWrapper.logPictureInPictureEnter(mContext, r.supportsEnterPipOnTaskSwitch);
|
||||
MetricsLoggerWrapper.logPictureInPictureEnter(mContext, r.appInfo.uid,
|
||||
r.shortComponentName, r.supportsEnterPipOnTaskSwitch);
|
||||
logPictureInPictureArgs(params);
|
||||
};
|
||||
|
||||
|
@ -2599,9 +2599,6 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
|
||||
// resize when we remove task from it below and it is detached from the
|
||||
// display because it no longer contains any tasks.
|
||||
mAllowDockedStackResize = false;
|
||||
} else if (inPinnedWindowingMode && onTop) {
|
||||
// Log if we are expanding the PiP to fullscreen
|
||||
MetricsLoggerWrapper.logPictureInPictureFullScreen(mService.mContext);
|
||||
}
|
||||
|
||||
// If we are moving from the pinned stack, then the animation takes care of updating
|
||||
@ -2624,6 +2621,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
|
||||
isTopTask /* animate */, DEFER_RESUME,
|
||||
schedulePictureInPictureModeChange,
|
||||
"moveTasksToFullscreenStack - onTop");
|
||||
MetricsLoggerWrapper.logPictureInPictureFullScreen(mService.mContext,
|
||||
task.effectiveUid, task.realActivity.flattenToString());
|
||||
} else {
|
||||
// Position the tasks in the fullscreen stack in order at the bottom of the
|
||||
// stack. Also defer resume until all the tasks have been moved to the
|
||||
|
Reference in New Issue
Block a user