summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Louis Chang <louischang@google.com> 2021-09-06 16:35:04 +0800
committer Louis Chang <louischang@google.com> 2021-09-07 14:56:29 +0800
commit2918f63c31d788db613d587df6b2af1ca181937b (patch)
treee09235ac294ad32f4fd96e9243f19f9825b13020
parent506fa0bebd0e9ee013eaa5b15868a2ea4a379493 (diff)
Defer TaskFragment removal until appeared
Exception was throw because a TaskFragment was finished before onTaskFragmentAppeared was called. Bug: 198361315 Test: launch Settings with WIP CLs listed in the bug Change-Id: Id794b192cd0db21c00803166358712cdf5e2a209
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java4
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java24
2 files changed, 21 insertions, 7 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
index 05c6792a3fc7..12c273af7989 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/SplitController.java
@@ -117,6 +117,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
}
container.setInfo(taskFragmentAppearedInfo.getTaskFragmentInfo());
+ if (container.isFinished()) {
+ mPresenter.cleanupContainer(container, false /* shouldFinishDependent */);
+ updateCallbackIfNecessary();
+ }
}
@Override
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
index a9155cf152fe..8503b9f4e310 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/organizer/TaskFragmentContainer.java
@@ -138,7 +138,7 @@ class TaskFragmentContainer {
return mInfo;
}
- void setInfo(@Nullable TaskFragmentInfo info) {
+ void setInfo(@NonNull TaskFragmentInfo info) {
mInfo = info;
if (mInfo == null || mPendingAppearedActivities.isEmpty()) {
return;
@@ -190,20 +190,30 @@ class TaskFragmentContainer {
*/
void finish(boolean shouldFinishDependent, @NonNull SplitPresenter presenter,
@NonNull WindowContainerTransaction wct, @NonNull SplitController controller) {
- if (mIsFinished) {
- return;
+ if (!mIsFinished) {
+ mIsFinished = true;
+ finishActivities(shouldFinishDependent, presenter, wct, controller);
}
- mIsFinished = true;
- // Finish own activities
- for (Activity activity : collectActivities()) {
- activity.finish();
+ if (mInfo == null) {
+ // Defer removal the container and wait until TaskFragment appeared.
+ return;
}
// Cleanup the visuals
presenter.deleteTaskFragment(wct, getTaskFragmentToken());
// Cleanup the records
controller.removeContainer(this);
+ // Clean up task fragment information
+ mInfo = null;
+ }
+
+ private void finishActivities(boolean shouldFinishDependent, @NonNull SplitPresenter presenter,
+ @NonNull WindowContainerTransaction wct, @NonNull SplitController controller) {
+ // Finish own activities
+ for (Activity activity : collectActivities()) {
+ activity.finish();
+ }
if (!shouldFinishDependent) {
return;