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;
+    }
 }