Loading cmds/statsd/src/atoms.proto +3 −6 Original line number Diff line number Diff line Loading @@ -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 class_name = 3; optional string short_name = 2; // 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; } /** Loading core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java +38 −32 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, getUid(context, topActivityInfo.first, topActivityInfo.second), topActivityInfo.first.flattenToString(), 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); } /** * 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) { Loading @@ -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.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); } Loading packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +8 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -158,8 +158,9 @@ public class PipTouchHandler { @Override public void onPipDismiss() { MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext, PipUtils.getTopPinnedActivity(mContext, mActivityManager)); mMotionHelper.dismissPip(); MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext); } @Override Loading Loading @@ -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); Loading Loading @@ -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; } } Loading services/core/java/com/android/server/am/ActivityManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -8657,8 +8657,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); }; services/core/java/com/android/server/am/ActivityStackSupervisor.java +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading
cmds/statsd/src/atoms.proto +3 −6 Original line number Diff line number Diff line Loading @@ -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 class_name = 3; optional string short_name = 2; // 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; } /** Loading
core/java/com/android/internal/os/logging/MetricsLoggerWrapper.java +38 −32 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, getUid(context, topActivityInfo.first, topActivityInfo.second), topActivityInfo.first.flattenToString(), 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); } /** * 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) { Loading @@ -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.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); } Loading
packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +8 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -158,8 +158,9 @@ public class PipTouchHandler { @Override public void onPipDismiss() { MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext, PipUtils.getTopPinnedActivity(mContext, mActivityManager)); mMotionHelper.dismissPip(); MetricsLoggerWrapper.logPictureInPictureDismissByTap(mContext); } @Override Loading Loading @@ -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); Loading Loading @@ -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; } } Loading
services/core/java/com/android/server/am/ActivityManagerService.java +2 −2 Original line number Diff line number Diff line Loading @@ -8657,8 +8657,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); };
services/core/java/com/android/server/am/ActivityStackSupervisor.java +2 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading