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