Merge "Prevent execute app transition too early when performClearTask" into sc-v2-dev am: f49cb0da83

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15784351

Change-Id: Id0de28967f91119ffbc8d53904dc794d9673a24d
This commit is contained in:
Wei Sheng Shih
2021-09-15 02:08:59 +00:00
committed by Automerger Merge Worker
2 changed files with 23 additions and 3 deletions

View File

@@ -1606,9 +1606,15 @@ class Task extends TaskFragment {
} else {
forAllActivities((r) -> {
if (r.finishing) return;
// TODO: figure-out how to avoid object creation due to capture of reason variable.
r.finishIfPossible(Activity.RESULT_CANCELED,
null /* resultData */, null /* resultGrants */, reason, false /* oomAdj */);
// Prevent the transition from being executed too early if the top activity is
// resumed but the mVisibleRequested of any other activity is true, the transition
// should wait until next activity resumed.
if (r.isState(RESUMED) || (r.isVisible()
&& !mDisplayContent.mAppTransition.containsTransitRequest(TRANSIT_CLOSE))) {
r.finishIfPossible(reason, false /* oomAdj */);
} else {
r.destroyIfPossible(reason);
}
});
}
}

View File

@@ -102,6 +102,20 @@ public class AppTransitionControllerTest extends WindowTestsBase {
mDisplayContent.mChangingContainers, null, null, false));
}
@Test
public void testClearTaskSkipAppExecuteTransition() {
final ActivityRecord behind = createActivityRecord(mDisplayContent,
WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD);
final Task task = behind.getTask();
final ActivityRecord top = createActivityRecord(task);
top.setState(ActivityRecord.State.RESUMED, "test");
behind.setState(ActivityRecord.State.STARTED, "test");
behind.mVisibleRequested = true;
task.performClearTask("test");
assertFalse(mDisplayContent.mAppTransition.isReady());
}
@Test
public void testTranslucentOpen() {
final ActivityRecord behind = createActivityRecord(mDisplayContent,