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