Make MailActionBar use viewmodes; make sure it gets updated when view mode changes.
TODO: would it be better to make it an on view made changed listener?
Also, fixes up behavior.
Change-Id: Ib48d54b4cefc39629182d0df942b0f19fa77361e
diff --git a/res/menu/label_list_menu.xml b/res/menu/folder_list_menu.xml
similarity index 100%
rename from res/menu/label_list_menu.xml
rename to res/menu/folder_list_menu.xml
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index f82aea4..b3c0637 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -250,12 +250,6 @@
}
@Override
- public boolean onBackPressed() {
- // TODO(viki): Auto-generated method stub
- return false;
- }
-
- @Override
public void onConversationListVisibilityChanged(boolean visible) {
// TODO(viki): Auto-generated method stub
@@ -297,7 +291,7 @@
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = mActivity.getMenuInflater();
- inflater.inflate(R.menu.conversation_list_menu, menu);
+ inflater.inflate(mActionBarView.getOptionsMenuId(), menu);
return true;
}
@@ -324,6 +318,9 @@
int id = item.getItemId();
boolean handled = true;
switch (id) {
+ case android.R.id.home:
+ onUpPressed();
+ break;
case R.id.compose:
ComposeActivity.compose(mActivity.getActivityContext(), mAccount);
break;
@@ -410,6 +407,8 @@
*/
@Override
public void onViewModeChanged(int newMode) {
+ // Update action bar mode.
+ mActionBarView.setMode(newMode);
// Perform any mode specific work here.
// reset the action bar icon based on the mode. Why don't the individual controllers do
// this themselves?
diff --git a/src/com/android/mail/ui/ActionBarView.java b/src/com/android/mail/ui/ActionBarView.java
index a1899a7..73dbbbd 100644
--- a/src/com/android/mail/ui/ActionBarView.java
+++ b/src/com/android/mail/ui/ActionBarView.java
@@ -28,47 +28,6 @@
public interface ActionBarView {
/**
- * The action bar can be in a variety of modes, which determine the actions available.
- * This is a list of the modes.
- *
- */
- // TODO(viki): Remove this and rely only on the ViewMode mode.
- enum Mode {
- /**
- * Default mode,
- */
- NORMAL,
- /**
- * Viewing a conversation
- */
- CONVERSATION,
- /**
- * Viewing a list of conversation
- */
- CONVERSATION_LIST,
- /**
- * Viewing a single conversation?
- */
- CONVERSATION_SUBJECT,
- /**
- * Viewing results from user search
- */
- SEARCH_RESULTS,
- /**
- * Viewing a list of folders
- */
- FOLDER,
- /**
- * Viewing a conversation from search results
- */
- SEARCH_RESULTS_CONVERSATION,
- /**
- * Abnormal mode
- */
- INVALID
- }
-
- /**
* Initialize the ActionBarView
* @param activity
* @param callback
@@ -82,7 +41,7 @@
* Return the mode that the action bar is in.
* @return The mode the action bar is in.
*/
- Mode getMode();
+ int getMode();
/**
* Handle handleRestore from the Android framework.
@@ -92,12 +51,10 @@
/**
* Change the mode of the actionbar.
- * <p> TODO(viki): Why does the Actionbar have its own mode? The actionbar should use the view
- * mode, just like everyone else.
* @param mode
* @return true if the change in mode was successful.
*/
- boolean setMode(Mode mode);
+ boolean setMode(int mode);
/**
* Handle onResume from the Android framework.
diff --git a/src/com/android/mail/ui/ActionbarActivity.java b/src/com/android/mail/ui/ActionbarActivity.java
index 9d9b6a2..5912883 100644
--- a/src/com/android/mail/ui/ActionbarActivity.java
+++ b/src/com/android/mail/ui/ActionbarActivity.java
@@ -20,7 +20,6 @@
import com.android.mail.ConversationListContext;
import com.android.mail.R;
import com.android.mail.providers.Account;
-import com.android.mail.ui.ActionBarView.Mode;
import com.android.mail.ui.MailActionBar.Callback;
import android.app.ActionBar;
@@ -40,7 +39,7 @@
implements View.OnCreateContextMenuListener,RestrictedActivity, Callback {
private MailActionBar mActionBar;
private Context mContext;
- private MailActionBar.Mode mActionBarMode;
+ private int mActionBarMode;
private ViewMode mViewMode;
/**
@@ -48,7 +47,7 @@
*/
public ActionbarActivity() {
super();
- mActionBarMode = Mode.NORMAL;
+ mActionBarMode = ViewMode.UNKNOWN;
}
@Override
@@ -81,7 +80,7 @@
* Change the action bar mode, and redraw the actionbar.
* @param mode
*/
- private void changeMode(Mode mode){
+ private void changeMode(int mode){
mActionBar.setMode(mode);
// Tell the framework to redraw the Action Bar
invalidateOptionsMenu();
@@ -97,19 +96,19 @@
}
public void testSearchConversationMode(View v){
- changeMode(Mode.SEARCH_RESULTS_CONVERSATION);
+ changeMode(ViewMode.SEARCH_RESULTS);
}
public void testNormalMode(View v){
- changeMode(Mode.NORMAL);
+ changeMode(ViewMode.UNKNOWN);
}
public void testSearchResultMode(View v){
- changeMode(Mode.SEARCH_RESULTS);
+ changeMode(ViewMode.SEARCH_RESULTS);
}
public void testLabelMode(View v){
- changeMode(Mode.FOLDER);
+ changeMode(ViewMode.FOLDER_LIST);
}
@Override
diff --git a/src/com/android/mail/ui/ActivityController.java b/src/com/android/mail/ui/ActivityController.java
index 1b80a44..c8c382a 100644
--- a/src/com/android/mail/ui/ActivityController.java
+++ b/src/com/android/mail/ui/ActivityController.java
@@ -118,6 +118,12 @@
boolean onBackPressed();
/**
+ * Called by the Mail activity when the up button is pressed.
+ * @return
+ */
+ boolean onUpPressed();
+
+ /**
* Called when the root activity calls onCreate. Any initialization needs to
* be done here. Subclasses need to call their parents' onCreate method, since it performs
* valuable initialization common to all subclasses.
diff --git a/src/com/android/mail/ui/ConversationListFragment.java b/src/com/android/mail/ui/ConversationListFragment.java
index 75dc5be..3a0ff38 100644
--- a/src/com/android/mail/ui/ConversationListFragment.java
+++ b/src/com/android/mail/ui/ConversationListFragment.java
@@ -23,12 +23,10 @@
import android.app.ListFragment;
import android.content.ContentResolver;
import android.content.res.Resources;
-import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Parcelable;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
@@ -46,7 +44,6 @@
import com.android.mail.browse.SelectedConversationsActionMenu;
import com.android.mail.browse.ConversationItemView.StarHandler;
import com.android.mail.providers.Account;
-import com.android.mail.providers.AccountCacheProvider;
import com.android.mail.providers.Conversation;
import com.android.mail.providers.Folder;
import com.android.mail.providers.UIProvider;
@@ -442,8 +439,6 @@
private void showList() {
mListView.setEmptyView(null);
- // Get an account and a folder list
- Uri foldersUri = Uri.parse(mViewContext.mAccount.folderListUri);
// TODO(viki) fill with real position
final int position = 0;
mFolder = mViewContext.mFolder;
diff --git a/src/com/android/mail/ui/MailActionBar.java b/src/com/android/mail/ui/MailActionBar.java
index f4c571a..fe91058 100644
--- a/src/com/android/mail/ui/MailActionBar.java
+++ b/src/com/android/mail/ui/MailActionBar.java
@@ -97,7 +97,7 @@
protected RestrictedActivity mActivity;
private Callback mCallback;
protected View mFolderView;
- private Mode mMode;
+ private int mMode;
private MenuItem mRefreshItem;
@@ -119,13 +119,13 @@
public MailActionBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- mMode = Mode.NORMAL;
+ mMode = ViewMode.UNKNOWN;
}
@Override
public boolean createOptionsMenu(Menu menu) {
// If the mode is valid, then set the initial menu
- if (mMode == Mode.INVALID) {
+ if (mMode == ViewMode.UNKNOWN) {
return false;
}
mActivity.getMenuInflater().inflate(getOptionsMenuId(), menu);
@@ -135,22 +135,22 @@
}
@Override
- public Mode getMode() {
+ public int getMode() {
return mMode;
}
@Override
public int getOptionsMenuId() {
switch (mMode){
- case NORMAL:
+ case ViewMode.UNKNOWN:
// Fallthrough
- case SEARCH_RESULTS:
+ case ViewMode.SEARCH_RESULTS:
return R.menu.conversation_list_menu;
- case FOLDER:
- return R.menu.label_list_menu;
- case SEARCH_RESULTS_CONVERSATION:
- return R.menu.conversation_actions;
- case CONVERSATION_SUBJECT:
+ case ViewMode.FOLDER_LIST:
+ return R.menu.folder_list_menu;
+ case ViewMode.CONVERSATION_LIST:
+ return R.menu.conversation_list_menu;
+ case ViewMode.CONVERSATION:
return R.menu.conversation_actions;
}
return 0;
@@ -223,28 +223,25 @@
}
switch (mMode){
- case NORMAL:
+ case ViewMode.UNKNOWN:
mSpinnerView.setVisibility(VISIBLE);
if (mSearch != null){
mSearch.collapseActionView();
}
break;
- case CONVERSATION_LIST:
+ case ViewMode.CONVERSATION_LIST:
// Do nothing?
break;
- case CONVERSATION:
+ case ViewMode.CONVERSATION:
// Do nothing?
break;
- case CONVERSATION_SUBJECT:
- mSpinnerView.setVisibility(GONE);
- break;
- case SEARCH_RESULTS:
+ case ViewMode.SEARCH_RESULTS:
mActionBar.setDisplayHomeAsUpEnabled(true);
mSpinnerView.setVisibility(GONE);
if (mSearch != null) {
mSearch.collapseActionView();
}
- case FOLDER:
+ case ViewMode.FOLDER_LIST:
break;
}
return false;
@@ -278,7 +275,7 @@
}
@Override
- public boolean setMode(Mode mode) {
+ public boolean setMode(int mode) {
mMode = mode;
return true;
}
diff --git a/src/com/android/mail/ui/OnePaneController.java b/src/com/android/mail/ui/OnePaneController.java
index 3ac3f95..eeb18a4 100644
--- a/src/com/android/mail/ui/OnePaneController.java
+++ b/src/com/android/mail/ui/OnePaneController.java
@@ -18,11 +18,8 @@
package com.android.mail.ui;
import android.app.Fragment;
-import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.Window;
import com.android.mail.ConversationListContext;
import com.android.mail.R;
@@ -131,16 +128,32 @@
@Override
public boolean onBackPressed() {
- // TODO: (mindyp) We have just 1 item on the back stack, so just pop
- // back out to the start screen in this app. We won't need this once we
- // remove the starting buttons screen.
int mode = mViewMode.getMode();
if (mode == ViewMode.CONVERSATION_LIST) {
mActivity.finish();
return true;
} else if (mode == ViewMode.CONVERSATION || mode == ViewMode.FOLDER_LIST) {
- mViewMode.enterConversationListMode();
+ transitionBackToConversationListMode();
}
return false;
}
+
+ @Override
+ public boolean onUpPressed() {
+ int mode = mViewMode.getMode();
+ if (mode == ViewMode.CONVERSATION_LIST || mode == ViewMode.CONVERSATION
+ || mode == ViewMode.FOLDER_LIST) {
+ // Same as go back.
+ mActivity.onBackPressed();
+ } else if (mode == ViewMode.SEARCH_RESULTS) {
+ mActivity.finish();
+ }
+ return true;
+ }
+
+ private void transitionBackToConversationListMode() {
+ mViewMode.enterConversationListMode();
+ mActivity.invalidateOptionsMenu();
+ resetActionBarIcon();
+ }
}
diff --git a/src/com/android/mail/ui/TwoPaneController.java b/src/com/android/mail/ui/TwoPaneController.java
index 3a65f03..0b22e02 100644
--- a/src/com/android/mail/ui/TwoPaneController.java
+++ b/src/com/android/mail/ui/TwoPaneController.java
@@ -124,4 +124,13 @@
// TODO Auto-generated method stub
}
+ @Override
+ public boolean onUpPressed() {
+ return false;
+ }
+
+ @Override
+ public boolean onBackPressed() {
+ return false;
+ }
}