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