FragmentManager.java revision b4bc78b16a05554c57508b488e21dd8eca4e13e6
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; 30b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport java.util.HashMap; 312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 32b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class BackStackEntry implements FragmentTransaction, Runnable { 33b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final FragmentManager mManager; 34b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 35b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> mAdded; 36b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> mRemoved; 37b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mTransition; 38b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mTransitionStyle; 39b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mAddToBackStack; 40b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn String mName; 41b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn boolean mCommitted; 42b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 43b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackEntry(FragmentManager manager) { 44b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager = manager; 45b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 46b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction add(Fragment fragment, String tag) { 48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragment.mTag = tag; 49b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return add(fragment, 0); 50b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 51b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 52b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction add(Fragment fragment, int containerViewId) { 53b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragment.mActivity != null) { 54b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalStateException("Fragment already added: " + fragment); 55b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 56b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 57b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved.remove(fragment); 58b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 59b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded == null) { 60b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = new ArrayList<Fragment>(); 61b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 62b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragment.mContainerId = fragment.mFragmentId = containerViewId; 63b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded.add(fragment); 64b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 65b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 66b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 67b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction replace(Fragment fragment, int containerViewId) { 68b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (containerViewId == 0) { 69b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException("Must use non-zero containerViewId"); 70b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 71b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mManager.mFragments != null) { 72b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<mManager.mFragments.size(); i++) { 73b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment old = mManager.mFragments.get(i); 74b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (old.mContainerId == containerViewId) { 75b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn remove(old); 76b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 77b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 78b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 79b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return add(fragment, containerViewId); 80b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 81b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 82b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction remove(Fragment fragment) { 83b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragment.mActivity == null) { 84b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalStateException("Fragment not added: " + fragment); 85b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 86b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 87b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded.remove(fragment); 88b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 89b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved == null) { 90b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = new ArrayList<Fragment>(); 91b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 92b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved.add(fragment); 93b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 94b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 95b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 96b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction setTransition(int transition) { 97b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = transition; 98b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 99b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 100b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 101b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction setTransitionStyle(int styleRes) { 102b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = styleRes; 103b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 104b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 105b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 106b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentTransaction addToBackStack(String name) { 107b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAddToBackStack = true; 108b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = name; 109b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return this; 110b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 111b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 112b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void commit() { 113b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mCommitted) throw new IllegalStateException("commit already called"); 114b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mCommitted = true; 115b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.mActivity.mHandler.post(this); 116b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 117b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 118b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void run() { 119b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 120b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mRemoved.size()-1; i>=0; i--) { 121b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.removeFragment(mRemoved.get(i), mTransition, 122b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle); 123b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 124b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 125b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 126b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 127b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mAdded.get(i); 128b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.addFragment(f, false); 129b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 130b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mBackStackNesting++; 131b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 132b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 133b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 134b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.moveToState(mManager.mCurState, mTransition, 135b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle, true); 136b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 137b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.addBackStackState(this); 138b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 139b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 140b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 141b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void popFromBackStack() { 142b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAdded != null) { 143b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 144b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mAdded.get(i); 145b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mAddToBackStack) { 146b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mBackStackNesting--; 147b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 148b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.removeFragment(f, 149b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManager.reverseTransit(mTransition), 150b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle); 151b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 152b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 153b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mRemoved != null) { 154b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mRemoved.size()-1; i>=0; i--) { 155b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mManager.addFragment(mRemoved.get(i), false); 156b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 157b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 158b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 159b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 160b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public String getName() { 161b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mName; 162b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 163b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 164b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int getTransition() { 165b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mTransition; 166b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 167b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 168b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int getTransitionStyle() { 169b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return mTransitionStyle; 170b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 171b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn} 172b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 173b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class BackStackState implements Parcelable { 174b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int[] mAdded; 175b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int[] mRemoved; 176b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mTransition; 177b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int mTransitionStyle; 178b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final String mName; 179b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 180b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState(FragmentManager fm, BackStackEntry bse) { 181b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = buildFragmentStateList(fm, bse.mAdded); 182b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = buildFragmentStateList(fm, bse.mRemoved); 183b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = bse.mTransition; 184b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = bse.mTransitionStyle; 185b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = bse.mName; 186b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 187b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 188b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState(Parcel in) { 189b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = in.createIntArray(); 190b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRemoved = in.createIntArray(); 191b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransition = in.readInt(); 192b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mTransitionStyle = in.readInt(); 193b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mName = in.readString(); 194b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 195b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 196b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackEntry instantiate(FragmentManager fm) { 197b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bse = new BackStackEntry(fm); 198b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mAdded = buildFragmentList(fm, mAdded); 199b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mRemoved = buildFragmentList(fm, mRemoved); 200b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mTransition = mTransition; 201b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mTransitionStyle = mTransitionStyle; 202b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn bse.mName = mName; 203b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return bse; 204b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 205b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 206b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static int[] buildFragmentStateList(FragmentManager fm, ArrayList<Fragment> frags) { 207b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (frags == null) return null; 208b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int N = frags.size(); 209b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] ids = new int[N]; 210b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 211b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = fm.saveFragment(frags.get(i)); 212b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ids[i] = fs.mSavedStateId; 213b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 214b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return ids; 215b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 216b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 217b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn static ArrayList<Fragment> buildFragmentList(FragmentManager fm, int[] states) { 218b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (states == null) return null; 219b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final int N = states.length; 220b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> frags = new ArrayList<Fragment>(N); 221b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 222b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn frags.add(fm.mRestoredFragments.get(states[i]).instantiate(fm.mActivity)); 223b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 224b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return frags; 225b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 226b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 227b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 228b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 229b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 230b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 231b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 232b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mAdded); 233b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mRemoved); 234b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mTransition); 235b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeInt(mTransitionStyle); 236b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeString(mName); 237b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 238b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 239b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<BackStackState> CREATOR 240b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<BackStackState>() { 241b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState createFromParcel(Parcel in) { 242b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new BackStackState(in); 243b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 244b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 245b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public BackStackState[] newArray(int size) { 246b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new BackStackState[size]; 247b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 248b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 249b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn} 250b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 251b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class FragmentManagerState implements Parcelable { 252b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState[] mFragments; 253b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] mAdded; 254b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] mBackStack; 255b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 256b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState() { 257b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 258b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 259b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState(Parcel in) { 260b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments = in.createTypedArray(FragmentState.CREATOR); 261b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = in.createIntArray(); 262b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = in.createTypedArray(BackStackState.CREATOR); 263b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 264b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 265b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 266b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 267b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 268b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 269b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 270b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeTypedArray(mFragments, flags); 271b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mAdded); 272b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeTypedArray(mBackStack, flags); 273b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 274b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 275b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<FragmentManagerState> CREATOR 276b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<FragmentManagerState>() { 277b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState createFromParcel(Parcel in) { 278b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState(in); 279b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 280b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 281b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState[] newArray(int size) { 282b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState[size]; 283b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 284b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 285ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn} 286ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 2872dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/** 288f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn * @hide 2892dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Container for fragments associated with an activity. 2902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 291f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornpublic class FragmentManager { 292ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn ArrayList<Fragment> mFragments; 293b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<BackStackEntry> mBackStack; 2942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 2952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn int mCurState = Fragment.INITIALIZING; 2962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn Activity mActivity; 2972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 298b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mSaveStateSeq = 0; 299b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 300b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Temporary vars for state save and restore. 301b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int mCurSaveId = 0; 302b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn HashMap<Fragment, FragmentState> mSavedFragments; 303b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn SparseArray<FragmentState> mRestoredFragments; 304b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle mStateBundle = null; 305b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn SparseArray<Parcelable> mStateArray = null; 306b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 307f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Animation loadAnimation(Fragment fragment, int transit, boolean enter, 308f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int transitionStyle) { 309f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Animation animObj = fragment.onCreateAnimation(transitionStyle, enter); 310f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (animObj != null) { 311f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animObj; 312f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 313f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 314f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transit == 0) { 315f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 316f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 317f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 318f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int styleIndex = transitToStyleIndex(transit, enter); 319f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (styleIndex < 0) { 320f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 321f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 322f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 323f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0 && mActivity.getWindow() != null) { 324f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn transitionStyle = mActivity.getWindow().getAttributes().windowAnimations; 325f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 326f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0) { 327f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 328f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 329f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 330f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle, 331f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn com.android.internal.R.styleable.WindowAnimation); 332f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int anim = attrs.getResourceId(styleIndex, 0); 333f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn attrs.recycle(); 334f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 335f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (anim == 0) { 336f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 337f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 338f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 339f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return AnimationUtils.loadAnimation(mActivity, anim); 340f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 341f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 342f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(Fragment f, int newState, int transit, int transitionStyle) { 3432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (f.mState < newState) { 3442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 3452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.INITIALIZING: 3462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = mActivity; 3472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 3482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onAttach(mActivity); 3492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 3502dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 3512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onAttach()"); 3522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 354b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 355b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 356b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onCreate(f.mSavedFragmentState); 357b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 358b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 359b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onCreate()"); 3602dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3612dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 362b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = false; 363b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mFromLayout) { 364b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // For fragments that are part of the content view 365b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // layout, we need to instantiate the view immediately 366b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // and the inflater will take care of adding it. 367b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 368b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn null, f.mSavedFragmentState); 369b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 370b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CONTENT: 371b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState > Fragment.CONTENT) { 372b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mFromLayout) { 373b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ViewGroup container = null; 374b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainerId != 0) { 375b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container = (ViewGroup)mActivity.findViewById(f.mContainerId); 376b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container == null) { 377b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException("New view found for id 0x" 378b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + Integer.toHexString(f.mContainerId) 379b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " for fragment " + f); 380b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 381b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 382b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer = container; 383b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 384b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container, f.mSavedFragmentState); 385b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 386b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setSaveFromParentEnabled(false); 387b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container != null) { 388b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, true, 389b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 390b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 391b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 392b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 393b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container.addView(f.mView); 394b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.restoreViewState(); 395b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 396b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 397b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 398b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 399b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 400b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onReady(f.mSavedFragmentState); 401b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 402b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 403b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onReady()"); 404f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 405b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedFragmentState = null; 4062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4072dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.CREATED: 4082dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState > Fragment.CREATED) { 4092dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4102dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onStart(); 4112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStart()"); 4142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 4172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState > Fragment.STARTED) { 4182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onResume(); 4202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4212dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onResume()"); 4232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } else if (f.mState > newState) { 4272dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 4282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.RESUMED: 4292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.RESUMED) { 4302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onPause(); 4322dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onPause()"); 4352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 4382dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.STARTED) { 4392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4402dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onStop(); 4412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4422dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4432dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStop()"); 4442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4452dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 446b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CONTENT: 447b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState < Fragment.CONTENT) { 448b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 449b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Need to save the current view state if not 450b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // done already. 451b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!mActivity.isFinishing()) { 452b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn saveFragmentViewState(f); 453b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 454b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainer != null) { 455b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mCurState > Fragment.INITIALIZING) { 456b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, false, 457b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 458b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 459b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 460b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 461b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 462b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer.removeView(f.mView); 463f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 4642dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mContainer = null; 4662dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mView = null; 467b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 468b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CREATED: 469b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState < Fragment.CREATED) { 470b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 471b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 472b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onDestroy(); 473b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 474b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 475b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onDestroy()"); 476b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 4772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 478b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 4792dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 4802dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onDetach(); 4812dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 4822dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 4832dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onDetach()"); 4842dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4852dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = null; 4862dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4872dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4882dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4892dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 4902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mState = newState; 4912dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4922dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 493ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn void moveToState(int newState, boolean always) { 494f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(newState, 0, 0, always); 495f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 496f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 497f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(int newState, int transit, int transitStyle, boolean always) { 4982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity == null && newState != Fragment.INITIALIZING) { 4992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new IllegalStateException("No activity"); 5002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5012dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 502ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (!always && mCurState == newState) { 503ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return; 504ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 505ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 5062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCurState = newState; 507ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mFragments != null) { 508ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn for (int i=0; i<mFragments.size(); i++) { 509ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn Fragment f = mFragments.get(i); 510f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(f, newState, transit, transitStyle); 511ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 515ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn public void addFragment(Fragment fragment, boolean moveToStateNow) { 516ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mFragments == null) { 517ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn mFragments = new ArrayList<Fragment>(); 518ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.add(fragment); 520ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (moveToStateNow) { 521f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(fragment, mCurState, 0, 0); 522ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 5232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 525f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void removeFragment(Fragment fragment, int transition, int transitionStyle) { 5262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mFragments.remove(fragment); 527f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(fragment, Fragment.INITIALIZING, transition, transitionStyle); 528f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 529f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 530f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public Fragment findFragmentById(int id) { 531f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (mFragments != null) { 532f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=mFragments.size()-1; i>=0; i--) { 533f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Fragment f = mFragments.get(i); 534b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mFragmentId == id) { 535b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return f; 536b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 537b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 538b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 539b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 540b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 541b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 542b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public Fragment findFragmentByTag(String tag) { 543b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mFragments != null && tag != null) { 544b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=mFragments.size()-1; i>=0; i--) { 545b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mFragments.get(i); 546b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (tag.equals(f.mTag)) { 547f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return f; 548f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 549f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 550f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 551f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 5522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 554b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void addBackStackState(BackStackEntry state) { 555ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 556b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(); 557ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 558ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn mBackStack.add(state); 559ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 560ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 561f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public boolean popBackStackState(Handler handler, String name) { 562ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 563ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return false; 564ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 565f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (name == null) { 566f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int last = mBackStack.size()-1; 567f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (last < 0) { 568f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 569f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 570b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final BackStackEntry bss = mBackStack.remove(last); 571f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn handler.post(new Runnable() { 572f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 573f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.popFromBackStack(); 574f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, reverseTransit(bss.getTransition()), 575f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.getTransitionStyle(), true); 576f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 577f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 578f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } else { 579f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int index = mBackStack.size()-1; 580f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn while (index >= 0) { 581b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bss = mBackStack.get(index); 582f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (name.equals(bss.getName())) { 583f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 584f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 585f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 586f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (index < 0 || index == mBackStack.size()-1) { 587f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 588f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 589b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final ArrayList<BackStackEntry> states 590b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new ArrayList<BackStackEntry>(); 591f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=mBackStack.size()-1; i>index; i--) { 592f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.add(mBackStack.remove(i)); 593ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 594f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn handler.post(new Runnable() { 595f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 596f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=0; i<states.size(); i++) { 597f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.get(i).popFromBackStack(); 598f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 599f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, true); 600f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 601f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 602f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 603ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return true; 604ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 605ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 606b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> retainNonConfig() { 607b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments = null; 608b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mFragments != null) { 609b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<mFragments.size(); i++) { 610b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = mFragments.get(i); 611b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mBackStackNesting <= 0 && f.mRetainInstance && f.mTag != null) { 612b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragments == null) { 613b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments = new ArrayList<Fragment>(); 614b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 615b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments.add(f); 616b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = true; 617b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 618b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 619b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 620b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fragments; 621b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 622b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 623b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void saveFragmentViewState(Fragment f) { 624b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mSavedViewState != null) { 625b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return; 626b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 627b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray == null) { 628b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = new SparseArray<Parcelable>(); 629b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 630b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.saveHierarchyState(mStateArray); 631b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray.size() > 0) { 632b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = mStateArray; 633b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = null; 634b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 635b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 636b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 637b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState saveFragment(Fragment f) { 638b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mSavedFragments != null) { 639b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = mSavedFragments.get(f); 640b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fs != null) { 641b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fs; 642b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 643b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } else { 644b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedFragments = new HashMap<Fragment, FragmentState>(); 645b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 646b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 647b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedStateSeq = mSaveStateSeq; 648b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedStateId = ++mCurSaveId; 649b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 650b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = new FragmentState(f); 651b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedFragments.put(f, fs); 652b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 653b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateBundle == null) { 654b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateBundle = new Bundle(); 655b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 656b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onSaveInstanceState(mStateBundle); 657b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!mStateBundle.isEmpty()) { 658b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mSavedFragmentState = mStateBundle; 659b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateBundle = null; 660b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 661b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 662b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 663b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn saveFragmentViewState(f); 664b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mSavedViewState != null) { 665b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fs.mSavedFragmentState == null) { 666b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mSavedFragmentState = new Bundle(); 667b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 668b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mSavedFragmentState.putSparseParcelableArray( 669b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState.VIEW_STATE_TAG, f.mSavedViewState); 670b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 671b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 672b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 673b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fs; 674b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 675b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 676b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Parcelable saveAllState() { 677b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSavedFragments = null; 678b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mSaveStateSeq++; 679b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 680b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mFragments == null) { 681b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 682b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 683b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 684b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] added = null; 685b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] backStack = null; 686b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 687b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // First collect all active fragments. 688b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int N = mFragments.size(); 689b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 690b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn added = new int[N]; 691b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 692b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn added[i] = saveFragment(mFragments.get(i)).mSavedStateId; 693b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 694b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 695b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 696b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Now save back stack. 697b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mBackStack != null) { 698b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn N = mBackStack.size(); 699b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 700b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack = new BackStackState[N]; 701b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 702b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack[i] = new BackStackState(this, mBackStack.get(i)); 703b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 704b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 705b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 706b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 707b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mSavedFragments == null) { 708b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 709b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 710b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn N = mSavedFragments.size(); 711b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N <= 0) { 712b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 713b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 714b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 715b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = new FragmentManagerState(); 716b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mFragments = new FragmentState[N]; 717b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int i = 0; 718b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (FragmentState fs : mSavedFragments.values()) { 719b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mFragments[i] = fs; 720b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn i++; 721b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 722b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mAdded = added; 723b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mBackStack = backStack; 724b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fms; 725b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 726b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 727b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void restoreAllState(Parcelable state, ArrayList<Fragment> nonConfig) { 728b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // If there is no saved state at all, then there can not be 729b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // any nonConfig fragments either, so that is that. 730b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (state == null) return; 731b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = (FragmentManagerState)state; 732b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fms.mFragments == null) return; 733b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 734b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // First build our lookup table of all known Fragment objects. 735b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRestoredFragments = new SparseArray<FragmentState>(); 736b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mFragments.length; i++) { 737b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = fms.mFragments[i]; 738b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mRestoredFragments.put(fs.mSavedStateId, fs); 739b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 740b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 741b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Stick any non-config instances we are retaining directly 742b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // into the lookup table, so we don't try to instantiate them again. 743b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (nonConfig != null) { 744b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<nonConfig.size(); i++) { 745b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = nonConfig.get(i); 746b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = mRestoredFragments.get(f.mSavedStateId); 747b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mInstance = f; 748b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = null; 749b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fs.mSavedFragmentState != null) { 750b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray( 751b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState.VIEW_STATE_TAG); 752b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 753b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn addFragment(f, false); 754b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 755b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 756b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 757b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Now build our data structures from the saved state, instantiating 758b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // the fragment objects as needed. 759b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fms.mAdded != null) { 760b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mFragments == null) { 761b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments = new ArrayList<Fragment>(fms.mAdded.length); 762b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 763b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mAdded.length; i++) { 764b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState fs = mRestoredFragments.get(fms.mAdded[i]); 765b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = fs.instantiate(mActivity); 766b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // This will return null if this is a layout fragment, 767b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // since the instance for such a fragment will be created 768b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // later during layout inflation. 769b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f != null) { 770b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mFragments.add(f); 771b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 772b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 773b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 774b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fms.mBackStack != null) { 775b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(fms.mBackStack.length); 776b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mBackStack.length; i++) { 777b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bse = fms.mBackStack[i].instantiate(this); 778b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack.add(bse); 779b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 780b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 781b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 782b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7832dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void attachActivity(Activity activity) { 7842dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity != null) throw new IllegalStateException(); 7852dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = activity; 7862dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 7872dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 788b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void dispatchCreate() { 789ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.CREATED, false); 7902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 7912dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 7922dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStart() { 793ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 7942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 7952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 7962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchResume() { 797ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.RESUMED, false); 7982dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 7992dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8002dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchPause() { 801ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 8022dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8032dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8042dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStop() { 805ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.CREATED, false); 8062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8072dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8082dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchDestroy() { 809ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.INITIALIZING, false); 8102dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = null; 8112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 812f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 813f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int reverseTransit(int transit) { 814f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int rev = 0; 815f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 816f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 817f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_EXIT; 818f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 819f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 820f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ENTER; 821f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 822f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 823f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_HIDE; 824f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 825f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 826f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_SHOW; 827f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 828f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 829f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_CLOSE; 830f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 831f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 832f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_OPEN; 833f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 834f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 835f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_CLOSE; 836f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 837f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 838f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_OPEN; 839f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 840f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 841f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_BACK; 842f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 843f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 844f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_FRONT; 845f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 846f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 847f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_CLOSE; 848f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 849f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 850f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_OPEN; 851f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 852f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 853f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE; 854f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 855f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 856f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN; 857f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 858f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 859f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return rev; 860f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 861f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 862f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 863f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int transitToStyleIndex(int transit, boolean enter) { 864f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int animAttr = -1; 865f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 866f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 867f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowEnterAnimation; 868f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 869f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 870f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowExitAnimation; 871f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 872f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 873f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowShowAnimation; 874f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 875f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 876f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowHideAnimation; 877f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 878f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 879f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 880f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation 881f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation; 882f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 883f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 884f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 885f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation 886f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation; 887f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 888f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 889f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 890f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation 891f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation; 892f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 893f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 894f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 895f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation 896f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation; 897f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 898f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 899f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 900f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation 901f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation; 902f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 903f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 904f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 905f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation 906f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation; 907f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 908f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 909f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 910f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation 911f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation; 912f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 913f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 914f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 915f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation 916f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation; 917f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 918f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 919f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 920f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation 921f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation; 922f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 923f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 924f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 925f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation 926f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation; 927f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 928f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 929f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animAttr; 930f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 9312dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn} 932