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; 22a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnickimport android.support.annotation.Nullable; 23d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.support.v4.util.SimpleArrayMap; 24d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.util.AttributeSet; 25d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.Menu; 26d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.MenuInflater; 27d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.MenuItem; 28d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport android.view.View; 29d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 30d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.io.FileDescriptor; 31d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedyimport java.io.PrintWriter; 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 /** 69a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick * Returns a fragment with the given identifier. 70a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick */ 71a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick @Nullable 72470243f1dda6e10d8157712905c5d08b47f4fbecAbhinav Baid public Fragment findFragmentByWho(String who) { 73a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick return mHost.mFragmentManager.findFragmentByWho(who); 74a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick } 75a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick 76a76a4339be2f27431a167381187c3f0b0d08f1b7Daniel Resnick /** 77470243f1dda6e10d8157712905c5d08b47f4fbecAbhinav Baid * Returns the number of active fragments. 788491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 79d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public int getActiveFragmentsCount() { 8090b15311c0461be519432794b7f8e8132fb7a72cGeorge Mount return mHost.mFragmentManager.getActiveFragmentCount(); 81d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 82d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 838491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 848491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Returns the list of active fragments. 858491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 86d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public List<Fragment> getActiveFragments(List<Fragment> actives) { 8790b15311c0461be519432794b7f8e8132fb7a72cGeorge Mount return mHost.mFragmentManager.getActiveFragments(); 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() 133c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * 134c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * @deprecated use {@link #restoreAllState(Parcelable, FragmentManagerNonConfig)} 135d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 136d805095048f6be52cddbd572ee343c4639ba8187Alan Viverette @Deprecated 1378491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy public void restoreAllState(Parcelable state, List<Fragment> nonConfigList) { 138c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell mHost.mFragmentManager.restoreAllState(state, 139c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell new FragmentManagerNonConfig(nonConfigList, null)); 140c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell } 141c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell 142c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell /** 143c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * Restores the saved state for all Fragments. The given FragmentManagerNonConfig are Fragment 144c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * instances retained across configuration changes, including nested fragments 145c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * 146c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * @see #retainNestedNonConfig() 147c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell */ 148c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell public void restoreAllState(Parcelable state, FragmentManagerNonConfig nonConfig) { 149c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell mHost.mFragmentManager.restoreAllState(state, nonConfig); 150d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 151d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 152d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 153d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Returns a list of Fragments that have opted to retain their instance across 154d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * configuration changes. 155c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * 156c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * @deprecated use {@link #retainNestedNonConfig()} to also track retained 157c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * nested child fragments 158d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 159d805095048f6be52cddbd572ee343c4639ba8187Alan Viverette @Deprecated 1608491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy public List<Fragment> retainNonConfig() { 161c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell FragmentManagerNonConfig nonconf = mHost.mFragmentManager.retainNonConfig(); 162c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell return nonconf != null ? nonconf.getFragments() : null; 163c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell } 164c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell 165c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell /** 166c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * Returns a nested tree of Fragments that have opted to retain their instance across 167c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell * configuration changes. 168c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell */ 169c077b4cd990a9f220a27ad5eca04828e17136064Adam Powell public FragmentManagerNonConfig retainNestedNonConfig() { 170d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.retainNonConfig(); 171d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 172d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1738491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1748491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1758491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the create state. 1768491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be created. 1778491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1788491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onCreate(Bundle) 1798491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 180d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchCreate() { 181d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchCreate(); 182d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 183d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1848491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1858491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1868491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the activity created state. 1878491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be informed their host has been created. 1888491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 1898491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onActivityCreated(Bundle) 1908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 191d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchActivityCreated() { 192d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchActivityCreated(); 193d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 194d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 1958491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 1968491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 1978491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the start state. 1988491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be started. 1998491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2008491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onStart() 2018491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 202d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchStart() { 203d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchStart(); 204d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 205d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2068491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2078491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2088491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the resume state. 2098491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be resumed. 2108491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2118491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onResume() 2128491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 213d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchResume() { 214d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchResume(); 215d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 216d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2178491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2188491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2198491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the pause state. 2208491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be paused. 2218491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2228491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onPause() 2238491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 224d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchPause() { 225d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchPause(); 226d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 227d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2288491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2298491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2308491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the stop state. 2318491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be stopped. 2328491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2338491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onStop() 2348491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 235d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchStop() { 236d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchStop(); 237d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 238d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 239d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchReallyStop() { 240d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchReallyStop(); 241d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 242d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2438491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2448491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2458491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the destroy view state. 2468491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the Fragment's views should be destroyed. 2478491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2488491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onDestroyView() 2498491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 250d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchDestroyView() { 251d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchDestroyView(); 252d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 253d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2548491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2558491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Moves all Fragments managed by the controller's FragmentManager 2568491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * into the destroy state. 2578491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when Fragments should be destroyed. 2588491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2598491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onDestroy() 2608491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 261d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchDestroy() { 262d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchDestroy(); 263d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 264d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2658491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2665fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * Lets all Fragments managed by the controller's FragmentManager know the multi-window mode of 2675fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * the activity changed. 2685fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * <p>Call when the multi-window mode of the activity changed. 2695fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * 2705fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * @see Fragment#onMultiWindowModeChanged 2715fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian */ 2725fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian public void dispatchMultiWindowModeChanged(boolean isInMultiWindowMode) { 2735fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian mHost.mFragmentManager.dispatchMultiWindowModeChanged(isInMultiWindowMode); 2745fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian } 2755fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian 2765fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian /** 2775fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * Lets all Fragments managed by the controller's FragmentManager know the picture-in-picture 2785fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * mode of the activity changed. 2795fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * <p>Call when the picture-in-picture mode of the activity changed. 2805fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * 2815fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian * @see Fragment#onPictureInPictureModeChanged 2825fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian */ 2835fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian public void dispatchPictureInPictureModeChanged(boolean isInPictureInPictureMode) { 2845fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian mHost.mFragmentManager.dispatchPictureInPictureModeChanged(isInPictureInPictureMode); 2855fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian } 2865fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian 2875fa6d3dd3f408ceb2ff7368fd0259713d9382ad8Andrii Kulian /** 2888491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 2898491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know a configuration change occurred. 2908491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when there is a configuration change. 2918491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 2928491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onConfigurationChanged(Configuration) 2938491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 294d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchConfigurationChanged(Configuration newConfig) { 295d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchConfigurationChanged(newConfig); 296d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 297d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 2988491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 2998491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 3008491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know the device is in a low memory condition. 3018491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the device is low on memory and Fragment's should trim 3028491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * their memory usage. 3038491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3048491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onLowMemory() 3058491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 306d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchLowMemory() { 307d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchLowMemory(); 308d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 309d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3108491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3118491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 3128491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know they should create an options menu. 3138491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when the Fragment should create an options menu. 3148491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3158491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu contains items to display 3168491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onCreateOptionsMenu(Menu, MenuInflater) 3178491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 318d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchCreateOptionsMenu(Menu menu, MenuInflater inflater) { 319d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchCreateOptionsMenu(menu, inflater); 320d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 321d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3228491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3238491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 3248491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know they should prepare their options menu for display. 3258491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately before displaying the Fragment's options menu. 3268491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3278491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu contains items to display 3288491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onPrepareOptionsMenu(Menu) 3298491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 330d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchPrepareOptionsMenu(Menu menu) { 331d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchPrepareOptionsMenu(menu); 332d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 333d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3348491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3358491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Sends an option item selection event to the Fragments managed by the 3368491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. Once the event has been consumed, 3378491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * no additional handling will be performed. 3388491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after an options menu item has been selected 3398491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3408491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the options menu selection event was consumed 3418491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onOptionsItemSelected(MenuItem) 3428491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 343d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchOptionsItemSelected(MenuItem item) { 344d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchOptionsItemSelected(item); 345d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 346d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3478491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3488491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Sends a context item selection event to the Fragments managed by the 3498491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. Once the event has been consumed, 3508491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * no additional handling will be performed. 3518491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after an options menu item has been selected 3528491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3538491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if the context menu selection event was consumed 3548491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onContextItemSelected(MenuItem) 3558491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 356d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean dispatchContextItemSelected(MenuItem item) { 357d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.dispatchContextItemSelected(item); 358d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 359d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3608491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3618491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets all Fragments managed by the controller's FragmentManager 3628491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * know their options menu has closed. 3638491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call immediately after closing the Fragment's options menu. 3648491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * 3658491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @see Fragment#onOptionsMenuClosed(Menu) 3668491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 367d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dispatchOptionsMenuClosed(Menu menu) { 368d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.mFragmentManager.dispatchOptionsMenuClosed(menu); 369d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 370d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 3718491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 3728491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Execute any pending actions for the Fragments managed by the 3738491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * controller's FragmentManager. 3748491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * <p>Call when queued actions can be performed [eg when the 3758491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Fragment moves into a start or resume state]. 3768491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * @return {@code true} if queued actions were performed 3778491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 378d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public boolean execPendingActions() { 379d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.mFragmentManager.execPendingActions(); 380d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 381d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 382edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 383edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy * Starts the loaders. 384edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 385edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderStart() { 386d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderStart(); 387d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 388d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 389d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 390d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Stops the loaders, optionally retaining their state. This is useful for keeping the 391d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * loader state across configuration changes. 392d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 393d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * @param retain When {@code true}, the loaders aren't stopped, but, their instances 394d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * are retained in a started state 395d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 396edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderStop(boolean retain) { 397d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderStop(retain); 398d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 399d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 400edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 401edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy * Retains the state of each of the loaders. 402edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 403edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderRetain() { 404d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderRetain(); 405d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 406d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 407edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 4088491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Destroys the loaders and, if their state is not being retained, removes them. 409edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 410edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void doLoaderDestroy() { 411d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.doLoaderDestroy(); 412d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 413d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 414edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy /** 4158491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Lets the loaders know the host is ready to receive notifications. 416edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy */ 417edaa101bfa72b5e5a5b14b9e6c66579eaed5e8ccTodd Kennedy public void reportLoaderStart() { 418d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.reportLoaderStart(); 419d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 420d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 421d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 422d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Returns a list of LoaderManagers that have opted to retain their instance across 423d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * configuration changes. 424d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 425d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public SimpleArrayMap<String, LoaderManager> retainLoaderNonConfig() { 426d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy return mHost.retainLoaderNonConfig(); 427d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 428d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 429d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy /** 430d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * Restores the saved state for all LoaderManagers. The given LoaderManager list are 431d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * LoaderManager instances retained across configuration changes. 432d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * 433d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy * @see #retainLoaderNonConfig() 434d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy */ 435d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void restoreLoaderNonConfig(SimpleArrayMap<String, LoaderManager> loaderManagers) { 436d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.restoreLoaderNonConfig(loaderManagers); 437d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 438d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy 4398491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy /** 4408491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy * Dumps the current state of the loaders. 4418491eb62f621cd5de4b4caed839be09c77011f53Todd Kennedy */ 442d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy public void dumpLoaders(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { 443d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy mHost.dumpLoaders(prefix, fd, writer, args); 444d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy } 445d608cf6e08769bf320c1b595cbbd9a7664160449Todd Kennedy} 446