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