Merge "Consolidate app-pair divider bar behavior" into sc-v2-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1717119fcf
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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 =
|
||||
@@ -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));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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() {
|
||||
@@ -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;
|
||||
@@ -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)
|
||||
.show(mRootTaskLeash)
|
||||
.show(mTaskLeash1)
|
||||
.show(mTaskLeash2);
|
||||
});
|
||||
mSyncQueue.runInSync(t -> t
|
||||
.show(mRootTaskLeash)
|
||||
.show(mTaskLeash1)
|
||||
.show(mTaskLeash2)
|
||||
.setPosition(mTaskLeash1,
|
||||
mTaskInfo1.positionInParent.x,
|
||||
mTaskInfo1.positionInParent.y)
|
||||
.setPosition(mTaskLeash2,
|
||||
mTaskInfo2.positionInParent.x,
|
||||
mTaskInfo2.positionInParent.y));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -227,10 +230,9 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
|
||||
}
|
||||
mRootTaskInfo = taskInfo;
|
||||
|
||||
if (mSplitLayout != null) {
|
||||
if (mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
|
||||
onLayoutChanged(mSplitLayout);
|
||||
}
|
||||
if (mSplitLayout != null
|
||||
&& mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
|
||||
onLayoutChanged(mSplitLayout);
|
||||
}
|
||||
} else if (taskInfo.taskId == getTaskId1()) {
|
||||
mTaskInfo1 = taskInfo;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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 + " ";
|
||||
|
||||
@@ -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) {
|
||||
mContext = mContext.createConfigurationContext(configuration);
|
||||
mSplitWindowManager.setConfiguration(configuration);
|
||||
mOrientation = orientation;
|
||||
mTempRect.set(mRootBounds);
|
||||
mRootBounds.set(rootBounds);
|
||||
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
|
||||
initDividerPosition(mTempRect);
|
||||
affectsLayout = true;
|
||||
|
||||
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);
|
||||
|
||||
if (mInitialized) {
|
||||
release();
|
||||
init();
|
||||
}
|
||||
|
||||
return affectsLayout;
|
||||
return true;
|
||||
}
|
||||
|
||||
private void initDividerPosition(Rect oldBounds) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user