Merge "Add an extra transition type in TransitSession for custom transition." into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e4c4d532fc
@@ -30,8 +30,6 @@ import static com.android.wm.shell.splitscreen.SplitScreenController.EXIT_REASON
|
||||
import static com.android.wm.shell.splitscreen.SplitScreenController.exitReasonToString;
|
||||
import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_DISMISS;
|
||||
import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_DISMISS_SNAP;
|
||||
import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE;
|
||||
import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.AnimatorListenerAdapter;
|
||||
@@ -165,7 +163,7 @@ class SplitScreenTransitions {
|
||||
t.setLayer(leash, Integer.MAX_VALUE);
|
||||
t.show(leash);
|
||||
}
|
||||
boolean isOpening = isOpeningTransition(info);
|
||||
boolean isOpening = TransitionUtil.isOpeningType(info.getType());
|
||||
if (isOpening && (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT)) {
|
||||
// fade in
|
||||
startExampleAnimation(leash, true /* show */);
|
||||
@@ -295,14 +293,16 @@ class SplitScreenTransitions {
|
||||
@Nullable RemoteTransition remoteTransition,
|
||||
Transitions.TransitionHandler handler,
|
||||
@Nullable TransitionConsumedCallback consumedCallback,
|
||||
@Nullable TransitionFinishedCallback finishedCallback) {
|
||||
@Nullable TransitionFinishedCallback finishedCallback,
|
||||
int extraTransitType) {
|
||||
if (mPendingEnter != null) {
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
||||
+ " skip to start enter split transition since it already exist. ");
|
||||
return null;
|
||||
}
|
||||
final IBinder transition = mTransitions.startTransition(transitType, wct, handler);
|
||||
setEnterTransition(transition, remoteTransition, consumedCallback, finishedCallback);
|
||||
setEnterTransition(transition, remoteTransition, consumedCallback, finishedCallback,
|
||||
extraTransitType);
|
||||
return transition;
|
||||
}
|
||||
|
||||
@@ -310,9 +310,10 @@ class SplitScreenTransitions {
|
||||
void setEnterTransition(@NonNull IBinder transition,
|
||||
@Nullable RemoteTransition remoteTransition,
|
||||
@Nullable TransitionConsumedCallback consumedCallback,
|
||||
@Nullable TransitionFinishedCallback finishedCallback) {
|
||||
@Nullable TransitionFinishedCallback finishedCallback,
|
||||
int extraTransitType) {
|
||||
mPendingEnter = new TransitSession(
|
||||
transition, consumedCallback, finishedCallback, remoteTransition);
|
||||
transition, consumedCallback, finishedCallback, remoteTransition, extraTransitType);
|
||||
|
||||
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
|
||||
+ " deduced Enter split screen");
|
||||
@@ -513,12 +514,6 @@ class SplitScreenTransitions {
|
||||
mTransitions.getAnimExecutor().execute(va::start);
|
||||
}
|
||||
|
||||
private boolean isOpeningTransition(TransitionInfo info) {
|
||||
return TransitionUtil.isOpeningType(info.getType())
|
||||
|| info.getType() == TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE
|
||||
|| info.getType() == TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
|
||||
}
|
||||
|
||||
/** Calls when the transition got consumed. */
|
||||
interface TransitionConsumedCallback {
|
||||
void onConsumed(boolean aborted);
|
||||
@@ -539,16 +534,19 @@ class SplitScreenTransitions {
|
||||
/** Whether the transition was canceled. */
|
||||
boolean mCanceled;
|
||||
|
||||
/** A note for extra transit type, to help indicate custom transition. */
|
||||
final int mExtraTransitType;
|
||||
|
||||
TransitSession(IBinder transition,
|
||||
@Nullable TransitionConsumedCallback consumedCallback,
|
||||
@Nullable TransitionFinishedCallback finishedCallback) {
|
||||
this(transition, consumedCallback, finishedCallback, null /* remoteTransition */);
|
||||
this(transition, consumedCallback, finishedCallback, null /* remoteTransition */, 0);
|
||||
}
|
||||
|
||||
TransitSession(IBinder transition,
|
||||
@Nullable TransitionConsumedCallback consumedCallback,
|
||||
@Nullable TransitionFinishedCallback finishedCallback,
|
||||
@Nullable RemoteTransition remoteTransition) {
|
||||
@Nullable RemoteTransition remoteTransition, int extraTransitType) {
|
||||
mTransition = transition;
|
||||
mConsumedCallback = consumedCallback;
|
||||
mFinishedCallback = finishedCallback;
|
||||
@@ -560,6 +558,7 @@ class SplitScreenTransitions {
|
||||
mTransitions.getMainExecutor(), remoteTransition);
|
||||
mRemoteHandler.setTransition(transition);
|
||||
}
|
||||
mExtraTransitType = extraTransitType;
|
||||
}
|
||||
|
||||
/** Sets transition consumed callback. */
|
||||
|
||||
@@ -526,17 +526,17 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
wct.sendPendingIntent(intent, fillInIntent, options);
|
||||
|
||||
// If split screen is not activated, we're expecting to open a pair of apps to split.
|
||||
final int transitType = mMainStage.isActive()
|
||||
final int extraTransitType = mMainStage.isActive()
|
||||
? TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE : TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
|
||||
prepareEnterSplitScreen(wct, null /* taskInfo */, position);
|
||||
|
||||
mSplitTransitions.startEnterTransition(transitType, wct, null, this,
|
||||
mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
|
||||
null /* consumedCallback */,
|
||||
(finishWct, finishT) -> {
|
||||
if (!evictWct.isEmpty()) {
|
||||
finishWct.merge(evictWct, true);
|
||||
}
|
||||
} /* finishedCallback */);
|
||||
} /* finishedCallback */, extraTransitType);
|
||||
}
|
||||
|
||||
/** Launches an activity into split by legacy transition. */
|
||||
@@ -709,7 +709,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
wct.startTask(mainTaskId, mainOptions);
|
||||
|
||||
mSplitTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this, null, null);
|
||||
TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
|
||||
setEnterInstanceId(instanceId);
|
||||
}
|
||||
|
||||
@@ -760,7 +761,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
}
|
||||
|
||||
mSplitTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, wct, remoteTransition, this, null, null);
|
||||
TRANSIT_TO_FRONT, wct, remoteTransition, this, null, null,
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
|
||||
setEnterInstanceId(instanceId);
|
||||
}
|
||||
|
||||
@@ -2334,7 +2336,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
out = new WindowContainerTransaction();
|
||||
prepareEnterSplitScreen(out);
|
||||
mSplitTransitions.setEnterTransition(transition, request.getRemoteTransition(),
|
||||
null /* consumedCallback */, null /* finishedCallback */);
|
||||
null /* consumedCallback */, null /* finishedCallback */,
|
||||
0 /* extraTransitType */);
|
||||
}
|
||||
}
|
||||
return out;
|
||||
@@ -2573,7 +2576,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
||||
}
|
||||
}
|
||||
|
||||
if (info.getType() == TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE) {
|
||||
if (mSplitTransitions.mPendingEnter.mExtraTransitType
|
||||
== TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE) {
|
||||
if (mainChild == null && sideChild == null) {
|
||||
Log.w(TAG, "Launched a task in split, but didn't receive any task in transition.");
|
||||
mSplitTransitions.mPendingEnter.cancel(null /* finishedCb */);
|
||||
|
||||
@@ -180,8 +180,9 @@ public class SplitTransitionTests extends ShellTestCase {
|
||||
TestRemoteTransition testRemote = new TestRemoteTransition();
|
||||
|
||||
IBinder transition = mSplitScreenTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
|
||||
new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null);
|
||||
TRANSIT_OPEN, new WindowContainerTransaction(),
|
||||
new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null,
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
|
||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||
boolean accepted = mStageCoordinator.startAnimation(transition, info,
|
||||
@@ -397,7 +398,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
||||
}
|
||||
|
||||
private TransitionInfo createEnterPairInfo() {
|
||||
return new TransitionInfoBuilder(TRANSIT_SPLIT_SCREEN_PAIR_OPEN, 0)
|
||||
return new TransitionInfoBuilder(TRANSIT_OPEN, 0)
|
||||
.addChange(TRANSIT_OPEN, mMainChild)
|
||||
.addChange(TRANSIT_OPEN, mSideChild)
|
||||
.build();
|
||||
@@ -406,9 +407,9 @@ public class SplitTransitionTests extends ShellTestCase {
|
||||
private void enterSplit() {
|
||||
TransitionInfo enterInfo = createEnterPairInfo();
|
||||
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
|
||||
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(),
|
||||
TRANSIT_OPEN, new WindowContainerTransaction(),
|
||||
new RemoteTransition(new TestRemoteTransition(), "Test"),
|
||||
mStageCoordinator, null, null);
|
||||
mStageCoordinator, null, null, TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
|
||||
mMainStage.onTaskAppeared(mMainChild, createMockSurface());
|
||||
mSideStage.onTaskAppeared(mSideChild, createMockSurface());
|
||||
mStageCoordinator.startAnimation(enterTransit, enterInfo,
|
||||
|
||||
Reference in New Issue
Block a user