FragmentManager.java revision b31e84bc4513e46bac4be8f8d0513f78e360fb11
12dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/*
22dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Copyright (C) 2010 The Android Open Source Project
32dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn *
42dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
52dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * you may not use this file except in compliance with the License.
62dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * You may obtain a copy of the License at
72dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn *
82dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
92dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn *
102dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Unless required by applicable law or agreed to in writing, software
112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * See the License for the specific language governing permissions and
142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * limitations under the License.
152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */
162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornpackage android.app;
182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
19f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.content.res.TypedArray;
202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.os.Bundle;
21ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackbornimport android.os.Handler;
22b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcel;
23b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcelable;
245ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackbornimport android.util.Log;
25b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.util.SparseArray;
26b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.Menu;
27b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuInflater;
28b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuItem;
295ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackbornimport android.view.View;
302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.view.ViewGroup;
31f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.Animation;
32f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.AnimationUtils;
332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport java.util.ArrayList;
352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
36b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class FragmentManagerState implements Parcelable {
376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    FragmentState[] mActive;
38b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    int[] mAdded;
39b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    BackStackState[] mBackStack;
40b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
41b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public FragmentManagerState() {
42b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
43b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
44b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public FragmentManagerState(Parcel in) {
456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mActive = in.createTypedArray(FragmentState.CREATOR);
46b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        mAdded = in.createIntArray();
47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        mBackStack = in.createTypedArray(BackStackState.CREATOR);
48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
49b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
50b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public int describeContents() {
51b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        return 0;
52b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
53b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
54b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public void writeToParcel(Parcel dest, int flags) {
556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        dest.writeTypedArray(mActive, flags);
56b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        dest.writeIntArray(mAdded);
57b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        dest.writeTypedArray(mBackStack, flags);
58b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
59b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
60b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public static final Parcelable.Creator<FragmentManagerState> CREATOR
61b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            = new Parcelable.Creator<FragmentManagerState>() {
62b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        public FragmentManagerState createFromParcel(Parcel in) {
63b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            return new FragmentManagerState(in);
64b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
65b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
66b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        public FragmentManagerState[] newArray(int size) {
67b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            return new FragmentManagerState[size];
68b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
69b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    };
70ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn}
71ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn
722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/**
73f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn * @hide
742dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Container for fragments associated with an activity.
752dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */
76f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornpublic class FragmentManager {
775ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    static final boolean DEBUG = true;
785ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    static final String TAG = "FragmentManager";
795ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn
806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    ArrayList<Fragment> mActive;
816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    ArrayList<Fragment> mAdded;
826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    ArrayList<Integer> mAvailIndices;
83b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    ArrayList<BackStackEntry> mBackStack;
842dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
852dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    int mCurState = Fragment.INITIALIZING;
862dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    Activity mActivity;
872dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
88b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    boolean mNeedMenuInvalidate;
89b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn
90b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    // Temporary vars for state save and restore.
91b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    Bundle mStateBundle = null;
92b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    SparseArray<Parcelable> mStateArray = null;
93b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
94f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    Animation loadAnimation(Fragment fragment, int transit, boolean enter,
95f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            int transitionStyle) {
965ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        Animation animObj = fragment.onCreateAnimation(transitionStyle, enter,
975ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                fragment.mNextAnim);
98f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (animObj != null) {
99f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            return animObj;
100f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
101f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
1025ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (fragment.mNextAnim != 0) {
1035ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            Animation anim = AnimationUtils.loadAnimation(mActivity, fragment.mNextAnim);
1045ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            if (anim != null) {
1055ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                return anim;
1065ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            }
1075ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        }
1085ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn
109f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (transit == 0) {
110f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            return null;
111f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
112f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
113f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        int styleIndex = transitToStyleIndex(transit, enter);
114f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (styleIndex < 0) {
115f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            return null;
116f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
117f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
118f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (transitionStyle == 0 && mActivity.getWindow() != null) {
119f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            transitionStyle = mActivity.getWindow().getAttributes().windowAnimations;
120f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
121f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (transitionStyle == 0) {
122f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            return null;
123f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
124f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
125f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle,
126f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                com.android.internal.R.styleable.WindowAnimation);
127f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        int anim = attrs.getResourceId(styleIndex, 0);
128f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        attrs.recycle();
129f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
130f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (anim == 0) {
131f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            return null;
132f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
133f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
134f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        return AnimationUtils.loadAnimation(mActivity, anim);
135f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    }
136f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
137f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    void moveToState(Fragment f, int newState, int transit, int transitionStyle) {
1386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // Fragments that are not currently added will sit in the onCreate() state.
1396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (!f.mAdded && newState > Fragment.CREATED) {
1406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            newState = Fragment.CREATED;
1416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
1426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
1432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        if (f.mState < newState) {
1442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn            switch (f.mState) {
1452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                case Fragment.INITIALIZING:
1465ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                    if (DEBUG) Log.v(TAG, "moveto CREATED: " + f);
1472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    f.mActivity = mActivity;
1482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    f.mCalled = false;
1492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    f.onAttach(mActivity);
1502dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    if (!f.mCalled) {
1512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        throw new SuperNotCalledException("Fragment " + f
1522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                + " did not call through to super.onAttach()");
1532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
1542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
155b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    if (!f.mRetaining) {
156b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.mCalled = false;
157b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.onCreate(f.mSavedFragmentState);
158b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        if (!f.mCalled) {
159b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
160b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    + " did not call through to super.onCreate()");
1612dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
1622dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
163b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    f.mRetaining = false;
164b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    if (f.mFromLayout) {
165b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        // For fragments that are part of the content view
166b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        // layout, we need to instantiate the view immediately
167b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        // and the inflater will take care of adding it.
168b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.mView = f.onCreateView(mActivity.getLayoutInflater(),
169b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                null, f.mSavedFragmentState);
1706e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                        if (f.mView != null) {
1716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                            f.mView.setSaveFromParentEnabled(false);
1726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                            f.restoreViewState();
1735ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                            if (f.mHidden) f.mView.setVisibility(View.GONE);
1746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                        }
175b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    }
1766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                case Fragment.CREATED:
1776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    if (newState > Fragment.CREATED) {
1785ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "moveto CONTENT: " + f);
179b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        if (!f.mFromLayout) {
180b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            ViewGroup container = null;
181b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            if (f.mContainerId != 0) {
182b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                container = (ViewGroup)mActivity.findViewById(f.mContainerId);
183b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                if (container == null) {
184b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    throw new IllegalArgumentException("New view found for id 0x"
185b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                            + Integer.toHexString(f.mContainerId)
186b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                            + " for fragment " + f);
187b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                }
188b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            }
189b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            f.mContainer = container;
190b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            f.mView = f.onCreateView(mActivity.getLayoutInflater(),
191b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    container, f.mSavedFragmentState);
192b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            if (f.mView != null) {
193b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                f.mView.setSaveFromParentEnabled(false);
194b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                if (container != null) {
195b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    Animation anim = loadAnimation(f, transit, true,
196b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                            transitionStyle);
197b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    if (anim != null) {
198b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                        f.mView.setAnimation(anim);
199b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    }
200b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    container.addView(f.mView);
201b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    f.restoreViewState();
202b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                }
2035ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                                if (f.mHidden) f.mView.setVisibility(View.GONE);
204b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            }
205b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        }
206b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
207b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.mCalled = false;
208b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.onReady(f.mSavedFragmentState);
209b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        if (!f.mCalled) {
210b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
211b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    + " did not call through to super.onReady()");
212f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        }
213b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        f.mSavedFragmentState = null;
2142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
2156e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                case Fragment.CONTENT:
2166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    if (newState > Fragment.CONTENT) {
2175ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "moveto STARTED: " + f);
2182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mCalled = false;
2192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.onStart();
2202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        if (!f.mCalled) {
2212dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
2222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                    + " did not call through to super.onStart()");
2232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
2252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                case Fragment.STARTED:
2262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    if (newState > Fragment.STARTED) {
2275ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "moveto RESUMED: " + f);
2282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mCalled = false;
2292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.onResume();
2302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        if (!f.mCalled) {
2312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
2322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                    + " did not call through to super.onResume()");
2332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
2352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn            }
2362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        } else if (f.mState > newState) {
2372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn            switch (f.mState) {
2382dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                case Fragment.RESUMED:
2392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    if (newState < Fragment.RESUMED) {
2405ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "movefrom RESUMED: " + f);
2412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mCalled = false;
2422dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.onPause();
2432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        if (!f.mCalled) {
2442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
2452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                    + " did not call through to super.onPause()");
2462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
2482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                case Fragment.STARTED:
2492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    if (newState < Fragment.STARTED) {
2505ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "movefrom STARTED: " + f);
2512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mCalled = false;
2522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.onStop();
2532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        if (!f.mCalled) {
2542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
2552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                    + " did not call through to super.onStop()");
2562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2572dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
258b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                case Fragment.CONTENT:
259b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    if (newState < Fragment.CONTENT) {
2605ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "movefrom CONTENT: " + f);
261b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        if (f.mView != null) {
262b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            // Need to save the current view state if not
263b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            // done already.
2646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                            if (!mActivity.isFinishing() && f.mSavedFragmentState == null) {
265b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                saveFragmentViewState(f);
266b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            }
267b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            if (f.mContainer != null) {
268b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                if (mCurState > Fragment.INITIALIZING) {
269b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    Animation anim = loadAnimation(f, transit, false,
270b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                            transitionStyle);
271b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    if (anim != null) {
272b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                        f.mView.setAnimation(anim);
273b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                    }
274b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                }
275b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                f.mContainer.removeView(f.mView);
276f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                            }
2772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2782dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mContainer = null;
2792dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mView = null;
280b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    }
281b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                case Fragment.CREATED:
282b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    if (newState < Fragment.CREATED) {
2835ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        if (DEBUG) Log.v(TAG, "movefrom CREATED: " + f);
284b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        if (!f.mRetaining) {
285b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            f.mCalled = false;
286b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            f.onDestroy();
287b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            if (!f.mCalled) {
288b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                throw new SuperNotCalledException("Fragment " + f
289b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                                        + " did not call through to super.onDestroy()");
290b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            }
2912dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
292b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
2932dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mCalled = false;
2942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.onDetach();
2952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        if (!f.mCalled) {
2962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                            throw new SuperNotCalledException("Fragment " + f
2972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                                    + " did not call through to super.onDetach()");
2982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        }
2992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                        f.mActivity = null;
3002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn                    }
3012dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn            }
3022dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        }
3032dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
3042dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        f.mState = newState;
3052dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
3062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
307ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn    void moveToState(int newState, boolean always) {
308f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        moveToState(newState, 0, 0, always);
309f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    }
310f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
311f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    void moveToState(int newState, int transit, int transitStyle, boolean always) {
3122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        if (mActivity == null && newState != Fragment.INITIALIZING) {
3132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn            throw new IllegalStateException("No activity");
3142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        }
3152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
316ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        if (!always && mCurState == newState) {
317ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn            return;
318ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        }
319ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn
3202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        mCurState = newState;
3216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive != null) {
3226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            for (int i=0; i<mActive.size(); i++) {
3236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(i);
3246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f != null) {
3256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    moveToState(f, newState, transit, transitStyle);
3266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                }
3276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            }
3286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
3296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    }
3306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
3316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    void makeActive(Fragment f) {
3326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (f.mIndex >= 0) {
3336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            return;
3346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
3356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
3366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mAvailIndices == null || mAvailIndices.size() <= 0) {
3376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            if (mActive == null) {
3386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                mActive = new ArrayList<Fragment>();
339ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn            }
3406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            f.setIndex(mActive.size());
3416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mActive.add(f);
3426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
3436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        } else {
3446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            f.setIndex(mAvailIndices.remove(mAvailIndices.size()-1));
3456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mActive.set(f.mIndex, f);
3462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        }
3472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
3482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
3496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    void makeInactive(Fragment f) {
3506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (f.mIndex < 0) {
3516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            return;
3526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
3536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
3546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mActive.set(f.mIndex, null);
3556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mAvailIndices == null) {
3566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mAvailIndices = new ArrayList<Integer>();
3576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
3586e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mAvailIndices.add(f.mIndex);
3596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        f.clearIndex();
3606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    }
3616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
362ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn    public void addFragment(Fragment fragment, boolean moveToStateNow) {
3635ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (DEBUG) Log.v(TAG, "add: " + fragment);
3646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mAdded == null) {
3656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mAdded = new ArrayList<Fragment>();
366ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        }
3676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mAdded.add(fragment);
3686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        makeActive(fragment);
3696e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        fragment.mAdded = true;
370b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (fragment.mHasMenu) {
371b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            mNeedMenuInvalidate = true;
372b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
373ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        if (moveToStateNow) {
374f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            moveToState(fragment, mCurState, 0, 0);
375ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        }
3762dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
3772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
378f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    public void removeFragment(Fragment fragment, int transition, int transitionStyle) {
3795ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (DEBUG) Log.v(TAG, "remove: " + fragment);
3806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mAdded.remove(fragment);
3816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        final boolean inactive = fragment.mBackStackNesting <= 0;
3826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (inactive) {
3836e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            makeInactive(fragment);
3846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
385b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (fragment.mHasMenu) {
386b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            mNeedMenuInvalidate = true;
387b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
3886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        fragment.mAdded = false;
3896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        moveToState(fragment, inactive ? Fragment.INITIALIZING : Fragment.CREATED,
3906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                transition, transitionStyle);
391f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    }
392f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
3935ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    public void hideFragment(Fragment fragment, int transition, int transitionStyle) {
3945ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (DEBUG) Log.v(TAG, "hide: " + fragment);
3955ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (!fragment.mHidden) {
3965ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            fragment.mHidden = true;
3975ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            if (fragment.mView != null) {
3985ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                Animation anim = loadAnimation(fragment, transition, false,
3995ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        transitionStyle);
4005ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                if (anim != null) {
4015ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                    fragment.mView.setAnimation(anim);
4025ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                }
4035ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                fragment.mView.setVisibility(View.GONE);
4045ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            }
405b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            if (fragment.mAdded && fragment.mHasMenu) {
406b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                mNeedMenuInvalidate = true;
407b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
4085ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            fragment.onHiddenChanged(true);
4095ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        }
4105ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    }
4115ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn
4125ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    public void showFragment(Fragment fragment, int transition, int transitionStyle) {
4135ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (DEBUG) Log.v(TAG, "show: " + fragment);
4145ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        if (fragment.mHidden) {
4155ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            fragment.mHidden = false;
4165ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            if (fragment.mView != null) {
4175ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                Animation anim = loadAnimation(fragment, transition, true,
4185ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                        transitionStyle);
4195ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                if (anim != null) {
4205ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                    fragment.mView.setAnimation(anim);
4215ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                }
4225ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                fragment.mView.setVisibility(View.VISIBLE);
4235ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            }
424b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            if (fragment.mAdded && fragment.mHasMenu) {
425b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                mNeedMenuInvalidate = true;
426b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
4275ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            fragment.onHiddenChanged(false);
4285ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn        }
4295ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn    }
4305ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn
431f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    public Fragment findFragmentById(int id) {
4326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive != null) {
4335ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            // First look through added fragments.
4345ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            for (int i=mAdded.size()-1; i>=0; i--) {
4355ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                Fragment f = mAdded.get(i);
4365ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                if (f != null && f.mFragmentId == id) {
4375ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                    return f;
4385ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                }
4395ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            }
4405ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            // Now for any known fragment.
4416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            for (int i=mActive.size()-1; i>=0; i--) {
4426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(i);
4436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f != null && f.mFragmentId == id) {
444b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    return f;
445b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
446b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
447b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
448b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        return null;
449b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
450b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
451b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public Fragment findFragmentByTag(String tag) {
4526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive != null && tag != null) {
4535ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            // First look through added fragments.
4545ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            for (int i=mAdded.size()-1; i>=0; i--) {
4555ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                Fragment f = mAdded.get(i);
4565ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                if (f != null && tag.equals(f.mTag)) {
4575ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                    return f;
4585ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn                }
4595ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            }
4605ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn            // Now for any known fragment.
4616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            for (int i=mActive.size()-1; i>=0; i--) {
4626e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(i);
4636e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f != null && tag.equals(f.mTag)) {
4646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    return f;
4656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                }
4666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            }
4676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
4686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        return null;
4696e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    }
4706e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
4716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    public Fragment findFragmentByWho(String who) {
4726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive != null && who != null) {
4736e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            for (int i=mActive.size()-1; i>=0; i--) {
4746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(i);
4756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f != null && who.equals(f.mWho)) {
476f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    return f;
477f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                }
478f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            }
479f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
480f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        return null;
4812dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
4822dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
483b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public void addBackStackState(BackStackEntry state) {
484ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        if (mBackStack == null) {
485b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            mBackStack = new ArrayList<BackStackEntry>();
486ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        }
487ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        mBackStack.add(state);
488ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn    }
489ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn
490f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    public boolean popBackStackState(Handler handler, String name) {
491ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        if (mBackStack == null) {
492ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn            return false;
493ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        }
494f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        if (name == null) {
495f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            int last = mBackStack.size()-1;
496f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            if (last < 0) {
497f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                return false;
498f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            }
499b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            final BackStackEntry bss = mBackStack.remove(last);
500f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            handler.post(new Runnable() {
501f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                public void run() {
502f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    bss.popFromBackStack();
503f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    moveToState(mCurState, reverseTransit(bss.getTransition()),
504f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                            bss.getTransitionStyle(), true);
505f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                }
506f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            });
507f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        } else {
508f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            int index = mBackStack.size()-1;
509f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            while (index >= 0) {
510b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                BackStackEntry bss = mBackStack.get(index);
511f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                if (name.equals(bss.getName())) {
512f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    break;
513f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                }
514f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            }
515f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            if (index < 0 || index == mBackStack.size()-1) {
516f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                return false;
517f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            }
518b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            final ArrayList<BackStackEntry> states
519b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    = new ArrayList<BackStackEntry>();
520f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            for (int i=mBackStack.size()-1; i>index; i--) {
521f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                states.add(mBackStack.remove(i));
522ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn            }
523f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            handler.post(new Runnable() {
524f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                public void run() {
525f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    for (int i=0; i<states.size(); i++) {
526f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        states.get(i).popFromBackStack();
527f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    }
528f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                    moveToState(mCurState, true);
529f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                }
530f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            });
531f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
532ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        return true;
533ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn    }
534ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn
535b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    ArrayList<Fragment> retainNonConfig() {
536b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        ArrayList<Fragment> fragments = null;
5376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive != null) {
5386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            for (int i=0; i<mActive.size(); i++) {
5396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(i);
5406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f != null && f.mRetainInstance) {
541b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    if (fragments == null) {
542b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                        fragments = new ArrayList<Fragment>();
543b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    }
544b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    fragments.add(f);
545b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    f.mRetaining = true;
546b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
547b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
548b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
549b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        return fragments;
550b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
551b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
552b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    void saveFragmentViewState(Fragment f) {
5536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (f.mView == null) {
554b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            return;
555b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
556b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (mStateArray == null) {
557b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            mStateArray = new SparseArray<Parcelable>();
558b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
559b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        f.mView.saveHierarchyState(mStateArray);
560b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (mStateArray.size() > 0) {
561b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            f.mSavedViewState = mStateArray;
562b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            mStateArray = null;
563b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
564b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
565b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
5666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn    Parcelable saveAllState() {
5676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mActive == null || mActive.size() <= 0) {
5686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            return null;
569b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
570b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
5716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // First collect all active fragments.
5726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        int N = mActive.size();
5736e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        FragmentState[] active = new FragmentState[N];
5746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        boolean haveFragments = false;
5756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        for (int i=0; i<N; i++) {
5766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            Fragment f = mActive.get(i);
5776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            if (f != null) {
5786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                haveFragments = true;
5796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
5806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                FragmentState fs = new FragmentState(f);
5816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                active[i] = fs;
5826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
5836e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (mStateBundle == null) {
5846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    mStateBundle = new Bundle();
5856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                }
5866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                f.onSaveInstanceState(mStateBundle);
5876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (!mStateBundle.isEmpty()) {
5886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    fs.mSavedFragmentState = mStateBundle;
5896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    mStateBundle = null;
590b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
5916e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
5926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f.mView != null) {
5936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    saveFragmentViewState(f);
5946e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    if (f.mSavedViewState != null) {
5956e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                        if (fs.mSavedFragmentState == null) {
5966e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                            fs.mSavedFragmentState = new Bundle();
5976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                        }
5986e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                        fs.mSavedFragmentState.putSparseParcelableArray(
5996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                                FragmentState.VIEW_STATE_TAG, f.mSavedViewState);
6006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    }
6016e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                }
6026e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
603b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
604b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
605b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
6066e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (!haveFragments) {
607b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            return null;
608b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
609b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
610b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        int[] added = null;
611b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        BackStackState[] backStack = null;
612b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
6136e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // Build list of currently added fragments.
6146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        N = mAdded.size();
615b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (N > 0) {
616b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            added = new int[N];
617b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            for (int i=0; i<N; i++) {
6186e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                added[i] = mAdded.get(i).mIndex;
619b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
620b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
621b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
622b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        // Now save back stack.
623b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (mBackStack != null) {
624b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            N = mBackStack.size();
625b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            if (N > 0) {
626b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                backStack = new BackStackState[N];
627b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                for (int i=0; i<N; i++) {
628b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    backStack[i] = new BackStackState(this, mBackStack.get(i));
629b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
630b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
631b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
632b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
633b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        FragmentManagerState fms = new FragmentManagerState();
6346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        fms.mActive = active;
635b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        fms.mAdded = added;
636b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        fms.mBackStack = backStack;
637b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        return fms;
638b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
639b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
640b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    void restoreAllState(Parcelable state, ArrayList<Fragment> nonConfig) {
641b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        // If there is no saved state at all, then there can not be
642b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        // any nonConfig fragments either, so that is that.
643b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (state == null) return;
644b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        FragmentManagerState fms = (FragmentManagerState)state;
6456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (fms.mActive == null) return;
646b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
6476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // First re-attach any non-config instances we are retaining back
6486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // to their saved state, so we don't try to instantiate them again.
649b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (nonConfig != null) {
650b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            for (int i=0; i<nonConfig.size(); i++) {
651b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                Fragment f = nonConfig.get(i);
6526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                FragmentState fs = fms.mActive[f.mIndex];
653b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                fs.mInstance = f;
654b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                f.mSavedViewState = null;
6556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                f.mBackStackNesting = 0;
6566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                f.mAdded = false;
657b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                if (fs.mSavedFragmentState != null) {
658b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                    f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray(
659b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                            FragmentState.VIEW_STATE_TAG);
660b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
661b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
662b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
663b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
6646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // Build the full list of active fragments, instantiating them from
6656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // their saved state.
6666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        mActive = new ArrayList<Fragment>(fms.mActive.length);
6676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (mAvailIndices != null) {
6686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mAvailIndices.clear();
6696e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
6706e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        for (int i=0; i<fms.mActive.length; i++) {
6716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            FragmentState fs = fms.mActive[i];
6726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            if (fs != null) {
6736e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                mActive.add(fs.instantiate(mActivity));
6746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            } else {
6756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                mActive.add(null);
6766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (mAvailIndices == null) {
6776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    mAvailIndices = new ArrayList<Integer>();
6786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                }
6796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                mAvailIndices.add(i);
680b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
6816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        }
6826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
6836e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // Build the list of currently added fragments.
6846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        if (fms.mAdded != null) {
6856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mAdded = new ArrayList<Fragment>(fms.mAdded.length);
686b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            for (int i=0; i<fms.mAdded.length; i++) {
6876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                Fragment f = mActive.get(fms.mAdded[i]);
6886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                if (f == null) {
6896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                    throw new IllegalStateException(
6906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                            "No instantiated fragment for index #" + fms.mAdded[i]);
691b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                }
6926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                f.mAdded = true;
693b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                f.mImmediateActivity = mActivity;
6946e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn                mAdded.add(f);
695b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
6966e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        } else {
6976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mAdded = null;
698b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
6996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn
7006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        // Build the back stack.
701b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        if (fms.mBackStack != null) {
702b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            mBackStack = new ArrayList<BackStackEntry>(fms.mBackStack.length);
703b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            for (int i=0; i<fms.mBackStack.length; i++) {
704b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                BackStackEntry bse = fms.mBackStack[i].instantiate(this);
705b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn                mBackStack.add(bse);
706b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn            }
7076e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        } else {
7086e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn            mBackStack = null;
709b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn        }
710b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    }
711b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn
7122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void attachActivity(Activity activity) {
7132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        if (mActivity != null) throw new IllegalStateException();
7142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        mActivity = activity;
7152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
717b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn    public void dispatchCreate() {
718ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        moveToState(Fragment.CREATED, false);
7192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
7212dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void dispatchStart() {
722ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        moveToState(Fragment.STARTED, false);
7232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
7252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void dispatchResume() {
726ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        moveToState(Fragment.RESUMED, false);
7272dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
7292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void dispatchPause() {
730ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        moveToState(Fragment.STARTED, false);
7312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
7332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void dispatchStop() {
7346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn        moveToState(Fragment.CONTENT, false);
7352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
7362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn
7372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    public void dispatchDestroy() {
738ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn        moveToState(Fragment.INITIALIZING, false);
7392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn        mActivity = null;
7402dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn    }
741f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
742b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) {
743b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        boolean show = false;
744b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (mActive != null) {
745b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            for (int i=0; i<mAdded.size(); i++) {
746b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                Fragment f = mAdded.get(i);
747b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                if (f != null && !f.mHidden && f.mHasMenu) {
748b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    show = true;
749b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    f.onCreateOptionsMenu(menu, inflater);
750b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                }
751b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
752b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
753b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        return show;
754b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    }
755b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn
756b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    public boolean dispatchPrepareOptionsMenu(Menu menu) {
757b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        boolean show = false;
758b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (mActive != null) {
759b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            for (int i=0; i<mAdded.size(); i++) {
760b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                Fragment f = mAdded.get(i);
761b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                if (f != null && !f.mHidden && f.mHasMenu) {
762b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    show = true;
763b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    f.onPrepareOptionsMenu(menu);
764b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                }
765b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
766b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
767b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        return show;
768b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    }
769b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn
770b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    public boolean dispatchOptionsItemSelected(MenuItem item) {
771b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (mActive != null) {
772b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            for (int i=0; i<mAdded.size(); i++) {
773b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                Fragment f = mAdded.get(i);
774b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                if (f != null && !f.mHidden && f.mHasMenu) {
775b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    if (f.onOptionsItemSelected(item)) {
776b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                        return true;
777b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    }
778b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                }
779b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
780b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
781b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        return false;
782b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    }
783b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn
784b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    public void dispatchOptionsMenuClosed(Menu menu) {
785b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        if (mActive != null) {
786b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            for (int i=0; i<mAdded.size(); i++) {
787b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                Fragment f = mAdded.get(i);
788b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                if (f != null && !f.mHidden && f.mHasMenu) {
789b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                    f.onOptionsMenuClosed(menu);
790b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn                }
791b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn            }
792b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn        }
793b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn    }
794b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn
795f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    public static int reverseTransit(int transit) {
796f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        int rev = 0;
797f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        switch (transit) {
798f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ENTER:
799f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_EXIT;
800f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
801f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_EXIT:
802f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_ENTER;
803f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
804f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_SHOW:
805f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_HIDE;
806f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
807f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_HIDE:
808f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_SHOW;
809f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
810f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ACTIVITY_OPEN:
811f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_ACTIVITY_CLOSE;
812f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
813f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE:
814f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_ACTIVITY_OPEN;
815f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
816f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_OPEN:
817f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_TASK_CLOSE;
818f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
819f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_CLOSE:
820f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_TASK_OPEN;
821f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
822f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_TO_FRONT:
823f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_TASK_TO_BACK;
824f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
825f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_TO_BACK:
826f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_TASK_TO_FRONT;
827f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
828f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_OPEN:
829f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_WALLPAPER_CLOSE;
830f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
831f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE:
832f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_WALLPAPER_OPEN;
833f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
834f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN:
835f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE;
836f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
837f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE:
838f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN;
839f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
840f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
841f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        return rev;
842f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
843f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    }
844f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn
845f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    public static int transitToStyleIndex(int transit, boolean enter) {
846f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        int animAttr = -1;
847f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        switch (transit) {
848f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ENTER:
849f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = com.android.internal.R.styleable.WindowAnimation_windowEnterAnimation;
850f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
851f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_EXIT:
852f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = com.android.internal.R.styleable.WindowAnimation_windowExitAnimation;
853f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
854f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_SHOW:
855f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = com.android.internal.R.styleable.WindowAnimation_windowShowAnimation;
856f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
857f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_HIDE:
858f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = com.android.internal.R.styleable.WindowAnimation_windowHideAnimation;
859f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
860f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ACTIVITY_OPEN:
861f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
862f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation
863f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation;
864f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
865f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE:
866f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
867f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation
868f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation;
869f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
870f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_OPEN:
871f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
872f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation
873f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation;
874f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
875f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_CLOSE:
876f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
877f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation
878f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation;
879f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
880f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_TO_FRONT:
881f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
882f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation
883f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation;
884f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
885f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_TASK_TO_BACK:
886f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
887f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation
888f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation;
889f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
890f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_OPEN:
891f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
892f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation
893f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation;
894f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
895f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE:
896f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
897f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation
898f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation;
899f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
900f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN:
901f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
902f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation
903f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
904f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
905f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn            case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE:
906f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                animAttr = enter
907f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation
908f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                        : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation;
909f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn                break;
910f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        }
911f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn        return animAttr;
912f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn    }
9132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn}
914