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

This commit is contained in:
Wei Sheng Shih
2021-09-15 01:56:21 +00:00
committed by Android (Google) Code Review
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,