1d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy/* 2d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Copyright (C) 2015 The Android Open Source Project 3d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 4d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Licensed under the Apache License, Version 2.0 (the "License"); 5d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * you may not use this file except in compliance with the License. 6d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * You may obtain a copy of the License at 7d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 8d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * http://www.apache.org/licenses/LICENSE-2.0 9d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 10d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Unless required by applicable law or agreed to in writing, software 11d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 12d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * See the License for the specific language governing permissions and 14d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * limitations under the License. 15d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 16d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 17d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedypackage android.support.v4.app; 18d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 19d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.content.Context; 20d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.content.res.Configuration; 21d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.os.Parcelable; 22d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.support.v4.util.SimpleArrayMap; 23d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.util.AttributeSet; 24d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.Menu; 25d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.MenuInflater; 26d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.MenuItem; 27d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.View; 28d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 29d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.io.FileDescriptor; 30d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.io.PrintWriter; 31d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.util.ArrayList; 32d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.util.List; 33d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 34d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy/** 358491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Provides integration points with a {@link FragmentManager} for a fragment host. 368491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p> 378491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * It is the responsibility of the host to take care of the Fragment's lifecycle. 388491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * The methods provided by {@link FragmentController} are for that purpose. 39d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 40d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedypublic class FragmentController { 418491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy private final FragmentHostCallback<?> mHost; 42d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 43d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 44d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Returns a {@link FragmentController}. 45d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 468491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy public static final FragmentController createController(FragmentHostCallback<?> callbacks) { 47d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return new FragmentController(callbacks); 48d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 49d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 508491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy private FragmentController(FragmentHostCallback<?> callbacks) { 51d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost = callbacks; 52d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 53d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 548491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 558491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Returns a {@link FragmentManager} for this controller. 568491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 57d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public FragmentManager getSupportFragmentManager() { 58d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.getFragmentManagerImpl(); 59d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 60d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 618491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 628491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Returns a {@link LoaderManager}. 638491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 64d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public LoaderManager getSupportLoaderManager() { 65d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.getLoaderManagerImpl(); 66d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 67d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 688491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 698491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Returns the number of active fragments. 708491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 71d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public int getActiveFragmentsCount() { 72d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy final List<Fragment> actives = mHost.mFragmentManager.mActive; 73d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return actives == null ? 0 : actives.size(); 74d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 75d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 768491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 778491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Returns the list of active fragments. 788491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 79d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public List<Fragment> getActiveFragments(List<Fragment> actives) { 80d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy if (mHost.mFragmentManager.mActive == null) { 81d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return null; 82d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 83d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy if (actives == null) { 84d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy actives = new ArrayList<Fragment>(getActiveFragmentsCount()); 85d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 86d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy actives.addAll(mHost.mFragmentManager.mActive); 87d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return actives; 88d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 89d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 918491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Attaches the host to the FragmentManager for this controller. The host must be 928491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * attached before the FragmentManager can be used to manage Fragments. 938491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 94d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void attachHost(Fragment parent) { 95d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.attachController( 96d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost, mHost /*container*/, parent); 97d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 98d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 998491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1008491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Instantiates a Fragment's view. 1018491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1028491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @param parent The parent that the created view will be placed 1038491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * in; <em>note that this may be null</em>. 1048491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @param name Tag name to be inflated. 1058491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @param context The context the view is being created in. 1068491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @param attrs Inflation attributes as specified in XML file. 1078491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1088491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return view the newly created view 1098491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 110d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 111d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.onCreateView(parent, name, context, attrs); 112d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 113d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 114d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 115d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Marks the fragment state as unsaved. This allows for "state loss" detection. 116d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 117d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void noteStateNotSaved() { 118d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.noteStateNotSaved(); 119d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 120d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 121d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 122d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Saves the state for all Fragments. 123d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 124d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public Parcelable saveAllState() { 125d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.saveAllState(); 126d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 127d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 128d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 129d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Restores the saved state for all Fragments. The given Fragment list are Fragment 130d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * instances retained across configuration changes. 131d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 132d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * @see #retainNonConfig() 133d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 1348491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy public void restoreAllState(Parcelable state, List<Fragment> nonConfigList) { 135d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.restoreAllState(state, nonConfigList); 136d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 137d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 138d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 139d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Returns a list of Fragments that have opted to retain their instance across 140d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * configuration changes. 141d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 1428491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy public List<Fragment> retainNonConfig() { 143d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.retainNonConfig(); 144d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 145d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1468491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1478491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1488491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the create state. 1498491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be created. 1508491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1518491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onCreate(Bundle) 1528491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 153d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchCreate() { 154d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchCreate(); 155d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 156d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1578491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1588491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1598491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the activity created state. 1608491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be informed their host has been created. 1618491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1628491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onActivityCreated(Bundle) 1638491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 164d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchActivityCreated() { 165d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchActivityCreated(); 166d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 167d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1688491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1698491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1708491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the start state. 1718491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be started. 1728491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1738491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onStart() 1748491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 175d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchStart() { 176d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchStart(); 177d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 178d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1798491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1808491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1818491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the resume state. 1828491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be resumed. 1838491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1848491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onResume() 1858491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 186d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchResume() { 187d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchResume(); 188d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 189d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1918491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1928491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the pause state. 1938491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be paused. 1948491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1958491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onPause() 1968491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 197d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchPause() { 198d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchPause(); 199d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 200d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2018491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2028491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2038491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the stop state. 2048491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be stopped. 2058491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2068491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onStop() 2078491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 208d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchStop() { 209d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchStop(); 210d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 211d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 212d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchReallyStop() { 213d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchReallyStop(); 214d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 215d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2168491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2178491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2188491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the destroy view state. 2198491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the Fragment's views should be destroyed. 2208491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2218491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onDestroyView() 2228491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 223d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchDestroyView() { 224d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchDestroyView(); 225d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 226d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2278491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2288491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2298491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the destroy state. 2308491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be destroyed. 2318491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2328491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onDestroy() 2338491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 234d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchDestroy() { 235d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchDestroy(); 236d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 237d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2388491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2398491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 2408491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know a configuration change occurred. 2418491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when there is a configuration change. 2428491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2438491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onConfigurationChanged(Configuration) 2448491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 245d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchConfigurationChanged(Configuration newConfig) { 246d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchConfigurationChanged(newConfig); 247d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 248d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2498491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2508491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 2518491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know the device is in a low memory condition. 2528491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the device is low on memory and Fragment's should trim 2538491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * their memory usage. 2548491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2558491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onLowMemory() 2568491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 257d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchLowMemory() { 258d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchLowMemory(); 259d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 260d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2618491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2628491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 2638491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know they should create an options menu. 2648491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the Fragment should create an options menu. 2658491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2668491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu contains items to display 2678491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onCreateOptionsMenu(Menu, MenuInflater) 2688491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 269d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) { 270d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchCreateOptionsMenu(menu, inflater); 271d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 272d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2738491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2748491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 2758491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know they should prepare their options menu for display. 2768491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately before displaying the Fragment's options menu. 2778491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2788491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu contains items to display 2798491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onPrepareOptionsMenu(Menu) 2808491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 281d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchPrepareOptionsMenu(Menu menu) { 282d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchPrepareOptionsMenu(menu); 283d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 284d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2858491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2868491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Sends an option item selection event to the Fragments managed by the 2878491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. Once the event has been consumed, 2888491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * no additional handling will be performed. 2898491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after an options menu item has been selected 2908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2918491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu selection event was consumed 2928491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onOptionsItemSelected(MenuItem) 2938491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 294d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchOptionsItemSelected(MenuItem item) { 295d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchOptionsItemSelected(item); 296d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 297d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2988491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2998491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Sends a context item selection event to the Fragments managed by the 3008491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. Once the event has been consumed, 3018491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * no additional handling will be performed. 3028491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after an options menu item has been selected 3038491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3048491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the context menu selection event was consumed 3058491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onContextItemSelected(MenuItem) 3068491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 307d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchContextItemSelected(MenuItem item) { 308d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchContextItemSelected(item); 309d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 310d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3118491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3128491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 3138491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know their options menu has closed. 3148491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after closing the Fragment's options menu. 3158491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3168491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onOptionsMenuClosed(Menu) 3178491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 318d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchOptionsMenuClosed(Menu menu) { 319d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchOptionsMenuClosed(menu); 320d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 321d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3228491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3238491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Execute any pending actions for the Fragments managed by the 3248491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. 3258491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when queued actions can be performed [eg when the 3268491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Fragment moves into a start or resume state]. 3278491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if queued actions were performed 3288491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 329d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean execPendingActions() { 330d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.execPendingActions(); 331d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 332d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 333edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 334edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy * Starts the loaders. 335edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 336edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderStart() { 337d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderStart(); 338d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 339d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 340d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 341d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Stops the loaders, optionally retaining their state. This is useful for keeping the 342d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * loader state across configuration changes. 343d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 344d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * @param retain When {@code true}, the loaders aren't stopped, but, their instances 345d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * are retained in a started state 346d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 347edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderStop(boolean retain) { 348d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderStop(retain); 349d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 350d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 351edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 352edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy * Retains the state of each of the loaders. 353edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 354edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderRetain() { 355d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderRetain(); 356d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 357d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 358edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 3598491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Destroys the loaders and, if their state is not being retained, removes them. 360edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 361edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderDestroy() { 362d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderDestroy(); 363d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 364d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 365edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 3668491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets the loaders know the host is ready to receive notifications. 367edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 368edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void reportLoaderStart() { 369d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.reportLoaderStart(); 370d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 371d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 372d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 373d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Returns a list of LoaderManagers that have opted to retain their instance across 374d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * configuration changes. 375d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 376d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public SimpleArrayMap<String, LoaderManager> retainLoaderNonConfig() { 377d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.retainLoaderNonConfig(); 378d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 379d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 380d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 381d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Restores the saved state for all LoaderManagers. The given LoaderManager list are 382d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * LoaderManager instances retained across configuration changes. 383d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 384d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * @see #retainLoaderNonConfig() 385d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 386d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void restoreLoaderNonConfig(SimpleArrayMap<String, LoaderManager> loaderManagers) { 387d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.restoreLoaderNonConfig(loaderManagers); 388d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 389d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3918491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Dumps the current state of the loaders. 3928491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 393d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dumpLoaders(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 394d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.dumpLoaders(prefix, fd, writer, args); 395d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 396d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy} 397