diff options
| author | 2021-09-08 03:54:52 +0000 | |
|---|---|---|
| committer | 2021-09-08 03:54:52 +0000 | |
| commit | b2b7e5b1e521c096d2ca2917ac1bc6e3c15db7de (patch) | |
| tree | e6c89b1b6d5a71efe811175009ad82aad13d6d01 | |
| parent | 567a727d2a5852ea8c79d912b2304fa1851374f3 (diff) | |
| parent | 2918f63c31d788db613d587df6b2af1ca181937b (diff) | |
Merge "Defer TaskFragment removal until appeared" into sc-v2-dev
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; |