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.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. */
|
||||||
|
|||||||
@@ -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 */);
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user