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

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

Merge "Migrate PiP logs to UiEvent" into rvc-qpr-dev

parents 6da6baaa 01b7a613
Loading
Loading
Loading
Loading
+0 −81
Original line number Diff line number Diff line
@@ -16,14 +16,8 @@

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.view.WindowManager.LayoutParams;

import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.FrameworkStatsLog;

/**
@@ -32,81 +26,6 @@ import com.android.internal.util.FrameworkStatsLog;
 */
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,
            Pair<ComponentName, Integer> topActivityInfo) {
        MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
                METRIC_VALUE_DISMISSED_BY_TAP);
        FrameworkStatsLog.write(FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
                getUid(context, topActivityInfo.first, topActivityInfo.second),
                topActivityInfo.first.flattenToString(),
                FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);
    }

    public static void logPictureInPictureDismissByDrag(Context context,
            Pair<ComponentName, Integer> topActivityInfo) {
        MetricsLogger.action(context,
                MetricsEvent.ACTION_PICTURE_IN_PICTURE_DISMISSED,
                METRIC_VALUE_DISMISSED_BY_DRAG);
        FrameworkStatsLog.write(FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
                getUid(context, topActivityInfo.first, topActivityInfo.second),
                topActivityInfo.first.flattenToString(),
                FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__DISMISSED);
    }

    public static void logPictureInPictureMinimize(Context context, boolean isMinimized,
            Pair<ComponentName, Integer> topActivityInfo) {
        MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MINIMIZED,
                isMinimized);
        FrameworkStatsLog.write(FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
                getUid(context, topActivityInfo.first, topActivityInfo.second),
                topActivityInfo.first.flattenToString(),
                FrameworkStatsLog.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;
        if (componentName == null) {
            return uid;
        }
        try {
            uid = context.getPackageManager().getApplicationInfoAsUser(
                    componentName.getPackageName(), 0, userId).uid;
        } catch (NameNotFoundException e) {
        }
        return uid;
    }

    public static void logPictureInPictureMenuVisible(Context context, boolean menuStateFull) {
        MetricsLogger.visibility(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_MENU,
                menuStateFull);
    }

    public static void logPictureInPictureEnter(Context context,
            int uid, String shortComponentName, boolean supportsEnterPipOnTaskSwitch) {
        MetricsLogger.action(context, MetricsEvent.ACTION_PICTURE_IN_PICTURE_ENTERED,
                supportsEnterPipOnTaskSwitch);
        FrameworkStatsLog.write(FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED, uid,
                shortComponentName,
                FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__ENTERED);
    }

    public static void logPictureInPictureFullScreen(Context context, int uid,
            String shortComponentName) {
        MetricsLogger.action(context,
                MetricsEvent.ACTION_PICTURE_IN_PICTURE_EXPANDED_TO_FULLSCREEN);
        FrameworkStatsLog.write(FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED,
                uid,
                shortComponentName,
                FrameworkStatsLog.PICTURE_IN_PICTURE_STATE_CHANGED__STATE__EXPANDED_TO_FULL_SCREEN);
    }

    public static void logAppOverlayEnter(int uid, String packageName, boolean changed, int type, boolean usingAlertWindow) {
        if (changed) {
            if (type != LayoutParams.TYPE_APPLICATION_OVERLAY) {
+11 −2
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements
    private final Handler mUpdateHandler;
    private final PipBoundsHandler mPipBoundsHandler;
    private final PipAnimationController mPipAnimationController;
    private final PipUiEventLogger mPipUiEventLoggerLogger;
    private final List<PipTransitionCallback> mPipTransitionCallbacks = new ArrayList<>();
    private final Rect mLastReportedBounds = new Rect();
    private final int mEnterExitAnimationDuration;
@@ -206,7 +207,8 @@ public class PipTaskOrganizer extends TaskOrganizer implements
            @NonNull PipSurfaceTransactionHelper surfaceTransactionHelper,
            @Nullable Divider divider,
            @NonNull DisplayController displayController,
            @NonNull PipAnimationController pipAnimationController) {
            @NonNull PipAnimationController pipAnimationController,
            @NonNull PipUiEventLogger pipUiEventLogger) {
        mMainHandler = new Handler(Looper.getMainLooper());
        mUpdateHandler = new Handler(PipUpdateThread.get().getLooper(), mUpdateCallbacks);
        mPipBoundsHandler = boundsHandler;
@@ -214,6 +216,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements
                .getInteger(R.integer.config_pipResizeAnimationDuration);
        mSurfaceTransactionHelper = surfaceTransactionHelper;
        mPipAnimationController = pipAnimationController;
        mPipUiEventLoggerLogger = pipUiEventLogger;
        mSurfaceControlTransactionFactory = SurfaceControl.Transaction::new;
        mSplitDivider = divider;
        displayController.addDisplayWindowListener(this);
@@ -276,6 +279,8 @@ public class PipTaskOrganizer extends TaskOrganizer implements
            return;
        }

        mPipUiEventLoggerLogger.log(
                PipUiEventLogger.PipUiEventEnum.PICTURE_IN_PICTURE_EXPAND_TO_FULLSCREEN);
        final Configuration initialConfig = mInitialState.remove(mToken.asBinder());
        final boolean orientationDiffers = initialConfig.windowConfiguration.getRotation()
                != mPipBoundsHandler.getDisplayRotation();
@@ -375,6 +380,9 @@ public class PipTaskOrganizer extends TaskOrganizer implements
        mInitialState.put(mToken.asBinder(), new Configuration(mTaskInfo.configuration));
        mPictureInPictureParams = mTaskInfo.pictureInPictureParams;

        mPipUiEventLoggerLogger.setTaskInfo(mTaskInfo);
        mPipUiEventLoggerLogger.log(PipUiEventLogger.PipUiEventEnum.PICTURE_IN_PICTURE_ENTER);

        if (mShouldDeferEnteringPip) {
            if (DEBUG) Log.d(TAG, "Defer entering PiP animation, fixed rotation is ongoing");
            // if deferred, hide the surface till fixed rotation is completed
@@ -507,6 +515,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements
        mPictureInPictureParams = null;
        mInPip = false;
        mExitingPip = false;
        mPipUiEventLoggerLogger.setTaskInfo(null);
    }

    @Override
@@ -622,7 +631,7 @@ public class PipTaskOrganizer extends TaskOrganizer implements
     * {@link PictureInPictureParams} would affect the bounds.
     */
    private boolean applyPictureInPictureParams(@NonNull PictureInPictureParams params) {
        final boolean changed = (mPictureInPictureParams == null) ? true : !Objects.equals(
        final boolean changed = (mPictureInPictureParams == null) || !Objects.equals(
                mPictureInPictureParams.getAspectRatioRational(), params.getAspectRatioRational());
        if (changed) {
            mPictureInPictureParams = params;
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.systemui.pip;

import android.app.TaskInfo;

import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;

import javax.inject.Inject;
import javax.inject.Singleton;


/**
 * Helper class that ends PiP log to UiEvent, see also go/uievent
 */
@Singleton
public class PipUiEventLogger {

    private final UiEventLogger mUiEventLogger;

    private TaskInfo mTaskInfo;

    @Inject
    public PipUiEventLogger(UiEventLogger uiEventLogger) {
        mUiEventLogger = uiEventLogger;
    }

    public void setTaskInfo(TaskInfo taskInfo) {
        mTaskInfo = taskInfo;
    }

    /**
     * Sends log via UiEvent, reference go/uievent for how to debug locally
     */
    public void log(PipUiEventEnum event) {
        if (mTaskInfo == null) {
            return;
        }
        mUiEventLogger.log(event, mTaskInfo.userId, mTaskInfo.topActivity.getPackageName());
    }

    /**
     * Enums for logging the PiP events to UiEvent
     */
    public enum PipUiEventEnum implements UiEventLogger.UiEventEnum {
        @UiEvent(doc = "Activity enters picture-in-picture mode")
        PICTURE_IN_PICTURE_ENTER(603),

        @UiEvent(doc = "Expands from picture-in-picture to fullscreen")
        PICTURE_IN_PICTURE_EXPAND_TO_FULLSCREEN(604),

        @UiEvent(doc = "Removes picture-in-picture by tap close button")
        PICTURE_IN_PICTURE_TAP_TO_REMOVE(605),

        @UiEvent(doc = "Removes picture-in-picture by drag to dismiss area")
        PICTURE_IN_PICTURE_DRAG_TO_REMOVE(606),

        @UiEvent(doc = "Shows picture-in-picture menu")
        PICTURE_IN_PICTURE_SHOW_MENU(607),

        @UiEvent(doc = "Hides picture-in-picture menu")
        PICTURE_IN_PICTURE_HIDE_MENU(608),

        @UiEvent(doc = "Changes the aspect ratio of picture-in-picture window. This is inherited"
                + " from previous Tron-based logging and currently not in use.")
        PICTURE_IN_PICTURE_CHANGE_ASPECT_RATIO(609),

        @UiEvent(doc = "User resize of the picture-in-picture window")
        PICTURE_IN_PICTURE_RESIZE(610);

        private final int mId;

        PipUiEventEnum(int id) {
            mId = id;
        }

        @Override
        public int getId() {
            return mId;
        }
    }
}
+5 −2
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.systemui.pip.BasePipManager;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipSnapAlgorithm;
import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.pip.PipUiEventLogger;
import com.android.systemui.shared.recents.IPinnedStackAnimationListener;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.InputConsumerController;
@@ -241,7 +242,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
            PipBoundsHandler pipBoundsHandler,
            PipSnapAlgorithm pipSnapAlgorithm,
            PipTaskOrganizer pipTaskOrganizer,
            SysUiState sysUiState) {
            SysUiState sysUiState,
            PipUiEventLogger pipUiEventLogger) {
        mContext = context;
        mActivityManager = ActivityManager.getService();

@@ -262,7 +264,8 @@ public class PipManager implements BasePipManager, PipTaskOrganizer.PipTransitio
                mInputConsumerController);
        mTouchHandler = new PipTouchHandler(context, mActivityManager,
                mMenuController, mInputConsumerController, mPipBoundsHandler, mPipTaskOrganizer,
                floatingContentCoordinator, deviceConfig, pipSnapAlgorithm, sysUiState);
                floatingContentCoordinator, deviceConfig, pipSnapAlgorithm, sysUiState,
                pipUiEventLogger);
        mAppOpsListener = new PipAppOpsListener(context, mActivityManager,
                mTouchHandler.getMotionHelper());
        displayController.addDisplayChangingController(mRotationController);
+7 −2
Original line number Diff line number Diff line
@@ -53,12 +53,12 @@ import com.android.systemui.R;
import com.android.systemui.model.SysUiState;
import com.android.systemui.pip.PipBoundsHandler;
import com.android.systemui.pip.PipTaskOrganizer;
import com.android.systemui.pip.PipUiEventLogger;
import com.android.systemui.util.DeviceConfigProxy;

import java.io.PrintWriter;
import java.util.concurrent.Executor;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * Helper on top of PipTouchHandler that handles inputs OUTSIDE of the PIP window, which is used to
@@ -110,13 +110,15 @@ public class PipResizeGestureHandler {
    private InputMonitor mInputMonitor;
    private InputEventReceiver mInputEventReceiver;
    private PipTaskOrganizer mPipTaskOrganizer;
    private PipUiEventLogger mPipUiEventLogger;

    private int mCtrlType;

    public PipResizeGestureHandler(Context context, PipBoundsHandler pipBoundsHandler,
            PipMotionHelper motionHelper, DeviceConfigProxy deviceConfig,
            PipTaskOrganizer pipTaskOrganizer, Function<Rect, Rect> movementBoundsSupplier,
            Runnable updateMovementBoundsRunnable, SysUiState sysUiState) {
            Runnable updateMovementBoundsRunnable, SysUiState sysUiState,
            PipUiEventLogger pipUiEventLogger) {
        mContext = context;
        mDisplayId = context.getDisplayId();
        mMainExecutor = context.getMainExecutor();
@@ -126,6 +128,7 @@ public class PipResizeGestureHandler {
        mMovementBoundsSupplier = movementBoundsSupplier;
        mUpdateMovementBoundsRunnable = updateMovementBoundsRunnable;
        mSysUiState = sysUiState;
        mPipUiEventLogger = pipUiEventLogger;

        context.getDisplay().getRealSize(mMaxSize);
        reloadResources();
@@ -338,6 +341,8 @@ public class PipResizeGestureHandler {
                                        resetState();
                                    });
                                });
                        mPipUiEventLogger.log(
                                PipUiEventLogger.PipUiEventEnum.PICTURE_IN_PICTURE_RESIZE);
                    } else {
                        resetState();
                    }
Loading