Merge "Support to start tasks into split screen with specific split ratio" into sc-v2-dev
This commit is contained in:
@@ -321,6 +321,16 @@ public final class SplitLayout implements DisplayInsetsController.OnInsetsChange
|
||||
mSplitLayoutHandler.onLayoutSizeChanged(this);
|
||||
}
|
||||
|
||||
/** Sets divide position base on the ratio within root bounds. */
|
||||
public void setDivideRatio(float ratio) {
|
||||
final int position = isLandscape()
|
||||
? mRootBounds.left + (int) (mRootBounds.width() * ratio)
|
||||
: mRootBounds.top + (int) (mRootBounds.height() * ratio);
|
||||
DividerSnapAlgorithm.SnapTarget snapTarget =
|
||||
mDividerSnapAlgorithm.calculateNonDismissingSnapTarget(position);
|
||||
setDividePosition(snapTarget.position);
|
||||
}
|
||||
|
||||
/** Resets divider position. */
|
||||
public void resetDividerPosition() {
|
||||
mDividePosition = mDividerSnapAlgorithm.getMiddleTarget().position;
|
||||
|
||||
@@ -83,14 +83,15 @@ interface ISplitScreen {
|
||||
* Starts tasks simultaneously in one transition.
|
||||
*/
|
||||
oneway void startTasks(int mainTaskId, in Bundle mainOptions, int sideTaskId,
|
||||
in Bundle sideOptions, int sidePosition, in RemoteTransition remoteTransition) = 10;
|
||||
in Bundle sideOptions, int sidePosition, float splitRatio,
|
||||
in RemoteTransition remoteTransition) = 10;
|
||||
|
||||
/**
|
||||
* Version of startTasks using legacy transition system.
|
||||
*/
|
||||
oneway void startTasksWithLegacyTransition(int mainTaskId, in Bundle mainOptions,
|
||||
int sideTaskId, in Bundle sideOptions, int sidePosition,
|
||||
in RemoteAnimationAdapter adapter) = 11;
|
||||
float splitRatio, in RemoteAnimationAdapter adapter) = 11;
|
||||
|
||||
/**
|
||||
* Blocking call that notifies and gets additional split-screen targets when entering
|
||||
|
||||
@@ -610,21 +610,21 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
|
||||
@Override
|
||||
public void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
|
||||
int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
|
||||
RemoteAnimationAdapter adapter) {
|
||||
float splitRatio, RemoteAnimationAdapter adapter) {
|
||||
executeRemoteCallWithTaskPermission(mController, "startTasks",
|
||||
(controller) -> controller.mStageCoordinator.startTasksWithLegacyTransition(
|
||||
mainTaskId, mainOptions, sideTaskId, sideOptions, sidePosition,
|
||||
adapter));
|
||||
splitRatio, adapter));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startTasks(int mainTaskId, @Nullable Bundle mainOptions,
|
||||
int sideTaskId, @Nullable Bundle sideOptions,
|
||||
@SplitPosition int sidePosition,
|
||||
@SplitPosition int sidePosition, float splitRatio,
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
executeRemoteCallWithTaskPermission(mController, "startTasks",
|
||||
(controller) -> controller.mStageCoordinator.startTasks(mainTaskId, mainOptions,
|
||||
sideTaskId, sideOptions, sidePosition, remoteTransition));
|
||||
sideTaskId, sideOptions, sidePosition, splitRatio, remoteTransition));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -333,7 +333,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
|
||||
/** Starts 2 tasks in one transition. */
|
||||
void startTasks(int mainTaskId, @Nullable Bundle mainOptions, int sideTaskId,
|
||||
@Nullable Bundle sideOptions, @SplitPosition int sidePosition,
|
||||
@Nullable Bundle sideOptions, @SplitPosition int sidePosition, float splitRatio,
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
mainOptions = mainOptions != null ? mainOptions : new Bundle();
|
||||
@@ -345,6 +345,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
mMainStage.activate(getMainStageBounds(), wct, false /* reparent */);
|
||||
mSideStage.setBounds(getSideStageBounds(), wct);
|
||||
|
||||
mSplitLayout.setDivideRatio(splitRatio);
|
||||
// Make sure the launch options will put tasks in the corresponding split roots
|
||||
addActivityOptions(mainOptions, mMainStage);
|
||||
addActivityOptions(sideOptions, mSideStage);
|
||||
@@ -360,7 +361,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
/** Starts 2 tasks in one legacy transition. */
|
||||
void startTasksWithLegacyTransition(int mainTaskId, @Nullable Bundle mainOptions,
|
||||
int sideTaskId, @Nullable Bundle sideOptions, @SplitPosition int sidePosition,
|
||||
RemoteAnimationAdapter adapter) {
|
||||
float splitRatio, RemoteAnimationAdapter adapter) {
|
||||
final WindowContainerTransaction wct = new WindowContainerTransaction();
|
||||
// Need to add another wrapper here in shell so that we can inject the divider bar
|
||||
// and also manage the process elevation via setRunningRemote
|
||||
@@ -415,6 +416,7 @@ class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
sideOptions = sideOptions != null ? sideOptions : new Bundle();
|
||||
setSideStagePosition(sidePosition, wct);
|
||||
|
||||
mSplitLayout.setDivideRatio(splitRatio);
|
||||
// Build a request WCT that will launch both apps such that task 0 is on the main stage
|
||||
// while task 1 is on the side stage.
|
||||
mMainStage.activate(getMainStageBounds(), wct, false /* reparent */);
|
||||
|
||||
@@ -105,6 +105,12 @@ public class SplitLayoutTests extends ShellTestCase {
|
||||
verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetDivideRatio() {
|
||||
mSplitLayout.setDivideRatio(0.5f);
|
||||
verify(mSplitLayoutHandler).onLayoutSizeChanged(any(SplitLayout.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnDoubleTappedDivider() {
|
||||
mSplitLayout.onDoubleTappedDivider();
|
||||
|
||||
Reference in New Issue
Block a user