Merge "Defer TaskFragment removal until appeared" into sc-v2-dev

This commit is contained in:
Louis Chang
2021-09-08 03:54:52 +00:00
committed by Android (Google) Code Review
2 changed files with 21 additions and 7 deletions

View File

@@ -117,6 +117,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
}
container.setInfo(taskFragmentAppearedInfo.getTaskFragmentInfo());
if (container.isFinished()) {
mPresenter.cleanupContainer(container, false /* shouldFinishDependent */);
updateCallbackIfNecessary();
}
}
@Override

View File

@@ -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;