Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +13 −11 Original line number Diff line number Diff line Loading @@ -123,7 +123,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mDividerWindowWidth = mDividerSize + 2 * mDividerInsets; mRootBounds.set(configuration.windowConfiguration.getBounds()); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null); resetDividerPosition(); } Loading Loading @@ -201,7 +201,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mRotation = rotation; mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null); initDividerPosition(mTempRect); if (mInitialized) { Loading @@ -212,8 +212,9 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return true; } /** Rotate the layout to specific rotation and assume its new bounds. */ public void rotateTo(int newRotation) { /** Rotate the layout to specific rotation and calculate new bounds. The stable insets value * should be calculated by display layout. */ public void rotateTo(int newRotation, Rect stableInsets) { final int rotationDelta = (newRotation - mRotation + 4) % 4; final boolean changeOrient = (rotationDelta % 2) != 0; Loading @@ -223,11 +224,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange tmpRect.set(mRootBounds.top, mRootBounds.left, mRootBounds.bottom, mRootBounds.right); } final Configuration config = new Configuration(); config.setTo(mContext.getResources().getConfiguration()); config.orientation = mOrientation; config.windowConfiguration.setBounds(tmpRect); updateConfiguration(config); // We only need new bounds here, other configuration should be update later. mTempRect.set(mRootBounds); mRootBounds.set(tmpRect); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, stableInsets); initDividerPosition(mTempRect); } private void initDividerPosition(Rect oldBounds) { Loading Loading @@ -372,7 +373,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return mDividerSnapAlgorithm.calculateSnapTarget(position, velocity, hardDismiss); } private DividerSnapAlgorithm getSnapAlgorithm(Context context, Rect rootBounds) { private DividerSnapAlgorithm getSnapAlgorithm(Context context, Rect rootBounds, @Nullable Rect stableInsets) { final boolean isLandscape = isLandscape(rootBounds); return new DividerSnapAlgorithm( context.getResources(), Loading @@ -380,7 +382,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange rootBounds.height(), mDividerSize, !isLandscape, getDisplayInsets(context), stableInsets != null ? stableInsets : getDisplayInsets(context), isLandscape ? DOCKED_LEFT : DOCKED_TOP /* dockSide */); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +15 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.WindowConfiguration; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; import android.hardware.devicestate.DeviceStateManager; import android.os.Bundle; Loading Loading @@ -87,6 +88,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.split.SplitLayout; Loading Loading @@ -133,6 +135,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, private final SideStage mSideStage; private final StageListenerImpl mSideStageListener = new StageListenerImpl(); private final StageTaskUnfoldController mSideUnfoldController; private final DisplayLayout mDisplayLayout; @SplitPosition private int mSideStagePosition = SPLIT_POSITION_BOTTOM_OR_RIGHT; Loading Loading @@ -234,6 +237,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions, mOnTransitionAnimationComplete); mDisplayController.addDisplayWindowListener(this); mDisplayLayout = new DisplayLayout(displayController.getDisplayLayout(displayId)); transitions.addHandler(this); } Loading Loading @@ -267,6 +271,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mLogger = logger; mRecentTasks = recentTasks; mDisplayController.addDisplayWindowListener(this); mDisplayLayout = new DisplayLayout(); transitions.addHandler(this); } Loading Loading @@ -1084,6 +1089,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mDisplayController.addDisplayChangingController(this::onRotateDisplay); } @Override public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) { if (displayId != DEFAULT_DISPLAY) { return; } mDisplayLayout.set(mDisplayController.getDisplayLayout(displayId)); } private void onRotateDisplay(int displayId, int fromRotation, int toRotation, WindowContainerTransaction wct) { if (!mMainStage.isActive()) return; Loading @@ -1092,7 +1105,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, final SurfaceControl.Transaction t = mTransactionPool.acquire(); setDividerVisibility(false, t); mSplitLayout.rotateTo(toRotation); mDisplayLayout.rotateTo(mContext.getResources(), toRotation); mSplitLayout.rotateTo(toRotation, mDisplayLayout.stableInsets()); updateWindowBounds(mSplitLayout, wct); updateUnfoldBounds(); t.apply(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +13 −11 Original line number Diff line number Diff line Loading @@ -123,7 +123,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mDividerWindowWidth = mDividerSize + 2 * mDividerInsets; mRootBounds.set(configuration.windowConfiguration.getBounds()); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null); resetDividerPosition(); } Loading Loading @@ -201,7 +201,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mRotation = rotation; mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, null); initDividerPosition(mTempRect); if (mInitialized) { Loading @@ -212,8 +212,9 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return true; } /** Rotate the layout to specific rotation and assume its new bounds. */ public void rotateTo(int newRotation) { /** Rotate the layout to specific rotation and calculate new bounds. The stable insets value * should be calculated by display layout. */ public void rotateTo(int newRotation, Rect stableInsets) { final int rotationDelta = (newRotation - mRotation + 4) % 4; final boolean changeOrient = (rotationDelta % 2) != 0; Loading @@ -223,11 +224,11 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange tmpRect.set(mRootBounds.top, mRootBounds.left, mRootBounds.bottom, mRootBounds.right); } final Configuration config = new Configuration(); config.setTo(mContext.getResources().getConfiguration()); config.orientation = mOrientation; config.windowConfiguration.setBounds(tmpRect); updateConfiguration(config); // We only need new bounds here, other configuration should be update later. mTempRect.set(mRootBounds); mRootBounds.set(tmpRect); mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds, stableInsets); initDividerPosition(mTempRect); } private void initDividerPosition(Rect oldBounds) { Loading Loading @@ -372,7 +373,8 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange return mDividerSnapAlgorithm.calculateSnapTarget(position, velocity, hardDismiss); } private DividerSnapAlgorithm getSnapAlgorithm(Context context, Rect rootBounds) { private DividerSnapAlgorithm getSnapAlgorithm(Context context, Rect rootBounds, @Nullable Rect stableInsets) { final boolean isLandscape = isLandscape(rootBounds); return new DividerSnapAlgorithm( context.getResources(), Loading @@ -380,7 +382,7 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange rootBounds.height(), mDividerSize, !isLandscape, getDisplayInsets(context), stableInsets != null ? stableInsets : getDisplayInsets(context), isLandscape ? DOCKED_LEFT : DOCKED_TOP /* dockSide */); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java +15 −1 Original line number Diff line number Diff line Loading @@ -57,6 +57,7 @@ import android.app.ActivityOptions; import android.app.ActivityTaskManager; import android.app.WindowConfiguration; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; import android.hardware.devicestate.DeviceStateManager; import android.os.Bundle; Loading Loading @@ -87,6 +88,7 @@ import com.android.wm.shell.ShellTaskOrganizer; import com.android.wm.shell.common.DisplayController; import com.android.wm.shell.common.DisplayImeController; import com.android.wm.shell.common.DisplayInsetsController; import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.TransactionPool; import com.android.wm.shell.common.split.SplitLayout; Loading Loading @@ -133,6 +135,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, private final SideStage mSideStage; private final StageListenerImpl mSideStageListener = new StageListenerImpl(); private final StageTaskUnfoldController mSideUnfoldController; private final DisplayLayout mDisplayLayout; @SplitPosition private int mSideStagePosition = SPLIT_POSITION_BOTTOM_OR_RIGHT; Loading Loading @@ -234,6 +237,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mSplitTransitions = new SplitScreenTransitions(transactionPool, transitions, mOnTransitionAnimationComplete); mDisplayController.addDisplayWindowListener(this); mDisplayLayout = new DisplayLayout(displayController.getDisplayLayout(displayId)); transitions.addHandler(this); } Loading Loading @@ -267,6 +271,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mLogger = logger; mRecentTasks = recentTasks; mDisplayController.addDisplayWindowListener(this); mDisplayLayout = new DisplayLayout(); transitions.addHandler(this); } Loading Loading @@ -1084,6 +1089,14 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, mDisplayController.addDisplayChangingController(this::onRotateDisplay); } @Override public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) { if (displayId != DEFAULT_DISPLAY) { return; } mDisplayLayout.set(mDisplayController.getDisplayLayout(displayId)); } private void onRotateDisplay(int displayId, int fromRotation, int toRotation, WindowContainerTransaction wct) { if (!mMainStage.isActive()) return; Loading @@ -1092,7 +1105,8 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler, final SurfaceControl.Transaction t = mTransactionPool.acquire(); setDividerVisibility(false, t); mSplitLayout.rotateTo(toRotation); mDisplayLayout.rotateTo(mContext.getResources(), toRotation); mSplitLayout.rotateTo(toRotation, mDisplayLayout.stableInsets()); updateWindowBounds(mSplitLayout, wct); updateUnfoldBounds(); t.apply(); Loading