Merge "Fix "always show pictures""
diff --git a/res/layout/account_setup_exchange_fragment.xml b/res/layout/account_setup_exchange_fragment.xml
index 86b443e..e792c56 100644
--- a/res/layout/account_setup_exchange_fragment.xml
+++ b/res/layout/account_setup_exchange_fragment.xml
@@ -30,7 +30,7 @@
     <EditText
         android:id="@+id/account_username"
         android:inputType="textEmailAddress"
-        android:imeOptions="actionDone"
+        android:imeOptions="actionNext"
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:contentDescription="@string/account_setup_exchange_username_label" />
@@ -43,7 +43,7 @@
     <EditText
         android:id="@+id/account_password"
         android:inputType="textPassword"
-        android:imeOptions="actionDone"
+        android:imeOptions="actionNext"
         android:layout_height="wrap_content"
         android:layout_width="match_parent" />
     <!-- This text may be changed in code if the server is IMAP, etc. -->
diff --git a/res/layout/account_setup_incoming_fragment.xml b/res/layout/account_setup_incoming_fragment.xml
index eb77f0f..625e1fc 100644
--- a/res/layout/account_setup_incoming_fragment.xml
+++ b/res/layout/account_setup_incoming_fragment.xml
@@ -32,7 +32,7 @@
         android:layout_width="match_parent"
         android:contentDescription="@string/account_setup_incoming_username_label"
         android:inputType="textEmailAddress"
-        android:imeOptions="actionDone" />
+        android:imeOptions="actionNext" />
     <TextView
         android:text="@string/account_setup_incoming_password_label"
         android:layout_height="wrap_content"
@@ -45,7 +45,7 @@
         android:layout_width="match_parent"
         android:contentDescription="@string/account_setup_incoming_password_label"
         android:inputType="textPassword"
-        android:imeOptions="actionDone" />
+        android:imeOptions="actionNext" />
     <!-- This text may be changed in code if the server is IMAP, etc. -->
     <TextView
         android:id="@+id/account_server_label"
@@ -62,7 +62,7 @@
         android:layout_width="match_parent"
         android:contentDescription="@string/account_setup_incoming_pop_server_label"
         android:inputType="textUri"
-        android:imeOptions="actionDone" />
+        android:imeOptions="actionNext" />
     <TextView
         android:text="@string/account_setup_incoming_port_label"
         android:layout_height="wrap_content"
diff --git a/src/com/android/email/activity/setup/AccountServerBaseFragment.java b/src/com/android/email/activity/setup/AccountServerBaseFragment.java
index d2325a3..abc31a1 100644
--- a/src/com/android/email/activity/setup/AccountServerBaseFragment.java
+++ b/src/com/android/email/activity/setup/AccountServerBaseFragment.java
@@ -16,23 +16,26 @@
 
 package com.android.email.activity.setup;
 
-import com.android.email.R;
-import com.android.email.activity.UiUtilities;
-import com.android.emailcommon.provider.Account;
-import com.android.emailcommon.provider.HostAuth;
-import com.android.emailcommon.utility.Utility;
-
 import android.app.Activity;
 import android.app.Fragment;
 import android.content.Context;
 import android.os.AsyncTask;
 import android.os.Bundle;
+import android.view.KeyEvent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.View.OnFocusChangeListener;
+import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.Button;
 import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+import com.android.email.R;
+import com.android.email.activity.UiUtilities;
+import com.android.emailcommon.provider.Account;
+import com.android.emailcommon.provider.HostAuth;
+import com.android.emailcommon.utility.Utility;
 
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -283,6 +286,32 @@
     }
 
     /**
+     * A keyboard listener which dismisses the keyboard when "DONE" is pressed, but doesn't muck
+     * around with focus. This is useful in settings screens, as we don't want focus to change
+     * since some fields throw up errors when they're focused to give the user more info.
+     */
+    protected final OnEditorActionListener mDismissImeOnDoneListener =
+            new OnEditorActionListener() {
+        @Override
+        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+            if (actionId == EditorInfo.IME_ACTION_DONE) {
+                // Dismiss soft keyboard but don't modify focus.
+                final Context context = getActivity();
+                if (context == null) {
+                    return false;
+                }
+                InputMethodManager imm = (InputMethodManager) context.getSystemService(
+                        Context.INPUT_METHOD_SERVICE);
+                if (imm != null && imm.isActive()) {
+                    imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
+                }
+                return true;
+            }
+            return false;
+        }
+    };
+
+    /**
      * Clears the "next" button de-bounce flags and allows the "next" button to activate.
      */
     private void clearButtonBounce() {
diff --git a/src/com/android/email/activity/setup/AccountSetupExchangeFragment.java b/src/com/android/email/activity/setup/AccountSetupExchangeFragment.java
index 801c631..1ff5bee 100644
--- a/src/com/android/email/activity/setup/AccountSetupExchangeFragment.java
+++ b/src/com/android/email/activity/setup/AccountSetupExchangeFragment.java
@@ -104,7 +104,7 @@
                 : R.layout.account_setup_exchange_fragment;
 
         View view = inflater.inflate(layoutId, container, false);
-        Context context = getActivity();
+        final Context context = getActivity();
 
         mUsernameView = UiUtilities.getView(view, R.id.account_username);
         mPasswordView = UiUtilities.getView(view, R.id.account_password);
@@ -132,6 +132,10 @@
         mUsernameView.addTextChangedListener(validationTextWatcher);
         mPasswordView.addTextChangedListener(validationTextWatcher);
         mServerView.addTextChangedListener(validationTextWatcher);
+
+        EditText lastView = mServerView;
+        lastView.setOnEditorActionListener(mDismissImeOnDoneListener);
+
         String deviceId = "";
         try {
             deviceId = Device.getDeviceId(context);
diff --git a/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java b/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
index c0d358d..249e5b4 100644
--- a/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
+++ b/src/com/android/email/activity/setup/AccountSetupIncomingFragment.java
@@ -27,6 +27,7 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.inputmethod.EditorInfo;
 import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.EditText;
@@ -284,21 +285,25 @@
     private void configureEditor() {
         if (mConfigured) return;
         Account account = SetupData.getAccount();
+        TextView lastView = mImapPathPrefixView;
         mBaseScheme = account.mHostAuthRecv.mProtocol;
         if (HostAuth.SCHEME_POP3.equals(mBaseScheme)) {
             mServerLabelView.setText(R.string.account_setup_incoming_pop_server_label);
             mServerView.setContentDescription(
                     getResources().getString(R.string.account_setup_incoming_pop_server_label));
             mImapPathPrefixSectionView.setVisibility(View.GONE);
+            lastView = mPortView;
         } else if (HostAuth.SCHEME_IMAP.equals(mBaseScheme)) {
             mServerLabelView.setText(R.string.account_setup_incoming_imap_server_label);
             mServerView.setContentDescription(
                     getResources().getString(R.string.account_setup_incoming_imap_server_label));
             mDeletePolicyLabelView.setVisibility(View.GONE);
             mDeletePolicyView.setVisibility(View.GONE);
+            mPortView.setImeOptions(EditorInfo.IME_ACTION_NEXT);
         } else {
             throw new Error("Unknown account type: " + account);
         }
+        lastView.setOnEditorActionListener(mDismissImeOnDoneListener);
         mConfigured = true;
     }