Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4ab3a172 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "fix picture-in-picture logging"

parents 578432b3 ae9fdf04
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -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;
}

/**
+38 −32
Original line number Diff line number Diff line
@@ -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,
                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) {
@@ -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);
    }

+8 −5
Original line number Diff line number Diff line
@@ -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;
                }
            }
+2 −2
Original line number Diff line number Diff line
@@ -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);
                };
+2 −3
Original line number Diff line number Diff line
@@ -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