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

Commit 880a19be authored by Tony Huang's avatar Tony Huang
Browse files

Add exit log for debugging auto dismissing bug

Add log when split exit for debugging some auto dismissing bug
which hard to repro locally.

Also add a check when exit split for avoiding exit run many times.

Bug: 204527184
Test: pass existing tests
Change-Id: Iaf98a7eb54a2988d13b3b8ca871c750f993fa8b4
parent 3e90f3b5
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -30,7 +30,10 @@ import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED_
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__DRAG_DIVIDER;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__RETURN_HOME;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__ROOT_TASK_VANISHED;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP;
import static com.android.internal.util.FrameworkStatsLog.SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT;
import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_BOTTOM_OR_RIGHT;
import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_TOP_OR_LEFT;
import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_UNDEFINED;
@@ -523,6 +526,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    }

    void exitSplitScreen(int toTopTaskId, int exitReason) {
        if (!mMainStage.isActive()) return;

        StageTaskListener childrenToTop = null;
        if (mMainStage.containsTask(toTopTaskId)) {
            childrenToTop = mMainStage;
@@ -538,6 +543,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
    }

    private void exitSplitScreen(StageTaskListener childrenToTop, int exitReason) {
        if (!mMainStage.isActive()) return;

        final WindowContainerTransaction wct = new WindowContainerTransaction();
        applyExitSplitScreen(childrenToTop, wct, exitReason);
    }
@@ -554,6 +561,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
        setDividerVisibility(false);
        mSplitLayout.resetDividerPosition();
        mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED;
        Slog.i(TAG, "applyExitSplitScreen, reason = " + exitReasonToString(exitReason));
        if (childrenToTop != null) {
            logExitToStage(exitReason, childrenToTop == mMainStage);
        } else {
@@ -1269,6 +1277,31 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
                mSplitLayout.isLandscape());
    }

    private String exitReasonToString(int exitReason) {
        switch (exitReason) {
            case SPLITSCREEN_UICHANGED__EXIT_REASON__UNKNOWN_EXIT:
                return "UNKNOWN_EXIT";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__DRAG_DIVIDER:
                return "DRAG_DIVIDER";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__RETURN_HOME:
                return "RETURN_HOME";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED:
                return "SCREEN_LOCKED";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__SCREEN_LOCKED_SHOW_ON_TOP:
                return "SCREEN_LOCKED_SHOW_ON_TOP";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__DEVICE_FOLDED:
                return "DEVICE_FOLDED";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__ROOT_TASK_VANISHED:
                return "ROOT_TASK_VANISHED";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__APP_FINISHED:
                return "APP_FINISHED";
            case SPLITSCREEN_UICHANGED__EXIT_REASON__APP_DOES_NOT_SUPPORT_MULTIWINDOW:
                return "APP_DOES_NOT_SUPPORT_MULTIWINDOW";
            default:
                return "unknown reason, reason int = " + exitReason;
        }
    }

    class StageListenerImpl implements StageTaskListener.StageListenerCallbacks {
        boolean mHasRootTask = false;
        boolean mVisible = false;
+3 −0
Original line number Diff line number Diff line
@@ -161,6 +161,7 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testExitSplitScreen() {
        when(mMainStage.isActive()).thenReturn(true);
        mStageCoordinator.exitSplitScreen(INVALID_TASK_ID,
                SPLITSCREEN_UICHANGED__EXIT_REASON__RETURN_HOME);
        verify(mSideStage).removeAllTasks(any(WindowContainerTransaction.class), eq(false));
@@ -169,6 +170,7 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testExitSplitScreenToMainStage() {
        when(mMainStage.isActive()).thenReturn(true);
        final int testTaskId = 12345;
        when(mMainStage.containsTask(eq(testTaskId))).thenReturn(true);
        when(mSideStage.containsTask(eq(testTaskId))).thenReturn(false);
@@ -182,6 +184,7 @@ public class StageCoordinatorTests extends ShellTestCase {

    @Test
    public void testExitSplitScreenToSideStage() {
        when(mMainStage.isActive()).thenReturn(true);
        final int testTaskId = 12345;
        when(mMainStage.containsTask(eq(testTaskId))).thenReturn(false);
        when(mSideStage.containsTask(eq(testTaskId))).thenReturn(true);