FragmentManager.java revision dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8
12dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/* 22dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Copyright (C) 2010 The Android Open Source Project 32dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 42dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 52dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * you may not use this file except in compliance with the License. 62dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * You may obtain a copy of the License at 72dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 82dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 92dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * 102dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Unless required by applicable law or agreed to in writing, software 112dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 122dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * See the License for the specific language governing permissions and 142dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * limitations under the License. 152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 162dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornpackage android.app; 182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 19f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.content.res.TypedArray; 202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.os.Bundle; 21ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackbornimport android.os.Handler; 22b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcel; 23b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.os.Parcelable; 245ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackbornimport android.util.Log; 25b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornimport android.util.SparseArray; 26b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.Menu; 27b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuInflater; 28b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackbornimport android.view.MenuItem; 295ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackbornimport android.view.View; 302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport android.view.ViewGroup; 31f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.Animation; 32f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornimport android.view.animation.AnimationUtils; 332dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackbornimport java.util.ArrayList; 352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 36b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackbornfinal class FragmentManagerState implements Parcelable { 376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState[] mActive; 38b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] mAdded; 39b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] mBackStack; 40b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 41b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState() { 42b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 43b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 44b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState(Parcel in) { 456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = in.createTypedArray(FragmentState.CREATOR); 46b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mAdded = in.createIntArray(); 47b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = in.createTypedArray(BackStackState.CREATOR); 48b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 49b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 50b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public int describeContents() { 51b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return 0; 52b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 53b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 54b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void writeToParcel(Parcel dest, int flags) { 556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn dest.writeTypedArray(mActive, flags); 56b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeIntArray(mAdded); 57b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn dest.writeTypedArray(mBackStack, flags); 58b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 59b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 60b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public static final Parcelable.Creator<FragmentManagerState> CREATOR 61b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new Parcelable.Creator<FragmentManagerState>() { 62b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState createFromParcel(Parcel in) { 63b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState(in); 64b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 65b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 66b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public FragmentManagerState[] newArray(int size) { 67b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return new FragmentManagerState[size]; 68b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 69b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn }; 70ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn} 71ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn/** 73f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn * @hide 742dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn * Container for fragments associated with an activity. 752dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn */ 76f121be737c59390d97e21a92be8e166001534c7dDianne Hackbornpublic class FragmentManager { 775ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn static final boolean DEBUG = true; 785ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn static final String TAG = "FragmentManager"; 795ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 80445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn ArrayList<Runnable> mPendingActions; 81445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn Runnable[] mTmpActions; 82445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn boolean mExecutingActions; 83445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Fragment> mActive; 856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Fragment> mAdded; 866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn ArrayList<Integer> mAvailIndices; 87b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<BackStackEntry> mBackStack; 882dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 89dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn // Must be accessed while locked. 90dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn ArrayList<BackStackEntry> mBackStackIndices; 91dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn ArrayList<Integer> mAvailBackStackIndices; 92dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 932dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn int mCurState = Fragment.INITIALIZING; 942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn Activity mActivity; 952dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 96b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean mNeedMenuInvalidate; 97b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 98b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Temporary vars for state save and restore. 99b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Bundle mStateBundle = null; 100b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn SparseArray<Parcelable> mStateArray = null; 101b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 102445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn Runnable mExecCommit = new Runnable() { 103445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn @Override 104445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn public void run() { 105445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn execPendingActions(); 106445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 107445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn }; 108445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 109f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn Animation loadAnimation(Fragment fragment, int transit, boolean enter, 110f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int transitionStyle) { 1115ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Animation animObj = fragment.onCreateAnimation(transitionStyle, enter, 1125ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mNextAnim); 113f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (animObj != null) { 114f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animObj; 115f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 116f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 1175ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (fragment.mNextAnim != 0) { 1185ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Animation anim = AnimationUtils.loadAnimation(mActivity, fragment.mNextAnim); 1195ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (anim != null) { 1205ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return anim; 1215ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 1225ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 1235ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 124f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transit == 0) { 125f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 126f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 127f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 128f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int styleIndex = transitToStyleIndex(transit, enter); 129f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (styleIndex < 0) { 130f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 131f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 132f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 133f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0 && mActivity.getWindow() != null) { 134f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn transitionStyle = mActivity.getWindow().getAttributes().windowAnimations; 135f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 136f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (transitionStyle == 0) { 137f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 138f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 139f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 140f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn TypedArray attrs = mActivity.obtainStyledAttributes(transitionStyle, 141f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn com.android.internal.R.styleable.WindowAnimation); 142f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int anim = attrs.getResourceId(styleIndex, 0); 143f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn attrs.recycle(); 144f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 145f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (anim == 0) { 146f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 147f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 148f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 149f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return AnimationUtils.loadAnimation(mActivity, anim); 150f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 151f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 152f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(Fragment f, int newState, int transit, int transitionStyle) { 1536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Fragments that are not currently added will sit in the onCreate() state. 1546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!f.mAdded && newState > Fragment.CREATED) { 1556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn newState = Fragment.CREATED; 1566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 1576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 1582dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (f.mState < newState) { 1592dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 1602dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.INITIALIZING: 1615ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "moveto CREATED: " + f); 1622dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = mActivity; 1632dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 1642dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onAttach(mActivity); 1652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 1662dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 1672dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onAttach()"); 1682dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 169c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn mActivity.onAttachFragment(f); 1702dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 171b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 172b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 173b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onCreate(f.mSavedFragmentState); 174b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 175b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 176b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onCreate()"); 1772dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 1782dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 179b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = false; 180b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mFromLayout) { 181b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // For fragments that are part of the content view 182b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // layout, we need to instantiate the view immediately 183b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // and the inflater will take care of adding it. 184b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 185b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn null, f.mSavedFragmentState); 1866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView != null) { 1876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mView.setSaveFromParentEnabled(false); 1886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.restoreViewState(); 1895ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (f.mHidden) f.mView.setVisibility(View.GONE); 1906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 191b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 1926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn case Fragment.CREATED: 1936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (newState > Fragment.CREATED) { 1945ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "moveto CONTENT: " + f); 195b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mFromLayout) { 196b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ViewGroup container = null; 197b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainerId != 0) { 198b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container = (ViewGroup)mActivity.findViewById(f.mContainerId); 199b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container == null) { 200b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new IllegalArgumentException("New view found for id 0x" 201b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + Integer.toHexString(f.mContainerId) 202b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " for fragment " + f); 203b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 204b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 205b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer = container; 206b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView = f.onCreateView(mActivity.getLayoutInflater(), 207b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container, f.mSavedFragmentState); 208b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 209b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setSaveFromParentEnabled(false); 210b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (container != null) { 211b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, true, 212b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 213b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 214b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 215b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 216b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn container.addView(f.mView); 217b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.restoreViewState(); 218b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 2195ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (f.mHidden) f.mView.setVisibility(View.GONE); 220b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 221b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 222b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 223b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 224c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn f.onActivityCreated(f.mSavedFragmentState); 225b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 226b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 227b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onReady()"); 228f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 229b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedFragmentState = null; 2302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 231c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn case Fragment.ACTIVITY_CREATED: 232c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (newState > Fragment.ACTIVITY_CREATED) { 2335ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "moveto STARTED: " + f); 2342dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 2352dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onStart(); 2362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 2372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 2382dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStart()"); 2392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2402dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2412dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 2422dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState > Fragment.STARTED) { 2435ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "moveto RESUMED: " + f); 2442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 2452707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn f.mResumed = true; 2462dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onResume(); 2472dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 2482dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 2492dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onResume()"); 2502dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2512dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2522dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2532dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } else if (f.mState > newState) { 2542dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn switch (f.mState) { 2552dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.RESUMED: 2562dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.RESUMED) { 2575ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "movefrom RESUMED: " + f); 2582dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 2592dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onPause(); 2602dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 2612dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 2622dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onPause()"); 2632dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2642707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn f.mResumed = false; 2652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2662dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn case Fragment.STARTED: 2672dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (newState < Fragment.STARTED) { 2685ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "movefrom STARTED: " + f); 2692dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 2702707d6026240bcca6f0e35e2e1138958882e90ceDianne Hackborn f.performStop(); 2712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 2722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 2732dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onStop()"); 2742dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 2752dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 276c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn case Fragment.ACTIVITY_CREATED: 277c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn if (newState < Fragment.ACTIVITY_CREATED) { 2785ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "movefrom CONTENT: " + f); 279b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mView != null) { 2805ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn f.mCalled = false; 2815ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn f.onDestroyView(); 2825ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (!f.mCalled) { 2835ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 2845ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn + " did not call through to super.onDestroyedView()"); 2855ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 286b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Need to save the current view state if not 287b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // done already. 2886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!mActivity.isFinishing() && f.mSavedFragmentState == null) { 289b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn saveFragmentViewState(f); 290b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 291b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (f.mContainer != null) { 292b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mCurState > Fragment.INITIALIZING) { 293b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Animation anim = loadAnimation(f, transit, false, 294b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn transitionStyle); 295b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (anim != null) { 296b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.setAnimation(anim); 297b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 298b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 299b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mContainer.removeView(f.mView); 300f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 3012dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3022dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mContainer = null; 3032dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mView = null; 304b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 305b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn case Fragment.CREATED: 306b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (newState < Fragment.CREATED) { 3075ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "movefrom CREATED: " + f); 308b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mRetaining) { 309b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mCalled = false; 310b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.onDestroy(); 311b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (!f.mCalled) { 312b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn throw new SuperNotCalledException("Fragment " + f 313b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn + " did not call through to super.onDestroy()"); 314b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 3152dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 316b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 3172dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mCalled = false; 3182dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.onDetach(); 3192dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (!f.mCalled) { 3202dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new SuperNotCalledException("Fragment " + f 3212dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn + " did not call through to super.onDetach()"); 3222dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3232dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mActivity = null; 3242dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3252dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3262dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3272dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 3282dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn f.mState = newState; 3292dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3302dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 331ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn void moveToState(int newState, boolean always) { 332f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(newState, 0, 0, always); 333f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 334f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 335f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn void moveToState(int newState, int transit, int transitStyle, boolean always) { 3362dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity == null && newState != Fragment.INITIALIZING) { 3372dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn throw new IllegalStateException("No activity"); 3382dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3392dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 340ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (!always && mCurState == newState) { 341ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return; 342ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 343ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 3442dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mCurState = newState; 3456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 3466e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<mActive.size(); i++) { 3476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 3486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null) { 3496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn moveToState(f, newState, transit, transitStyle); 3506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3536e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3546e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3556e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn void makeActive(Fragment f) { 3566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mIndex >= 0) { 3576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return; 3586e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3596e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null || mAvailIndices.size() <= 0) { 3616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive == null) { 3626e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = new ArrayList<Fragment>(); 363ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 3646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.setIndex(mActive.size()); 3656e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(f); 3666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 3686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.setIndex(mAvailIndices.remove(mAvailIndices.size()-1)); 3696e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.set(f.mIndex, f); 3702dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3712dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 3722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 3736e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn void makeInactive(Fragment f) { 3746e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mIndex < 0) { 3756e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return; 3766e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 3786e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.set(f.mIndex, null); 3796e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null) { 3806e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices = new ArrayList<Integer>(); 3816e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3826e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.add(f.mIndex); 3839e14e9f33a66b864b98c6ff9517988bafbca3301Dianne Hackborn mActivity.invalidateFragmentIndex(f.mIndex); 3846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.clearIndex(); 3856e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 3866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 387ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn public void addFragment(Fragment fragment, boolean moveToStateNow) { 3885ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "add: " + fragment); 3896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAdded == null) { 3906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = new ArrayList<Fragment>(); 391ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 3926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.add(fragment); 3936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn makeActive(fragment); 3946e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fragment.mAdded = true; 395b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (fragment.mHasMenu) { 396b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mNeedMenuInvalidate = true; 397b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 398ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (moveToStateNow) { 399f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(fragment, mCurState, 0, 0); 400ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 4012dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 4022dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 403f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void removeFragment(Fragment fragment, int transition, int transitionStyle) { 4045ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "remove: " + fragment); 4056e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.remove(fragment); 4066e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn final boolean inactive = fragment.mBackStackNesting <= 0; 4076e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (inactive) { 4086e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn makeInactive(fragment); 4096e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 410b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (fragment.mHasMenu) { 411b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mNeedMenuInvalidate = true; 412b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 4136e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fragment.mAdded = false; 4146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn moveToState(fragment, inactive ? Fragment.INITIALIZING : Fragment.CREATED, 4156e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn transition, transitionStyle); 416f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 417f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 4185ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn public void hideFragment(Fragment fragment, int transition, int transitionStyle) { 4195ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "hide: " + fragment); 4205ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (!fragment.mHidden) { 4215ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mHidden = true; 4225ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (fragment.mView != null) { 4235ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Animation anim = loadAnimation(fragment, transition, false, 4245ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn transitionStyle); 4255ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (anim != null) { 4265ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mView.setAnimation(anim); 4275ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4285ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mView.setVisibility(View.GONE); 4295ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 430b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (fragment.mAdded && fragment.mHasMenu) { 431b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mNeedMenuInvalidate = true; 432b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 4335ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.onHiddenChanged(true); 4345ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4355ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4365ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 4375ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn public void showFragment(Fragment fragment, int transition, int transitionStyle) { 4385ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (DEBUG) Log.v(TAG, "show: " + fragment); 4395ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (fragment.mHidden) { 4405ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mHidden = false; 4415ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (fragment.mView != null) { 4425ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Animation anim = loadAnimation(fragment, transition, true, 4435ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn transitionStyle); 4445ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (anim != null) { 4455ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mView.setAnimation(anim); 4465ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4475ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.mView.setVisibility(View.VISIBLE); 4485ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 449b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (fragment.mAdded && fragment.mHasMenu) { 450b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn mNeedMenuInvalidate = true; 451b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 4525ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn fragment.onHiddenChanged(false); 4535ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4545ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4555ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn 456f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public Fragment findFragmentById(int id) { 4576e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 4585ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // First look through added fragments. 4595ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 4605ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Fragment f = mAdded.get(i); 4615ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (f != null && f.mFragmentId == id) { 4625ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return f; 4635ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4645ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4655ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // Now for any known fragment. 4666e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 4676e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 4686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && f.mFragmentId == id) { 469b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return f; 470b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 471b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 472b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 473b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 474b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 475b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 476b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public Fragment findFragmentByTag(String tag) { 4776e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null && tag != null) { 4785ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // First look through added fragments. 4795ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn for (int i=mAdded.size()-1; i>=0; i--) { 4805ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn Fragment f = mAdded.get(i); 4815ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn if (f != null && tag.equals(f.mTag)) { 4825ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn return f; 4835ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4845ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn } 4855ae74d6e89a30e79ea85c487b32223ef55314985Dianne Hackborn // Now for any known fragment. 4866e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 4876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 4886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && tag.equals(f.mTag)) { 4896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return f; 4906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 4916e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 4926e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 4936e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return null; 4946e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 4956e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 4966e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn public Fragment findFragmentByWho(String who) { 4976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null && who != null) { 4986e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=mActive.size()-1; i>=0; i--) { 4996e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 5006e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && who.equals(f.mWho)) { 501f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return f; 502f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 503f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 504f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 505f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return null; 5062dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 5072dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 508445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn public void enqueueAction(Runnable action) { 509445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn synchronized (this) { 510445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (mPendingActions == null) { 511445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mPendingActions = new ArrayList<Runnable>(); 512445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 513445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mPendingActions.add(action); 514445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (mPendingActions.size() == 1) { 515445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mActivity.mHandler.removeCallbacks(mExecCommit); 516445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mActivity.mHandler.post(mExecCommit); 517445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 518445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 519445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 520445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 521dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn public int allocBackStackIndex(BackStackEntry bse) { 522dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn synchronized (this) { 523dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (mAvailBackStackIndices == null || mAvailBackStackIndices.size() <= 0) { 524dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (mBackStackIndices == null) { 525dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices = new ArrayList<BackStackEntry>(); 526dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 527dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn int index = mBackStackIndices.size(); 528dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Setting back stack index " + index + " to " + bse); 529dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.add(bse); 530dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return index; 531dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 532dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } else { 533dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn int index = mAvailBackStackIndices.remove(mAvailBackStackIndices.size()-1); 534dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Adding back stack index " + index + " with " + bse); 535dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.set(index, bse); 536dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return index; 537dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 538dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 539dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 540dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 541dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn public void setBackStackIndex(int index, BackStackEntry bse) { 542dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn synchronized (this) { 543dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (mBackStackIndices == null) { 544dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices = new ArrayList<BackStackEntry>(); 545dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 546dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn int N = mBackStackIndices.size(); 547dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (index < N) { 548dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Setting back stack index " + index + " to " + bse); 549dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.set(index, bse); 550dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } else { 551dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn while (N < index) { 552dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.add(null); 553dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (mAvailBackStackIndices == null) { 554dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mAvailBackStackIndices = new ArrayList<Integer>(); 555dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 556dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Adding available back stack index " + N); 557dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mAvailBackStackIndices.add(N); 558dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn N++; 559dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 560dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Adding back stack index " + index + " with " + bse); 561dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.add(bse); 562dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 563dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 564dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 565dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 566dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn public void freeBackStackIndex(int index) { 567dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn synchronized (this) { 568dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mBackStackIndices.set(index, null); 569dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (mAvailBackStackIndices == null) { 570dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mAvailBackStackIndices = new ArrayList<Integer>(); 571dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 572dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (DEBUG) Log.v(TAG, "Freeing back stack index " + index); 573dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn mAvailBackStackIndices.add(index); 574dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 575dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 576dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 577445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn /** 578445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn * Only call from main thread! 579445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn */ 580445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn public void execPendingActions() { 581445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (mExecutingActions) { 582445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn throw new IllegalStateException("Recursive entry to execPendingActions"); 583445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 584445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 585445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn while (true) { 586445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn int numActions; 587445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 588445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn synchronized (this) { 589445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (mPendingActions == null || mPendingActions.size() == 0) { 590445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn return; 591445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 592445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 593445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn numActions = mPendingActions.size(); 594445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (mTmpActions == null || mTmpActions.length < numActions) { 595445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mTmpActions = new Runnable[numActions]; 596445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 597445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mPendingActions.toArray(mTmpActions); 598445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mPendingActions.clear(); 599445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mActivity.mHandler.removeCallbacks(mExecCommit); 600445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 601445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 602445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mExecutingActions = true; 603445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn for (int i=0; i<numActions; i++) { 604445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mTmpActions[i].run(); 605445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 606445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn mExecutingActions = false; 607445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 608445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn } 609445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn 610b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void addBackStackState(BackStackEntry state) { 611ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 612b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(); 613ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 614ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn mBackStack.add(state); 615ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 616ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 617dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn public boolean popBackStackState(Handler handler, String name, int flags) { 618dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return popBackStackState(handler, name, -1, flags); 619dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 620dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 621dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn public boolean popBackStackState(Handler handler, int id, int flags) { 622dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (id < 0) { 623dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return false; 624dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 625dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return popBackStackState(handler, null, id, flags); 626dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 627dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn 628dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn boolean popBackStackState(Handler handler, String name, int id, int flags) { 629ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn if (mBackStack == null) { 630ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return false; 631ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 632dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (name == null && id < 0) { 633f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int last = mBackStack.size()-1; 634f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn if (last < 0) { 635f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 636f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 637b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final BackStackEntry bss = mBackStack.remove(last); 638445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn enqueueAction(new Runnable() { 639f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 640445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (DEBUG) Log.v(TAG, "Popping back stack state: " + bss); 641f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.popFromBackStack(); 642f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, reverseTransit(bss.getTransition()), 643f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn bss.getTransitionStyle(), true); 644f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 645f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 646f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } else { 647f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int index = mBackStack.size()-1; 648f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn while (index >= 0) { 649b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bss = mBackStack.get(index); 650dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (name != null && name.equals(bss.getName())) { 651dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn break; 652dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 653dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (id >= 0 && id == bss.mIndex) { 654f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 655f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 656dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn index--; 657f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 658dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (index < 0) { 659dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn return false; 660dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 661dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if ((flags&Activity.POP_BACK_STACK_INCLUSIVE) != 0) { 662dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn index--; 663dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 664dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (index == mBackStack.size()-1) { 665f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return false; 666f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 667b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn final ArrayList<BackStackEntry> states 668b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn = new ArrayList<BackStackEntry>(); 669f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=mBackStack.size()-1; i>index; i--) { 670f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.add(mBackStack.remove(i)); 671ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 672445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn enqueueAction(new Runnable() { 673f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public void run() { 674f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn for (int i=0; i<states.size(); i++) { 675445646c52128a763b56ed7bb3bd009e2f33e3e4fDianne Hackborn if (DEBUG) Log.v(TAG, "Popping back stack state: " + states.get(i)); 676f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn states.get(i).popFromBackStack(); 677f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 678f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn moveToState(mCurState, true); 679f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 680f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn }); 681f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 682ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn return true; 683ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn } 684ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn 685b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> retainNonConfig() { 686b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn ArrayList<Fragment> fragments = null; 6876e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive != null) { 6886e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<mActive.size(); i++) { 6896e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 6906e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null && f.mRetainInstance) { 691b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fragments == null) { 692b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments = new ArrayList<Fragment>(); 693b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 694b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fragments.add(f); 695b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mRetaining = true; 696b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 697b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 698b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 699b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fragments; 700b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 701b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 702b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void saveFragmentViewState(Fragment f) { 7036e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView == null) { 704b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return; 705b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 706b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray == null) { 707b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = new SparseArray<Parcelable>(); 708b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 709b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mView.saveHierarchyState(mStateArray); 710b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mStateArray.size() > 0) { 711b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = mStateArray; 712b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mStateArray = null; 713b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 714b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 715b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Parcelable saveAllState() { 7176e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mActive == null || mActive.size() <= 0) { 7186e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn return null; 719b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 720b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // First collect all active fragments. 7226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn int N = mActive.size(); 7236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState[] active = new FragmentState[N]; 7246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn boolean haveFragments = false; 7256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<N; i++) { 7266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(i); 7276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f != null) { 7286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn haveFragments = true; 7296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7306e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = new FragmentState(f); 7316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn active[i] = fs; 7326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mStateBundle == null) { 7346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mStateBundle = new Bundle(); 7356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7366e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.onSaveInstanceState(mStateBundle); 7376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!mStateBundle.isEmpty()) { 7386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState = mStateBundle; 7396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mStateBundle = null; 740b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 7416e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 7426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mView != null) { 7436e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn saveFragmentViewState(f); 7446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f.mSavedViewState != null) { 7456e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fs.mSavedFragmentState == null) { 7466e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState = new Bundle(); 7476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7486e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fs.mSavedFragmentState.putSparseParcelableArray( 7496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState.VIEW_STATE_TAG, f.mSavedViewState); 7506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7516e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 7526e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 753b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 754b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 755b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7566e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (!haveFragments) { 757b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return null; 758b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 759b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 760b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn int[] added = null; 761b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackState[] backStack = null; 762b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7636e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build list of currently added fragments. 7646e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn N = mAdded.size(); 765b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 766b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn added = new int[N]; 767b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 7686e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn added[i] = mAdded.get(i).mIndex; 769b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 770b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 771b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 772b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // Now save back stack. 773b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (mBackStack != null) { 774b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn N = mBackStack.size(); 775b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (N > 0) { 776b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack = new BackStackState[N]; 777b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<N; i++) { 778b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn backStack[i] = new BackStackState(this, mBackStack.get(i)); 779b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 780b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 781b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 782b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 783b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = new FragmentManagerState(); 7846e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn fms.mActive = active; 785b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mAdded = added; 786b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fms.mBackStack = backStack; 787b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn return fms; 788b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 789b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 790b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn void restoreAllState(Parcelable state, ArrayList<Fragment> nonConfig) { 791b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // If there is no saved state at all, then there can not be 792b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn // any nonConfig fragments either, so that is that. 793b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (state == null) return; 794b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentManagerState fms = (FragmentManagerState)state; 7956e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fms.mActive == null) return; 796b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 7976e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // First re-attach any non-config instances we are retaining back 7986e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // to their saved state, so we don't try to instantiate them again. 799b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (nonConfig != null) { 800b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<nonConfig.size(); i++) { 801b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn Fragment f = nonConfig.get(i); 8026e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = fms.mActive[f.mIndex]; 803b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn fs.mInstance = f; 804b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = null; 8056e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mBackStackNesting = 0; 8066e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mAdded = false; 807b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fs.mSavedFragmentState != null) { 808b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn f.mSavedViewState = fs.mSavedFragmentState.getSparseParcelableArray( 809b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn FragmentState.VIEW_STATE_TAG); 810b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 811b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 812b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 813b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 8146e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the full list of active fragments, instantiating them from 8156e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // their saved state. 8166e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive = new ArrayList<Fragment>(fms.mActive.length); 8176e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices != null) { 8186e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.clear(); 8196e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8206e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn for (int i=0; i<fms.mActive.length; i++) { 8216e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn FragmentState fs = fms.mActive[i]; 8226e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fs != null) { 8236e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(fs.instantiate(mActivity)); 8246e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8256e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mActive.add(null); 8266e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (mAvailIndices == null) { 8276e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices = new ArrayList<Integer>(); 8286e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8296e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAvailIndices.add(i); 830b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8316e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } 8326e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 8336e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the list of currently added fragments. 8346e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (fms.mAdded != null) { 8356e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = new ArrayList<Fragment>(fms.mAdded.length); 836b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mAdded.length; i++) { 8376e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn Fragment f = mActive.get(fms.mAdded[i]); 8386e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn if (f == null) { 8396e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn throw new IllegalStateException( 8406e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn "No instantiated fragment for index #" + fms.mAdded[i]); 841b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8426e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn f.mAdded = true; 843b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn f.mImmediateActivity = mActivity; 8446e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded.add(f); 845b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8466e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8476e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mAdded = null; 848b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8496e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn 8506e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn // Build the back stack. 851b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn if (fms.mBackStack != null) { 852b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack = new ArrayList<BackStackEntry>(fms.mBackStack.length); 853b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn for (int i=0; i<fms.mBackStack.length; i++) { 854b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn BackStackEntry bse = fms.mBackStack[i].instantiate(this); 855b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn mBackStack.add(bse); 856dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn if (bse.mIndex >= 0) { 857dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn setBackStackIndex(bse.mIndex, bse); 858dd913a50cd72d6dd23c4ea437f0ebe2be05ca2e8Dianne Hackborn } 859b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 8606e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn } else { 8616e8304e57ec533e257a2496183125f257be1ff60Dianne Hackborn mBackStack = null; 862b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 863b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn } 864b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn 8652dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void attachActivity(Activity activity) { 8662dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn if (mActivity != null) throw new IllegalStateException(); 8672dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = activity; 8682dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8692dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 870b4bc78b16a05554c57508b488e21dd8eca4e13e6Dianne Hackborn public void dispatchCreate() { 871ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.CREATED, false); 8722dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8732dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 874c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn public void dispatchActivityCreated() { 875c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn moveToState(Fragment.ACTIVITY_CREATED, false); 876c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn } 877c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn 8782dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStart() { 879ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 8802dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8812dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8822dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchResume() { 883ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.RESUMED, false); 8842dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8852dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8862dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchPause() { 887ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.STARTED, false); 8882dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8892dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8902dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchStop() { 891c801768e4d29667a2608695449ebc2833ba0f200Dianne Hackborn moveToState(Fragment.ACTIVITY_CREATED, false); 8922dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 8932dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn 8942dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn public void dispatchDestroy() { 895ba51c3d02d08709e933de6f6c76dee3fd2f4bfa1Dianne Hackborn moveToState(Fragment.INITIALIZING, false); 8962dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn mActivity = null; 8972dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn } 898f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 899b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) { 900b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean show = false; 901b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (mActive != null) { 902b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn for (int i=0; i<mAdded.size(); i++) { 903b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn Fragment f = mAdded.get(i); 904b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (f != null && !f.mHidden && f.mHasMenu) { 905b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn show = true; 906b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn f.onCreateOptionsMenu(menu, inflater); 907b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 908b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 909b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 910b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return show; 911b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 912b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 913b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public boolean dispatchPrepareOptionsMenu(Menu menu) { 914b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn boolean show = false; 915b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (mActive != null) { 916b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn for (int i=0; i<mAdded.size(); i++) { 917b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn Fragment f = mAdded.get(i); 918b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (f != null && !f.mHidden && f.mHasMenu) { 919b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn show = true; 920b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn f.onPrepareOptionsMenu(menu); 921b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 922b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 923b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 924b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return show; 925b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 926b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 927b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public boolean dispatchOptionsItemSelected(MenuItem item) { 928b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (mActive != null) { 929b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn for (int i=0; i<mAdded.size(); i++) { 930b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn Fragment f = mAdded.get(i); 931b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (f != null && !f.mHidden && f.mHasMenu) { 932b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (f.onOptionsItemSelected(item)) { 933b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return true; 934b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 935b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 936b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 937b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 938b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn return false; 939b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 940b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 9415ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn public boolean dispatchContextItemSelected(MenuItem item) { 9425ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (mActive != null) { 9435ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn for (int i=0; i<mAdded.size(); i++) { 9445ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn Fragment f = mAdded.get(i); 9455ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (f != null && !f.mHidden) { 9465ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn if (f.onContextItemSelected(item)) { 9475ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return true; 9485ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 9495ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 9505ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 9515ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 9525ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn return false; 9535ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn } 9545ddd127d5a38d80c0d8087d1770f41f61f84f048Dianne Hackborn 955b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn public void dispatchOptionsMenuClosed(Menu menu) { 956b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (mActive != null) { 957b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn for (int i=0; i<mAdded.size(); i++) { 958b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn Fragment f = mAdded.get(i); 959b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn if (f != null && !f.mHidden && f.mHasMenu) { 960b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn f.onOptionsMenuClosed(menu); 961b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 962b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 963b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 964b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn } 965b31e84bc4513e46bac4be8f8d0513f78e360fb11Dianne Hackborn 966f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int reverseTransit(int transit) { 967f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int rev = 0; 968f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 969f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 970f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_EXIT; 971f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 972f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 973f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ENTER; 974f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 975f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 976f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_HIDE; 977f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 978f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 979f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_SHOW; 980f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 981f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 982f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_CLOSE; 983f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 984f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 985f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_ACTIVITY_OPEN; 986f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 987f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 988f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_CLOSE; 989f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 990f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 991f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_OPEN; 992f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 993f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 994f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_BACK; 995f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 996f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 997f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_TASK_TO_FRONT; 998f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 999f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 1000f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_CLOSE; 1001f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1002f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 1003f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_OPEN; 1004f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1005f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 1006f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE; 1007f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1008f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 1009f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn rev = FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN; 1010f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1011f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 1012f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return rev; 1013f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 1014f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 1015f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn 1016f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn public static int transitToStyleIndex(int transit, boolean enter) { 1017f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn int animAttr = -1; 1018f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn switch (transit) { 1019f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ENTER: 1020f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowEnterAnimation; 1021f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1022f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_EXIT: 1023f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowExitAnimation; 1024f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1025f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_SHOW: 1026f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowShowAnimation; 1027f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1028f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_HIDE: 1029f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = com.android.internal.R.styleable.WindowAnimation_windowHideAnimation; 1030f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1031f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_OPEN: 1032f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1033f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityOpenEnterAnimation 1034f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityOpenExitAnimation; 1035f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1036f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_ACTIVITY_CLOSE: 1037f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1038f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_activityCloseEnterAnimation 1039f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_activityCloseExitAnimation; 1040f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1041f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_OPEN: 1042f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1043f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskOpenEnterAnimation 1044f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskOpenExitAnimation; 1045f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1046f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_CLOSE: 1047f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1048f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskCloseEnterAnimation 1049f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskCloseExitAnimation; 1050f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1051f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_FRONT: 1052f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1053f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToFrontEnterAnimation 1054f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToFrontExitAnimation; 1055f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1056f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_TASK_TO_BACK: 1057f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1058f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation 1059f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation; 1060f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1061f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_OPEN: 1062f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1063f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation 1064f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation; 1065f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1066f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_CLOSE: 1067f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1068f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation 1069f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation; 1070f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1071f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_OPEN: 1072f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1073f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation 1074f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation; 1075f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1076f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn case FragmentTransaction.TRANSIT_WALLPAPER_INTRA_CLOSE: 1077f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn animAttr = enter 1078f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation 1079f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation; 1080f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn break; 1081f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 1082f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn return animAttr; 1083f121be737c59390d97e21a92be8e166001534c7dDianne Hackborn } 10842dedce6e84679ead961a485c7fe4b0f77c713b6aDianne Hackborn} 1085