FragmentController.java revision a5fc6f006f67867417b7a427de6e7394c4312dec
1a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy/* 2a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Copyright (C) 2015 The Android Open Source Project 3a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 4a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Licensed under the Apache License, Version 2.0 (the "License"); 5a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * you may not use this file except in compliance with the License. 6a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * You may obtain a copy of the License at 7a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 8a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * http://www.apache.org/licenses/LICENSE-2.0 9a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 10a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Unless required by applicable law or agreed to in writing, software 11a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 12a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * See the License for the specific language governing permissions and 14a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * limitations under the License. 15a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 16a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 17a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedypackage android.app; 18a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 19a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.annotation.Nullable; 20a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.content.Context; 21a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.content.res.Configuration; 22a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.os.Bundle; 23a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.os.Parcelable; 24a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.util.ArrayMap; 25a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.util.AttributeSet; 26a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.view.Menu; 27a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.view.MenuInflater; 28a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.view.MenuItem; 29a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport android.view.View; 30a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 31a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport java.io.FileDescriptor; 32a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport java.io.PrintWriter; 33a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedyimport java.util.List; 34a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 35a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy/** 36a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Provides integration points with a {@link FragmentManager} for a fragment host. 37a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p> 38a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * It is the responsibility of the host to take care of the Fragment's lifecycle. 39a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * The methods provided by {@link FragmentController} are for that purpose. 40a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 41a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedypublic class FragmentController { 42a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy private final FragmentHostCallback<?> mHost; 43a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 44a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 45a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a {@link FragmentController}. 46a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 47a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public static final FragmentController createController(FragmentHostCallback<?> callbacks) { 48a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return new FragmentController(callbacks); 49a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 50a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 51a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy private FragmentController(FragmentHostCallback<?> callbacks) { 52a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost = callbacks; 53a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 54a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 55a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 56a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a {@link FragmentManager} for this controller. 57a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 58a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public FragmentManager getFragmentManager() { 59a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.getFragmentManagerImpl(); 60a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 61a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 62a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 63a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a {@link LoaderManager}. 64a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 65a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public LoaderManager getLoaderManager() { 66a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.getLoaderManagerImpl(); 67a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 68a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 69a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 70a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a fragment with the given identifier. 71a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 72a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy @Nullable 73a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public Fragment findFragmentByWho(String who) { 74a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.findFragmentByWho(who); 75a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 76a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 77a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 78a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Attaches the host to the FragmentManager for this controller. The host must be 79a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * attached before the FragmentManager can be used to manage Fragments. 80a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * */ 81a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void attachHost(Fragment parent) { 82a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.attachController( 83a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost, mHost /*container*/, parent); 84a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 85a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 86a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 87a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Instantiates a Fragment's view. 88a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 89a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @param parent The parent that the created view will be placed 90a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * in; <em>note that this may be null</em>. 91a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @param name Tag name to be inflated. 92a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @param context The context the view is being created in. 93a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @param attrs Inflation attributes as specified in XML file. 94a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 95a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return view the newly created view 96a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 97a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public View onCreateView(View parent, String name, Context context, AttributeSet attrs) { 98a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.onCreateView(parent, name, context, attrs); 99a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 100a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 101a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 102a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Marks the fragment state as unsaved. This allows for "state loss" detection. 103a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 104a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void noteStateNotSaved() { 105a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.noteStateNotSaved(); 106a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 107a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 108a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 109a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Saves the state for all Fragments. 110a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 111a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public Parcelable saveAllState() { 112a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.saveAllState(); 113a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 114a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 115a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 116a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Restores the saved state for all Fragments. The given Fragment list are Fragment 117a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * instances retained across configuration changes. 118a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 119a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see #retainNonConfig() 120a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 121a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void restoreAllState(Parcelable state, List<Fragment> nonConfigList) { 122a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.restoreAllState(state, nonConfigList); 123a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 124a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 125a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 126a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a list of Fragments that have opted to retain their instance across 127a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * configuration changes. 128a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 129a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public List<Fragment> retainNonConfig() { 130a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.retainNonConfig(); 131a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 132a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 133a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 134a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 135a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the create state. 136a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be created. 137a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 138a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onCreate(Bundle) 139a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 140a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchCreate() { 141a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchCreate(); 142a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 143a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 144a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 145a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 146a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the activity created state. 147a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be informed their host has been created. 148a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 149a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onActivityCreated(Bundle) 150a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 151a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchActivityCreated() { 152a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchActivityCreated(); 153a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 154a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 155a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 156a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 157a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the start state. 158a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be started. 159a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 160a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onStart() 161a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 162a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchStart() { 163a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchStart(); 164a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 165a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 166a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 167a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 168a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the resume state. 169a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be resumed. 170a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 171a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onResume() 172a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 173a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchResume() { 174a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchResume(); 175a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 176a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 177a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 178a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 179a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the pause state. 180a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be paused. 181a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 182a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onPause() 183a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 184a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchPause() { 185a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchPause(); 186a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 187a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 188a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 189a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 190a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the stop state. 191a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be stopped. 192a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 193a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onStop() 194a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 195a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchStop() { 196a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchStop(); 197a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 198a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 199a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 200a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 201a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the destroy view state. 202a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when the Fragment's views should be destroyed. 203a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 204a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onDestroyView() 205a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 206a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchDestroyView() { 207a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchDestroyView(); 208a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 209a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 210a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 211a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Moves all Fragments managed by the controller's FragmentManager 212a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * into the destroy state. 213a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when Fragments should be destroyed. 214a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 215a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onDestroy() 216a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 217a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchDestroy() { 218a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchDestroy(); 219a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 220a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 221a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 222a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 223a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know a configuration change occurred. 224a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when there is a configuration change. 225a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 226a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onConfigurationChanged(Configuration) 227a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 228a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchConfigurationChanged(Configuration newConfig) { 229a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchConfigurationChanged(newConfig); 230a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 231a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 232a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 233a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 234a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know the device is in a low memory condition. 235a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when the device is low on memory and Fragment's should trim 236a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * their memory usage. 237a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 238a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onLowMemory() 239a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 240a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchLowMemory() { 241a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchLowMemory(); 242a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 243a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 244a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 245a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 246a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know they should trim their memory usage. 247a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when the Fragment can release allocated memory [such as if 248a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * the Fragment is in the background]. 249a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 250a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onTrimMemory(int) 251a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 252a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchTrimMemory(int level) { 253a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchTrimMemory(level); 254a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 255a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 256a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 257a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 258a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know they should create an options menu. 259a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when the Fragment should create an options menu. 260a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 261a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return {@code true} if the options menu contains items to display 262a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onCreateOptionsMenu(Menu, MenuInflater) 263a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 264a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) { 265a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.dispatchCreateOptionsMenu(menu, inflater); 266a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 267a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 268a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 269a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 270a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know they should prepare their options menu for display. 271a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call immediately before displaying the Fragment's options menu. 272a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 273a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return {@code true} if the options menu contains items to display 274a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onPrepareOptionsMenu(Menu) 275a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 276a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public boolean dispatchPrepareOptionsMenu(Menu menu) { 277a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.dispatchPrepareOptionsMenu(menu); 278a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 279a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 280a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 281a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Sends an option item selection event to the Fragments managed by the 282a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * controller's FragmentManager. Once the event has been consumed, 283a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * no additional handling will be performed. 284a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call immediately after an options menu item has been selected 285a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 286a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return {@code true} if the options menu selection event was consumed 287a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onOptionsItemSelected(MenuItem) 288a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 289a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public boolean dispatchOptionsItemSelected(MenuItem item) { 290a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.dispatchOptionsItemSelected(item); 291a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 292a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 293a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 294a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Sends a context item selection event to the Fragments managed by the 295a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * controller's FragmentManager. Once the event has been consumed, 296a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * no additional handling will be performed. 297a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call immediately after an options menu item has been selected 298a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 299a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return {@code true} if the context menu selection event was consumed 300a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onContextItemSelected(MenuItem) 301a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 302a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public boolean dispatchContextItemSelected(MenuItem item) { 303a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.dispatchContextItemSelected(item); 304a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 305a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 306a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 307a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets all Fragments managed by the controller's FragmentManager 308a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * know their options menu has closed. 309a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call immediately after closing the Fragment's options menu. 310a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 311a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see Fragment#onOptionsMenuClosed(Menu) 312a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 313a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dispatchOptionsMenuClosed(Menu menu) { 314a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.mFragmentManager.dispatchOptionsMenuClosed(menu); 315a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 316a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 317a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 318a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Execute any pending actions for the Fragments managed by the 319a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * controller's FragmentManager. 320a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * <p>Call when queued actions can be performed [eg when the 321a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Fragment moves into a start or resume state]. 322a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @return {@code true} if queued actions were performed 323a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 324a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public boolean execPendingActions() { 325a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.mFragmentManager.execPendingActions(); 326a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 327a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 328a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 329a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Starts the loaders. 330a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 331a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void doLoaderStart() { 332a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.doLoaderStart(); 333a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 334a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 335a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 336a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Stops the loaders, optionally retaining their state. This is useful for keeping the 337a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * loader state across configuration changes. 338a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 339a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @param retain When {@code true}, the loaders aren't stopped, but, their instances 340a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * are retained in a started state 341a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 342a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void doLoaderStop(boolean retain) { 343a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.doLoaderStop(retain); 344a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 345a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 346a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 347a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Destroys the loaders and, if their state is not being retained, removes them. 348a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 349a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void doLoaderDestroy() { 350a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.doLoaderDestroy(); 351a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 352a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 353a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 354a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Lets the loaders know the host is ready to receive notifications. 355a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 356a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void reportLoaderStart() { 357a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.reportLoaderStart(); 358a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 359a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 360a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 361a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Returns a list of LoaderManagers that have opted to retain their instance across 362a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * configuration changes. 363a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 364a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public ArrayMap<String, LoaderManager> retainLoaderNonConfig() { 365a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy return mHost.retainLoaderNonConfig(); 366a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 367a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 368a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 369a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Restores the saved state for all LoaderManagers. The given LoaderManager list are 370a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * LoaderManager instances retained across configuration changes. 371a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * 372a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * @see #retainLoaderNonConfig() 373a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 374a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void restoreLoaderNonConfig(ArrayMap<String, LoaderManager> loaderManagers) { 375a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.restoreLoaderNonConfig(loaderManagers); 376a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 377a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy 378a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy /** 379a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy * Dumps the current state of the loaders. 380a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy */ 381a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy public void dumpLoaders(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 382a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy mHost.dumpLoaders(prefix, fd, writer, args); 383a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy } 384a5fc6f006f67867417b7a427de6e7394c4312decTodd Kennedy} 385