diff --git a/res/layout/action_bar_custom_view.xml b/res/layout/action_bar_custom_view.xml
index d125c538f..609ba824d 100644
--- a/res/layout/action_bar_custom_view.xml
+++ b/res/layout/action_bar_custom_view.xml
@@ -28,9 +28,11 @@
diff --git a/src/com/android/email/activity/ActionBarController.java b/src/com/android/email/activity/ActionBarController.java
index 0f7a72b74..5998b96fb 100644
--- a/src/com/android/email/activity/ActionBarController.java
+++ b/src/com/android/email/activity/ActionBarController.java
@@ -16,11 +16,6 @@
package com.android.email.activity;
-import com.android.email.R;
-import com.android.emailcommon.Logging;
-import com.android.emailcommon.provider.Account;
-import com.android.emailcommon.provider.Mailbox;
-
import android.app.ActionBar;
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
@@ -35,6 +30,11 @@ import android.view.View;
import android.widget.SearchView;
import android.widget.TextView;
+import com.android.email.R;
+import com.android.emailcommon.Logging;
+import com.android.emailcommon.provider.Account;
+import com.android.emailcommon.provider.Mailbox;
+
/**
* Manages the account name and the custom view part on the action bar.
*
@@ -50,7 +50,7 @@ public class ActionBarController {
private static final String BUNDLE_KEY_MODE = "ActionBarController.BUNDLE_KEY_MODE";
/**
- * Constants for {@link #mMode}.
+ * Constants for {@link #mSearchMode}.
*
* In {@link #MODE_NORMAL} mode, we don't show the search box.
* In {@link #MODE_SEARCH} mode, we do show the search box.
@@ -84,7 +84,7 @@ public class ActionBarController {
private long mLastAccountIdForDirtyCheck = Account.NO_ACCOUNT;
/** Either {@link #MODE_NORMAL} or {@link #MODE_SEARCH}. */
- private int mMode = MODE_NORMAL;
+ private int mSearchMode = MODE_NORMAL;
public final Callback mCallback;
@@ -153,7 +153,8 @@ public class ActionBarController {
mCallback = callback;
mAccountsSelectorAdapter = new AccountSelectorAdapter(mContext);
- mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME
+ mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
+ | ActionBar.DISPLAY_SHOW_HOME
| ActionBar.DISPLAY_SHOW_CUSTOM);
// Prepare the custom view
@@ -190,19 +191,23 @@ public class ActionBarController {
/** Must be called from {@link UIControllerBase#onSaveInstanceState} */
public void onSaveInstanceState(Bundle outState) {
- outState.putInt(BUNDLE_KEY_MODE, mMode);
+ outState.putInt(BUNDLE_KEY_MODE, mSearchMode);
}
/** Must be called from {@link UIControllerBase#onRestoreInstanceState} */
public void onRestoreInstanceState(Bundle savedState) {
- mMode= savedState.getInt(BUNDLE_KEY_MODE);
+ int mode = savedState.getInt(BUNDLE_KEY_MODE);
+ if (mode == MODE_SEARCH) {
+ // No need to re-set the initial query, as the View tree restoration does that
+ enterSearchMode(null);
+ }
}
/**
* @return true if the search box is shown.
*/
private boolean isInSearchMode() {
- return mMode == MODE_SEARCH;
+ return mSearchMode == MODE_SEARCH;
}
/**
@@ -217,7 +222,15 @@ public class ActionBarController {
if (!TextUtils.isEmpty(initialQueryTerm)) {
mSearchView.setQuery(initialQueryTerm, false);
}
- mMode = MODE_SEARCH;
+ mSearchMode = MODE_SEARCH;
+
+ // Need to force it to mode "standard" to hide it.
+ mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
+ mActionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
+ mSearchContainer.setVisibility(View.VISIBLE);
+ // TODO: HACK. this is a workaround IME not popping up.
+ mSearchView.setIconified(false);
+
refresh();
}
@@ -225,7 +238,13 @@ public class ActionBarController {
if (!isInSearchMode()) {
return;
}
- mMode = MODE_NORMAL;
+ mSearchMode = MODE_NORMAL;
+ mSearchContainer.setVisibility(View.GONE);
+ mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);
+
+ // Force update of account list when we exit search.
+ updateAccountList();
+
refresh();
mCallback.onSearchExit();
}
@@ -250,25 +269,14 @@ public class ActionBarController {
mActionBar.setDisplayOptions(showUp
? ActionBar.DISPLAY_HOME_AS_UP : 0, ActionBar.DISPLAY_HOME_AS_UP);
- // TODO In search mode, account spinner should be hidden.
- // (See also the TODO in the class header -- this methods needs a lot of change.)
-
if (isInSearchMode()) {
- boolean wasVisible = (mSearchView.getVisibility() == View.VISIBLE);
- mSearchView.setVisibility(View.VISIBLE);
- if (!wasVisible) {
- // TODO: HACK. this is a workaround IME not popping up.
- mSearchView.setIconified(false);
- }
mMailboxNameContainer.setVisibility(View.GONE);
} else {
- mSearchView.setVisibility(View.GONE);
mMailboxNameContainer.setVisibility(mCallback.shouldShowMailboxName()
? View.VISIBLE : View.GONE);
+ mMailboxNameView.setText(mCallback.getCurrentMailboxName());
}
- mMailboxNameView.setText(mCallback.getCurrentMailboxName());
-
// Note on action bar, we show only "unread count". Some mailboxes such as Outbox don't
// have the idea of "unread count", in which case we just omit the count.
mUnreadCountView.setText(UiUtilities.getMessageCountForUi(mContext,
@@ -319,10 +327,15 @@ public class ActionBarController {
private void updateAccountList() {
mAccountsSelectorAdapter.swapCursor(mAccountCursor);
+ if (mSearchMode == MODE_SEARCH) {
+ // In search mode, so we don't care about the account list - it'll get updated when
+ // it goes visible again.
+ return;
+ }
+
final ActionBar ab = mActionBar;
if (mAccountCursor == null) {
// Cursor not ready or closed.
- mAccountsSelectorAdapter.swapCursor(null);
ab.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
return;
diff --git a/src/com/android/email/activity/UIControllerBase.java b/src/com/android/email/activity/UIControllerBase.java
index 54b90e23e..5155dc5d9 100644
--- a/src/com/android/email/activity/UIControllerBase.java
+++ b/src/com/android/email/activity/UIControllerBase.java
@@ -56,7 +56,7 @@ abstract class UIControllerBase implements MailboxListFragment.Callback,
final EmailActivity mActivity;
final FragmentManager mFragmentManager;
- private final ActionBarController mActionBarController;
+ protected final ActionBarController mActionBarController;
final EmailAsyncTask.Tracker mTaskTracker = new EmailAsyncTask.Tracker();