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

Commit b67d34f1 authored by George Mount's avatar George Mount Committed by Android (Google) Code Review
Browse files

Merge "Ensure that fragments are created in added order." into nyc-dev

parents d511a090 a7245b42
Loading
Loading
Loading
Loading
+23 −27
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package android.app;

import com.android.internal.util.FastPrintWriter;

import android.graphics.Rect;
import android.os.Parcel;
import android.os.Parcelable;
@@ -33,6 +31,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;

import com.android.internal.util.FastPrintWriter;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -717,10 +717,12 @@ final class BackStackRecord extends FragmentTransaction implements

        bumpBackStackNesting(1);

        if (mManager.mCurState >= Fragment.CREATED) {
            SparseArray<Fragment> firstOutFragments = new SparseArray<Fragment>();
            SparseArray<Fragment> lastInFragments = new SparseArray<Fragment>();
            calculateFragments(firstOutFragments, lastInFragments);
            beginTransition(firstOutFragments, lastInFragments, false);
        }

        Op op = mHead;
        while (op != null) {
@@ -842,6 +844,14 @@ final class BackStackRecord extends FragmentTransaction implements
                    firstOutFragments.remove(containerId);
                }
            }
            /**
             * Ensure that fragments that are entering are at least at the CREATED state
             * so that they may load Transitions using TransitionInflater.
             */
            if (fragment.mState < Fragment.CREATED && mManager.mCurState >= Fragment.CREATED) {
                mManager.makeActive(fragment);
                mManager.moveToState(fragment, Fragment.CREATED, 0, 0, false);
            }
        }
    }

@@ -986,7 +996,6 @@ final class BackStackRecord extends FragmentTransaction implements
     */
    private TransitionState beginTransition(SparseArray<Fragment> firstOutFragments,
            SparseArray<Fragment> lastInFragments, boolean isBack) {
        ensureFragmentsAreInitialized(lastInFragments);
        TransitionState state = new TransitionState();

        // Adding a non-existent target view makes sure that the transitions don't target
@@ -1012,21 +1021,6 @@ final class BackStackRecord extends FragmentTransaction implements
        return state;
    }

    /**
     * Ensure that fragments that are entering are at least at the CREATED state
     * so that they may load Transitions using TransitionInflater.
     */
    private void ensureFragmentsAreInitialized(SparseArray<Fragment> lastInFragments) {
        final int count = lastInFragments.size();
        for (int i = 0; i < count; i++) {
            final Fragment fragment = lastInFragments.valueAt(i);
            if (fragment.mState < Fragment.CREATED) {
                mManager.makeActive(fragment);
                mManager.moveToState(fragment, Fragment.CREATED, 0, 0, false);
            }
        }
    }

    private static Transition cloneTransition(Transition transition) {
        if (transition != null) {
            transition = transition.clone();
@@ -1663,6 +1657,7 @@ final class BackStackRecord extends FragmentTransaction implements
            pw.flush();
        }

        if (mManager.mCurState >= Fragment.CREATED) {
            if (state == null) {
                if (firstOutFragments.size() != 0 || lastInFragments.size() != 0) {
                    state = beginTransition(firstOutFragments, lastInFragments, true);
@@ -1670,6 +1665,7 @@ final class BackStackRecord extends FragmentTransaction implements
            } else if (!doStateMove) {
                setNameOverrides(state, mSharedElementTargetNames, mSharedElementSourceNames);
            }
        }

        bumpBackStackNesting(-1);

+7 −3
Original line number Diff line number Diff line
@@ -1625,7 +1625,9 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
            final BackStackRecord bss = mBackStack.remove(last);
            SparseArray<Fragment> firstOutFragments = new SparseArray<Fragment>();
            SparseArray<Fragment> lastInFragments = new SparseArray<Fragment>();
            if (mCurState >= Fragment.CREATED) {
                bss.calculateBackFragments(firstOutFragments, lastInFragments);
            }
            bss.popFromBackStack(true, null, firstOutFragments, lastInFragments);
            reportBackStackChanged();
        } else {
@@ -1672,9 +1674,11 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate
            final int LAST = states.size()-1;
            SparseArray<Fragment> firstOutFragments = new SparseArray<Fragment>();
            SparseArray<Fragment> lastInFragments = new SparseArray<Fragment>();
            if (mCurState >= Fragment.CREATED) {
                for (int i = 0; i <= LAST; i++) {
                    states.get(i).calculateBackFragments(firstOutFragments, lastInFragments);
                }
            }
            BackStackRecord.TransitionState state = null;
            for (int i=0; i<=LAST; i++) {
                if (DEBUG) Log.v(TAG, "Popping back stack state: " + states.get(i));