• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  *      Copyright (C) 2012 Google Inc.
3  *      Licensed to The Android Open Source Project.
4  *
5  *      Licensed under the Apache License, Version 2.0 (the "License");
6  *      you may not use this file except in compliance with the License.
7  *      You may obtain a copy of the License at
8  *
9  *           http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *      Unless required by applicable law or agreed to in writing, software
12  *      distributed under the License is distributed on an "AS IS" BASIS,
13  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *      See the License for the specific language governing permissions and
15  *      limitations under the License.
16  *******************************************************************************/
17 
18 package com.android.mail.ui;
19 
20 import android.app.Dialog;
21 import android.content.Intent;
22 import android.content.res.Configuration;
23 import android.os.Bundle;
24 import android.support.annotation.LayoutRes;
25 import android.view.DragEvent;
26 import android.view.KeyEvent;
27 import android.view.Menu;
28 import android.view.MenuItem;
29 import android.view.MotionEvent;
30 import android.view.View;
31 
32 import com.android.mail.ConversationListContext;
33 import com.android.mail.browse.ConversationCursor.ConversationListener;
34 import com.android.mail.browse.ConversationListFooterView;
35 import com.android.mail.providers.Account;
36 import com.android.mail.providers.Folder;
37 import com.android.mail.ui.ViewMode.ModeChangeListener;
38 
39 /**
40  * An Activity controller knows how to combine views and listeners into a functioning activity.
41  * ActivityControllers are delegates that implement methods by calling underlying views to modify,
42  * or respond to user action.
43  *
44  * There are two ways of adding methods to this interface:
45  * <ul>
46  *     <li>When the methods pertain to a single logical grouping: consider adding a new
47  *     interface and putting all the methods in that interface. As an example,
48  *     look at {@link AccountController}. The controller implements this,
49  *     and returns itself in
50  *     {@link com.android.mail.ui.ControllableActivity#getAccountController()}. This allows
51  *     for account-specific methods to be added without creating new methods in this interface
52  *     .</li>
53  *     <li>Methods that relate to an activity can be added directly. As an example,
54  *     look at {@link #onActivityResult(int, int, android.content.Intent)} which is identical to
55  *     its declaration in {@link android.app.Activity}.</li>
56  *     <li>Everything else. As an example, look at {@link #isDrawerEnabled()}. Try to avoid
57  *     this path because an implementation has to provided in many classes:
58  *     {@link MailActivity}, {@link FolderSelectionActivity}, and the controllers.</li>
59  * </ul>
60  */
61 public interface ActivityController extends LayoutListener,
62         ModeChangeListener, ConversationListCallbacks,
63         FolderChangeListener, ConversationSetObserver, ConversationListener, FolderSelector,
64         UndoListener, ConversationUpdater, ErrorListener, FolderController, AccountController,
65         ConversationPositionTracker.Callbacks, ConversationListFooterView.FooterViewClickListener,
66         RecentFolderController, FragmentLauncher, KeyboardNavigationController {
67 
68     // As far as possible, the methods here that correspond to Activity lifecycle have the same name
69     // as their counterpart in the Activity lifecycle.
70 
71     /**
72      * Returns the current account.
73      */
getCurrentAccount()74     Account getCurrentAccount();
75 
76     /**
77      * Returns the current conversation list context.
78      */
getCurrentListContext()79     ConversationListContext getCurrentListContext();
80 
81     /**
82      * @see android.app.Activity#onActivityResult
83      * @param requestCode
84      * @param resultCode
85      * @param data
86      */
onActivityResult(int requestCode, int resultCode, Intent data)87     void onActivityResult(int requestCode, int resultCode, Intent data);
88 
89     /**
90      * Called by the Mail activity when the back button is pressed. Returning true consumes the
91      * event and disallows the calling method from trying to handle the back button any other way.
92      *
93      * @see android.app.Activity#onBackPressed()
94      * @return true if the back press was handled and the event was consumed. Return false if the
95      * event was not consumed.
96      */
onBackPressed()97     boolean onBackPressed();
98 
99     /**
100      * Called by the Mail activity when the up button is pressed.
101      * @return
102      */
onUpPressed()103     boolean onUpPressed();
104 
105     /**
106      * Called when the root activity calls onCreate. Any initialization needs to
107      * be done here. Subclasses need to call their parents' onCreate method, since it performs
108      * valuable initialization common to all subclasses.
109      *
110      * This was called initialize in Gmail.
111      *
112      * @see android.app.Activity#onCreate
113      * @param savedState
114      * @return true if the controller was able to initialize successfully, false otherwise.
115      */
onCreate(Bundle savedState)116     boolean onCreate(Bundle savedState);
117 
118     /**
119      * @see android.app.Activity#onPostCreate
120      */
onPostCreate(Bundle savedState)121     void onPostCreate(Bundle savedState);
122 
123     /**
124      * @see android.app.Activity#onConfigurationChanged
125      */
onConfigurationChanged(Configuration newConfig)126     void onConfigurationChanged(Configuration newConfig);
127 
128     /**
129      * @see android.app.Activity#onStart
130      */
onStart()131     void onStart();
132 
133     /**
134      * Called when the the root activity calls onRestart
135      * @see android.app.Activity#onRestart
136      */
onRestart()137     void onRestart();
138 
139     /**
140      * @see android.app.Activity#onCreateDialog(int, Bundle)
141      * @param id
142      * @param bundle
143      * @return
144      */
onCreateDialog(int id, Bundle bundle)145     Dialog onCreateDialog(int id, Bundle bundle);
146 
147     /**
148      * @see android.app.Activity#onCreateOptionsMenu(Menu)
149      * @param menu
150      * @return
151      */
onCreateOptionsMenu(Menu menu)152     boolean onCreateOptionsMenu(Menu menu);
153 
154     /**
155      * @see android.app.Activity#onKeyDown(int, KeyEvent)
156      * @param keyCode
157      * @param event
158      * @return
159      */
onKeyDown(int keyCode, KeyEvent event)160     boolean onKeyDown(int keyCode, KeyEvent event);
161 
162     /**
163      * Called by Mail activity when menu items are selected
164      * @see android.app.Activity#onOptionsItemSelected(MenuItem)
165      * @param item
166      * @return
167      */
onOptionsItemSelected(MenuItem item)168     boolean onOptionsItemSelected(MenuItem item);
169 
170     /**
171      * Called by the Mail activity on Activity pause.
172      * @see android.app.Activity#onPause
173      */
onPause()174     void onPause();
175 
176     /**
177      * @see android.app.Activity#onDestroy
178      */
onDestroy()179     void onDestroy();
180 
181     /**
182      * @see android.app.Activity#onPrepareDialog
183      * @param id
184      * @param dialog
185      * @param bundle
186      */
onPrepareDialog(int id, Dialog dialog, Bundle bundle)187     void onPrepareDialog(int id, Dialog dialog, Bundle bundle);
188 
189     /**
190      * Called by the Mail activity when menu items need to be prepared.
191      * @see android.app.Activity#onPrepareOptionsMenu(Menu)
192      * @param menu
193      * @return
194      */
onPrepareOptionsMenu(Menu menu)195     boolean onPrepareOptionsMenu(Menu menu);
196 
197     /**
198      * Called by the Mail activity on Activity resume.
199      * @see android.app.Activity#onResume
200      */
onResume()201     void onResume();
202 
203     /**
204      * @see android.app.Activity#onRestoreInstanceState
205      */
onRestoreInstanceState(Bundle savedInstanceState)206     void onRestoreInstanceState(Bundle savedInstanceState);
207 
208     /**
209      * @see android.app.Activity#onSaveInstanceState
210      * @param outState
211      */
onSaveInstanceState(Bundle outState)212     void onSaveInstanceState(Bundle outState);
213 
214     /**
215      * Begin a search with the given query string.
216      */
executeSearch(String query)217     void executeSearch(String query);
218 
219     /**
220      * Called by the Mail activity on Activity stop.
221      * @see android.app.Activity#onStop
222      */
onStop()223     void onStop();
224 
225     /**
226      * Called by the Mail activity when window focus changes.
227      * @see android.app.Activity#onWindowFocusChanged(boolean)
228      * @param hasFocus
229      */
onWindowFocusChanged(boolean hasFocus)230     void onWindowFocusChanged(boolean hasFocus);
231 
232     /**
233      * Show the conversation List with the list context provided here. On certain layouts, this
234      * might show more than just the conversation list. For instance, on tablets this might show
235      * the conversations along with the conversation list.
236      * @param listContext context providing information on what conversation list to display.
237      */
showConversationList(ConversationListContext listContext)238     void showConversationList(ConversationListContext listContext);
239 
240     /**
241      * Show the wait for account initialization mode.
242      */
showWaitForInitialization()243     public void showWaitForInitialization();
244 
245     /**
246      * Handle a touch event.
247      */
onTouchEvent(MotionEvent event)248     void onTouchEvent(MotionEvent event);
249 
250     /**
251      * Returns whether the first conversation in the conversation list should be
252      * automatically selected and shown.
253      */
shouldShowFirstConversation()254     boolean shouldShowFirstConversation();
255 
256     /**
257      * Get the selected set of conversations. Guaranteed to return non-null, this should return
258      * an empty set if no conversation is currently selected.
259      * @return
260      */
getSelectedSet()261     public ConversationSelectionSet getSelectedSet();
262 
263     /**
264      * Start search mode if the account being view supports the search capability.
265      */
startSearch()266     void startSearch();
267 
268     /**
269      * Exit the search mode, popping off one activity so that the back stack is fine.
270      */
exitSearchMode()271     void exitSearchMode();
272 
273     /**
274      * Supports dragging conversations to a folder.
275      */
supportsDrag(DragEvent event, Folder folder)276     boolean supportsDrag(DragEvent event, Folder folder);
277 
278     /**
279      * Handles dropping conversations to a folder.
280      */
handleDrop(DragEvent event, Folder folder)281     void handleDrop(DragEvent event, Folder folder);
282 
283     /**
284      * Load the default inbox associated with the current account.
285      */
loadAccountInbox()286     public void loadAccountInbox();
287 
288     /**
289      * Return the folder currently being viewed by the activity.
290      */
getHierarchyFolder()291     public Folder getHierarchyFolder();
292 
293     /**
294      * Set the folder currently selected in the folder selection hierarchy fragments.
295      */
setHierarchyFolder(Folder folder)296     void setHierarchyFolder(Folder folder);
297 
298     /**
299      * Handles the animation end of the animated adapter.
300      */
onAnimationEnd(AnimatedAdapter animatedAdapter)301     void onAnimationEnd(AnimatedAdapter animatedAdapter);
302 
303     /**
304      * Called when the user has started a drag/ drop gesture.
305      */
startDragMode()306     void startDragMode();
307 
308     /**
309      * Called when the user has ended drag/drop.
310      */
stopDragMode()311     void stopDragMode();
312 
313     /**
314      * Called when Accessibility is enabled or disabled.
315      */
onAccessibilityStateChanged()316     void onAccessibilityStateChanged();
317 
318     /**
319      * Called to determine if the drawer is enabled for this controller/activity instance.
320      * Note: the value returned should not change for this controller instance.
321      */
isDrawerEnabled()322     boolean isDrawerEnabled();
323 
324     /**
325      * Called to determine if menu items in the action bar should be hidden.
326      * Currently this is used for when the drawer is open to hide certain
327      * items that are not applicable while the drawer is open.
328      */
shouldHideMenuItems()329     boolean shouldHideMenuItems();
330 
getDrawerController()331     DrawerController getDrawerController();
332 
333     /**
334      * Called to determine the layout resource to use for the activity's content view.
335      * @return Resource ID
336      */
getContentViewResource()337     @LayoutRes int getContentViewResource();
338 
getNavigationViewClickListener()339     View.OnClickListener getNavigationViewClickListener();
340 }
341