Fix the layout for the sign-in activity

Now, the forward and back buttons on part of the activity,
like the rest of setup.

Change-Id: I4c94b8e0ad79c972e2f79be67b80d51f2d19ca30
diff --git a/res/layout/account_setup_buttons.xml b/res/layout/account_setup_buttons.xml
index 435ba18..1a6a113 100644
--- a/res/layout/account_setup_buttons.xml
+++ b/res/layout/account_setup_buttons.xml
@@ -23,7 +23,7 @@
         android:layout_height="wrap_content"
         android:layout_width="wrap_content"
         android:src="@drawable/ic_nav_arrow_back"
-        android:text="@string/next_action" />
+        android:text="@string/next_action"
         android:layout_alignParentLeft="true"/>
     <ImageButton
         android:id="@+id/next"
diff --git a/res/layout/sign_in_activity.xml b/res/layout/sign_in_activity.xml
index dcd4e18..489e6b3 100644
--- a/res/layout/sign_in_activity.xml
+++ b/res/layout/sign_in_activity.xml
@@ -14,10 +14,11 @@
      limitations under the License.
 -->
 
-<FrameLayout
+<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:orientation="vertical"
     android:paddingTop="@dimen/setup_fragment_padding_top"
     android:paddingLeft="@dimen/setup_fragment_padding_left"
     android:paddingRight="@dimen/setup_fragment_padding_right" >
@@ -26,6 +27,14 @@
         android:id="@+id/sign_in_fragment"
         class="com.android.email.activity.setup.SignInFragment"
         android:layout_width="match_parent"
-        android:layout_height="wrap_content" />
+        android:layout_height="match_parent"
+        android:layout_weight="1"/>
 
-</FrameLayout>
+    <FrameLayout android:id="@+id/button_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:src="@drawable/ic_nav_arrow_back">
+        <include layout="@layout/account_setup_buttons" />
+    </FrameLayout>
+
+</LinearLayout>
diff --git a/res/layout/sign_in_fragment.xml b/res/layout/sign_in_fragment.xml
index 81e0a8d..72f2afd 100644
--- a/res/layout/sign_in_fragment.xml
+++ b/res/layout/sign_in_fragment.xml
@@ -16,15 +16,12 @@
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="match_parent"
+    android:layout_weight="1"
+    android:layout_centerVertical="true"
     android:gravity="center"
     android:orientation="vertical">
 
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1" />
-
     <Button
         android:id="@+id/sign_in_with_google"
         android:text="@string/sign_in_with_google"
@@ -46,12 +43,4 @@
         android:hint="@string/account_setup_incoming_password_label"
         android:inputType="textPassword"
         android:imeOptions="actionNext"/>
-
-    <View
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:layout_weight="1" />
-
-    <include layout="@layout/account_setup_buttons" />
-
 </LinearLayout>
diff --git a/src/com/android/email/activity/setup/SignInActivity.java b/src/com/android/email/activity/setup/SignInActivity.java
index fa91e7b..20eef8a 100644
--- a/src/com/android/email/activity/setup/SignInActivity.java
+++ b/src/com/android/email/activity/setup/SignInActivity.java
@@ -3,10 +3,15 @@
 import android.app.Activity;
 import android.content.Intent;
 import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.ImageButton;
 
 import com.android.email.R;
+import com.android.email.activity.UiUtilities;
 
-public class SignInActivity extends Activity implements SignInFragment.SignInCallback {
+public class SignInActivity extends Activity implements SignInFragment.SignInCallback,
+        View.OnClickListener {
 
     public static final String EXTRA_EMAIL = "email";
 
@@ -17,6 +22,8 @@
     public static final String EXTRA_OAUTH_EXPIRES_IN_SECONDS = "expiresInSeconds";
 
     private SignInFragment mFragment;
+    private ImageButton mNextButton;
+    private ImageButton mPrevButton;
 
     @Override
     public void onCreate(final Bundle savedInstanceState) {
@@ -26,6 +33,14 @@
                 getFragmentManager().findFragmentById(R.id.sign_in_fragment);
         mFragment.setEmailAddress(getIntent().getStringExtra(EXTRA_EMAIL));
         mFragment.setSignInCallback(this);
+        mNextButton = UiUtilities.getView(this, R.id.next);
+        mPrevButton = UiUtilities.getView(this, R.id.previous);
+        mNextButton.setOnClickListener(this);
+        mPrevButton.setOnClickListener(this);
+
+        onValidate();
+        // Assume canceled until we find out otherwise.
+        setResult(RESULT_CANCELED);
     }
 
     @Override
@@ -40,8 +55,7 @@
         finish();
     }
 
-    @Override
-    public void onPasswordSignIn(final String password) {
+    private void onPasswordSignIn(final String password) {
         final Intent intent = new Intent();
         intent.putExtra(EXTRA_PASSWORD, password);
         setResult(RESULT_OK, intent);
@@ -49,9 +63,16 @@
     }
 
     @Override
-    public void onCancel() {
-        setResult(RESULT_CANCELED);
-        finish();
+    public void onValidate() {
+        mNextButton.setEnabled(!TextUtils.isEmpty(mFragment.getPassword()));
     }
 
+    @Override
+    public void onClick(View view) {
+        if (view == mNextButton) {
+            onPasswordSignIn(mFragment.getPassword());
+        } else if (view == mPrevButton) {
+            onBackPressed();
+        }
+    }
 }
diff --git a/src/com/android/email/activity/setup/SignInFragment.java b/src/com/android/email/activity/setup/SignInFragment.java
index 83a93a1..d8610dc 100644
--- a/src/com/android/email/activity/setup/SignInFragment.java
+++ b/src/com/android/email/activity/setup/SignInFragment.java
@@ -46,8 +46,6 @@
     public static final int RESULT_OAUTH_USER_CANCELED = -1;
     public static final int RESULT_OAUTH_FAILURE = -2;
 
-    private View mNextButton;
-    private View mPreviousButton;
     private View mOAuthButton;
     private EditText mPasswordText;
     private TextWatcher mValidationTextWatcher;
@@ -60,9 +58,7 @@
         public void onOAuthSignIn(final String providerId, final String accessToken,
                 final String refreshToken, final int expiresInSeconds);
 
-        public void onPasswordSignIn(final String password);
-
-        public void onCancel();
+        public void onValidate();
     }
 
     @Override
@@ -70,12 +66,8 @@
             Bundle savedInstanceState) {
         final View view = inflater.inflate(R.layout.sign_in_fragment, container, false);
 
-        mNextButton = UiUtilities.getView(view, R.id.next);
-        mPreviousButton = UiUtilities.getView(view, R.id.previous);
         mOAuthButton = UiUtilities.getView(view, R.id.sign_in_with_google);
         mPasswordText = UiUtilities.getView(view, R.id.account_password);
-        mNextButton.setOnClickListener(this);
-        mPreviousButton.setOnClickListener(this);
         mOAuthButton.setOnClickListener(this);
 
         // After any text edits, call validateFields() which enables or disables the Next button
@@ -97,6 +89,7 @@
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
         mContext = getActivity();
     }
 
@@ -108,15 +101,11 @@
     }
 
     public void validatePassword() {
-        enableNextButton(!TextUtils.isEmpty(mPasswordText.getText()));
+        mCallback.onValidate();
         // Warn (but don't prevent) if password has leading/trailing spaces
         AccountSettingsUtils.checkPasswordSpaces(mContext, mPasswordText);
     }
 
-    private void enableNextButton(final boolean enabled) {
-        mNextButton.setEnabled(enabled);
-    }
-
     @Override
     public void onActivityResult(final int requestCode, final int resultCode,
             final Intent data) {
@@ -145,11 +134,7 @@
 
     @Override
     public void onClick(View view) {
-        if (view == mNextButton) {
-            mCallback.onPasswordSignIn(mPasswordText.getText().toString());
-        } else if (view == mPreviousButton) {
-            mCallback.onCancel();
-        } else if (view == mOAuthButton) {
+        if (view == mOAuthButton) {
             List<OAuthProvider> oauthProviders = AccountSettingsUtils.getAllOAuthProviders(
                     mContext);
             // FLAG currently the only oauth provider we support is google.
@@ -173,6 +158,8 @@
         return mEmailAddress;
     }
 
+    public String getPassword() { return mPasswordText.getText().toString(); }
+
     public void setSignInCallback(SignInCallback callback) {
         mCallback = callback;
     }