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

Commit 2b2d23aa authored by George Mount's avatar George Mount
Browse files

Give transitioning fragment a context prior to retrieving transition

Bug 23688972

An incoming fragment that is going to execute a transition may
need to have a context in order to load the transition. This
CL moves the state of incoming fragments to CREATED prior to
getting their Transitions.

Change-Id: I08b8cda479f7542fb326aa4f0f62a07ccc5662b0
parent 734d3993
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -957,6 +957,7 @@ final class BackStackRecord extends FragmentTransaction implements
     */
     */
    private TransitionState beginTransition(SparseArray<Fragment> firstOutFragments,
    private TransitionState beginTransition(SparseArray<Fragment> firstOutFragments,
            SparseArray<Fragment> lastInFragments, boolean isBack) {
            SparseArray<Fragment> lastInFragments, boolean isBack) {
        ensureFragmentsAreInitialized(lastInFragments);
        TransitionState state = new TransitionState();
        TransitionState state = new TransitionState();


        // Adding a non-existent target view makes sure that the transitions don't target
        // Adding a non-existent target view makes sure that the transitions don't target
@@ -982,6 +983,20 @@ final class BackStackRecord extends FragmentTransaction implements
        return state;
        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.moveToState(fragment, Fragment.CREATED, 0, 0, false);
            }
        }
    }

    private static Transition cloneTransition(Transition transition) {
    private static Transition cloneTransition(Transition transition) {
        if (transition != null) {
        if (transition != null) {
            transition = transition.clone();
            transition = transition.clone();