From fedf86ed495ace4a1d240919c6fca562881cd8fd Mon Sep 17 00:00:00 2001 From: Jerry Chang Date: Mon, 3 May 2021 23:36:45 +0800 Subject: [PATCH] Add a flag to determin whether to support legacy split Bug: 187041611 Test: launch with adjacent flag won't trigger stage split Change-Id: Iefaad20636dda88caa6988802d1b7640b5077e4e --- core/res/res/values/config.xml | 3 +++ core/res/res/values/symbols.xml | 1 + .../shell/splitscreen/StageCoordinator.java | 21 +++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 5ebfae518eade..aa0d23bf33852 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3552,6 +3552,9 @@ --> 600 + + true + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 3fec918f7ac05..5019ccadd353a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -396,6 +396,7 @@ + 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 f7160e55012c3..4be9e758bf9b8 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 @@ -55,6 +55,7 @@ import android.window.TransitionRequestInfo; import android.window.WindowContainerTransaction; +import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.common.ProtoLog; import com.android.wm.shell.RootTaskDisplayAreaOrganizer; @@ -110,6 +111,11 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener, private final SplitScreenTransitions mSplitTransitions; private boolean mExitSplitScreenOnHide = true; + // TODO(b/187041611): remove this flag after totally deprecated legacy split + /** Whether the device is supporting legacy split or not. */ + private boolean mUseLegacySplit; + + @SplitScreen.StageType int mDismissTop = NO_DISMISS; private final Runnable mOnTransitionAnimationComplete = () -> { // If still playing, let it finish. @@ -334,10 +340,17 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener, private void onStageRootTaskAppeared(StageListenerImpl stageListener) { if (mMainStageListener.mHasRootTask && mSideStageListener.mHasRootTask) { + mUseLegacySplit = mContext.getResources().getBoolean(R.bool.config_useLegacySplit); final WindowContainerTransaction wct = new WindowContainerTransaction(); // Make the stages adjacent to each other so they occlude what's behind them. wct.setAdjacentRoots(mMainStage.mRootTaskInfo.token, mSideStage.mRootTaskInfo.token); - wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token); + + // Only sets side stage as launch-adjacent-flag-root when the device is not using legacy + // split to prevent new split behavior confusing users. + if (!mUseLegacySplit) { + wct.setLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token); + } + mTaskOrganizer.applyTransaction(wct); } } @@ -347,7 +360,11 @@ class StageCoordinator implements SplitLayout.LayoutChangeListener, final WindowContainerTransaction wct = new WindowContainerTransaction(); // Deactivate the main stage if it no longer has a root task. mMainStage.deactivate(wct); - wct.clearLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token); + + if (!mUseLegacySplit) { + wct.clearLaunchAdjacentFlagRoot(mSideStage.mRootTaskInfo.token); + } + mTaskOrganizer.applyTransaction(wct); } }