1a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/*******************************************************************************
2a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      Copyright (C) 2012 Google Inc.
3a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      Licensed to The Android Open Source Project.
4a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *
5a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      Licensed under the Apache License, Version 2.0 (the "License");
6a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      you may not use this file except in compliance with the License.
7a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      You may obtain a copy of the License at
8a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *
9a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *           http://www.apache.org/licenses/LICENSE-2.0
10a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *
11a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      Unless required by applicable law or agreed to in writing, software
12a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      distributed under the License is distributed on an "AS IS" BASIS,
13a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      See the License for the specific language governing permissions and
15a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *      limitations under the License.
16a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal *******************************************************************************/
17a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
18a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalpackage com.android.mail.ui;
19a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
20a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.app.Dialog;
21a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.content.Intent;
2257246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrookimport android.content.res.Configuration;
23a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.os.Bundle;
2474470048daf58bc4e14130e9c8adec2db78c8163Tony Mantlerimport android.support.annotation.LayoutRes;
25a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.view.KeyEvent;
26a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.view.Menu;
27a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.view.MenuItem;
28a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwalimport android.view.MotionEvent;
2953de448d6c67e56df4e3bcefb3e2d84c810e2e89Andrew Sappersteinimport android.view.View;
30a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
31531488ed848766708252a5fdc01c4ecf0fd167d1Vikram Aggarwalimport com.android.mail.browse.ConversationCursor.ConversationListener;
324969e0c5f8ab837e1b0d29ea56d220e6404e9250Paul Westbrookimport com.android.mail.browse.ConversationListFooterView;
33acf6039a23382f18c35f6b487d90d53cb67b5858Mindy Pereiraimport com.android.mail.providers.Folder;
34bf232c3735f65b1a4746943e4a134e59e36f0bdePaul Westbrookimport com.android.mail.ui.ViewMode.ModeChangeListener;
35a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
36a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal/**
37a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * An Activity controller knows how to combine views and listeners into a functioning activity.
38a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * ActivityControllers are delegates that implement methods by calling underlying views to modify,
39a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal * or respond to user action.
40aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *
41aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal * There are two ways of adding methods to this interface:
42aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal * <ul>
43aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     <li>When the methods pertain to a single logical grouping: consider adding a new
44aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     interface and putting all the methods in that interface. As an example,
45aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     look at {@link AccountController}. The controller implements this,
46aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     and returns itself in
47aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     {@link com.android.mail.ui.ControllableActivity#getAccountController()}. This allows
48aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     for account-specific methods to be added without creating new methods in this interface
49aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     .</li>
50aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     <li>Methods that relate to an activity can be added directly. As an example,
51aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     look at {@link #onActivityResult(int, int, android.content.Intent)} which is identical to
52aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     its declaration in {@link android.app.Activity}.</li>
53aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     <li>Everything else. As an example, look at {@link #isDrawerEnabled()}. Try to avoid
54aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     this path because an implementation has to provided in many classes:
55aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal *     {@link MailActivity}, {@link FolderSelectionActivity}, and the controllers.</li>
56aa941d7e107f7ce09838bd4daf295259d126dfa2Vikram Aggarwal * </ul>
57a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal */
585895f7b0e5fa921f6d46bbaf6d8c7b1a8ebc7804Andy Huangpublic interface ActivityController extends LayoutListener,
59531488ed848766708252a5fdc01c4ecf0fd167d1Vikram Aggarwal        ModeChangeListener, ConversationListCallbacks,
60405a344937675f57fc9c6988b2b124410a270f13Jin Cao        ConversationSetObserver, ConversationListener, FolderSelector,
61a57da3c151ae174bc8621af79f3f09392ed90953Ray Chen        UndoListener, ConversationUpdater, ErrorListener, FolderController, AccountController,
6258cad2eea744d41a11c0124e91308e38108d242eVikram Aggarwal        ConversationPositionTracker.Callbacks, ConversationListFooterView.FooterViewClickListener,
630b69338a45faa422ccba8faf64c9816c55d33e4aJin Cao        RecentFolderController, FragmentLauncher, KeyboardNavigationController {
64a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
65a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    // As far as possible, the methods here that correspond to Activity lifecycle have the same name
66a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    // as their counterpart in the Activity lifecycle.
67a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
68a799795e91b2a8049914c4559fa2a89fc0133faaVikram Aggarwal
69a799795e91b2a8049914c4559fa2a89fc0133faaVikram Aggarwal    /**
70a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onActivityResult
71a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param requestCode
72a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param resultCode
73a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param data
74a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
75a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onActivityResult(int requestCode, int resultCode, Intent data);
76a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
77a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
781ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal     * Called by the Mail activity when the back button is pressed. Returning true consumes the
791ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal     * event and disallows the calling method from trying to handle the back button any other way.
801ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal     *
81a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onBackPressed()
821ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal     * @return true if the back press was handled and the event was consumed. Return false if the
831ddcf0f2bf44d3c9db89112ef52510d9b2433ac4Vikram Aggarwal     * event was not consumed.
84a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
85a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    boolean onBackPressed();
86a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
87a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
88a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called when the root activity calls onCreate. Any initialization needs to
89d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal     * be done here. Subclasses need to call their parents' onCreate method, since it performs
90d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal     * valuable initialization common to all subclasses.
91d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal     *
92d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal     * This was called initialize in Gmail.
93a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     *
94a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onCreate
95a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param savedState
96a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
9787a8982af83168453b6dc219fe984bff68047bebAndy Huang    void onCreate(Bundle savedState);
98a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
99a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
10057246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook     * @see android.app.Activity#onPostCreate
10157246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook     */
10257246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook    void onPostCreate(Bundle savedState);
10357246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook
10457246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook    /**
10557246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook     * @see android.app.Activity#onConfigurationChanged
10657246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook     */
10757246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook    void onConfigurationChanged(Configuration newConfig);
10857246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook
10957246a4bf94e8b440c0597fa4a8e4f4e8a46532aPaul Westbrook    /**
1101ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang     * @see android.app.Activity#onStart
1111ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang     */
1121ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang    void onStart();
1131ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang
1141ee96b2b100546b5b69ad42c5bc3755a4293d1a3Andy Huang    /**
11500179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein     * Called when the the root activity calls onRestart
11600179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein     * @see android.app.Activity#onRestart
11700179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein     */
11800179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein    void onRestart();
11900179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein
12000179f19e413461498599ab7e6eb6914cc5c3671Andrew Sapperstein    /**
121a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onCreateDialog(int, Bundle)
122a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param id
123a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param bundle
124a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @return
125a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
126a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    Dialog onCreateDialog(int id, Bundle bundle);
127a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
128a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
129a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onCreateOptionsMenu(Menu)
130a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param menu
131a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @return
132a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
133a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    boolean onCreateOptionsMenu(Menu menu);
134a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
135a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
136a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onKeyDown(int, KeyEvent)
137a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param keyCode
138a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param event
139a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @return
140a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
141a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    boolean onKeyDown(int keyCode, KeyEvent event);
142a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
143a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
144a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by Mail activity when menu items are selected
145a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onOptionsItemSelected(MenuItem)
146a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param item
147a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @return
148a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
149a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    boolean onOptionsItemSelected(MenuItem item);
150a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
151a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
152a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by the Mail activity on Activity pause.
153a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onPause
154a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
155a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onPause();
156a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
157a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
158632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang     * @see android.app.Activity#onDestroy
159632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang     */
160632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang    void onDestroy();
161632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang
162632721e6b3a9ba8c476456f2e0fb1b564561e0b5Andy Huang    /**
163a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onPrepareDialog
164a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param id
165a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param dialog
166a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param bundle
167a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
168a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onPrepareDialog(int id, Dialog dialog, Bundle bundle);
169a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
170a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
171a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by the Mail activity when menu items need to be prepared.
172a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onPrepareOptionsMenu(Menu)
173a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param menu
174a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @return
175a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
17687a8982af83168453b6dc219fe984bff68047bebAndy Huang    void onPrepareOptionsMenu(Menu menu);
177a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
178a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
179a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by the Mail activity on Activity resume.
180a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onResume
181a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
182a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onResume();
183a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
184a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
185b1c34dc418e31ae0bfe1b73b6642ed42f5dad67bAndy Huang     * @see android.app.Activity#onRestoreInstanceState
186b1c34dc418e31ae0bfe1b73b6642ed42f5dad67bAndy Huang     */
187b1c34dc418e31ae0bfe1b73b6642ed42f5dad67bAndy Huang    void onRestoreInstanceState(Bundle savedInstanceState);
188b1c34dc418e31ae0bfe1b73b6642ed42f5dad67bAndy Huang
189b1c34dc418e31ae0bfe1b73b6642ed42f5dad67bAndy Huang    /**
190a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onSaveInstanceState
191a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param outState
192a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
193a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onSaveInstanceState(Bundle outState);
194a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
195a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
196313ac13095a386be366bd25f8106fbb34b4a7098Andy Huang     * Begin a search with the given query string.
197a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
198313ac13095a386be366bd25f8106fbb34b4a7098Andy Huang    void executeSearch(String query);
199a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
200a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
201a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by the Mail activity on Activity stop.
202a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onStop
203a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
204a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onStop();
205a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
206a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    /**
207a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * Called by the Mail activity when window focus changes.
208a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @see android.app.Activity#onWindowFocusChanged(boolean)
209a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     * @param hasFocus
210a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal     */
211a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal    void onWindowFocusChanged(boolean hasFocus);
212a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal
213d7a12cd5b5c2639b653d8c671b04844ef02ee01dVikram Aggarwal    /**
214674afa42682908640167fc6109b76f6f843e6fbeMindy Pereira     * Handle a touch event.
215674afa42682908640167fc6109b76f6f843e6fbeMindy Pereira     */
216674afa42682908640167fc6109b76f6f843e6fbeMindy Pereira    void onTouchEvent(MotionEvent event);
217efe3d25aa19da172fd5c3ec39539cdd91f29e927Mindy Pereira
218efe3d25aa19da172fd5c3ec39539cdd91f29e927Mindy Pereira    /**
219b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira     * Returns whether the first conversation in the conversation list should be
220b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira     * automatically selected and shown.
221b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira     */
222b849dfbda3c917f078a5c09f03906886c27ecbecMindy Pereira    boolean shouldShowFirstConversation();
223967ede63e059810d9d4d425c50111d606014c893Mindy Pereira
22448b2a6c5fe209f0603fdf85d35cf399f7f7d462eVikram Aggarwal    /**
22548b2a6c5fe209f0603fdf85d35cf399f7f7d462eVikram Aggarwal     * Get the selected set of conversations. Guaranteed to return non-null, this should return
22648b2a6c5fe209f0603fdf85d35cf399f7f7d462eVikram Aggarwal     * an empty set if no conversation is currently selected.
22748b2a6c5fe209f0603fdf85d35cf399f7f7d462eVikram Aggarwal     * @return
22848b2a6c5fe209f0603fdf85d35cf399f7f7d462eVikram Aggarwal     */
229ec0fa48764bede0772e9c711f3e33361b62f3608Jin Cao    public ConversationCheckedSet getCheckedSet();
230fd0c2974af56ad244006faab2651e054974a4b7bMindy Pereira
231fd0c2974af56ad244006faab2651e054974a4b7bMindy Pereira    /**
232fd0c2974af56ad244006faab2651e054974a4b7bMindy Pereira     * Start search mode if the account being view supports the search capability.
233fd0c2974af56ad244006faab2651e054974a4b7bMindy Pereira     */
234fd0c2974af56ad244006faab2651e054974a4b7bMindy Pereira    void startSearch();
235acf6039a23382f18c35f6b487d90d53cb67b5858Mindy Pereira
236acf6039a23382f18c35f6b487d90d53cb67b5858Mindy Pereira    /**
23723aadfd1c83e08b6723d4cb9357b2908cc464a86Mindy Pereira     * Return the folder currently being viewed by the activity.
23823aadfd1c83e08b6723d4cb9357b2908cc464a86Mindy Pereira     */
239c975e8416b64a1ebdec6adee7e65dd1d0928e8d4Mindy Pereira    public Folder getHierarchyFolder();
240c975e8416b64a1ebdec6adee7e65dd1d0928e8d4Mindy Pereira
241c975e8416b64a1ebdec6adee7e65dd1d0928e8d4Mindy Pereira    /**
242cff1aeaff92efb9f7a03203d9f757a2820b87686Paul Westbrook     * Handles the animation end of the animated adapter.
243cff1aeaff92efb9f7a03203d9f757a2820b87686Paul Westbrook     */
244cff1aeaff92efb9f7a03203d9f757a2820b87686Paul Westbrook    void onAnimationEnd(AnimatedAdapter animatedAdapter);
2455390fcabb7baf683fc14bd68d8612913dac70a81mindyp
2465390fcabb7baf683fc14bd68d8612913dac70a81mindyp    /**
247ca87de41285bde382a894b6cb2d13c112c5d7a2fmindyp     * Called when Accessibility is enabled or disabled.
248ca87de41285bde382a894b6cb2d13c112c5d7a2fmindyp     */
249ca87de41285bde382a894b6cb2d13c112c5d7a2fmindyp    void onAccessibilityStateChanged();
2508c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook
2518c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook    /**
2528c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook     * Called to determine if the drawer is enabled for this controller/activity instance.
2538c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook     * Note: the value returned should not change for this controller instance.
2548c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook     */
2558c887ef97607ad5c2c94d1d3b902afe6d5ef95a0Paul Westbrook    boolean isDrawerEnabled();
2565747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein
2575747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein    /**
2585747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein     * Called to determine if menu items in the action bar should be hidden.
2595747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein     * Currently this is used for when the drawer is open to hide certain
2605747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein     * items that are not applicable while the drawer is open.
2615747e152fa606c20261b18431f4a9f0ff3be7b5aAndrew Sapperstein     */
26253de448d6c67e56df4e3bcefb3e2d84c810e2e89Andrew Sapperstein    boolean shouldHideMenuItems();
26361f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang
26461f26c2d1c1d3735cf883b58fe7e45550bb1a54cAndy Huang    DrawerController getDrawerController();
26574470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler
26674470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler    /**
26774470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler     * Called to determine the layout resource to use for the activity's content view.
26874470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler     * @return Resource ID
26974470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler     */
27074470048daf58bc4e14130e9c8adec2db78c8163Tony Mantler    @LayoutRes int getContentViewResource();
27153de448d6c67e56df4e3bcefb3e2d84c810e2e89Andrew Sapperstein
27253de448d6c67e56df4e3bcefb3e2d84c810e2e89Andrew Sapperstein    View.OnClickListener getNavigationViewClickListener();
273c6801eb828627c37b8992584767c095dfe11df62Jin Cao
274090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao    /**
275090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     * If the search bar should always be visible on top of the screen (e.g. search result list).
2767b45ff8538067edafe6b3d445e3880cd4858d267Jin Cao     * @param viewMode the new view mode. This is passed as a parameter because we don't know
2777b45ff8538067edafe6b3d445e3880cd4858d267Jin Cao     *   which onViewModeChanged callback gets called first, so the view modes might differ.
278090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     */
2797b45ff8538067edafe6b3d445e3880cd4858d267Jin Cao    boolean shouldShowSearchBarByDefault(int viewMode);
280090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao
281090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao    /**
282090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     * If we should show the search menu item.
283090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     */
284090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao    boolean shouldShowSearchMenuItem();
285090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao
286090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao    /**
287090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     * Attach layout listener so our custom toolbar can listen to thread list layout events.
288090ea0188eec1cd29d84d5890cbba6aebfa6b6ceJin Cao     */
289524ded5f9d27dda75c53d256922a39c867857575Jin Cao    void addConversationListLayoutListener(TwoPaneLayout.ConversationListLayoutListener listener);
290a55b36cb6b75ce8096812183651e89115300975aVikram Aggarwal}
291