Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -528,6 +531,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; Loading @@ -543,6 +548,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); } Loading @@ -559,6 +566,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 { Loading Loading @@ -1274,6 +1282,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; Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -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)); Loading @@ -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); Loading @@ -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); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +33 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -528,6 +531,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; Loading @@ -543,6 +548,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); } Loading @@ -559,6 +566,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 { Loading Loading @@ -1274,6 +1282,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; Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageCoordinatorTests.java +3 −0 Original line number Diff line number Diff line Loading @@ -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)); Loading @@ -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); Loading @@ -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); Loading