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) {
}
}