Update the folder name in the dropdown spinner when the user changes folders.

Change-Id: I0c088131850d448c32b9ad15d93f96a3b27615a0
diff --git a/src/com/android/mail/AccountSpinnerAdapter.java b/src/com/android/mail/AccountSpinnerAdapter.java
index ab18277..ead345a 100644
--- a/src/com/android/mail/AccountSpinnerAdapter.java
+++ b/src/com/android/mail/AccountSpinnerAdapter.java
@@ -27,6 +27,7 @@
 
 import com.android.mail.R;
 import com.android.mail.providers.Account;
+import com.android.mail.providers.Folder;
 import com.android.mail.providers.UIProvider;
 
 /**
@@ -62,6 +63,7 @@
     private final int[] mUnreadCounts = {
             0, 2, 42
     };
+    private Folder mCurrentFolder;
 
     /**
      * When the user selects the spinner, a dropdown list of objects is shown. Each item in the
@@ -133,6 +135,14 @@
         notifyDataSetChanged();
     }
 
+    /**
+     * Set the selected folder.
+     * @param folder
+     */
+    public void setFolder(Folder folder) {
+        mCurrentFolder = folder;
+    }
+
     @Override
     public int getCount() {
         // All the accounts, plus one header, and optionally some folders
@@ -171,6 +181,10 @@
         }
     }
 
+    private String getFolderLabel() {
+        return mCurrentFolder != null ? mCurrentFolder.name : "";
+    }
+
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
         String folderName = "";
@@ -179,14 +193,11 @@
         switch (getType(position)) {
             case TYPE_ACCOUNT:
                 // The default Inbox for the given account
-                accountName = getAccountFolder(position);
-                folderName = "Inbox";
+                accountName = getAccountLabel(position);
+                folderName = getFolderLabel();
                 break;
             case TYPE_HEADER:
-                // We can never select the header, and we want the default view to be the Inbox.
-                // TODO: This should handle an empty account array
-                accountName = getAccountFolder(0);
-                folderName = "Inbox";
+                accountName = getAccountLabel(0);
                 break;
             default:
                 // Change the name of the current folder
@@ -264,7 +275,7 @@
                 header.account.setText(label);
                 return convertView;
             case TYPE_ACCOUNT:
-                textLabel = getAccountFolder(position);
+                textLabel = getAccountLabel(position);
                 break;
             case TYPE_FOLDER:
                 final int offset = position - mNumAccounts - 1;
@@ -301,7 +312,7 @@
      * @param position
      * @return the label of the account at the given position.
      */
-    private String getAccountFolder(int position) {
+    private String getAccountLabel(int position) {
         if (position >= mNumAccounts) {
             return "";
         }
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 3dd2132..d1ea4d3 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -271,6 +271,7 @@
         if (!folder.equals(mFolder)) {
             mRefreshInProgress = false;
             mFolder = folder;
+            mActionBarView.setFolder(mFolder);
             mActivity.getLoaderManager().restartLoader(FOLDER_CURSOR_LOADER, null, this);
         }
     }
@@ -586,6 +587,8 @@
                     onFolderChanged((Folder) intent.getParcelableExtra(Utils.EXTRA_FOLDER));
                 }
             }
+            // Update the active folder in the action bar.
+            mActionBarView.setFolder(mFolder);
         }
         // Create the accounts loader; this loads the acount switch spinner.
         mActivity.getLoaderManager().initLoader(ACCOUNT_CURSOR_LOADER, null, this);
diff --git a/src/com/android/mail/ui/ActionBarView.java b/src/com/android/mail/ui/ActionBarView.java
index 5807120..4672715 100644
--- a/src/com/android/mail/ui/ActionBarView.java
+++ b/src/com/android/mail/ui/ActionBarView.java
@@ -23,6 +23,7 @@
 import android.view.Menu;
 
 import com.android.mail.providers.Account;
+import com.android.mail.providers.Folder;
 
 /**
  * ActionBarView simplifies supporting both MailActionBar and MailActionBarDeprecated (used for
@@ -68,10 +69,10 @@
     void updateActionBar(String[] mAccountNames, String currentAccount);
 
     /**
-     * Update the folder that the user is currently viewing??
+     * Update the folder that the user is currently viewing
      * @param folder
      */
-    void setFolder(String folder);
+    void setFolder(Folder folder);
 
     /**
      * Returns the menu ID for the menu in this actionbar.
diff --git a/src/com/android/mail/ui/MailActionBar.java b/src/com/android/mail/ui/MailActionBar.java
index b495e39..4b667b6 100644
--- a/src/com/android/mail/ui/MailActionBar.java
+++ b/src/com/android/mail/ui/MailActionBar.java
@@ -189,6 +189,16 @@
         mActionBar.setSelectedNavigationItem(position);
     }
 
+    /**
+     * Called by the owner of the ActionBar to set the
+     * folder that is currently being displayed.
+     */
+    @Override
+    public void setFolder(Folder folder) {
+        mSpinner.setFolder(folder);
+        mSpinner.notifyDataSetChanged();
+    }
+
     @Override
     public boolean onNavigationItemSelected(int position, long id) {
         final int type = mSpinner.getItemViewType(position);
@@ -200,6 +210,11 @@
                 assert (item instanceof Account);
                 mAccount = (Account) item;
                 break;
+            case AccountSpinnerAdapter.TYPE_FOLDER:
+                final Object folder = mSpinner.getItem(position);
+                assert (folder instanceof Folder);
+                mCallback.onFolderChanged((Folder) folder);
+                break;
         }
         return false;
     }
@@ -302,11 +317,6 @@
     }
 
     @Override
-    public void setFolder(String folder) {
-        // TODO(viki): Add this functionality to change the label.
-    }
-
-    @Override
     public void updateActionBar(String[] accounts, String currentAccount) {
     }
 }