From 880a19bed1075abc974ab47fb27487b7236ae934 Mon Sep 17 00:00:00 2001 From: Tony Huang Date: Wed, 3 Nov 2021 17:33:11 +0800 Subject: 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 --- .../wm/shell/splitscreen/StageCoordinator.java | 33 ++++++++++++++++++++++ .../shell/splitscreen/StageCoordinatorTests.java | 3 ++ 2 files changed, 36 insertions(+) (limited to 'libs') diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java index 7be199c75816..54328585c8a5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java @@ -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; diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java index 617e94a4e0a4..e71fa94b3e32 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java @@ -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); -- cgit v1.2.3-59-g8ed1b