FragmentManager.java revision 6e8304e57ec533e257a2496183125f257be1ff60
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; 24b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.util.SparseArray; 252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.view.ViewGroup; 26f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.Animation; 27f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.AnimationUtils; 282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport java.util.ArrayList; 302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 31b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class BackStackEntry implements FragmentTransaction, Runnable { 32b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final FragmentManager mManager; 33b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 34b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> mAdded; 35b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> mRemoved; 36b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mTransition; 37b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mTransitionStyle; 38b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mAddToBackStack; 39b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn String mName; 40b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mCommitted; 41b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 42b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackEntry(FragmentManager manager) { 43b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager = manager; 44b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 45b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 46b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction add(Fragment fragment, String tag) { 47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragment.mTag = tag; 48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return add(fragment, 0); 49b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 50b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 51b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction add(Fragment fragment, int containerViewId) { 52b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragment.mActivity != null) { 53b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalStateException("Fragment already added: " + fragment); 54b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 55b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 56b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved.remove(fragment); 57b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 58b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded == null) { 59b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = new ArrayList<Fragment>(); 60b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 61b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragment.mContainerId = fragment.mFragmentId = containerViewId; 62b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded.add(fragment); 63b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 64b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 65b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 66b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction replace(Fragment fragment, int containerViewId) { 67b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (containerViewId == 0) { 68b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException("Must use non-zero containerViewId"); 69b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 706e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mManager.mAdded != null) { 716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<mManager.mAdded.size(); i++) { 726e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment old = mManager.mAdded.get(i); 73b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (old.mContainerId == containerViewId) { 74b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn remove(old); 75b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 76b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 77b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 78b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return add(fragment, containerViewId); 79b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 80b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 81b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction remove(Fragment fragment) { 82b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragment.mActivity == null) { 83b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalStateException("Fragment not added: " + fragment); 84b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 85b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 86b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded.remove(fragment); 87b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 88b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved == null) { 89b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = new ArrayList<Fragment>(); 90b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 91b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved.add(fragment); 92b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 93b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 94b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 95b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction setTransition(int transition) { 96b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = transition; 97b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 98b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 99b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 100b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction setTransitionStyle(int styleRes) { 101b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = styleRes; 102b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 103b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 104b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 105b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction addToBackStack(String name) { 106b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAddToBackStack = true; 107b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = name; 108b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 109b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 110b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 111b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void commit() { 112b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mCommitted) throw new IllegalStateException("commit already called"); 113b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mCommitted = true; 114b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.mActivity.mHandler.post(this); 115b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 116b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 117b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void run() { 118b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 119b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mRemoved.size()-1; i>=0; i--) { 1206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mRemoved.get(i); 1216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAddToBackStack) { 1226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mBackStackNesting++; 1236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 1246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mManager.removeFragment(f, mTransition, mTransitionStyle); 125b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 126b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 127b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 128b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 129b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mAdded.get(i); 130b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 131b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mBackStackNesting++; 132b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mManager.addFragment(f, false); 134b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 135b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 136b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.moveToState(mManager.mCurState, mTransition, 137b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle, true); 138b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 139b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.addBackStackState(this); 140b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 141b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 142b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 143b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void popFromBackStack() { 144b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 145b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 146b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mAdded.get(i); 147b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 148b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mBackStackNesting--; 149b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 150b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.removeFragment(f, 151b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManager.reverseTransit(mTransition), 152b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle); 153b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 154b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 155b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 156b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mRemoved.size()-1; i>=0; i--) { 1576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mRemoved.get(i); 1586e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAddToBackStack) { 1596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mBackStackNesting--; 1606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 1616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mManager.addFragment(f, false); 162b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 163b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 164b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 165b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 166b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public String getName() { 167b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mName; 168b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 169b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 170b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int getTransition() { 171b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mTransition; 172b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 173b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 174b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int getTransitionStyle() { 175b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mTransitionStyle; 176b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 177b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn} 178b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 179b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class BackStackState implements Parcelable { 180b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int[] mAdded; 181b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int[] mRemoved; 182b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mTransition; 183b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mTransitionStyle; 184b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final String mName; 185b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 186b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState(FragmentManager fm, BackStackEntry bse) { 187b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = buildFragmentStateList(fm, bse.mAdded); 188b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = buildFragmentStateList(fm, bse.mRemoved); 189b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = bse.mTransition; 190b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = bse.mTransitionStyle; 191b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = bse.mName; 192b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 193b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 194b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState(Parcel in) { 195b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = in.createIntArray(); 196b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = in.createIntArray(); 197b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = in.readInt(); 198b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = in.readInt(); 199b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = in.readString(); 200b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 201b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 202b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackEntry instantiate(FragmentManager fm) { 203b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bse = new BackStackEntry(fm); 204b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mAdded = buildFragmentList(fm, mAdded); 205b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mRemoved = buildFragmentList(fm, mRemoved); 206b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mTransition = mTransition; 207b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mTransitionStyle = mTransitionStyle; 208b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mName = mName; 209b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return bse; 210b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 211b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 212b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static int[] buildFragmentStateList(FragmentManager fm, ArrayList<Fragment> frags) { 213b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (frags == null) return null; 214b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int N = frags.size(); 215b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] ids = new int[N]; 216b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 2176e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ids[i] = frags.get(i).mIndex; 218b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 219b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return ids; 220b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 221b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 222b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static ArrayList<Fragment> buildFragmentList(FragmentManager fm, int[] states) { 223b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (states == null) return null; 224b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int N = states.length; 225b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> frags = new ArrayList<Fragment>(N); 226b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 2276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = fm.mActive.get(states[i]); 2286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mBackStackNesting++; 2296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn frags.add(f); 230b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 231b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return frags; 232b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 233b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 234b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 235b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 236b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 237b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 238b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 239b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mAdded); 240b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mRemoved); 241b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mTransition); 242b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mTransitionStyle); 243b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeString(mName); 244b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 245b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 246b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<BackStackState> CREATOR 247b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<BackStackState>() { 248b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState createFromParcel(Parcel in) { 249b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new BackStackState(in); 250b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 251b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 252b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState[] newArray(int size) { 253b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new BackStackState[size]; 254b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 255b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 256b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn} 257b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 258b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class FragmentManagerState implements Parcelable { 2596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState[] mActive; 260b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] mAdded; 261b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] mBackStack; 262b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 263b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState() { 264b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 265b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 266b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState(Parcel in) { 2676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = in.createTypedArray(FragmentState.CREATOR); 268b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = in.createIntArray(); 269b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = in.createTypedArray(BackStackState.CREATOR); 270b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 271b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 272b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 273b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 274b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 275b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 276b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 2776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn dest.writeTypedArray(mActive, flags); 278b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mAdded); 279b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeTypedArray(mBackStack, flags); 280b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 281b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 282b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<FragmentManagerState> CREATOR 283b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<FragmentManagerState>() { 284b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState createFromParcel(Parcel in) { 285b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState(in); 286b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 287b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 288b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState[] newArray(int size) { 289b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState[size]; 290b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 291b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 292ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn} 293ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 2942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/** 295f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn * @hide 2962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Container for fragments associated with an activity. 2972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 298f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornpublic class FragmentManager { 2996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Fragment> mActive; 3006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Fragment> mAdded; 3016e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Integer> mAvailIndices; 302b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<BackStackEntry> mBackStack; 3032dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 3042dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn int mCurState = Fragment.INITIALIZING; 3052dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn Activity mActivity; 3062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 307b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Temporary vars for state save and restore. 308b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle mStateBundle = null; 309b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn SparseArray<Parcelable> mStateArray = null; 310b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 311f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Animation loadAnimation(Fragment fragment, int transit, boolean enter, 312f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int transitionStyle) { 313f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Animation animObj = fragment.onCreateAnimation(transitionStyle, enter); 314f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (animObj != null) { 315f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animObj; 316f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 317f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 318f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transit == 0) { 319f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 320f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 321f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 322f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int styleIndex = transitToStyleIndex(transit, enter); 323f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (styleIndex < 0) { 324f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 325f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 326f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 327f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0 && mActivity.getWindow() != null) { 328f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn transitionStyle = mActivity.getWindow().getAttributes().windowAnimations; 329f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 330f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0) { 331f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 332f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 333f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 334f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle, 335f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn com.android.internal.R.styleable.WindowAnimation); 336f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int anim = attrs.getResourceId(styleIndex, 0); 337f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn attrs.recycle(); 338f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 339f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (anim == 0) { 340f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 341f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 342f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 343f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return AnimationUtils.loadAnimation(mActivity, anim); 344f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 345f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 346f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(Fragment f, int newState, int transit, int transitionStyle) { 3476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Fragments that are not currently added will sit in the onCreate() state. 3486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!f.mAdded && newState > Fragment.CREATED) { 3496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn newState = Fragment.CREATED; 3506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (f.mState < newState) { 3532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 3542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.INITIALIZING: 3552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = mActivity; 3562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 3572dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onAttach(mActivity); 3582dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 3592dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 3602dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onAttach()"); 3612dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3622dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 363b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 364b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 365b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onCreate(f.mSavedFragmentState); 366b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 367b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 368b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onCreate()"); 3692dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3702dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 371b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = false; 372b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mFromLayout) { 373b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // For fragments that are part of the content view 374b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // layout, we need to instantiate the view immediately 375b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // and the inflater will take care of adding it. 376b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 377b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn null, f.mSavedFragmentState); 3786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView != null) { 3796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mView.setSaveFromParentEnabled(false); 3806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.restoreViewState(); 3816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 382b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 3836e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn case Fragment.CREATED: 3846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (newState > Fragment.CREATED) { 385b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mFromLayout) { 386b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ViewGroup container = null; 387b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainerId != 0) { 388b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container = (ViewGroup)mActivity.findViewById(f.mContainerId); 389b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container == null) { 390b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException("New view found for id 0x" 391b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + Integer.toHexString(f.mContainerId) 392b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " for fragment " + f); 393b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 394b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 395b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer = container; 396b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 397b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container, f.mSavedFragmentState); 398b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 399b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setSaveFromParentEnabled(false); 400b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container != null) { 401b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, true, 402b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 403b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 404b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 405b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 406b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container.addView(f.mView); 407b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.restoreViewState(); 408b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 409b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 410b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 411b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 412b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 413b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onReady(f.mSavedFragmentState); 414b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 415b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 416b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onReady()"); 417f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 418b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedFragmentState = null; 4192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn case Fragment.CONTENT: 4216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (newState > Fragment.CONTENT) { 4222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onStart(); 4242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStart()"); 4272dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 4302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState > Fragment.STARTED) { 4312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onResume(); 4332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onResume()"); 4362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4382dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } else if (f.mState > newState) { 4402dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 4412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.RESUMED: 4422dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.RESUMED) { 4432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onPause(); 4452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onPause()"); 4482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4502dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 4512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.STARTED) { 4522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onStop(); 4542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStop()"); 4572dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4582dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 459b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CONTENT: 460b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState < Fragment.CONTENT) { 461b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 462b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Need to save the current view state if not 463b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // done already. 4646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!mActivity.isFinishing() && f.mSavedFragmentState == null) { 465b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn saveFragmentViewState(f); 466b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 467b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainer != null) { 468b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mCurState > Fragment.INITIALIZING) { 469b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, false, 470b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 471b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 472b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 473b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 474b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 475b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer.removeView(f.mView); 476f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 4772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4782dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mContainer = null; 4792dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mView = null; 480b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 481b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CREATED: 482b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState < Fragment.CREATED) { 483b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 484b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 485b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onDestroy(); 486b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 487b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 488b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onDestroy()"); 489b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 4902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 491b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 4922dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4932dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onDetach(); 4942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onDetach()"); 4972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = null; 4992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5012dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5022dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 5032dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mState = newState; 5042dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5052dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 506ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn void moveToState(int newState, boolean always) { 507f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(newState, 0, 0, always); 508f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 509f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 510f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(int newState, int transit, int transitStyle, boolean always) { 5112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity == null && newState != Fragment.INITIALIZING) { 5122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new IllegalStateException("No activity"); 5132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 515ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (!always && mCurState == newState) { 516ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return; 517ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 518ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 5192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCurState = newState; 5206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 5216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<mActive.size(); i++) { 5226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 5236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null) { 5246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn moveToState(f, newState, transit, transitStyle); 5256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 5306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn void makeActive(Fragment f) { 5316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mIndex >= 0) { 5326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return; 5336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 5356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null || mAvailIndices.size() <= 0) { 5366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive == null) { 5376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = new ArrayList<Fragment>(); 538ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.setIndex(mActive.size()); 5406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(f); 5416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 5426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 5436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.setIndex(mAvailIndices.remove(mAvailIndices.size()-1)); 5446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.set(f.mIndex, f); 5452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 5486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn void makeInactive(Fragment f) { 5496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mIndex < 0) { 5506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return; 5516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 5536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.set(f.mIndex, null); 5546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null) { 5556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices = new ArrayList<Integer>(); 5566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.add(f.mIndex); 5586e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.clearIndex(); 5596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 561ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn public void addFragment(Fragment fragment, boolean moveToStateNow) { 5626e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAdded == null) { 5636e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = new ArrayList<Fragment>(); 564ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.add(fragment); 5666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn makeActive(fragment); 5676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fragment.mAdded = true; 568ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (moveToStateNow) { 569f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(fragment, mCurState, 0, 0); 570ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 573f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void removeFragment(Fragment fragment, int transition, int transitionStyle) { 5746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.remove(fragment); 5756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn final boolean inactive = fragment.mBackStackNesting <= 0; 5766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (inactive) { 5776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn makeInactive(fragment); 5786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 5796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fragment.mAdded = false; 5806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn moveToState(fragment, inactive ? Fragment.INITIALIZING : Fragment.CREATED, 5816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn transition, transitionStyle); 582f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 583f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 584f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public Fragment findFragmentById(int id) { 5856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 5866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 5876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 5886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && f.mFragmentId == id) { 589b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return f; 590b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 591b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 592b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 593b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 594b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 595b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 596b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public Fragment findFragmentByTag(String tag) { 5976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null && tag != null) { 5986e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 5996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 6006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && tag.equals(f.mTag)) { 6016e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return f; 6026e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 6036e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 6046e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 6056e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return null; 6066e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 6076e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 6086e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public Fragment findFragmentByWho(String who) { 6096e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null && who != null) { 6106e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 6116e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 6126e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && who.equals(f.mWho)) { 613f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return f; 614f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 615f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 616f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 617f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 6182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 6192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 620b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void addBackStackState(BackStackEntry state) { 621ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 622b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(); 623ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 624ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn mBackStack.add(state); 625ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 626ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 627f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public boolean popBackStackState(Handler handler, String name) { 628ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 629ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return false; 630ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 631f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (name == null) { 632f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int last = mBackStack.size()-1; 633f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (last < 0) { 634f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 635f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 636b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final BackStackEntry bss = mBackStack.remove(last); 637f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn handler.post(new Runnable() { 638f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 639f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.popFromBackStack(); 640f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, reverseTransit(bss.getTransition()), 641f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.getTransitionStyle(), true); 642f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 643f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 644f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } else { 645f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int index = mBackStack.size()-1; 646f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn while (index >= 0) { 647b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bss = mBackStack.get(index); 648f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (name.equals(bss.getName())) { 649f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 650f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 651f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 652f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (index < 0 || index == mBackStack.size()-1) { 653f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 654f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 655b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final ArrayList<BackStackEntry> states 656b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new ArrayList<BackStackEntry>(); 657f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=mBackStack.size()-1; i>index; i--) { 658f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.add(mBackStack.remove(i)); 659ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 660f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn handler.post(new Runnable() { 661f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 662f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=0; i<states.size(); i++) { 663f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.get(i).popFromBackStack(); 664f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 665f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, true); 666f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 667f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 668f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 669ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return true; 670ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 671ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 672b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> retainNonConfig() { 673b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments = null; 6746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 6756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<mActive.size(); i++) { 6766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 6776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && f.mRetainInstance) { 678b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragments == null) { 679b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments = new ArrayList<Fragment>(); 680b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 681b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments.add(f); 682b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = true; 683b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 684b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 685b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 686b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fragments; 687b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 688b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 689b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void saveFragmentViewState(Fragment f) { 6906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView == null) { 691b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return; 692b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 693b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray == null) { 694b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = new SparseArray<Parcelable>(); 695b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 696b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.saveHierarchyState(mStateArray); 697b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray.size() > 0) { 698b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = mStateArray; 699b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = null; 700b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 701b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 702b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7036e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Parcelable saveAllState() { 7046e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive == null || mActive.size() <= 0) { 7056e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return null; 706b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 707b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7086e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // First collect all active fragments. 7096e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn int N = mActive.size(); 7106e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState[] active = new FragmentState[N]; 7116e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn boolean haveFragments = false; 7126e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<N; i++) { 7136e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 7146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null) { 7156e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn haveFragments = true; 7166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7176e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = new FragmentState(f); 7186e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn active[i] = fs; 7196e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mStateBundle == null) { 7216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mStateBundle = new Bundle(); 7226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.onSaveInstanceState(mStateBundle); 7246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!mStateBundle.isEmpty()) { 7256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState = mStateBundle; 7266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mStateBundle = null; 727b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 7286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView != null) { 7306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn saveFragmentViewState(f); 7316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mSavedViewState != null) { 7326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fs.mSavedFragmentState == null) { 7336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState = new Bundle(); 7346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState.putSparseParcelableArray( 7366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState.VIEW_STATE_TAG, f.mSavedViewState); 7376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 740b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 741b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 742b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!haveFragments) { 744b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 745b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 746b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 747b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] added = null; 748b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] backStack = null; 749b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build list of currently added fragments. 7516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn N = mAdded.size(); 752b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 753b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn added = new int[N]; 754b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 7556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn added[i] = mAdded.get(i).mIndex; 756b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 757b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 758b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 759b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Now save back stack. 760b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mBackStack != null) { 761b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn N = mBackStack.size(); 762b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 763b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack = new BackStackState[N]; 764b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 765b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack[i] = new BackStackState(this, mBackStack.get(i)); 766b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 767b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 768b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 769b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 770b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = new FragmentManagerState(); 7716e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fms.mActive = active; 772b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mAdded = added; 773b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mBackStack = backStack; 774b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fms; 775b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 776b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 777b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void restoreAllState(Parcelable state, ArrayList<Fragment> nonConfig) { 778b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // If there is no saved state at all, then there can not be 779b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // any nonConfig fragments either, so that is that. 780b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (state == null) return; 781b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = (FragmentManagerState)state; 7826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fms.mActive == null) return; 783b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // First re-attach any non-config instances we are retaining back 7856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // to their saved state, so we don't try to instantiate them again. 786b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (nonConfig != null) { 787b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<nonConfig.size(); i++) { 788b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = nonConfig.get(i); 7896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = fms.mActive[f.mIndex]; 790b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mInstance = f; 791b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = null; 7926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mBackStackNesting = 0; 7936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mAdded = false; 794b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fs.mSavedFragmentState != null) { 795b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray( 796b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState.VIEW_STATE_TAG); 797b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 798b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 799b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 800b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 8016e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the full list of active fragments, instantiating them from 8026e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // their saved state. 8036e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = new ArrayList<Fragment>(fms.mActive.length); 8046e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices != null) { 8056e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.clear(); 8066e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8076e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<fms.mActive.length; i++) { 8086e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = fms.mActive[i]; 8096e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fs != null) { 8106e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(fs.instantiate(mActivity)); 8116e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8126e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(null); 8136e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null) { 8146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices = new ArrayList<Integer>(); 8156e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.add(i); 817b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8186e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8196e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 8206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the list of currently added fragments. 8216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fms.mAdded != null) { 8226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = new ArrayList<Fragment>(fms.mAdded.length); 823b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mAdded.length; i++) { 8246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(fms.mAdded[i]); 8256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f == null) { 8266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn throw new IllegalStateException( 8276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn "No instantiated fragment for index #" + fms.mAdded[i]); 828b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mAdded = true; 8306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.add(f); 831b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = null; 834b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 8366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the back stack. 837b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fms.mBackStack != null) { 838b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(fms.mBackStack.length); 839b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mBackStack.length; i++) { 840b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bse = fms.mBackStack[i].instantiate(this); 841b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack.add(bse); 842b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mBackStack = null; 845b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 846b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 847b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 8482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void attachActivity(Activity activity) { 8492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity != null) throw new IllegalStateException(); 8502dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = activity; 8512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 853b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void dispatchCreate() { 854ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.CREATED, false); 8552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8572dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStart() { 858ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 8592dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8602dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8612dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchResume() { 862ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.RESUMED, false); 8632dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8642dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchPause() { 866ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 8672dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8682dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8692dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStop() { 8706e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn moveToState(Fragment.CONTENT, false); 8712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8732dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchDestroy() { 874ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.INITIALIZING, false); 8752dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = null; 8762dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 877f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 878f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int reverseTransit(int transit) { 879f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int rev = 0; 880f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 881f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 882f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_EXIT; 883f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 884f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 885f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ENTER; 886f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 887f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 888f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_HIDE; 889f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 890f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 891f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_SHOW; 892f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 893f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 894f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_CLOSE; 895f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 896f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 897f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_OPEN; 898f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 899f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 900f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_CLOSE; 901f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 902f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 903f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_OPEN; 904f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 905f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 906f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_BACK; 907f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 908f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 909f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_FRONT; 910f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 911f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 912f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_CLOSE; 913f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 914f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 915f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_OPEN; 916f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 917f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 918f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE; 919f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 920f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 921f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN; 922f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 923f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 924f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return rev; 925f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 926f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 927f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 928f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int transitToStyleIndex(int transit, boolean enter) { 929f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int animAttr = -1; 930f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 931f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 932f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowEnterAnimation; 933f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 934f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 935f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowExitAnimation; 936f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 937f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 938f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowShowAnimation; 939f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 940f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 941f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowHideAnimation; 942f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 943f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 944f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 945f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation 946f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation; 947f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 948f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 949f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 950f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation 951f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation; 952f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 953f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 954f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 955f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation 956f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation; 957f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 958f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 959f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 960f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation 961f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation; 962f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 963f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 964f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 965f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation 966f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation; 967f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 968f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 969f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 970f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation 971f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation; 972f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 973f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 974f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 975f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation 976f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation; 977f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 978f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 979f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 980f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation 981f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation; 982f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 983f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 984f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 985f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation 986f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation; 987f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 988f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 989f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 990f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation 991f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation; 992f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 993f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 994f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animAttr; 995f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 9962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn} 997