protected Bundle getExtrasForAccount() {
   final Bundle extras = new Bundle();
   final ExtendedJSONObject o = new ExtendedJSONObject();
   o.put(FxAccountAbstractSetupActivity.JSON_KEY_AUTH, fxAccount.getAccountServerURI());
   final ExtendedJSONObject services = new ExtendedJSONObject();
   services.put(FxAccountAbstractSetupActivity.JSON_KEY_SYNC, fxAccount.getTokenServerURI());
   services.put(FxAccountAbstractSetupActivity.JSON_KEY_PROFILE, fxAccount.getProfileServerURI());
   o.put(FxAccountAbstractSetupActivity.JSON_KEY_SERVICES, services);
   extras.putString(FxAccountAbstractSetupActivity.EXTRA_EXTRAS, o.toJSONString());
   return extras;
 }
 public void updateCredentials(String email, String password) {
   String serverURI = fxAccount.getAccountServerURI();
   Executor executor = Executors.newSingleThreadExecutor();
   FxAccountClient client = new FxAccountClient20(serverURI, executor);
   PasswordStretcher passwordStretcher = makePasswordStretcher(password);
   try {
     hideRemoteError();
     RequestDelegate<LoginResponse> delegate =
         new UpdateCredentialsDelegate(email, passwordStretcher, serverURI);
     new FxAccountSignInTask(
             this, this, email, passwordStretcher, client, getQueryParameters(), delegate)
         .execute();
   } catch (Exception e) {
     Logger.warn(LOG_TAG, "Got exception updating credentials for account.", e);
     showRemoteError(e, R.string.fxaccount_update_credentials_unknown_error);
   }
 }
 protected void updateAuthServerPreference() {
   final String authServer = fxAccount.getAccountServerURI();
   final boolean shouldBeShown =
       ALWAYS_SHOW_AUTH_SERVER
           || !FxAccountConstants.DEFAULT_AUTH_SERVER_ENDPOINT.equals(authServer);
   final boolean currentlyShown = null != findPreference(authServerPreference.getKey());
   if (currentlyShown != shouldBeShown) {
     if (shouldBeShown) {
       accountCategory.addPreference(authServerPreference);
     } else {
       accountCategory.removePreference(authServerPreference);
     }
   }
   // Always set the summary, because on first run, the preference is visible,
   // and the above block will be skipped if there is a custom value.
   authServerPreference.setSummary(authServer);
 }
  /**
   * Persist Firefox account to disk as a JSON object.
   *
   * @param AndroidFxAccount the account to persist to disk
   * @param filename name of file to persist to; must not contain path separators.
   */
  public static void pickle(final AndroidFxAccount account, final String filename) {
    final ExtendedJSONObject o = new ExtendedJSONObject();
    o.put(KEY_PICKLE_VERSION, Long.valueOf(PICKLE_VERSION));
    o.put(KEY_PICKLE_TIMESTAMP, Long.valueOf(System.currentTimeMillis()));

    o.put(KEY_ACCOUNT_VERSION, AndroidFxAccount.CURRENT_ACCOUNT_VERSION);
    o.put(KEY_ACCOUNT_TYPE, FxAccountConstants.ACCOUNT_TYPE);
    o.put(KEY_EMAIL, account.getEmail());
    o.put(KEY_PROFILE, account.getProfile());
    o.put(KEY_IDP_SERVER_URI, account.getAccountServerURI());
    o.put(KEY_TOKEN_SERVER_URI, account.getTokenServerURI());
    o.put(KEY_IS_SYNCING_ENABLED, account.isSyncing());

    // TODO: If prefs version changes under us, SyncPrefsPath will change, "clearing" prefs.

    final ExtendedJSONObject bundle = account.unbundle();
    if (bundle == null) {
      Logger.warn(LOG_TAG, "Unable to obtain account bundle; aborting.");
      return;
    }
    o.put(KEY_BUNDLE, bundle);

    writeToDisk(account.context, filename, o);
  }