Fix unexpectedly dismiss split by dragging the same app to the same side

Make sure to only evicts non-opening task when there's a new task
opening into split.

Fix: 261540443
Test: dragging the same app to the same side won't dismiss split
Change-Id: I5d7ae6cdfdc2971817a80befc834d7c45524ebc2
This commit is contained in:
Jerry Chang
2022-12-06 10:19:18 +00:00
parent b60de628ba
commit d6d9627cd6

View File

@@ -455,8 +455,6 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
void startIntentLegacy(PendingIntent intent, Intent fillInIntent, @SplitPosition int position,
@Nullable Bundle options) {
final boolean isEnteringSplit = !isSplitActive();
final WindowContainerTransaction evictWct = new WindowContainerTransaction();
prepareEvictChildTasks(position, evictWct);
LegacyTransitions.ILegacyTransition transition = new LegacyTransitions.ILegacyTransition() {
@Override
@@ -464,22 +462,21 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
RemoteAnimationTarget[] wallpapers, RemoteAnimationTarget[] nonApps,
IRemoteAnimationFinishedCallback finishedCallback,
SurfaceControl.Transaction t) {
if (isEnteringSplit) {
boolean openingToSide = false;
if (apps != null) {
for (int i = 0; i < apps.length; ++i) {
if (apps[i].mode == MODE_OPENING
&& mSideStage.containsTask(apps[i].taskId)) {
openingToSide = true;
break;
}
boolean openingToSide = false;
if (apps != null) {
for (int i = 0; i < apps.length; ++i) {
if (apps[i].mode == MODE_OPENING
&& mSideStage.containsTask(apps[i].taskId)) {
openingToSide = true;
break;
}
}
if (!openingToSide) {
mMainExecutor.execute(() -> exitSplitScreen(
mSideStage.getChildCount() == 0 ? mMainStage : mSideStage,
EXIT_REASON_UNKNOWN));
}
}
if (isEnteringSplit && !openingToSide) {
mMainExecutor.execute(() -> exitSplitScreen(
mSideStage.getChildCount() == 0 ? mMainStage : mSideStage,
EXIT_REASON_UNKNOWN));
}
if (apps != null) {
@@ -499,7 +496,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
}
mSyncQueue.queue(evictWct);
if (!isEnteringSplit && openingToSide) {
final WindowContainerTransaction evictWct = new WindowContainerTransaction();
prepareEvictNonOpeningChildTasks(position, apps, evictWct);
mSyncQueue.queue(evictWct);
}
}
};