Merge "Handle openning transition while animating a pair to home" into udc-dev
This commit is contained in:
@@ -348,8 +348,6 @@ class SplitScreenTransitions {
|
|||||||
WindowContainerTransaction wct,
|
WindowContainerTransaction wct,
|
||||||
@Nullable RemoteTransition remoteTransition,
|
@Nullable RemoteTransition remoteTransition,
|
||||||
Transitions.TransitionHandler handler,
|
Transitions.TransitionHandler handler,
|
||||||
@Nullable TransitionConsumedCallback consumedCallback,
|
|
||||||
@Nullable TransitionFinishedCallback finishedCallback,
|
|
||||||
int extraTransitType, boolean resizeAnim) {
|
int extraTransitType, boolean resizeAnim) {
|
||||||
if (mPendingEnter != null) {
|
if (mPendingEnter != null) {
|
||||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
||||||
@@ -357,20 +355,16 @@ class SplitScreenTransitions {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
|
final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
|
||||||
setEnterTransition(transition, remoteTransition, consumedCallback, finishedCallback,
|
setEnterTransition(transition, remoteTransition, extraTransitType, resizeAnim);
|
||||||
extraTransitType, resizeAnim);
|
|
||||||
return transition;
|
return transition;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets a transition to enter split. */
|
/** Sets a transition to enter split. */
|
||||||
void setEnterTransition(@NonNull IBinder transition,
|
void setEnterTransition(@NonNull IBinder transition,
|
||||||
@Nullable RemoteTransition remoteTransition,
|
@Nullable RemoteTransition remoteTransition,
|
||||||
@Nullable TransitionConsumedCallback consumedCallback,
|
|
||||||
@Nullable TransitionFinishedCallback finishedCallback,
|
|
||||||
int extraTransitType, boolean resizeAnim) {
|
int extraTransitType, boolean resizeAnim) {
|
||||||
mPendingEnter = new EnterSession(
|
mPendingEnter = new EnterSession(
|
||||||
transition, consumedCallback, finishedCallback, remoteTransition, extraTransitType,
|
transition, remoteTransition, extraTransitType, resizeAnim);
|
||||||
resizeAnim);
|
|
||||||
|
|
||||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
||||||
+ " deduced Enter split screen");
|
+ " deduced Enter split screen");
|
||||||
@@ -608,12 +602,10 @@ class SplitScreenTransitions {
|
|||||||
final boolean mResizeAnim;
|
final boolean mResizeAnim;
|
||||||
|
|
||||||
EnterSession(IBinder transition,
|
EnterSession(IBinder transition,
|
||||||
@Nullable TransitionConsumedCallback consumedCallback,
|
|
||||||
@Nullable TransitionFinishedCallback finishedCallback,
|
|
||||||
@Nullable RemoteTransition remoteTransition,
|
@Nullable RemoteTransition remoteTransition,
|
||||||
int extraTransitType, boolean resizeAnim) {
|
int extraTransitType, boolean resizeAnim) {
|
||||||
super(transition, consumedCallback, finishedCallback, remoteTransition,
|
super(transition, null /* consumedCallback */, null /* finishedCallback */,
|
||||||
extraTransitType);
|
remoteTransition, extraTransitType);
|
||||||
this.mResizeAnim = resizeAnim;
|
this.mResizeAnim = resizeAnim;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -396,7 +396,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
prepareEnterSplitScreen(wct, task, stagePosition);
|
prepareEnterSplitScreen(wct, task, stagePosition);
|
||||||
if (ENABLE_SHELL_TRANSITIONS) {
|
if (ENABLE_SHELL_TRANSITIONS) {
|
||||||
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct,
|
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct,
|
||||||
null, this, null /* consumedCallback */, null /* finishedCallback */,
|
null, this,
|
||||||
isSplitScreenVisible()
|
isSplitScreenVisible()
|
||||||
? TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE : TRANSIT_SPLIT_SCREEN_PAIR_OPEN,
|
? TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE : TRANSIT_SPLIT_SCREEN_PAIR_OPEN,
|
||||||
!mIsDropEntering);
|
!mIsDropEntering);
|
||||||
@@ -507,8 +507,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
prepareEnterSplitScreen(wct, null /* taskInfo */, position);
|
prepareEnterSplitScreen(wct, null /* taskInfo */, position);
|
||||||
|
|
||||||
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
|
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
|
||||||
null /* consumedCallback */, null /* finishedCallback */, extraTransitType,
|
extraTransitType, !mIsDropEntering);
|
||||||
!mIsDropEntering);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Launches an activity into split by legacy transition. */
|
/** Launches an activity into split by legacy transition. */
|
||||||
@@ -665,8 +664,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
if (mPausingTasks.contains(mainTaskId)) {
|
if (mPausingTasks.contains(mainTaskId)) {
|
||||||
mPausingTasks.clear();
|
mPausingTasks.clear();
|
||||||
}
|
}
|
||||||
mSplitTransitions.startEnterTransition(
|
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, remoteTransition, this,
|
||||||
TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
|
|
||||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
||||||
setEnterInstanceId(instanceId);
|
setEnterInstanceId(instanceId);
|
||||||
}
|
}
|
||||||
@@ -716,8 +714,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
wct.sendPendingIntent(pendingIntent2, fillInIntent2, options2);
|
wct.sendPendingIntent(pendingIntent2, fillInIntent2, options2);
|
||||||
}
|
}
|
||||||
|
|
||||||
mSplitTransitions.startEnterTransition(
|
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, remoteTransition, this,
|
||||||
TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
|
|
||||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
||||||
setEnterInstanceId(instanceId);
|
setEnterInstanceId(instanceId);
|
||||||
}
|
}
|
||||||
@@ -1453,8 +1450,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
if (!mMainStage.isActive()) return;
|
if (!mMainStage.isActive()) return;
|
||||||
mSideStage.removeAllTasks(wct, stageToTop == STAGE_TYPE_SIDE);
|
mSideStage.removeAllTasks(wct, stageToTop == STAGE_TYPE_SIDE);
|
||||||
mMainStage.deactivate(wct, stageToTop == STAGE_TYPE_MAIN);
|
mMainStage.deactivate(wct, stageToTop == STAGE_TYPE_MAIN);
|
||||||
wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
|
||||||
false /* reparentLeafTaskIfRelaunch */);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void prepareEnterSplitScreen(WindowContainerTransaction wct) {
|
private void prepareEnterSplitScreen(WindowContainerTransaction wct) {
|
||||||
@@ -2295,11 +2290,19 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
out = new WindowContainerTransaction();
|
out = new WindowContainerTransaction();
|
||||||
final StageTaskListener stage = getStageOfTask(triggerTask);
|
final StageTaskListener stage = getStageOfTask(triggerTask);
|
||||||
if (stage != null) {
|
if (stage != null) {
|
||||||
// Dismiss split if the last task in one of the stages is going away
|
|
||||||
if (isClosingType(type) && stage.getChildCount() == 1) {
|
if (isClosingType(type) && stage.getChildCount() == 1) {
|
||||||
|
// Dismiss split if the last task in one of the stages is going away
|
||||||
// The top should be the opposite side that is closing:
|
// The top should be the opposite side that is closing:
|
||||||
int dismissTop = getStageType(stage) == STAGE_TYPE_MAIN ? STAGE_TYPE_SIDE
|
int dismissTop = getStageType(stage) == STAGE_TYPE_MAIN
|
||||||
: STAGE_TYPE_MAIN;
|
? STAGE_TYPE_SIDE : STAGE_TYPE_MAIN;
|
||||||
|
prepareExitSplitScreen(dismissTop, out);
|
||||||
|
mSplitTransitions.setDismissTransition(transition, dismissTop,
|
||||||
|
EXIT_REASON_APP_FINISHED);
|
||||||
|
} else if (isOpening && !mPausingTasks.isEmpty()) {
|
||||||
|
// One of the splitting task is opening while animating the split pair in
|
||||||
|
// recents, which means to dismiss the split pair to this task.
|
||||||
|
int dismissTop = getStageType(stage) == STAGE_TYPE_MAIN
|
||||||
|
? STAGE_TYPE_MAIN : STAGE_TYPE_SIDE;
|
||||||
prepareExitSplitScreen(dismissTop, out);
|
prepareExitSplitScreen(dismissTop, out);
|
||||||
mSplitTransitions.setDismissTransition(transition, dismissTop,
|
mSplitTransitions.setDismissTransition(transition, dismissTop,
|
||||||
EXIT_REASON_APP_FINISHED);
|
EXIT_REASON_APP_FINISHED);
|
||||||
@@ -2308,7 +2311,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
// prepare to enter split screen.
|
// prepare to enter split screen.
|
||||||
prepareEnterSplitScreen(out);
|
prepareEnterSplitScreen(out);
|
||||||
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
|
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
|
||||||
null /* consumedCallback */, null /* finishedCallback */,
|
|
||||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
|
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
|
||||||
}
|
}
|
||||||
} else if (isOpening && inFullscreen) {
|
} else if (isOpening && inFullscreen) {
|
||||||
@@ -2334,7 +2336,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
out = new WindowContainerTransaction();
|
out = new WindowContainerTransaction();
|
||||||
prepareEnterSplitScreen(out);
|
prepareEnterSplitScreen(out);
|
||||||
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
|
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
|
||||||
null /* consumedCallback */, null /* finishedCallback */,
|
|
||||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
|
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2680,6 +2681,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
mShowDecorImmediately = true;
|
mShowDecorImmediately = true;
|
||||||
mSplitLayout.flingDividerToCenter();
|
mSplitLayout.flingDividerToCenter();
|
||||||
}
|
}
|
||||||
|
callbackWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token, false);
|
||||||
mPausingTasks.clear();
|
mPausingTasks.clear();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -2830,6 +2832,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
dismissTransition.setFinishedCallback((callbackWct, callbackT) -> {
|
dismissTransition.setFinishedCallback((callbackWct, callbackT) -> {
|
||||||
mMainStage.getSplitDecorManager().release(callbackT);
|
mMainStage.getSplitDecorManager().release(callbackT);
|
||||||
mSideStage.getSplitDecorManager().release(callbackT);
|
mSideStage.getSplitDecorManager().release(callbackT);
|
||||||
|
callbackWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token, false);
|
||||||
});
|
});
|
||||||
|
|
||||||
addDividerBarToTransition(info, false /* show */);
|
addDividerBarToTransition(info, false /* show */);
|
||||||
@@ -2883,8 +2886,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
setSplitsVisible(false);
|
setSplitsVisible(false);
|
||||||
finishWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
|
prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, finishWct);
|
||||||
true /* reparentLeafTaskIfRelaunch */);
|
|
||||||
logExit(EXIT_REASON_UNKNOWN);
|
logExit(EXIT_REASON_UNKNOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -185,7 +185,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
|||||||
|
|
||||||
IBinder transition = mSplitScreenTransitions.startEnterTransition(
|
IBinder transition = mSplitScreenTransitions.startEnterTransition(
|
||||||
TRANSIT_OPEN, new WindowContainerTransaction(),
|
TRANSIT_OPEN, new WindowContainerTransaction(),
|
||||||
new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null,
|
new RemoteTransition(testRemote, "Test"), mStageCoordinator,
|
||||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
||||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||||
@@ -412,7 +412,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
|||||||
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
|
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
|
||||||
TRANSIT_OPEN, new WindowContainerTransaction(),
|
TRANSIT_OPEN, new WindowContainerTransaction(),
|
||||||
new RemoteTransition(new TestRemoteTransition(), "Test"),
|
new RemoteTransition(new TestRemoteTransition(), "Test"),
|
||||||
mStageCoordinator, null, null, TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
mStageCoordinator, TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
|
||||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||||
mStageCoordinator.startAnimation(enterTransit, enterInfo,
|
mStageCoordinator.startAnimation(enterTransit, enterInfo,
|
||||||
|
|||||||
Reference in New Issue
Block a user