Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2b7e5b1 authored by Louis Chang's avatar Louis Chang Committed by Android (Google) Code Review
Browse files

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

parents 567a727d 2918f63c
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -117,6 +117,10 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
        }

        container.setInfo(taskFragmentAppearedInfo.getTaskFragmentInfo());
        if (container.isFinished()) {
            mPresenter.cleanupContainer(container, false /* shouldFinishDependent */);
            updateCallbackIfNecessary();
        }
    }

    @Override
+17 −7
Original line number Diff line number Diff line
@@ -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);
        }

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