summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Jerry Chang <chenghsiuchang@google.com> 2023-05-26 14:05:53 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-05-26 14:05:53 +0000
commit032c4d585d2500114a3833425886e98a1cfbdce5 (patch)
treeb6b8b46cd35e46a5ba6f2d120ccad3876a7f2dad /libs
parent181a1caa06c9db49c0ce2b48bcd4073b70e6fd10 (diff)
parent14ba6a9b336f621122c84d16f680148fb6ddacb9 (diff)
Merge "Handle openning transition while animating a pair to home" into udc-dev
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java16
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java34
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java4
3 files changed, 24 insertions, 30 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
index d2b0e2800dc9..986309948ada 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenTransitions.java
@@ -348,8 +348,6 @@ class SplitScreenTransitions {
WindowContainerTransaction wct,
@Nullable RemoteTransition remoteTransition,
Transitions.TransitionHandler handler,
- @Nullable TransitionConsumedCallback consumedCallback,
- @Nullable TransitionFinishedCallback finishedCallback,
int extraTransitType, boolean resizeAnim) {
if (mPendingEnter != null) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
@@ -357,20 +355,16 @@ class SplitScreenTransitions {
return null;
}
final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
- setEnterTransition(transition, remoteTransition, consumedCallback, finishedCallback,
- extraTransitType, resizeAnim);
+ setEnterTransition(transition, remoteTransition, extraTransitType, resizeAnim);
return transition;
}
/** Sets a transition to enter split. */
void setEnterTransition(@NonNull IBinder transition,
@Nullable RemoteTransition remoteTransition,
- @Nullable TransitionConsumedCallback consumedCallback,
- @Nullable TransitionFinishedCallback finishedCallback,
int extraTransitType, boolean resizeAnim) {
mPendingEnter = new EnterSession(
- transition, consumedCallback, finishedCallback, remoteTransition, extraTransitType,
- resizeAnim);
+ transition, remoteTransition, extraTransitType, resizeAnim);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
+ " deduced Enter split screen");
@@ -608,12 +602,10 @@ class SplitScreenTransitions {
final boolean mResizeAnim;
EnterSession(IBinder transition,
- @Nullable TransitionConsumedCallback consumedCallback,
- @Nullable TransitionFinishedCallback finishedCallback,
@Nullable RemoteTransition remoteTransition,
int extraTransitType, boolean resizeAnim) {
- super(transition, consumedCallback, finishedCallback, remoteTransition,
- extraTransitType);
+ super(transition, null /* consumedCallback */, null /* finishedCallback */,
+ remoteTransition, extraTransitType);
this.mResizeAnim = resizeAnim;
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index 56258ffbf632..b2526ee97a21 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -396,7 +396,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
prepareEnterSplitScreen(wct, task, stagePosition);
if (ENABLE_SHELL_TRANSITIONS) {
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct,
- null, this, null /* consumedCallback */, null /* finishedCallback */,
+ null, this,
isSplitScreenVisible()
? TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE : TRANSIT_SPLIT_SCREEN_PAIR_OPEN,
!mIsDropEntering);
@@ -507,8 +507,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
prepareEnterSplitScreen(wct, null /* taskInfo */, position);
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
- null /* consumedCallback */, null /* finishedCallback */, extraTransitType,
- !mIsDropEntering);
+ extraTransitType, !mIsDropEntering);
}
/** Launches an activity into split by legacy transition. */
@@ -665,8 +664,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
if (mPausingTasks.contains(mainTaskId)) {
mPausingTasks.clear();
}
- mSplitTransitions.startEnterTransition(
- TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
+ mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, remoteTransition, this,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
setEnterInstanceId(instanceId);
}
@@ -716,8 +714,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
wct.sendPendingIntent(pendingIntent2, fillInIntent2, options2);
}
- mSplitTransitions.startEnterTransition(
- TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
+ mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, remoteTransition, this,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
setEnterInstanceId(instanceId);
}
@@ -1453,8 +1450,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
if (!mMainStage.isActive()) return;
mSideStage.removeAllTasks(wct, stageToTop == STAGE_TYPE_SIDE);
mMainStage.deactivate(wct, stageToTop == STAGE_TYPE_MAIN);
- wct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
- false /* reparentLeafTaskIfRelaunch */);
}
private void prepareEnterSplitScreen(WindowContainerTransaction wct) {
@@ -2295,11 +2290,19 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
out = new WindowContainerTransaction();
final StageTaskListener stage = getStageOfTask(triggerTask);
if (stage != null) {
- // Dismiss split if the last task in one of the stages is going away
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:
- int dismissTop = getStageType(stage) == STAGE_TYPE_MAIN ? STAGE_TYPE_SIDE
- : STAGE_TYPE_MAIN;
+ int dismissTop = getStageType(stage) == 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);
mSplitTransitions.setDismissTransition(transition, dismissTop,
EXIT_REASON_APP_FINISHED);
@@ -2308,7 +2311,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
// prepare to enter split screen.
prepareEnterSplitScreen(out);
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
- null /* consumedCallback */, null /* finishedCallback */,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
}
} else if (isOpening && inFullscreen) {
@@ -2334,7 +2336,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
out = new WindowContainerTransaction();
prepareEnterSplitScreen(out);
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
- null /* consumedCallback */, null /* finishedCallback */,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, !mIsDropEntering);
}
}
@@ -2680,6 +2681,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
mShowDecorImmediately = true;
mSplitLayout.flingDividerToCenter();
}
+ callbackWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token, false);
mPausingTasks.clear();
});
@@ -2830,6 +2832,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
dismissTransition.setFinishedCallback((callbackWct, callbackT) -> {
mMainStage.getSplitDecorManager().release(callbackT);
mSideStage.getSplitDecorManager().release(callbackT);
+ callbackWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token, false);
});
addDividerBarToTransition(info, false /* show */);
@@ -2883,8 +2886,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
setSplitsVisible(false);
- finishWct.setReparentLeafTaskIfRelaunch(mRootTaskInfo.token,
- true /* reparentLeafTaskIfRelaunch */);
+ prepareExitSplitScreen(STAGE_TYPE_UNDEFINED, finishWct);
logExit(EXIT_REASON_UNKNOWN);
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
index 5f705d743601..3b05651f884b 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/splitscreen/SplitTransitionTests.java
@@ -185,7 +185,7 @@ public class SplitTransitionTests extends ShellTestCase {
IBinder transition = mSplitScreenTransitions.startEnterTransition(
TRANSIT_OPEN, new WindowContainerTransaction(),
- new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null,
+ new RemoteTransition(testRemote, "Test"), mStageCoordinator,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, false);
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
@@ -412,7 +412,7 @@ public class SplitTransitionTests extends ShellTestCase {
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
TRANSIT_OPEN, new WindowContainerTransaction(),
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());
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
mStageCoordinator.startAnimation(enterTransit, enterInfo,