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