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:
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user