Loading libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java +24 −22 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_UNDEF import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG; import android.app.ActivityManager; import android.graphics.Rect; import android.view.SurfaceControl; import android.view.SurfaceSession; import android.window.WindowContainerToken; Loading @@ -40,6 +39,7 @@ import com.android.internal.protolog.common.ProtoLog; 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.SurfaceUtils; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.split.SplitLayout; Loading Loading @@ -69,6 +69,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou private final SyncTransactionQueue mSyncQueue; private final DisplayController mDisplayController; private final DisplayImeController mDisplayImeController; private final DisplayInsetsController mDisplayInsetsController; private SplitLayout mSplitLayout; private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks = Loading @@ -80,7 +81,12 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou @Override public void onLeashReady(SurfaceControl leash) { mSyncQueue.runInSync(t -> t.show(leash)); mSyncQueue.runInSync(t -> t .show(leash) .setLayer(leash, SPLIT_DIVIDER_LAYER) .setPosition(leash, mSplitLayout.getDividerBounds().left, mSplitLayout.getDividerBounds().top)); } }; Loading @@ -89,6 +95,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou mSyncQueue = controller.getSyncTransactionQueue(); mDisplayController = controller.getDisplayController(); mDisplayImeController = controller.getDisplayImeController(); mDisplayInsetsController = controller.getDisplayInsetsController(); } int getRootTaskId() { Loading Loading @@ -125,6 +132,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou mDisplayController.getDisplayContext(mRootTaskInfo.displayId), mRootTaskInfo.configuration, this /* layoutChangeListener */, mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer()); mDisplayInsetsController.addInsetsChangedListener(mRootTaskInfo.displayId, mSplitLayout); final WindowContainerToken token1 = task1.token; final WindowContainerToken token2 = task2.token; Loading Loading @@ -190,22 +198,17 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou if (mTaskLeash1 == null || mTaskLeash2 == null) return; mSplitLayout.init(); final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash(); final Rect dividerBounds = mSplitLayout.getDividerBounds(); // TODO: Is there more we need to do here? mSyncQueue.runInSync(t -> { t.setLayer(dividerLeash, SPLIT_DIVIDER_LAYER) .setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x, mTaskInfo1.positionInParent.y) .setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x, mTaskInfo2.positionInParent.y) .setPosition(dividerLeash, dividerBounds.left, dividerBounds.top) .show(dividerLeash) mSyncQueue.runInSync(t -> t .show(mRootTaskLeash) .show(mTaskLeash1) .show(mTaskLeash2); }); .show(mTaskLeash2) .setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x, mTaskInfo1.positionInParent.y) .setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x, mTaskInfo2.positionInParent.y)); } @Override Loading @@ -227,11 +230,10 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou } mRootTaskInfo = taskInfo; if (mSplitLayout != null) { if (mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) { if (mSplitLayout != null && mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) { onLayoutChanged(mSplitLayout); } } } else if (taskInfo.taskId == getTaskId1()) { mTaskInfo1 = taskInfo; } else if (taskInfo.taskId == getTaskId2()) { Loading libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsController.java +9 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.internal.protolog.common.ProtoLog; 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.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; Loading @@ -50,14 +51,17 @@ public class AppPairsController { private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>(); private final DisplayController mDisplayController; private final DisplayImeController mDisplayImeController; private final DisplayInsetsController mDisplayInsetsController; public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue, DisplayController displayController, ShellExecutor mainExecutor, DisplayImeController displayImeController) { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController) { mTaskOrganizer = organizer; mSyncQueue = syncQueue; mDisplayController = displayController; mDisplayImeController = displayImeController; mDisplayInsetsController = displayInsetsController; mMainExecutor = mainExecutor; } Loading Loading @@ -148,6 +152,10 @@ public class AppPairsController { return mDisplayImeController; } DisplayInsetsController getDisplayInsetsController() { return mDisplayInsetsController; } public void dump(@NonNull PrintWriter pw, String prefix) { final String innerPrefix = prefix + " "; final String childPrefix = innerPrefix + " "; Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +15 −11 Original line number Diff line number Diff line Loading @@ -189,24 +189,28 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange final int rotation = configuration.windowConfiguration.getRotation(); final Rect rootBounds = configuration.windowConfiguration.getBounds(); final int orientation = configuration.orientation; if (rotation != mRotation || !mRootBounds.equals(rootBounds) || orientation != mOrientation) { if (mOrientation == orientation && rotation == mRotation && mRootBounds.equals(rootBounds)) { return false; } mContext = mContext.createConfigurationContext(configuration); mSplitWindowManager.setConfiguration(configuration); mOrientation = orientation; mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mRotation = rotation; mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); initDividerPosition(mTempRect); affectsLayout = true; } if (mInitialized) { release(); init(); } return affectsLayout; return true; } private void initDividerPosition(Rect oldBounds) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsController.java +2 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock; 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.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; Loading @@ -30,7 +31,7 @@ public class TestAppPairsController extends AppPairsController { public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue, DisplayController displayController) { super(organizer, syncQueue, displayController, mock(ShellExecutor.class), mock(DisplayImeController.class)); mock(DisplayImeController.class), mock(DisplayInsetsController.class)); mPool = new TestAppPairsPool(this); setPairsPool(mPool); } Loading packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java +3 −2 Original line number Diff line number Diff line Loading @@ -126,9 +126,10 @@ public class WMShellModule { static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer, SyncTransactionQueue syncQueue, DisplayController displayController, @ShellMainThread ShellExecutor mainExecutor, DisplayImeController displayImeController) { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController) { return new AppPairsController(shellTaskOrganizer, syncQueue, displayController, mainExecutor, displayImeController); mainExecutor, displayImeController, displayInsetsController); } // Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPair.java +24 −22 Original line number Diff line number Diff line Loading @@ -27,7 +27,6 @@ import static com.android.wm.shell.common.split.SplitLayout.SPLIT_POSITION_UNDEF import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG; import android.app.ActivityManager; import android.graphics.Rect; import android.view.SurfaceControl; import android.view.SurfaceSession; import android.window.WindowContainerToken; Loading @@ -40,6 +39,7 @@ import com.android.internal.protolog.common.ProtoLog; 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.SurfaceUtils; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.common.split.SplitLayout; Loading Loading @@ -69,6 +69,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou private final SyncTransactionQueue mSyncQueue; private final DisplayController mDisplayController; private final DisplayImeController mDisplayImeController; private final DisplayInsetsController mDisplayInsetsController; private SplitLayout mSplitLayout; private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks = Loading @@ -80,7 +81,12 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou @Override public void onLeashReady(SurfaceControl leash) { mSyncQueue.runInSync(t -> t.show(leash)); mSyncQueue.runInSync(t -> t .show(leash) .setLayer(leash, SPLIT_DIVIDER_LAYER) .setPosition(leash, mSplitLayout.getDividerBounds().left, mSplitLayout.getDividerBounds().top)); } }; Loading @@ -89,6 +95,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou mSyncQueue = controller.getSyncTransactionQueue(); mDisplayController = controller.getDisplayController(); mDisplayImeController = controller.getDisplayImeController(); mDisplayInsetsController = controller.getDisplayInsetsController(); } int getRootTaskId() { Loading Loading @@ -125,6 +132,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou mDisplayController.getDisplayContext(mRootTaskInfo.displayId), mRootTaskInfo.configuration, this /* layoutChangeListener */, mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer()); mDisplayInsetsController.addInsetsChangedListener(mRootTaskInfo.displayId, mSplitLayout); final WindowContainerToken token1 = task1.token; final WindowContainerToken token2 = task2.token; Loading Loading @@ -190,22 +198,17 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou if (mTaskLeash1 == null || mTaskLeash2 == null) return; mSplitLayout.init(); final SurfaceControl dividerLeash = mSplitLayout.getDividerLeash(); final Rect dividerBounds = mSplitLayout.getDividerBounds(); // TODO: Is there more we need to do here? mSyncQueue.runInSync(t -> { t.setLayer(dividerLeash, SPLIT_DIVIDER_LAYER) .setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x, mTaskInfo1.positionInParent.y) .setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x, mTaskInfo2.positionInParent.y) .setPosition(dividerLeash, dividerBounds.left, dividerBounds.top) .show(dividerLeash) mSyncQueue.runInSync(t -> t .show(mRootTaskLeash) .show(mTaskLeash1) .show(mTaskLeash2); }); .show(mTaskLeash2) .setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x, mTaskInfo1.positionInParent.y) .setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x, mTaskInfo2.positionInParent.y)); } @Override Loading @@ -227,11 +230,10 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou } mRootTaskInfo = taskInfo; if (mSplitLayout != null) { if (mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) { if (mSplitLayout != null && mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) { onLayoutChanged(mSplitLayout); } } } else if (taskInfo.taskId == getTaskId1()) { mTaskInfo1 = taskInfo; } else if (taskInfo.taskId == getTaskId2()) { Loading
libs/WindowManager/Shell/src/com/android/wm/shell/apppairs/AppPairsController.java +9 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import com.android.internal.protolog.common.ProtoLog; 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.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; Loading @@ -50,14 +51,17 @@ public class AppPairsController { private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>(); private final DisplayController mDisplayController; private final DisplayImeController mDisplayImeController; private final DisplayInsetsController mDisplayInsetsController; public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue, DisplayController displayController, ShellExecutor mainExecutor, DisplayImeController displayImeController) { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController) { mTaskOrganizer = organizer; mSyncQueue = syncQueue; mDisplayController = displayController; mDisplayImeController = displayImeController; mDisplayInsetsController = displayInsetsController; mMainExecutor = mainExecutor; } Loading Loading @@ -148,6 +152,10 @@ public class AppPairsController { return mDisplayImeController; } DisplayInsetsController getDisplayInsetsController() { return mDisplayInsetsController; } public void dump(@NonNull PrintWriter pw, String prefix) { final String innerPrefix = prefix + " "; final String childPrefix = innerPrefix + " "; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/split/SplitLayout.java +15 −11 Original line number Diff line number Diff line Loading @@ -189,24 +189,28 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange final int rotation = configuration.windowConfiguration.getRotation(); final Rect rootBounds = configuration.windowConfiguration.getBounds(); final int orientation = configuration.orientation; if (rotation != mRotation || !mRootBounds.equals(rootBounds) || orientation != mOrientation) { if (mOrientation == orientation && rotation == mRotation && mRootBounds.equals(rootBounds)) { return false; } mContext = mContext.createConfigurationContext(configuration); mSplitWindowManager.setConfiguration(configuration); mOrientation = orientation; mTempRect.set(mRootBounds); mRootBounds.set(rootBounds); mRotation = rotation; mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds); initDividerPosition(mTempRect); affectsLayout = true; } if (mInitialized) { release(); init(); } return affectsLayout; return true; } private void initDividerPosition(Rect oldBounds) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/apppairs/TestAppPairsController.java +2 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import static org.mockito.Mockito.mock; 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.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; Loading @@ -30,7 +31,7 @@ public class TestAppPairsController extends AppPairsController { public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue, DisplayController displayController) { super(organizer, syncQueue, displayController, mock(ShellExecutor.class), mock(DisplayImeController.class)); mock(DisplayImeController.class), mock(DisplayInsetsController.class)); mPool = new TestAppPairsPool(this); setPairsPool(mPool); } Loading
packages/SystemUI/src/com/android/systemui/wmshell/WMShellModule.java +3 −2 Original line number Diff line number Diff line Loading @@ -126,9 +126,10 @@ public class WMShellModule { static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer, SyncTransactionQueue syncQueue, DisplayController displayController, @ShellMainThread ShellExecutor mainExecutor, DisplayImeController displayImeController) { DisplayImeController displayImeController, DisplayInsetsController displayInsetsController) { return new AppPairsController(shellTaskOrganizer, syncQueue, displayController, mainExecutor, displayImeController); mainExecutor, displayImeController, displayInsetsController); } // Loading