Merge "Send divider change to launcher to animate" into udc-dev am: 322d69469c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22538104 Change-Id: I8616f3e7f56e83086c2032d94dc2b4c540c27378 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -431,6 +431,11 @@ public class RecentsTransitionHandler implements Transitions.TransitionHandler {
|
|||||||
" adding opening taskId=%d", taskInfo.taskId);
|
" adding opening taskId=%d", taskInfo.taskId);
|
||||||
mOpeningTasks.add(new TaskState(change, target.leash));
|
mOpeningTasks.add(new TaskState(change, target.leash));
|
||||||
}
|
}
|
||||||
|
} else if (TransitionUtil.isDividerBar(change)) {
|
||||||
|
final RemoteAnimationTarget target = TransitionUtil.newTarget(change,
|
||||||
|
info.getChanges().size() - i, info, t, mLeashMap);
|
||||||
|
// Add this as a app and we will separate them on launcher side by window type.
|
||||||
|
apps.add(target);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
t.apply();
|
t.apply();
|
||||||
|
|||||||
@@ -2788,8 +2788,8 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Call this when starting the open-recents animation while split-screen is active. */
|
/** Call this when starting the open-recents animation while split-screen is active. */
|
||||||
public void onRecentsInSplitAnimationStart(@NonNull SurfaceControl.Transaction t) {
|
public void onRecentsInSplitAnimationStart(TransitionInfo info) {
|
||||||
setDividerVisibility(false, t);
|
addDividerBarToTransition(info, false /* show */);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Call this when the recents animation during split-screen finishes. */
|
/** Call this when the recents animation during split-screen finishes. */
|
||||||
@@ -2806,6 +2806,7 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
|
|||||||
|| mSideStage.containsContainer(container))) {
|
|| mSideStage.containsContainer(container))) {
|
||||||
updateSurfaceBounds(mSplitLayout, finishT,
|
updateSurfaceBounds(mSplitLayout, finishT,
|
||||||
false /* applyResizingOffset */);
|
false /* applyResizingOffset */);
|
||||||
|
finishT.reparent(mSplitLayout.getDividerLeash(), mRootTaskLeash);
|
||||||
setDividerVisibility(true, finishT);
|
setDividerVisibility(true, finishT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -524,7 +524,7 @@ public class DefaultMixedHandler implements Transitions.TransitionHandler,
|
|||||||
finishCallback.onTransitionFinished(wct, wctCB);
|
finishCallback.onTransitionFinished(wct, wctCB);
|
||||||
};
|
};
|
||||||
mixed.mInFlightSubAnimations = 1;
|
mixed.mInFlightSubAnimations = 1;
|
||||||
mSplitHandler.onRecentsInSplitAnimationStart(startTransaction);
|
mSplitHandler.onRecentsInSplitAnimationStart(info);
|
||||||
final boolean handled = mixed.mLeftoversHandler.startAnimation(mixed.mTransition, info,
|
final boolean handled = mixed.mLeftoversHandler.startAnimation(mixed.mTransition, info,
|
||||||
startTransaction, finishTransaction, finishCB);
|
startTransaction, finishTransaction, finishCB);
|
||||||
if (!handled) {
|
if (!handled) {
|
||||||
|
|||||||
@@ -110,6 +110,11 @@ public class TransitionUtil {
|
|||||||
&& !change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY);
|
&& !change.hasFlags(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns `true` if `change` is the divider. */
|
||||||
|
public static boolean isDividerBar(TransitionInfo.Change change) {
|
||||||
|
return isNonApp(change) && change.hasFlags(FLAG_IS_DIVIDER_BAR);
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns `true` if `change` is only re-ordering. */
|
/** Returns `true` if `change` is only re-ordering. */
|
||||||
public static boolean isOrderOnly(TransitionInfo.Change change) {
|
public static boolean isOrderOnly(TransitionInfo.Change change) {
|
||||||
return change.getMode() == TRANSIT_CHANGE
|
return change.getMode() == TRANSIT_CHANGE
|
||||||
@@ -175,6 +180,14 @@ public class TransitionUtil {
|
|||||||
t.setPosition(leash, absBounds.left - info.getRoot(rootIdx).getOffset().x,
|
t.setPosition(leash, absBounds.left - info.getRoot(rootIdx).getOffset().x,
|
||||||
absBounds.top - info.getRoot(rootIdx).getOffset().y);
|
absBounds.top - info.getRoot(rootIdx).getOffset().y);
|
||||||
|
|
||||||
|
if (isDividerBar(change)) {
|
||||||
|
if (isOpeningType(mode)) {
|
||||||
|
t.setAlpha(leash, 0.f);
|
||||||
|
}
|
||||||
|
t.setLayer(leash, Integer.MAX_VALUE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Put all the OPEN/SHOW on top
|
// Put all the OPEN/SHOW on top
|
||||||
if (TransitionUtil.isOpeningType(mode)) {
|
if (TransitionUtil.isOpeningType(mode)) {
|
||||||
if (isOpening) {
|
if (isOpening) {
|
||||||
@@ -245,6 +258,10 @@ public class TransitionUtil {
|
|||||||
*/
|
*/
|
||||||
public static RemoteAnimationTarget newTarget(TransitionInfo.Change change, int order,
|
public static RemoteAnimationTarget newTarget(TransitionInfo.Change change, int order,
|
||||||
SurfaceControl leash) {
|
SurfaceControl leash) {
|
||||||
|
if (isDividerBar(change)) {
|
||||||
|
return getDividerTarget(change, leash);
|
||||||
|
}
|
||||||
|
|
||||||
int taskId;
|
int taskId;
|
||||||
boolean isNotInRecents;
|
boolean isNotInRecents;
|
||||||
ActivityManager.RunningTaskInfo taskInfo;
|
ActivityManager.RunningTaskInfo taskInfo;
|
||||||
@@ -284,8 +301,7 @@ public class TransitionUtil {
|
|||||||
new Rect(change.getStartAbsBounds()),
|
new Rect(change.getStartAbsBounds()),
|
||||||
taskInfo,
|
taskInfo,
|
||||||
change.getAllowEnterPip(),
|
change.getAllowEnterPip(),
|
||||||
(change.getFlags() & FLAG_IS_DIVIDER_BAR) != 0
|
INVALID_WINDOW_TYPE
|
||||||
? TYPE_DOCK_DIVIDER : INVALID_WINDOW_TYPE
|
|
||||||
);
|
);
|
||||||
target.setWillShowImeOnTarget(
|
target.setWillShowImeOnTarget(
|
||||||
(change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0);
|
(change.getFlags() & TransitionInfo.FLAG_WILL_IME_SHOWN) != 0);
|
||||||
@@ -293,6 +309,17 @@ public class TransitionUtil {
|
|||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static RemoteAnimationTarget getDividerTarget(TransitionInfo.Change change,
|
||||||
|
SurfaceControl leash) {
|
||||||
|
return new RemoteAnimationTarget(-1 /* taskId */, -1 /* mode */,
|
||||||
|
leash, false /* isTranslucent */, null /* clipRect */,
|
||||||
|
null /* contentInsets */, Integer.MAX_VALUE /* prefixOrderIndex */,
|
||||||
|
new android.graphics.Point(0, 0) /* position */, change.getStartAbsBounds(),
|
||||||
|
change.getStartAbsBounds(), new WindowConfiguration(), true, null /* startLeash */,
|
||||||
|
null /* startBounds */, null /* taskInfo */, false /* allowEnterPip */,
|
||||||
|
TYPE_DOCK_DIVIDER);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Finds the "correct" root idx for a change. The change's end display is prioritized, then
|
* Finds the "correct" root idx for a change. The change's end display is prioritized, then
|
||||||
* the start display. If there is no display, it will fallback on the 0th root in the
|
* the start display. If there is no display, it will fallback on the 0th root in the
|
||||||
|
|||||||
@@ -273,7 +273,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
|||||||
// simulate the start of recents transition
|
// simulate the start of recents transition
|
||||||
mMainStage.onTaskVanished(mMainChild);
|
mMainStage.onTaskVanished(mMainChild);
|
||||||
mSideStage.onTaskVanished(mSideChild);
|
mSideStage.onTaskVanished(mSideChild);
|
||||||
mStageCoordinator.onRecentsInSplitAnimationStart(mock(SurfaceControl.Transaction.class));
|
mStageCoordinator.onRecentsInSplitAnimationStart(mock(TransitionInfo.class));
|
||||||
assertTrue(mStageCoordinator.isSplitScreenVisible());
|
assertTrue(mStageCoordinator.isSplitScreenVisible());
|
||||||
|
|
||||||
// Make sure it cleans-up if recents doesn't restore
|
// Make sure it cleans-up if recents doesn't restore
|
||||||
@@ -307,7 +307,7 @@ public class SplitTransitionTests extends ShellTestCase {
|
|||||||
// simulate the start of recents transition
|
// simulate the start of recents transition
|
||||||
mMainStage.onTaskVanished(mMainChild);
|
mMainStage.onTaskVanished(mMainChild);
|
||||||
mSideStage.onTaskVanished(mSideChild);
|
mSideStage.onTaskVanished(mSideChild);
|
||||||
mStageCoordinator.onRecentsInSplitAnimationStart(mock(SurfaceControl.Transaction.class));
|
mStageCoordinator.onRecentsInSplitAnimationStart(mock(TransitionInfo.class));
|
||||||
assertTrue(mStageCoordinator.isSplitScreenVisible());
|
assertTrue(mStageCoordinator.isSplitScreenVisible());
|
||||||
|
|
||||||
// Make sure we remain in split after recents restores.
|
// Make sure we remain in split after recents restores.
|
||||||
|
|||||||
Reference in New Issue
Block a user