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

Commit fdd71f93 authored by Vinit Nayak's avatar Vinit Nayak Committed by Automerger Merge Worker
Browse files

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

parents 3c9c0a97 fa3a8faf
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(),