Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +0 −4 Original line number Diff line number Diff line Loading @@ -727,10 +727,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange getRefBounds2(mTempRect); t.setPosition(leash2, mTempRect.left, mTempRect.top) .setWindowCrop(leash2, mTempRect.width(), mTempRect.height()); // Make right or bottom side surface always higher than left or top side to avoid weird // animation when dismiss split. e.g. App surface fling above on decor surface. t.setLayer(leash1, 1); t.setLayer(leash2, 2); if (mImePositionProcessor.adjustSurfaceLayoutForIme( t, dividerLeash, leash1, leash2, dimLayer1, dimLayer2)) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −38 Original line number Diff line number Diff line Loading @@ -468,26 +468,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, final IRemoteAnimationFinishedCallback finishedCallback) { boolean openingToSide = false; if (apps != null) { for (int i = 0; i < apps.length; ++i) { if (apps[i].mode == MODE_OPENING && mSideStage.containsTask(apps[i].taskId)) { openingToSide = true; break; } } } else if (mSideStage.getChildCount() != 0) { // There are chances the entering app transition got canceled by performing // rotation transition. Checks if there is any child task existed in split // screen before fallback to cancel entering flow. openingToSide = true; } if (isEnteringSplit && !openingToSide) { if (isEnteringSplit && mSideStage.getChildCount() == 0) { mMainExecutor.execute(() -> exitSplitScreen( mSideStage.getChildCount() == 0 ? mMainStage : mSideStage, EXIT_REASON_UNKNOWN)); null /* childrenToTop */, EXIT_REASON_UNKNOWN)); mSplitUnsupportedToast.show(); } if (finishedCallback != null) { Loading Loading @@ -572,26 +556,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback, SurfaceControl.Transaction t) { boolean openingToSide = false; if (apps != null) { for (int i = 0; i < apps.length; ++i) { if (apps[i].mode == MODE_OPENING && mSideStage.containsTask(apps[i].taskId)) { openingToSide = true; break; } } } else if (mSideStage.getChildCount() != 0) { // There are chances the entering app transition got canceled by performing // rotation transition. Checks if there is any child task existed in split // screen before fallback to cancel entering flow. openingToSide = true; } if (isEnteringSplit && !openingToSide && apps != null) { if (isEnteringSplit && mSideStage.getChildCount() == 0) { mMainExecutor.execute(() -> exitSplitScreen( mSideStage.getChildCount() == 0 ? mMainStage : mSideStage, EXIT_REASON_UNKNOWN)); null /* childrenToTop */, EXIT_REASON_UNKNOWN)); mSplitUnsupportedToast.show(); } if (apps != null) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +7 −12 Original line number Diff line number Diff line Loading @@ -220,20 +220,12 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { mCallbacks.onNoLongerSupportMultiWindow(); return; } if (taskInfo.topActivity == null && mChildrenTaskInfo.contains(taskInfo.taskId) && mChildrenTaskInfo.get(taskInfo.taskId).topActivity != null) { // If top activity become null, it means the task is about to vanish, we use this // signal to remove it from children list earlier for smooth dismiss transition. mChildrenTaskInfo.remove(taskInfo.taskId); mChildrenLeashes.remove(taskInfo.taskId); } else { mChildrenTaskInfo.put(taskInfo.taskId, taskInfo); } mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */, taskInfo.isVisible); if (!ENABLE_SHELL_TRANSITIONS && mChildrenLeashes.contains(taskInfo.taskId)) { updateChildTaskSurface(taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */); if (!ENABLE_SHELL_TRANSITIONS) { updateChildTaskSurface( taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */); } } else { throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo Loading Loading @@ -267,6 +259,9 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { return; } sendStatusChanged(); } else { throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo + "\n mRootTaskInfo: " + mRootTaskInfo); } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java +6 −0 Original line number Diff line number Diff line Loading @@ -126,6 +126,12 @@ public final class StageTaskListenerTests extends ShellTestCase { verify(mCallbacks).onStatusChanged(eq(mRootTask.isVisible), eq(true)); } @Test(expected = IllegalArgumentException.class) public void testUnknownTaskVanished() { final ActivityManager.RunningTaskInfo task = new TestRunningTaskInfoBuilder().build(); mStageTaskListener.onTaskVanished(task); } @Test public void testTaskVanished() { // With shell transitions, the transition manages status changes, so skip this test. Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +0 −4 Original line number Diff line number Diff line Loading @@ -727,10 +727,6 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange getRefBounds2(mTempRect); t.setPosition(leash2, mTempRect.left, mTempRect.top) .setWindowCrop(leash2, mTempRect.width(), mTempRect.height()); // Make right or bottom side surface always higher than left or top side to avoid weird // animation when dismiss split. e.g. App surface fling above on decor surface. t.setLayer(leash1, 1); t.setLayer(leash2, 2); if (mImePositionProcessor.adjustSurfaceLayoutForIme( t, dividerLeash, leash1, leash2, dimLayer1, dimLayer2)) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +6 −38 Original line number Diff line number Diff line Loading @@ -468,26 +468,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, final IRemoteAnimationFinishedCallback finishedCallback) { boolean openingToSide = false; if (apps != null) { for (int i = 0; i < apps.length; ++i) { if (apps[i].mode == MODE_OPENING && mSideStage.containsTask(apps[i].taskId)) { openingToSide = true; break; } } } else if (mSideStage.getChildCount() != 0) { // There are chances the entering app transition got canceled by performing // rotation transition. Checks if there is any child task existed in split // screen before fallback to cancel entering flow. openingToSide = true; } if (isEnteringSplit && !openingToSide) { if (isEnteringSplit && mSideStage.getChildCount() == 0) { mMainExecutor.execute(() -> exitSplitScreen( mSideStage.getChildCount() == 0 ? mMainStage : mSideStage, EXIT_REASON_UNKNOWN)); null /* childrenToTop */, EXIT_REASON_UNKNOWN)); mSplitUnsupportedToast.show(); } if (finishedCallback != null) { Loading Loading @@ -572,26 +556,10 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler, RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps, IRemoteAnimationFinishedCallback finishedCallback, SurfaceControl.Transaction t) { boolean openingToSide = false; if (apps != null) { for (int i = 0; i < apps.length; ++i) { if (apps[i].mode == MODE_OPENING && mSideStage.containsTask(apps[i].taskId)) { openingToSide = true; break; } } } else if (mSideStage.getChildCount() != 0) { // There are chances the entering app transition got canceled by performing // rotation transition. Checks if there is any child task existed in split // screen before fallback to cancel entering flow. openingToSide = true; } if (isEnteringSplit && !openingToSide && apps != null) { if (isEnteringSplit && mSideStage.getChildCount() == 0) { mMainExecutor.execute(() -> exitSplitScreen( mSideStage.getChildCount() == 0 ? mMainStage : mSideStage, EXIT_REASON_UNKNOWN)); null /* childrenToTop */, EXIT_REASON_UNKNOWN)); mSplitUnsupportedToast.show(); } if (apps != null) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +7 −12 Original line number Diff line number Diff line Loading @@ -220,20 +220,12 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { mCallbacks.onNoLongerSupportMultiWindow(); return; } if (taskInfo.topActivity == null && mChildrenTaskInfo.contains(taskInfo.taskId) && mChildrenTaskInfo.get(taskInfo.taskId).topActivity != null) { // If top activity become null, it means the task is about to vanish, we use this // signal to remove it from children list earlier for smooth dismiss transition. mChildrenTaskInfo.remove(taskInfo.taskId); mChildrenLeashes.remove(taskInfo.taskId); } else { mChildrenTaskInfo.put(taskInfo.taskId, taskInfo); } mCallbacks.onChildTaskStatusChanged(taskInfo.taskId, true /* present */, taskInfo.isVisible); if (!ENABLE_SHELL_TRANSITIONS && mChildrenLeashes.contains(taskInfo.taskId)) { updateChildTaskSurface(taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */); if (!ENABLE_SHELL_TRANSITIONS) { updateChildTaskSurface( taskInfo, mChildrenLeashes.get(taskInfo.taskId), false /* firstAppeared */); } } else { throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo Loading Loading @@ -267,6 +259,9 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { return; } sendStatusChanged(); } else { throw new IllegalArgumentException(this + "\n Unknown task: " + taskInfo + "\n mRootTaskInfo: " + mRootTaskInfo); } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/StageTaskListenerTests.java +6 −0 Original line number Diff line number Diff line Loading @@ -126,6 +126,12 @@ public final class StageTaskListenerTests extends ShellTestCase { verify(mCallbacks).onStatusChanged(eq(mRootTask.isVisible), eq(true)); } @Test(expected = IllegalArgumentException.class) public void testUnknownTaskVanished() { final ActivityManager.RunningTaskInfo task = new TestRunningTaskInfoBuilder().build(); mStageTaskListener.onTaskVanished(task); } @Test public void testTaskVanished() { // With shell transitions, the transition manages status changes, so skip this test. Loading