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

Commit fa3a8faf authored by Vinit Nayak's avatar Vinit Nayak Committed by Android (Google) Code Review
Browse files

Merge "Pass in enter reasons into SplitscreenEventLogger" into tm-qpr-dev

parents 03248115 1ab928f8
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -133,6 +133,20 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
    @Retention(RetentionPolicy.SOURCE)
    @interface ExitReason{}

    public static final int ENTER_REASON_UNKNOWN = 0;
    public static final int ENTER_REASON_MULTI_INSTANCE = 1;
    public static final int ENTER_REASON_DRAG = 2;
    public static final int ENTER_REASON_LAUNCHER = 3;
    /** Acts as a mapping to the actual EnterReasons as defined in the logging proto */
    @IntDef(value = {
            ENTER_REASON_MULTI_INSTANCE,
            ENTER_REASON_DRAG,
            ENTER_REASON_LAUNCHER,
            ENTER_REASON_UNKNOWN
    })
    public @interface SplitEnterReason {
    }

    private final ShellCommandHandler mShellCommandHandler;
    private final ShellController mShellController;
    private final ShellTaskOrganizer mTaskOrganizer;
@@ -394,7 +408,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
     */
    public void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
            @Nullable Bundle options, UserHandle user, @NonNull InstanceId instanceId) {
        mStageCoordinator.getLogger().enterRequested(instanceId);
        mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER);
        startShortcut(packageName, shortcutId, position, options, user);
    }

@@ -442,7 +456,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
     */
    public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent,
            @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) {
        mStageCoordinator.getLogger().enterRequested(instanceId);
        mStageCoordinator.getLogger().enterRequested(instanceId, ENTER_REASON_LAUNCHER);
        startIntent(intent, fillInIntent, position, options);
    }

+38 −6
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.wm.shell.splitscreen;

import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED;
@@ -28,6 +30,10 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT;
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_TOP_OR_LEFT;
import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSITION_UNDEFINED;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_DRAG;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_UNKNOWN;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_DEVICE_FOLDED;
@@ -38,6 +44,7 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_SCREEN_LOCKED_SHOW_ON_TOP;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_UNKNOWN;

import android.annotation.Nullable;
import android.util.Slog;

import com.android.internal.logging.InstanceId;
@@ -59,7 +66,7 @@ public class SplitscreenEventLogger {

    // Drag info
    private @SplitPosition int mDragEnterPosition;
    private InstanceId mEnterSessionId;
    private @Nullable InstanceId mEnterSessionId;

    // For deduping async events
    private int mLastMainStagePosition = -1;
@@ -67,6 +74,7 @@ public class SplitscreenEventLogger {
    private int mLastSideStagePosition = -1;
    private int mLastSideStageUid = -1;
    private float mLastSplitRatio = -1f;
    private @SplitScreenController.SplitEnterReason int mEnterReason = ENTER_REASON_UNKNOWN;

    public SplitscreenEventLogger() {
        mIdSequence = new InstanceIdSequence(Integer.MAX_VALUE);
@@ -84,15 +92,26 @@ public class SplitscreenEventLogger {
     */
    public void enterRequestedByDrag(@SplitPosition int position, InstanceId enterSessionId) {
        mDragEnterPosition = position;
        enterRequested(enterSessionId);
        enterRequested(enterSessionId, ENTER_REASON_DRAG);
    }

    /**
     * May be called before logEnter() to indicate that the session was started from launcher.
     * This specifically is for all the scenarios where split started without a drag interaction
     */
    public void enterRequested(InstanceId enterSessionId) {
    public void enterRequested(@Nullable InstanceId enterSessionId,
            @SplitScreenController.SplitEnterReason int enterReason) {
        mEnterSessionId = enterSessionId;
        mEnterReason = enterReason;
    }

    /**
     * @return if an enterSessionId has been set via either
     *         {@link #enterRequested(InstanceId, int)} or
     *         {@link #enterRequestedByDrag(int, InstanceId)}
     */
    public boolean hasValidEnterSessionId() {
        return mEnterSessionId != null;
    }

    /**
@@ -103,9 +122,7 @@ public class SplitscreenEventLogger {
            @SplitPosition int sideStagePosition, int sideStageUid,
            boolean isLandscape) {
        mLoggerSessionId = mIdSequence.newInstanceId();
        int enterReason = mDragEnterPosition != SPLIT_POSITION_UNDEFINED
                ? getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape)
                : SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
        int enterReason = getLoggerEnterReason(isLandscape);
        updateMainStageState(getMainStagePositionFromSplitPosition(mainStagePosition, isLandscape),
                mainStageUid);
        updateSideStageState(getSideStagePositionFromSplitPosition(sideStagePosition, isLandscape),
@@ -124,6 +141,20 @@ public class SplitscreenEventLogger {
                mLoggerSessionId.getId());
    }

    private int getLoggerEnterReason(boolean isLandscape) {
        switch (mEnterReason) {
            case ENTER_REASON_MULTI_INSTANCE:
                return SPLITSCREEN_UICHANGED__ENTER_REASON__MULTI_INSTANCE;
            case ENTER_REASON_LAUNCHER:
                return SPLITSCREEN_UICHANGED__ENTER_REASON__LAUNCHER;
            case ENTER_REASON_DRAG:
                return getDragEnterReasonFromSplitPosition(mDragEnterPosition, isLandscape);
            case ENTER_REASON_UNKNOWN:
            default:
                return SPLITSCREEN_UICHANGED__ENTER_REASON__UNKNOWN_ENTER;
        }
    }

    /**
     * Returns the framework logging constant given a splitscreen exit reason.
     */
@@ -189,6 +220,7 @@ public class SplitscreenEventLogger {
        mLastMainStageUid = -1;
        mLastSideStagePosition = -1;
        mLastSideStageUid = -1;
        mEnterReason = ENTER_REASON_UNKNOWN;
    }

    /**
+6 −1
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ import static com.android.wm.shell.common.split.SplitScreenConstants.SPLIT_POSIT
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_MAIN;
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_SIDE;
import static com.android.wm.shell.splitscreen.SplitScreen.STAGE_TYPE_UNDEFINED;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_LAUNCHER;
import static com.android.wm.shell.splitscreen.SplitScreenController.ENTER_REASON_MULTI_INSTANCE;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_DOES_NOT_SUPPORT_MULTIWINDOW;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_APP_FINISHED;
import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON_CHILD_TASK_ENTER_PIP;
@@ -669,7 +671,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,

    private void setEnterInstanceId(InstanceId instanceId) {
        if (instanceId != null) {
            mLogger.enterRequested(instanceId);
            mLogger.enterRequested(instanceId, ENTER_REASON_LAUNCHER);
        }
    }

@@ -1472,6 +1474,9 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
            updateRecentTasksSplitPair();

            if (!mLogger.hasStartedSession()) {
                if (!mLogger.hasValidEnterSessionId()) {
                    mLogger.enterRequested(null /*enterSessionId*/, ENTER_REASON_MULTI_INSTANCE);
                }
                mLogger.logEnter(mSplitLayout.getDividerPositionAsFraction(),
                        getMainStagePosition(), mMainStage.getTopChildTaskUid(),
                        getSideStagePosition(), mSideStage.getTopChildTaskUid(),