mobile/android/base/fxa/activities/FxAccountSignInActivity.java

Wed, 31 Dec 2014 07:22:50 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 07:22:50 +0100
branch
TOR_BUG_3246
changeset 4
fc2d59ddac77
permissions
-rw-r--r--

Correct previous dual key logic pending first delivery installment.

     1 /* This Source Code Form is subject to the terms of the Mozilla Public
     2  * License, v. 2.0. If a copy of the MPL was not distributed with this
     3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     5 package org.mozilla.gecko.fxa.activities;
     7 import java.util.concurrent.Executor;
     8 import java.util.concurrent.Executors;
    10 import org.mozilla.gecko.R;
    11 import org.mozilla.gecko.background.common.log.Logger;
    12 import org.mozilla.gecko.background.fxa.FxAccountClient;
    13 import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
    14 import org.mozilla.gecko.background.fxa.FxAccountClient20;
    15 import org.mozilla.gecko.background.fxa.FxAccountClient20.LoginResponse;
    16 import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
    17 import org.mozilla.gecko.background.fxa.PasswordStretcher;
    18 import org.mozilla.gecko.fxa.FxAccountConstants;
    19 import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.FxAccountSignInTask;
    20 import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
    22 import android.content.Intent;
    23 import android.os.Bundle;
    24 import android.view.View;
    25 import android.view.View.OnClickListener;
    26 import android.widget.AutoCompleteTextView;
    27 import android.widget.Button;
    28 import android.widget.EditText;
    29 import android.widget.ProgressBar;
    30 import android.widget.TextView;
    32 /**
    33  * Activity which displays sign in screen to the user.
    34  */
    35 public class FxAccountSignInActivity extends FxAccountAbstractSetupActivity {
    36   protected static final String LOG_TAG = FxAccountSignInActivity.class.getSimpleName();
    38   private static final int CHILD_REQUEST_CODE = 3;
    40   /**
    41    * {@inheritDoc}
    42    */
    43   @Override
    44   public void onCreate(Bundle icicle) {
    45     Logger.debug(LOG_TAG, "onCreate(" + icicle + ")");
    47     super.onCreate(icicle);
    48     setContentView(R.layout.fxaccount_sign_in);
    50     emailEdit = (AutoCompleteTextView) ensureFindViewById(null, R.id.email, "email edit");
    51     passwordEdit = (EditText) ensureFindViewById(null, R.id.password, "password edit");
    52     showPasswordButton = (Button) ensureFindViewById(null, R.id.show_password, "show password button");
    53     remoteErrorTextView = (TextView) ensureFindViewById(null, R.id.remote_error, "remote error text view");
    54     button = (Button) ensureFindViewById(null, R.id.button, "sign in button");
    55     progressBar = (ProgressBar) ensureFindViewById(null, R.id.progress, "progress bar");
    57     minimumPasswordLength = 1; // Minimal restriction on passwords entered to sign in.
    58     createSignInButton();
    59     addListeners();
    60     updateButtonState();
    61     createShowPasswordButton();
    62     linkifyPolicy();
    64     View createAccountInsteadLink = ensureFindViewById(null, R.id.create_account_link, "create account instead link");
    65     createAccountInsteadLink.setOnClickListener(new OnClickListener() {
    66       @Override
    67       public void onClick(View v) {
    68         Intent intent = new Intent(FxAccountSignInActivity.this, FxAccountCreateAccountActivity.class);
    69         intent.putExtra("email", emailEdit.getText().toString());
    70         intent.putExtra("password", passwordEdit.getText().toString());
    71         // Per http://stackoverflow.com/a/8992365, this triggers a known bug with
    72         // the soft keyboard not being shown for the started activity. Why, Android, why?
    73         intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    74         startActivityForResult(intent, CHILD_REQUEST_CODE);
    75       }
    76     });
    78     // Only set email/password in onCreate; we don't want to overwrite edited values onResume.
    79     if (getIntent() != null && getIntent().getExtras() != null) {
    80       Bundle bundle = getIntent().getExtras();
    81       emailEdit.setText(bundle.getString("email"));
    82       passwordEdit.setText(bundle.getString("password"));
    83     }
    85     TextView view = (TextView) findViewById(R.id.forgot_password_link);
    86     ActivityUtils.linkTextView(view, R.string.fxaccount_sign_in_forgot_password, R.string.fxaccount_link_forgot_password);
    87   }
    89   /**
    90    * We might have switched to the CreateAccount activity; if that activity
    91    * succeeds, feed its result back to the authenticator.
    92    */
    93   @Override
    94   public void onActivityResult(int requestCode, int resultCode, Intent data) {
    95     Logger.debug(LOG_TAG, "onActivityResult: " + requestCode);
    96     if (requestCode != CHILD_REQUEST_CODE || resultCode != RESULT_OK) {
    97       super.onActivityResult(requestCode, resultCode, data);
    98       return;
    99     }
   100     this.setResult(resultCode, data);
   101     this.finish();
   102   }
   104   public void signIn(String email, String password) {
   105     String serverURI = FxAccountConstants.DEFAULT_AUTH_SERVER_ENDPOINT;
   106     PasswordStretcher passwordStretcher = makePasswordStretcher(password);
   107     // This delegate creates a new Android account on success, opens the
   108     // appropriate "success!" activity, and finishes this activity.
   109     RequestDelegate<LoginResponse> delegate = new AddAccountDelegate(email, passwordStretcher, serverURI) {
   110       @Override
   111       public void handleError(Exception e) {
   112         showRemoteError(e, R.string.fxaccount_sign_in_unknown_error);
   113       }
   115       @Override
   116       public void handleFailure(FxAccountClientRemoteException e) {
   117         showRemoteError(e, R.string.fxaccount_sign_in_unknown_error);
   118       }
   119     };
   121     Executor executor = Executors.newSingleThreadExecutor();
   122     FxAccountClient client = new FxAccountClient20(serverURI, executor);
   123     try {
   124       hideRemoteError();
   125       new FxAccountSignInTask(this, this, email, passwordStretcher, client, delegate).execute();
   126     } catch (Exception e) {
   127       showRemoteError(e, R.string.fxaccount_sign_in_unknown_error);
   128     }
   129   }
   131   protected void createSignInButton() {
   132     button.setOnClickListener(new OnClickListener() {
   133       @Override
   134       public void onClick(View v) {
   135         final String email = emailEdit.getText().toString();
   136         final String password = passwordEdit.getText().toString();
   137         signIn(email, password);
   138       }
   139     });
   140   }
   141 }

mercurial