class LoginFragment extends BaseFragment {
  @Inject AccountManager accountManager;
  @InjectView(R.id.et_email) EditText emailText;
  @InjectView(R.id.et_password) EditText passwordText;
  @InjectView(R.id.sign_in) Button signInButton;
  @Inject @ClientId String clientId;
  @Inject @ClientSecret String clientSecret;

  ...
  

  private void doLogin(final String email, String password) {
    Observable<AccessToken> accessTokenObservable =
        apiService.getAccessTokenObservable(email, password,
            clientId,
            clientSecret);

    subscribe(accessTokenObservable, new EndlessObserver<AccessToken>() {
      @Override public void onNext(AccessToken accessToken) {
        Account account = addOrFindAccount(email, accessToken.refreshToken);
        // accountManager.setUserData(account, AccountAuthenticator.USER_ID, accessToken.userId);
        accountManager.setAuthToken(account, AuthConstants.AUTHTOKEN_TYPE, accessToken.accessToken);
        finishAccountAdd(email, accessToken.accessToken, accessToken.refreshToken);
      }

      @Override public void onError(Throwable throwable) {
        Timber.e(throwable, "Could not sign in");
        Toast.makeText(getActivity(), throwable.getMessage(), Toast.LENGTH_LONG).show();
      }
    });
  }
  
  private Account addOrFindAccount(String email, String password) {
    Account[] accounts = accountManager.getAccountsByType(AuthConstants.ACCOUNT_TYPE);
    Account account = accounts.length != 0 ? accounts[0] :
        new Account(email, AuthConstants.ACCOUNT_TYPE);

    if (accounts.length == 0) {
      accountManager.addAccountExplicitly(account, password, null);
    } else {
      accountManager.setPassword(accounts[0], password);
    }
    return account;
  }

  private void finishAccountAdd(String accountName, String authToken, String password) {
    final Intent intent = new Intent();
    intent.putExtra(AccountManager.KEY_ACCOUNT_NAME, accountName);
    intent.putExtra(AccountManager.KEY_ACCOUNT_TYPE, AuthConstants.ACCOUNT_TYPE);
    if (authToken != null)
      intent.putExtra(AccountManager.KEY_AUTHTOKEN, authToken);
    intent.putExtra(AccountManager.KEY_PASSWORD, password);
    setAccountAuthenticatorResult(intent.getExtras());
    getActivity().setResult(Activity.RESULT_OK, intent);
    getActivity().finish();

    // Go back to the main activity
    startActivity(new Intent(activityContext, MainActivity.class));
  }

}