Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java +6 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public interface SplitScreen { */ void onKeyguardOccludedChanged(boolean occluded); /** * Called when the visibility of the keyguard changes. * @param showing Indicates if the keyguard is now visible. */ void onKeyguardVisibilityChanged(boolean showing); /** Get a string representation of a stage type */ static String stageTypeToString(@StageType int stage) { switch (stage) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +11 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,10 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, mStageCoordinator.onKeyguardOccludedChanged(occluded); } public void onKeyguardVisibilityChanged(boolean showing) { mStageCoordinator.onKeyguardVisibilityChanged(showing); } public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) { mStageCoordinator.exitSplitScreenOnHide(exitSplitScreenOnHide); } Loading Loading @@ -371,6 +375,13 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } }); } @Override public void onKeyguardVisibilityChanged(boolean showing) { mMainExecutor.execute(() -> { SplitScreenController.this.onKeyguardVisibilityChanged(showing); }); } } /** Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +19 −3 Original line number Diff line number Diff line Loading @@ -136,7 +136,10 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, /** Whether the device is supporting legacy split or not. */ private boolean mUseLegacySplit; @SplitScreen.StageType int mDismissTop = NO_DISMISS; @SplitScreen.StageType private int mDismissTop = NO_DISMISS; /** The target stage to dismiss to when unlock after folded. */ @SplitScreen.StageType private int mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; private final Runnable mOnTransitionAnimationComplete = () -> { // If still playing, let it finish. Loading Loading @@ -443,6 +446,13 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mKeyguardOccluded = occluded; } void onKeyguardVisibilityChanged(boolean showing) { if (!showing && mMainStage.isActive() && mTopStageAfterFoldDismiss != STAGE_TYPE_UNDEFINED) { exitSplitScreen(mTopStageAfterFoldDismiss == STAGE_TYPE_MAIN ? mMainStage : mSideStage); } } void exitSplitScreen() { exitSplitScreen(null /* childrenToTop */); } Loading @@ -458,6 +468,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mTaskOrganizer.applyTransaction(wct); // Reset divider position. mSplitLayout.resetDividerPosition(); mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; } /** Loading Loading @@ -808,8 +819,13 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, } private void onFoldedStateChanged(boolean folded) { if (folded && mMainStage.isActive()) { exitSplitScreen(mMainStage); mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; if (!folded) return; if (mMainStage.isFocused()) { mTopStageAfterFoldDismiss = STAGE_TYPE_MAIN; } else if (mSideStage.isFocused()) { mTopStageAfterFoldDismiss = STAGE_TYPE_SIDE; } } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +9 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,15 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { return mChildrenTaskInfo.contains(taskId); } /** @return {@code true} if this listener contains the currently focused task. */ boolean isFocused() { if (mRootTaskInfo.isFocused) return true; for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) { if (mChildrenTaskInfo.valueAt(i).isFocused) return true; } return false; } @Override @CallSuper public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { Loading packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +5 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,11 @@ public final class WMShell extends SystemUI @VisibleForTesting void initSplitScreen(SplitScreen splitScreen) { mSplitScreenKeyguardCallback = new KeyguardUpdateMonitorCallback() { @Override public void onKeyguardVisibilityChanged(boolean showing) { splitScreen.onKeyguardVisibilityChanged(showing); } @Override public void onKeyguardOccludedChanged(boolean occluded) { splitScreen.onKeyguardOccludedChanged(occluded); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreen.java +6 −0 Original line number Diff line number Diff line Loading @@ -81,6 +81,12 @@ public interface SplitScreen { */ void onKeyguardOccludedChanged(boolean occluded); /** * Called when the visibility of the keyguard changes. * @param showing Indicates if the keyguard is now visible. */ void onKeyguardVisibilityChanged(boolean showing); /** Get a string representation of a stage type */ static String stageTypeToString(@StageType int stage) { switch (stage) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +11 −0 Original line number Diff line number Diff line Loading @@ -172,6 +172,10 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, mStageCoordinator.onKeyguardOccludedChanged(occluded); } public void onKeyguardVisibilityChanged(boolean showing) { mStageCoordinator.onKeyguardVisibilityChanged(showing); } public void exitSplitScreenOnHide(boolean exitSplitScreenOnHide) { mStageCoordinator.exitSplitScreenOnHide(exitSplitScreenOnHide); } Loading Loading @@ -371,6 +375,13 @@ public class SplitScreenController implements DragAndDropPolicy.Starter, } }); } @Override public void onKeyguardVisibilityChanged(boolean showing) { mMainExecutor.execute(() -> { SplitScreenController.this.onKeyguardVisibilityChanged(showing); }); } } /** Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +19 −3 Original line number Diff line number Diff line Loading @@ -136,7 +136,10 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, /** Whether the device is supporting legacy split or not. */ private boolean mUseLegacySplit; @SplitScreen.StageType int mDismissTop = NO_DISMISS; @SplitScreen.StageType private int mDismissTop = NO_DISMISS; /** The target stage to dismiss to when unlock after folded. */ @SplitScreen.StageType private int mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; private final Runnable mOnTransitionAnimationComplete = () -> { // If still playing, let it finish. Loading Loading @@ -443,6 +446,13 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mKeyguardOccluded = occluded; } void onKeyguardVisibilityChanged(boolean showing) { if (!showing && mMainStage.isActive() && mTopStageAfterFoldDismiss != STAGE_TYPE_UNDEFINED) { exitSplitScreen(mTopStageAfterFoldDismiss == STAGE_TYPE_MAIN ? mMainStage : mSideStage); } } void exitSplitScreen() { exitSplitScreen(null /* childrenToTop */); } Loading @@ -458,6 +468,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mTaskOrganizer.applyTransaction(wct); // Reset divider position. mSplitLayout.resetDividerPosition(); mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; } /** Loading Loading @@ -808,8 +819,13 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, } private void onFoldedStateChanged(boolean folded) { if (folded && mMainStage.isActive()) { exitSplitScreen(mMainStage); mTopStageAfterFoldDismiss = STAGE_TYPE_UNDEFINED; if (!folded) return; if (mMainStage.isFocused()) { mTopStageAfterFoldDismiss = STAGE_TYPE_MAIN; } else if (mSideStage.isFocused()) { mTopStageAfterFoldDismiss = STAGE_TYPE_SIDE; } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageTaskListener.java +9 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,15 @@ class StageTaskListener implements ShellTaskOrganizer.TaskListener { return mChildrenTaskInfo.contains(taskId); } /** @return {@code true} if this listener contains the currently focused task. */ boolean isFocused() { if (mRootTaskInfo.isFocused) return true; for (int i = mChildrenTaskInfo.size() - 1; i >= 0; --i) { if (mChildrenTaskInfo.valueAt(i).isFocused) return true; } return false; } @Override @CallSuper public void onTaskAppeared(ActivityManager.RunningTaskInfo taskInfo, SurfaceControl leash) { Loading
packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java +5 −0 Original line number Diff line number Diff line Loading @@ -241,6 +241,11 @@ public final class WMShell extends SystemUI @VisibleForTesting void initSplitScreen(SplitScreen splitScreen) { mSplitScreenKeyguardCallback = new KeyguardUpdateMonitorCallback() { @Override public void onKeyguardVisibilityChanged(boolean showing) { splitScreen.onKeyguardVisibilityChanged(showing); } @Override public void onKeyguardOccludedChanged(boolean occluded) { splitScreen.onKeyguardOccludedChanged(occluded); Loading