Focus the correct field when composing messages.

Change-Id: Ic3b599d52a090db2bb5a8a0fdb1f2424adc2df7c
diff --git a/src/com/android/mail/compose/ComposeActivity.java b/src/com/android/mail/compose/ComposeActivity.java
index 06d06c5..eb3f42a 100644
--- a/src/com/android/mail/compose/ComposeActivity.java
+++ b/src/com/android/mail/compose/ComposeActivity.java
@@ -56,6 +56,7 @@
 import android.view.inputmethod.BaseInputConnection;
 import android.widget.ArrayAdapter;
 import android.widget.Button;
+import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
@@ -186,7 +187,7 @@
     private boolean mForward;
     private String mRecipient;
     private QuotedTextView mQuotedTextView;
-    private TextView mBodyView;
+    private EditText mBodyView;
     private View mFromStatic;
     private TextView mFromStaticText;
     private View mFromSpinnerWrapper;
@@ -312,6 +313,53 @@
         initActionBar(action);
         initFromSpinner(action);
         initChangeListeners();
+        setFocus(action);
+    }
+
+    private void setFocus(int action) {
+        if (action == EDIT_DRAFT) {
+            int type = mDraft.draftType;
+            switch (type) {
+                case UIProvider.DraftType.COMPOSE:
+                case UIProvider.DraftType.FORWARD:
+                    action = COMPOSE;
+                    break;
+                case UIProvider.DraftType.REPLY:
+                case UIProvider.DraftType.REPLY_ALL:
+                default:
+                    action = REPLY;
+                    break;
+            }
+        }
+        switch (action) {
+            case FORWARD:
+            case COMPOSE:
+                mTo.requestFocus();
+                break;
+            case REPLY:
+            case REPLY_ALL:
+            default:
+                focusBody();
+                break;
+        }
+    }
+
+    /**
+     * Focus the body of the message.
+     */
+    public void focusBody() {
+        mBodyView.requestFocus();
+        int length = mBodyView.getText().length();
+
+        int signatureStartPos = getSignatureStartPosition(
+                mSignature, mBodyView.getText().toString());
+        if (signatureStartPos > -1) {
+            // In case the user deleted the newlines...
+            mBodyView.setSelection(signatureStartPos);
+        } else if (length > 0) {
+            // Move cursor to the end.
+            mBodyView.setSelection(length);
+        }
     }
 
     @Override
@@ -407,7 +455,7 @@
         mSubject = (TextView) findViewById(R.id.subject);
         mQuotedTextView = (QuotedTextView) findViewById(R.id.quoted_text_view);
         mQuotedTextView.setRespondInlineListener(this);
-        mBodyView = (TextView) findViewById(R.id.body);
+        mBodyView = (EditText) findViewById(R.id.body);
         mFromStatic = findViewById(R.id.static_from_content);
         mFromStaticText = (TextView) findViewById(R.id.from_account_name);
         mFromSpinnerWrapper = findViewById(R.id.spinner_from_content);
@@ -1793,6 +1841,7 @@
 
     private void appendSignature() {
         String newSignature = mCachedSettings != null ? mCachedSettings.signature : null;
+        boolean hasFocus = mBodyView.hasFocus();
         if (!TextUtils.equals(newSignature, mSignature)) {
             mSignature = newSignature;
             if (!TextUtils.isEmpty(mSignature)
@@ -1803,6 +1852,9 @@
                 mBodyView.append(convertToPrintableSignature(mSignature));
                 mBodyView.addTextChangedListener(this);
             }
+            if (hasFocus) {
+                focusBody();
+            }
         }
     }