Merge "Add an extra transition type in TransitSession for custom transition." into udc-dev

This commit is contained in:
Wei Sheng Shih
2023-04-27 03:57:06 +00:00
committed by Android (Google) Code Review
3 changed files with 31 additions and 27 deletions

View File

@@ -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.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;
import static com.android.wm.shell.transition.Transitions.TRANSIT_SPLIT_DISMISS_SNAP; 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.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -165,7 +163,7 @@ class SplitScreenTransitions {
t.setLayer(leash, Integer.MAX_VALUE); t.setLayer(leash, Integer.MAX_VALUE);
t.show(leash); t.show(leash);
} }
boolean isOpening = isOpeningTransition(info); boolean isOpening = TransitionUtil.isOpeningType(info.getType());
if (isOpening && (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT)) { if (isOpening && (mode == TRANSIT_OPEN || mode == TRANSIT_TO_FRONT)) {
// fade in // fade in
startExampleAnimation(leash, true /* show */); startExampleAnimation(leash, true /* show */);
@@ -295,14 +293,16 @@ class SplitScreenTransitions {
@Nullable RemoteTransition remoteTransition, @Nullable RemoteTransition remoteTransition,
Transitions.TransitionHandler handler, Transitions.TransitionHandler handler,
@Nullable TransitionConsumedCallback consumedCallback, @Nullable TransitionConsumedCallback consumedCallback,
@Nullable TransitionFinishedCallback finishedCallback) { @Nullable TransitionFinishedCallback finishedCallback,
int extraTransitType) {
if (mPendingEnter != null) { if (mPendingEnter != null) {
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition " ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
+ " skip to start enter split transition since it already exist. "); + " skip to start enter split transition since it already exist. ");
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, consumedCallback, finishedCallback,
extraTransitType);
return transition; return transition;
} }
@@ -310,9 +310,10 @@ class SplitScreenTransitions {
void setEnterTransition(@NonNull IBinder transition, void setEnterTransition(@NonNull IBinder transition,
@Nullable RemoteTransition remoteTransition, @Nullable RemoteTransition remoteTransition,
@Nullable TransitionConsumedCallback consumedCallback, @Nullable TransitionConsumedCallback consumedCallback,
@Nullable TransitionFinishedCallback finishedCallback) { @Nullable TransitionFinishedCallback finishedCallback,
int extraTransitType) {
mPendingEnter = new TransitSession( mPendingEnter = new TransitSession(
transition, consumedCallback, finishedCallback, remoteTransition); transition, consumedCallback, finishedCallback, remoteTransition, extraTransitType);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition " ProtoLog.v(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, " splitTransition "
+ " deduced Enter split screen"); + " deduced Enter split screen");
@@ -513,12 +514,6 @@ class SplitScreenTransitions {
mTransitions.getAnimExecutor().execute(va::start); 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. */ /** Calls when the transition got consumed. */
interface TransitionConsumedCallback { interface TransitionConsumedCallback {
void onConsumed(boolean aborted); void onConsumed(boolean aborted);
@@ -539,16 +534,19 @@ class SplitScreenTransitions {
/** Whether the transition was canceled. */ /** Whether the transition was canceled. */
boolean mCanceled; boolean mCanceled;
/** A note for extra transit type, to help indicate custom transition. */
final int mExtraTransitType;
TransitSession(IBinder transition, TransitSession(IBinder transition,
@Nullable TransitionConsumedCallback consumedCallback, @Nullable TransitionConsumedCallback consumedCallback,
@Nullable TransitionFinishedCallback finishedCallback) { @Nullable TransitionFinishedCallback finishedCallback) {
this(transition, consumedCallback, finishedCallback, null /* remoteTransition */); this(transition, consumedCallback, finishedCallback, null /* remoteTransition */, 0);
} }
TransitSession(IBinder transition, TransitSession(IBinder transition,
@Nullable TransitionConsumedCallback consumedCallback, @Nullable TransitionConsumedCallback consumedCallback,
@Nullable TransitionFinishedCallback finishedCallback, @Nullable TransitionFinishedCallback finishedCallback,
@Nullable RemoteTransition remoteTransition) { @Nullable RemoteTransition remoteTransition, int extraTransitType) {
mTransition = transition; mTransition = transition;
mConsumedCallback = consumedCallback; mConsumedCallback = consumedCallback;
mFinishedCallback = finishedCallback; mFinishedCallback = finishedCallback;
@@ -560,6 +558,7 @@ class SplitScreenTransitions {
mTransitions.getMainExecutor(), remoteTransition); mTransitions.getMainExecutor(), remoteTransition);
mRemoteHandler.setTransition(transition); mRemoteHandler.setTransition(transition);
} }
mExtraTransitType = extraTransitType;
} }
/** Sets transition consumed callback. */ /** Sets transition consumed callback. */

View File

@@ -526,17 +526,17 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
wct.sendPendingIntent(intent, fillInIntent, options); wct.sendPendingIntent(intent, fillInIntent, options);
// If split screen is not activated, we're expecting to open a pair of apps to split. // 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; ? TRANSIT_SPLIT_SCREEN_OPEN_TO_SIDE : TRANSIT_SPLIT_SCREEN_PAIR_OPEN;
prepareEnterSplitScreen(wct, null /* taskInfo */, position); prepareEnterSplitScreen(wct, null /* taskInfo */, position);
mSplitTransitions.startEnterTransition(transitType, wct, null, this, mSplitTransitions.startEnterTransition(TRANSIT_TO_FRONT, wct, null, this,
null /* consumedCallback */, null /* consumedCallback */,
(finishWct, finishT) -> { (finishWct, finishT) -> {
if (!evictWct.isEmpty()) { if (!evictWct.isEmpty()) {
finishWct.merge(evictWct, true); finishWct.merge(evictWct, true);
} }
} /* finishedCallback */); } /* finishedCallback */, extraTransitType);
} }
/** Launches an activity into split by legacy transition. */ /** Launches an activity into split by legacy transition. */
@@ -709,7 +709,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
wct.startTask(mainTaskId, mainOptions); wct.startTask(mainTaskId, mainOptions);
mSplitTransitions.startEnterTransition( 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); setEnterInstanceId(instanceId);
} }
@@ -760,7 +761,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
} }
mSplitTransitions.startEnterTransition( 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); setEnterInstanceId(instanceId);
} }
@@ -2334,7 +2336,8 @@ 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 */); null /* consumedCallback */, null /* finishedCallback */,
0 /* extraTransitType */);
} }
} }
return out; 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) { if (mainChild == null && sideChild == null) {
Log.w(TAG, "Launched a task in split, but didn't receive any task in transition."); Log.w(TAG, "Launched a task in split, but didn't receive any task in transition.");
mSplitTransitions.mPendingEnter.cancel(null /* finishedCb */); mSplitTransitions.mPendingEnter.cancel(null /* finishedCb */);

View File

@@ -180,8 +180,9 @@ public class SplitTransitionTests extends ShellTestCase {
TestRemoteTransition testRemote = new TestRemoteTransition(); TestRemoteTransition testRemote = new TestRemoteTransition();
IBinder transition = mSplitScreenTransitions.startEnterTransition( IBinder transition = mSplitScreenTransitions.startEnterTransition(
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(), TRANSIT_OPEN, new WindowContainerTransaction(),
new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null); new RemoteTransition(testRemote, "Test"), mStageCoordinator, null, null,
TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
mMainStage.onTaskAppeared(mMainChild, createMockSurface()); mMainStage.onTaskAppeared(mMainChild, createMockSurface());
mSideStage.onTaskAppeared(mSideChild, createMockSurface()); mSideStage.onTaskAppeared(mSideChild, createMockSurface());
boolean accepted = mStageCoordinator.startAnimation(transition, info, boolean accepted = mStageCoordinator.startAnimation(transition, info,
@@ -397,7 +398,7 @@ public class SplitTransitionTests extends ShellTestCase {
} }
private TransitionInfo createEnterPairInfo() { 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, mMainChild)
.addChange(TRANSIT_OPEN, mSideChild) .addChange(TRANSIT_OPEN, mSideChild)
.build(); .build();
@@ -406,9 +407,9 @@ public class SplitTransitionTests extends ShellTestCase {
private void enterSplit() { private void enterSplit() {
TransitionInfo enterInfo = createEnterPairInfo(); TransitionInfo enterInfo = createEnterPairInfo();
IBinder enterTransit = mSplitScreenTransitions.startEnterTransition( IBinder enterTransit = mSplitScreenTransitions.startEnterTransition(
TRANSIT_SPLIT_SCREEN_PAIR_OPEN, new WindowContainerTransaction(), TRANSIT_OPEN, new WindowContainerTransaction(),
new RemoteTransition(new TestRemoteTransition(), "Test"), new RemoteTransition(new TestRemoteTransition(), "Test"),
mStageCoordinator, null, null); mStageCoordinator, null, null, TRANSIT_SPLIT_SCREEN_PAIR_OPEN);
mMainStage.onTaskAppeared(mMainChild, createMockSurface()); mMainStage.onTaskAppeared(mMainChild, createMockSurface());
mSideStage.onTaskAppeared(mSideChild, createMockSurface()); mSideStage.onTaskAppeared(mSideChild, createMockSurface());
mStageCoordinator.startAnimation(enterTransit, enterInfo, mStageCoordinator.startAnimation(enterTransit, enterInfo,