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 static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_TASK_ORG;
|
||||||
|
|
||||||
import android.app.ActivityManager;
|
import android.app.ActivityManager;
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.view.SurfaceControl;
|
import android.view.SurfaceControl;
|
||||||
import android.view.SurfaceSession;
|
import android.view.SurfaceSession;
|
||||||
import android.window.WindowContainerToken;
|
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.ShellTaskOrganizer;
|
||||||
import com.android.wm.shell.common.DisplayController;
|
import com.android.wm.shell.common.DisplayController;
|
||||||
import com.android.wm.shell.common.DisplayImeController;
|
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.SurfaceUtils;
|
||||||
import com.android.wm.shell.common.SyncTransactionQueue;
|
import com.android.wm.shell.common.SyncTransactionQueue;
|
||||||
import com.android.wm.shell.common.split.SplitLayout;
|
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 SyncTransactionQueue mSyncQueue;
|
||||||
private final DisplayController mDisplayController;
|
private final DisplayController mDisplayController;
|
||||||
private final DisplayImeController mDisplayImeController;
|
private final DisplayImeController mDisplayImeController;
|
||||||
|
private final DisplayInsetsController mDisplayInsetsController;
|
||||||
private SplitLayout mSplitLayout;
|
private SplitLayout mSplitLayout;
|
||||||
|
|
||||||
private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks =
|
private final SplitWindowManager.ParentContainerCallbacks mParentContainerCallbacks =
|
||||||
@@ -80,7 +81,12 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLeashReady(SurfaceControl leash) {
|
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();
|
mSyncQueue = controller.getSyncTransactionQueue();
|
||||||
mDisplayController = controller.getDisplayController();
|
mDisplayController = controller.getDisplayController();
|
||||||
mDisplayImeController = controller.getDisplayImeController();
|
mDisplayImeController = controller.getDisplayImeController();
|
||||||
|
mDisplayInsetsController = controller.getDisplayInsetsController();
|
||||||
}
|
}
|
||||||
|
|
||||||
int getRootTaskId() {
|
int getRootTaskId() {
|
||||||
@@ -125,6 +132,7 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
|
|||||||
mDisplayController.getDisplayContext(mRootTaskInfo.displayId),
|
mDisplayController.getDisplayContext(mRootTaskInfo.displayId),
|
||||||
mRootTaskInfo.configuration, this /* layoutChangeListener */,
|
mRootTaskInfo.configuration, this /* layoutChangeListener */,
|
||||||
mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer());
|
mParentContainerCallbacks, mDisplayImeController, mController.getTaskOrganizer());
|
||||||
|
mDisplayInsetsController.addInsetsChangedListener(mRootTaskInfo.displayId, mSplitLayout);
|
||||||
|
|
||||||
final WindowContainerToken token1 = task1.token;
|
final WindowContainerToken token1 = task1.token;
|
||||||
final WindowContainerToken token2 = task2.token;
|
final WindowContainerToken token2 = task2.token;
|
||||||
@@ -190,22 +198,17 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
|
|||||||
if (mTaskLeash1 == null || mTaskLeash2 == null) return;
|
if (mTaskLeash1 == null || mTaskLeash2 == null) return;
|
||||||
|
|
||||||
mSplitLayout.init();
|
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
|
||||||
mSyncQueue.runInSync(t -> {
|
.show(mRootTaskLeash)
|
||||||
t.setLayer(dividerLeash, SPLIT_DIVIDER_LAYER)
|
.show(mTaskLeash1)
|
||||||
.setPosition(mTaskLeash1, mTaskInfo1.positionInParent.x,
|
.show(mTaskLeash2)
|
||||||
mTaskInfo1.positionInParent.y)
|
.setPosition(mTaskLeash1,
|
||||||
.setPosition(mTaskLeash2, mTaskInfo2.positionInParent.x,
|
mTaskInfo1.positionInParent.x,
|
||||||
mTaskInfo2.positionInParent.y)
|
mTaskInfo1.positionInParent.y)
|
||||||
.setPosition(dividerLeash, dividerBounds.left, dividerBounds.top)
|
.setPosition(mTaskLeash2,
|
||||||
.show(dividerLeash)
|
mTaskInfo2.positionInParent.x,
|
||||||
.show(mRootTaskLeash)
|
mTaskInfo2.positionInParent.y));
|
||||||
.show(mTaskLeash1)
|
|
||||||
.show(mTaskLeash2);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -227,10 +230,9 @@ class AppPair implements ShellTaskOrganizer.TaskListener, SplitLayout.SplitLayou
|
|||||||
}
|
}
|
||||||
mRootTaskInfo = taskInfo;
|
mRootTaskInfo = taskInfo;
|
||||||
|
|
||||||
if (mSplitLayout != null) {
|
if (mSplitLayout != null
|
||||||
if (mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
|
&& mSplitLayout.updateConfiguration(mRootTaskInfo.configuration)) {
|
||||||
onLayoutChanged(mSplitLayout);
|
onLayoutChanged(mSplitLayout);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (taskInfo.taskId == getTaskId1()) {
|
} else if (taskInfo.taskId == getTaskId1()) {
|
||||||
mTaskInfo1 = taskInfo;
|
mTaskInfo1 = taskInfo;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import com.android.internal.protolog.common.ProtoLog;
|
|||||||
import com.android.wm.shell.ShellTaskOrganizer;
|
import com.android.wm.shell.ShellTaskOrganizer;
|
||||||
import com.android.wm.shell.common.DisplayController;
|
import com.android.wm.shell.common.DisplayController;
|
||||||
import com.android.wm.shell.common.DisplayImeController;
|
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.ShellExecutor;
|
||||||
import com.android.wm.shell.common.SyncTransactionQueue;
|
import com.android.wm.shell.common.SyncTransactionQueue;
|
||||||
|
|
||||||
@@ -50,14 +51,17 @@ public class AppPairsController {
|
|||||||
private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>();
|
private final SparseArray<AppPair> mActiveAppPairs = new SparseArray<>();
|
||||||
private final DisplayController mDisplayController;
|
private final DisplayController mDisplayController;
|
||||||
private final DisplayImeController mDisplayImeController;
|
private final DisplayImeController mDisplayImeController;
|
||||||
|
private final DisplayInsetsController mDisplayInsetsController;
|
||||||
|
|
||||||
public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
|
public AppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
|
||||||
DisplayController displayController, ShellExecutor mainExecutor,
|
DisplayController displayController, ShellExecutor mainExecutor,
|
||||||
DisplayImeController displayImeController) {
|
DisplayImeController displayImeController,
|
||||||
|
DisplayInsetsController displayInsetsController) {
|
||||||
mTaskOrganizer = organizer;
|
mTaskOrganizer = organizer;
|
||||||
mSyncQueue = syncQueue;
|
mSyncQueue = syncQueue;
|
||||||
mDisplayController = displayController;
|
mDisplayController = displayController;
|
||||||
mDisplayImeController = displayImeController;
|
mDisplayImeController = displayImeController;
|
||||||
|
mDisplayInsetsController = displayInsetsController;
|
||||||
mMainExecutor = mainExecutor;
|
mMainExecutor = mainExecutor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +152,10 @@ public class AppPairsController {
|
|||||||
return mDisplayImeController;
|
return mDisplayImeController;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DisplayInsetsController getDisplayInsetsController() {
|
||||||
|
return mDisplayInsetsController;
|
||||||
|
}
|
||||||
|
|
||||||
public void dump(@NonNull PrintWriter pw, String prefix) {
|
public void dump(@NonNull PrintWriter pw, String prefix) {
|
||||||
final String innerPrefix = prefix + " ";
|
final String innerPrefix = prefix + " ";
|
||||||
final String childPrefix = innerPrefix + " ";
|
final String childPrefix = innerPrefix + " ";
|
||||||
|
|||||||
@@ -189,24 +189,28 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
|||||||
final int rotation = configuration.windowConfiguration.getRotation();
|
final int rotation = configuration.windowConfiguration.getRotation();
|
||||||
final Rect rootBounds = configuration.windowConfiguration.getBounds();
|
final Rect rootBounds = configuration.windowConfiguration.getBounds();
|
||||||
final int orientation = configuration.orientation;
|
final int orientation = configuration.orientation;
|
||||||
if (rotation != mRotation || !mRootBounds.equals(rootBounds)
|
|
||||||
|| orientation != mOrientation) {
|
if (mOrientation == orientation
|
||||||
mContext = mContext.createConfigurationContext(configuration);
|
&& rotation == mRotation
|
||||||
mSplitWindowManager.setConfiguration(configuration);
|
&& mRootBounds.equals(rootBounds)) {
|
||||||
mOrientation = orientation;
|
return false;
|
||||||
mTempRect.set(mRootBounds);
|
|
||||||
mRootBounds.set(rootBounds);
|
|
||||||
mDividerSnapAlgorithm = getSnapAlgorithm(mContext, mRootBounds);
|
|
||||||
initDividerPosition(mTempRect);
|
|
||||||
affectsLayout = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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) {
|
if (mInitialized) {
|
||||||
release();
|
release();
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
return affectsLayout;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initDividerPosition(Rect oldBounds) {
|
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.ShellTaskOrganizer;
|
||||||
import com.android.wm.shell.common.DisplayController;
|
import com.android.wm.shell.common.DisplayController;
|
||||||
import com.android.wm.shell.common.DisplayImeController;
|
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.ShellExecutor;
|
||||||
import com.android.wm.shell.common.SyncTransactionQueue;
|
import com.android.wm.shell.common.SyncTransactionQueue;
|
||||||
|
|
||||||
@@ -30,7 +31,7 @@ public class TestAppPairsController extends AppPairsController {
|
|||||||
public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
|
public TestAppPairsController(ShellTaskOrganizer organizer, SyncTransactionQueue syncQueue,
|
||||||
DisplayController displayController) {
|
DisplayController displayController) {
|
||||||
super(organizer, syncQueue, displayController, mock(ShellExecutor.class),
|
super(organizer, syncQueue, displayController, mock(ShellExecutor.class),
|
||||||
mock(DisplayImeController.class));
|
mock(DisplayImeController.class), mock(DisplayInsetsController.class));
|
||||||
mPool = new TestAppPairsPool(this);
|
mPool = new TestAppPairsPool(this);
|
||||||
setPairsPool(mPool);
|
setPairsPool(mPool);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,9 +126,10 @@ public class WMShellModule {
|
|||||||
static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer,
|
static AppPairsController provideAppPairs(ShellTaskOrganizer shellTaskOrganizer,
|
||||||
SyncTransactionQueue syncQueue, DisplayController displayController,
|
SyncTransactionQueue syncQueue, DisplayController displayController,
|
||||||
@ShellMainThread ShellExecutor mainExecutor,
|
@ShellMainThread ShellExecutor mainExecutor,
|
||||||
DisplayImeController displayImeController) {
|
DisplayImeController displayImeController,
|
||||||
|
DisplayInsetsController displayInsetsController) {
|
||||||
return new AppPairsController(shellTaskOrganizer, syncQueue, displayController,
|
return new AppPairsController(shellTaskOrganizer, syncQueue, displayController,
|
||||||
mainExecutor, displayImeController);
|
mainExecutor, displayImeController, displayInsetsController);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user