Merge "Focus the correct field when composing messages."
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 675099d..c135e5c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -16,6 +16,12 @@
      limitations under the License.
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- Names of packages and authorities that are common to all apps
+    and read from resources -->
+
+    <!-- Name of the search suggestions authority that looks up recent suggestions. This
+         needs to be modified in AndroidManifest.xml and res/xml/searchable.xml as well.  -->
+    <string name="suggestions_authority" translatable="false">com.android.mail.suggestionsprovider</string>
 
     <!-- Layout tests strings -->
     <string name="mock_content_provider" translatable="false">Mock Content Provider</string>
diff --git a/src/com/android/mail/providers/SuggestionsProvider.java b/src/com/android/mail/providers/SuggestionsProvider.java
index 2a0d4ba..a887dc3 100644
--- a/src/com/android/mail/providers/SuggestionsProvider.java
+++ b/src/com/android/mail/providers/SuggestionsProvider.java
@@ -74,7 +74,7 @@
 
     @Override
     public boolean onCreate() {
-        final String authority = MailAppProvider.getInstance().getSuggestionAuthority();
+        final String authority = getContext().getString(R.string.suggestions_authority);
         setupSuggestions(authority, MODE);
         super.onCreate();
         return true;
diff --git a/src/com/android/mail/ui/AbstractActivityController.java b/src/com/android/mail/ui/AbstractActivityController.java
index 4d57837..3b03ea5 100644
--- a/src/com/android/mail/ui/AbstractActivityController.java
+++ b/src/com/android/mail/ui/AbstractActivityController.java
@@ -362,8 +362,13 @@
         // Only restart the loader if the defaultInboxUri is not the same as
         // the folder we are already loading.
         final boolean changed = !oldUri.equals(newUri);
-        if (settings != null && settings.defaultInbox != null
-                && (mFolder == null || mFolder.type == UIProvider.FolderType.INBOX) && changed) {
+        if (settings != null
+                && settings.defaultInbox != null
+                && (mFolder == null
+                // we really only want CHANGES to the inbox setting, not just
+                // the first setting of it.
+                || (mFolder.type == UIProvider.FolderType.INBOX && !oldUri.equals(Uri.EMPTY))
+                && changed)) {
             loadAccountInbox();
         }
     }
@@ -755,8 +760,8 @@
      */
     protected void restoreState(Bundle savedState) {
         final Intent intent = mActivity.getIntent();
+        boolean handled = false;
         if (savedState != null) {
-            boolean handled = false;
             if (savedState.containsKey(SAVED_ACCOUNT)) {
                 mAccount = ((Account) savedState.getParcelable(SAVED_ACCOUNT));
                 mActionBarView.setAccount(mAccount);
@@ -773,34 +778,33 @@
                 showConversation(mCurrentConversation);
                 handled = true;
             }
-            if (!handled) {
-                // Nothing was saved; just load the account inbox.
-                loadAccountInbox();
-            }
-            restartOptionalLoader(LOADER_ACCOUNT_SETTINGS, null /* args */);
         } else if (intent != null) {
             if (Intent.ACTION_VIEW.equals(intent.getAction())) {
                 if (intent.hasExtra(Utils.EXTRA_ACCOUNT)) {
                     mAccount = ((Account) intent.getParcelableExtra(Utils.EXTRA_ACCOUNT));
-                    mActionBarView.setAccount(mAccount);
-                    restartOptionalLoader(LOADER_ACCOUNT_SETTINGS, null /* args */);
-                    mActivity.invalidateOptionsMenu();
                 } else if (intent.hasExtra(Utils.EXTRA_ACCOUNT_STRING)) {
                     mAccount = Account.newinstance(intent
                             .getStringExtra(Utils.EXTRA_ACCOUNT_STRING));
+                }
+                if (mAccount != null) {
                     mActionBarView.setAccount(mAccount);
-                    restartOptionalLoader(LOADER_ACCOUNT_SETTINGS, null /* args */);
                     mActivity.invalidateOptionsMenu();
                 }
 
+                Folder folder = null;
                 if (intent.hasExtra(Utils.EXTRA_FOLDER)) {
                     // Open the folder.
                     LogUtils.d(LOG_TAG, "SHOW THE FOLDER at %s",
                             intent.getParcelableExtra(Utils.EXTRA_FOLDER));
-                    onFolderChanged((Folder) intent.getParcelableExtra(Utils.EXTRA_FOLDER));
+                    folder = (Folder) intent.getParcelableExtra(Utils.EXTRA_FOLDER);
+
                 } else if (intent.hasExtra(Utils.EXTRA_FOLDER_STRING)) {
                     // Open the folder.
-                    onFolderChanged(new Folder(intent.getStringExtra(Utils.EXTRA_FOLDER_STRING)));
+                    folder = new Folder(intent.getStringExtra(Utils.EXTRA_FOLDER_STRING));
+                }
+                if (folder != null) {
+                    onFolderChanged(folder);
+                    handled = true;
                 }
 
                 if (intent.hasExtra(Utils.EXTRA_CONVERSATION)) {
@@ -810,7 +814,14 @@
                     setCurrentConversation((Conversation) intent
                             .getParcelableExtra(Utils.EXTRA_CONVERSATION));
                     showConversation(mCurrentConversation);
+                    handled = true;
                 }
+
+                if (!handled) {
+                    // Nothing was saved; just load the account inbox.
+                    loadAccountInbox();
+                }
+                restartOptionalLoader(LOADER_ACCOUNT_SETTINGS, null /* args */);
             } else if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
                 // Save this search query for future suggestions.
                 final String query = intent.getStringExtra(SearchManager.QUERY);