summaryrefslogtreecommitdiff
path: root/data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch
diff options
context:
space:
mode:
Diffstat (limited to 'data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch')
-rw-r--r--data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch992
1 files changed, 0 insertions, 992 deletions
diff --git a/data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch b/data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch
deleted file mode 100644
index e420727..0000000
--- a/data/patches/disable/0001-upgrade-mobile-fxa-to-v32.patch
+++ /dev/null
@@ -1,992 +0,0 @@
-diff -ruN mozilla-esr31/mobile/android/base/fxa/FirefoxAccounts.java mozilla-release/mobile/android/base/fxa/FirefoxAccounts.java
---- mozilla-esr31/mobile/android/base/fxa/FirefoxAccounts.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/FirefoxAccounts.java 2014-09-24 03:05:32.000000000 +0200
-@@ -6,13 +6,18 @@
-
- import java.io.File;
- import java.util.EnumSet;
-+import java.util.Locale;
- import java.util.concurrent.CountDownLatch;
-
-+import org.mozilla.gecko.AppConstants;
-+import org.mozilla.gecko.R;
- import org.mozilla.gecko.background.common.log.Logger;
- import org.mozilla.gecko.fxa.authenticator.AccountPickler;
- import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
-+import org.mozilla.gecko.fxa.login.State;
- import org.mozilla.gecko.fxa.sync.FxAccountSyncAdapter;
- import org.mozilla.gecko.fxa.sync.FxAccountSyncStatusHelper;
-+import org.mozilla.gecko.fxa.tasks.FxAccountCodeResender;
- import org.mozilla.gecko.sync.ThreadPool;
- import org.mozilla.gecko.sync.Utils;
-
-@@ -20,6 +25,7 @@
- import android.accounts.AccountManager;
- import android.content.ContentResolver;
- import android.content.Context;
-+import android.content.res.Resources;
- import android.os.Bundle;
-
- /**
-@@ -152,6 +158,38 @@
- return null;
- }
-
-+ /**
-+ * @return
-+ * the {@link State} instance associated with the current account, or <code>null</code> if
-+ * no accounts exist.
-+ */
-+ public static State getFirefoxAccountState(final Context context) {
-+ final Account account = getFirefoxAccount(context);
-+ if (account == null) {
-+ return null;
-+ }
-+
-+ final AndroidFxAccount fxAccount = new AndroidFxAccount(context, account);
-+ try {
-+ return fxAccount.getState();
-+ } catch (final Exception ex) {
-+ Logger.warn(LOG_TAG, "Could not get FX account state.", ex);
-+ return null;
-+ }
-+ }
-+
-+ /*
-+ * @param context Android context
-+ * @return the email address associated with the configured Firefox account if one exists; null otherwise.
-+ */
-+ public static String getFirefoxAccountEmail(final Context context) {
-+ final Account account = getFirefoxAccount(context);
-+ if (account == null) {
-+ return null;
-+ }
-+ return account.name;
-+ }
-+
- protected static void putHintsToSync(final Bundle extras, EnumSet<SyncHint> syncHints) {
- // stagesToSync and stagesToSkip are allowed to be null.
- if (syncHints == null) {
-@@ -264,4 +302,33 @@
- // stopObserving null-checks its argument.
- FxAccountSyncStatusHelper.getInstance().stopObserving(syncStatusListener);
- }
-+
-+ public static String getOldSyncUpgradeURL(final Resources res, final Locale locale) {
-+ final String VERSION = AppConstants.MOZ_APP_VERSION;
-+ final String OS = AppConstants.OS_TARGET;
-+ final String LOCALE = Utils.getLanguageTag(locale);
-+ return res.getString(R.string.fxaccount_link_old_firefox, VERSION, OS, LOCALE);
-+ }
-+
-+ /**
-+ * Resends the account verification email, and displays an appropriate
-+ * toast on both send success and failure. Note that because the underlying implementation
-+ * uses {@link AsyncTask}, the provided context must be UI-capable, and this
-+ * method called from the UI thread (see
-+ * {@link org.mozilla.gecko.fxa.tasks.FxAccountCodeResender#resendCode(Context, AndroidFxAccount)}
-+ * for more).
-+ *
-+ * @param context a UI-capable Android context.
-+ * @return true if an account exists, false otherwise.
-+ */
-+ public static boolean resendVerificationEmail(final Context context) {
-+ final Account account = getFirefoxAccount(context);
-+ if (account == null) {
-+ return false;
-+ }
-+
-+ final AndroidFxAccount fxAccount = new AndroidFxAccount(context, account);
-+ FxAccountCodeResender.resendCode(context, fxAccount);
-+ return true;
-+ }
- }
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountAbstractSetupActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountAbstractSetupActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountAbstractSetupActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountAbstractSetupActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -19,10 +19,10 @@
- import org.mozilla.gecko.background.fxa.PasswordStretcher;
- import org.mozilla.gecko.background.fxa.QuickPasswordStretcher;
- import org.mozilla.gecko.fxa.FxAccountConstants;
--import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.ProgressDisplay;
- import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
- import org.mozilla.gecko.fxa.login.Engaged;
- import org.mozilla.gecko.fxa.login.State;
-+import org.mozilla.gecko.fxa.tasks.FxAccountSetupTask.ProgressDisplay;
- import org.mozilla.gecko.sync.SyncConfiguration;
- import org.mozilla.gecko.sync.setup.Constants;
- import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountConfirmAccountActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountConfirmAccountActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountConfirmAccountActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountConfirmAccountActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -4,21 +4,15 @@
-
- package org.mozilla.gecko.fxa.activities;
-
--import java.util.concurrent.Executor;
--import java.util.concurrent.Executors;
--
- import org.mozilla.gecko.R;
- import org.mozilla.gecko.background.common.log.Logger;
--import org.mozilla.gecko.background.fxa.FxAccountClient;
--import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
--import org.mozilla.gecko.background.fxa.FxAccountClient20;
--import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
- import org.mozilla.gecko.fxa.FirefoxAccounts;
- import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
- import org.mozilla.gecko.fxa.login.Engaged;
- import org.mozilla.gecko.fxa.login.State;
- import org.mozilla.gecko.fxa.login.State.Action;
- import org.mozilla.gecko.fxa.sync.FxAccountSyncStatusHelper;
-+import org.mozilla.gecko.fxa.tasks.FxAccountCodeResender;
- import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
-
- import android.accounts.Account;
-@@ -28,7 +22,6 @@
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.TextView;
--import android.widget.Toast;
-
- /**
- * Activity which displays account created successfully screen to the user, and
-@@ -164,76 +157,8 @@
- resendLink.setClickable(resendLinkShouldBeEnabled);
- }
-
-- public static class FxAccountResendCodeTask extends FxAccountSetupTask<Void> {
-- protected static final String LOG_TAG = FxAccountResendCodeTask.class.getSimpleName();
--
-- protected final byte[] sessionToken;
--
-- public FxAccountResendCodeTask(Context context, byte[] sessionToken, FxAccountClient client, RequestDelegate<Void> delegate) {
-- super(context, null, client, delegate);
-- this.sessionToken = sessionToken;
-- }
--
-- @Override
-- protected InnerRequestDelegate<Void> doInBackground(Void... arg0) {
-- try {
-- client.resendCode(sessionToken, innerDelegate);
-- latch.await();
-- return innerDelegate;
-- } catch (Exception e) {
-- Logger.error(LOG_TAG, "Got exception signing in.", e);
-- delegate.handleError(e);
-- }
-- return null;
-- }
-- }
--
-- protected static class ResendCodeDelegate implements RequestDelegate<Void> {
-- public final Context context;
--
-- public ResendCodeDelegate(Context context) {
-- this.context = context;
-- }
--
-- @Override
-- public void handleError(Exception e) {
-- Logger.warn(LOG_TAG, "Got exception requesting fresh confirmation link; ignoring.", e);
-- Toast.makeText(context, R.string.fxaccount_confirm_account_verification_link_not_sent, Toast.LENGTH_LONG).show();
-- }
--
-- @Override
-- public void handleFailure(FxAccountClientRemoteException e) {
-- handleError(e);
-- }
--
-- @Override
-- public void handleSuccess(Void result) {
-- Toast.makeText(context, R.string.fxaccount_confirm_account_verification_link_sent, Toast.LENGTH_SHORT).show();
-- }
-- }
--
-- public static void resendCode(Context context, AndroidFxAccount fxAccount) {
-- RequestDelegate<Void> delegate = new ResendCodeDelegate(context);
--
-- byte[] sessionToken;
-- try {
-- sessionToken = ((Engaged) fxAccount.getState()).getSessionToken();
-- } catch (Exception e) {
-- delegate.handleError(e);
-- return;
-- }
-- if (sessionToken == null) {
-- delegate.handleError(new IllegalStateException("sessionToken should not be null"));
-- return;
-- }
--
-- Executor executor = Executors.newSingleThreadExecutor();
-- FxAccountClient client = new FxAccountClient20(fxAccount.getAccountServerURI(), executor);
-- new FxAccountResendCodeTask(context, sessionToken, client, delegate).execute();
-- }
--
- @Override
- public void onClick(View v) {
-- resendCode(this, fxAccount);
-+ FxAccountCodeResender.resendCode(this, fxAccount);
- }
- }
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountCreateAccountActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountCreateAccountActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountCreateAccountActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountCreateAccountActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -21,7 +21,7 @@
- import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
- import org.mozilla.gecko.background.fxa.PasswordStretcher;
- import org.mozilla.gecko.fxa.FxAccountConstants;
--import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.FxAccountCreateAccountTask;
-+import org.mozilla.gecko.fxa.tasks.FxAccountCreateAccountTask;
-
- import android.app.AlertDialog;
- import android.app.Dialog;
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountGetStartedActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountGetStartedActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountGetStartedActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountGetStartedActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -6,13 +6,11 @@
-
- import java.util.Locale;
-
--import org.mozilla.gecko.AppConstants;
- import org.mozilla.gecko.R;
- import org.mozilla.gecko.background.common.log.Logger;
- import org.mozilla.gecko.background.fxa.FxAccountAgeLockoutHelper;
- import org.mozilla.gecko.fxa.FirefoxAccounts;
- import org.mozilla.gecko.fxa.FxAccountConstants;
--import org.mozilla.gecko.sync.Utils;
- import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
- import org.mozilla.gecko.sync.setup.activities.LocaleAware;
-
-@@ -109,11 +107,7 @@
- protected void linkifyOldFirefoxLink() {
- TextView oldFirefox = (TextView) findViewById(R.id.old_firefox);
- String text = getResources().getString(R.string.fxaccount_getting_started_old_firefox);
-- String VERSION = AppConstants.MOZ_APP_VERSION;
-- String OS = AppConstants.OS_TARGET;
--
-- String LOCALE = Utils.getLanguageTag(Locale.getDefault());
-- String url = getResources().getString(R.string.fxaccount_link_old_firefox, VERSION, OS, LOCALE);
-+ final String url = FirefoxAccounts.getOldSyncUpgradeURL(getResources(), Locale.getDefault());
- FxAccountConstants.pii(LOG_TAG, "Old Firefox url is: " + url); // Don't want to leak locale in particular.
- ActivityUtils.linkTextView(oldFirefox, text, url);
- }
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountSetupTask.java mozilla-release/mobile/android/base/fxa/activities/FxAccountSetupTask.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountSetupTask.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountSetupTask.java 1970-01-01 01:00:00.000000000 +0100
-@@ -1,172 +0,0 @@
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--package org.mozilla.gecko.fxa.activities;
--
--import java.io.UnsupportedEncodingException;
--import java.util.concurrent.CountDownLatch;
--
--import org.mozilla.gecko.background.common.log.Logger;
--import org.mozilla.gecko.background.fxa.FxAccountClient;
--import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
--import org.mozilla.gecko.background.fxa.FxAccountClient20.LoginResponse;
--import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
--import org.mozilla.gecko.background.fxa.PasswordStretcher;
--import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.InnerRequestDelegate;
--
--import android.content.Context;
--import android.os.AsyncTask;
--
--/**
-- * An <code>AsyncTask</code> wrapper around signing up for, and signing in to, a
-- * Firefox Account.
-- * <p>
-- * It's strange to add explicit blocking to callback-threading code, but we do
-- * it here to take advantage of Android's built in support for background work.
-- * We really want to avoid making a threading mistake that brings down the whole
-- * process.
-- */
--abstract class FxAccountSetupTask<T> extends AsyncTask<Void, Void, InnerRequestDelegate<T>> {
-- private static final String LOG_TAG = FxAccountSetupTask.class.getSimpleName();
--
-- public interface ProgressDisplay {
-- public void showProgress();
-- public void dismissProgress();
-- }
--
-- protected final Context context;
-- protected final FxAccountClient client;
-- protected final ProgressDisplay progressDisplay;
--
-- // Initialized lazily.
-- protected byte[] quickStretchedPW;
--
-- // AsyncTask's are one-time-use, so final members are fine.
-- protected final CountDownLatch latch = new CountDownLatch(1);
-- protected final InnerRequestDelegate<T> innerDelegate = new InnerRequestDelegate<T>(latch);
--
-- protected final RequestDelegate<T> delegate;
--
-- public FxAccountSetupTask(Context context, ProgressDisplay progressDisplay, FxAccountClient client, RequestDelegate<T> delegate) {
-- this.context = context;
-- this.client = client;
-- this.delegate = delegate;
-- this.progressDisplay = progressDisplay;
-- }
--
-- @Override
-- protected void onPreExecute() {
-- if (progressDisplay != null) {
-- progressDisplay.showProgress();
-- }
-- }
--
-- @Override
-- protected void onPostExecute(InnerRequestDelegate<T> result) {
-- if (progressDisplay != null) {
-- progressDisplay.dismissProgress();
-- }
--
-- // We are on the UI thread, and need to invoke these callbacks here to allow UI updating.
-- if (innerDelegate.failure != null) {
-- delegate.handleFailure(innerDelegate.failure);
-- } else if (innerDelegate.exception != null) {
-- delegate.handleError(innerDelegate.exception);
-- } else {
-- delegate.handleSuccess(result.response);
-- }
-- }
--
-- @Override
-- protected void onCancelled(InnerRequestDelegate<T> result) {
-- if (progressDisplay != null) {
-- progressDisplay.dismissProgress();
-- }
-- delegate.handleError(new IllegalStateException("Task was cancelled."));
-- }
--
-- protected static class InnerRequestDelegate<T> implements RequestDelegate<T> {
-- protected final CountDownLatch latch;
-- public T response = null;
-- public Exception exception = null;
-- public FxAccountClientRemoteException failure = null;
--
-- protected InnerRequestDelegate(CountDownLatch latch) {
-- this.latch = latch;
-- }
--
-- @Override
-- public void handleError(Exception e) {
-- Logger.error(LOG_TAG, "Got exception.");
-- this.exception = e;
-- latch.countDown();
-- }
--
-- @Override
-- public void handleFailure(FxAccountClientRemoteException e) {
-- Logger.warn(LOG_TAG, "Got failure.");
-- this.failure = e;
-- latch.countDown();
-- }
--
-- @Override
-- public void handleSuccess(T result) {
-- Logger.info(LOG_TAG, "Got success.");
-- this.response = result;
-- latch.countDown();
-- }
-- }
--
-- public static class FxAccountCreateAccountTask extends FxAccountSetupTask<LoginResponse> {
-- private static final String LOG_TAG = FxAccountCreateAccountTask.class.getSimpleName();
--
-- protected final byte[] emailUTF8;
-- protected final PasswordStretcher passwordStretcher;
--
-- public FxAccountCreateAccountTask(Context context, ProgressDisplay progressDisplay, String email, PasswordStretcher passwordStretcher, FxAccountClient client, RequestDelegate<LoginResponse> delegate) throws UnsupportedEncodingException {
-- super(context, progressDisplay, client, delegate);
-- this.emailUTF8 = email.getBytes("UTF-8");
-- this.passwordStretcher = passwordStretcher;
-- }
--
-- @Override
-- protected InnerRequestDelegate<LoginResponse> doInBackground(Void... arg0) {
-- try {
-- client.createAccountAndGetKeys(emailUTF8, passwordStretcher, innerDelegate);
-- latch.await();
-- return innerDelegate;
-- } catch (Exception e) {
-- Logger.error(LOG_TAG, "Got exception logging in.", e);
-- delegate.handleError(e);
-- }
-- return null;
-- }
-- }
--
-- public static class FxAccountSignInTask extends FxAccountSetupTask<LoginResponse> {
-- protected static final String LOG_TAG = FxAccountSignInTask.class.getSimpleName();
--
-- protected final byte[] emailUTF8;
-- protected final PasswordStretcher passwordStretcher;
--
-- public FxAccountSignInTask(Context context, ProgressDisplay progressDisplay, String email, PasswordStretcher passwordStretcher, FxAccountClient client, RequestDelegate<LoginResponse> delegate) throws UnsupportedEncodingException {
-- super(context, progressDisplay, client, delegate);
-- this.emailUTF8 = email.getBytes("UTF-8");
-- this.passwordStretcher = passwordStretcher;
-- }
--
-- @Override
-- protected InnerRequestDelegate<LoginResponse> doInBackground(Void... arg0) {
-- try {
-- client.loginAndGetKeys(emailUTF8, passwordStretcher, innerDelegate);
-- latch.await();
-- return innerDelegate;
-- } catch (Exception e) {
-- Logger.error(LOG_TAG, "Got exception signing in.", e);
-- delegate.handleError(e);
-- }
-- return null;
-- }
-- }
--}
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountSignInActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountSignInActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountSignInActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountSignInActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -16,7 +16,7 @@
- import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
- import org.mozilla.gecko.background.fxa.PasswordStretcher;
- import org.mozilla.gecko.fxa.FxAccountConstants;
--import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.FxAccountSignInTask;
-+import org.mozilla.gecko.fxa.tasks.FxAccountSignInTask;
- import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
-
- import android.content.Intent;
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountStatusFragment.java mozilla-release/mobile/android/base/fxa/activities/FxAccountStatusFragment.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountStatusFragment.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountStatusFragment.java 2014-09-24 03:05:32.000000000 +0200
-@@ -17,6 +17,8 @@
- import org.mozilla.gecko.fxa.login.Married;
- import org.mozilla.gecko.fxa.login.State;
- import org.mozilla.gecko.fxa.sync.FxAccountSyncStatusHelper;
-+import org.mozilla.gecko.fxa.tasks.FxAccountCodeResender;
-+import org.mozilla.gecko.sync.SharedPreferencesClientsDataDelegate;
- import org.mozilla.gecko.sync.SyncConfiguration;
-
- import android.accounts.Account;
-@@ -27,10 +29,13 @@
- import android.os.Bundle;
- import android.os.Handler;
- import android.preference.CheckBoxPreference;
-+import android.preference.EditTextPreference;
- import android.preference.Preference;
-+import android.preference.Preference.OnPreferenceChangeListener;
- import android.preference.Preference.OnPreferenceClickListener;
- import android.preference.PreferenceCategory;
- import android.preference.PreferenceScreen;
-+import android.text.TextUtils;
-
- /**
- * A fragment that displays the status of an AndroidFxAccount.
-@@ -38,7 +43,9 @@
- * The owning activity is responsible for providing an AndroidFxAccount at
- * appropriate times.
- */
--public class FxAccountStatusFragment extends PreferenceFragment implements OnPreferenceClickListener {
-+public class FxAccountStatusFragment
-+ extends PreferenceFragment
-+ implements OnPreferenceClickListener, OnPreferenceChangeListener {
- private static final String LOG_TAG = FxAccountStatusFragment.class.getSimpleName();
-
- // When a checkbox is toggled, wait 5 seconds (for other checkbox actions)
-@@ -64,7 +71,12 @@
- protected CheckBoxPreference tabsPreference;
- protected CheckBoxPreference passwordsPreference;
-
-+ protected EditTextPreference deviceNamePreference;
-+
- protected volatile AndroidFxAccount fxAccount;
-+ // The contract is: when fxAccount is non-null, then clientsDataDelegate is
-+ // non-null. If violated then an IllegalStateException is thrown.
-+ protected volatile SharedPreferencesClientsDataDelegate clientsDataDelegate;
-
- // Used to post delayed sync requests.
- protected Handler handler;
-@@ -87,6 +99,10 @@
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-+ addPreferences();
-+ }
-+
-+ protected void addPreferences() {
- addPreferencesFromResource(R.xml.fxaccount_status_prefscreen);
-
- emailPreference = ensureFindPreference("email");
-@@ -118,6 +134,9 @@
- historyPreference.setOnPreferenceClickListener(this);
- tabsPreference.setOnPreferenceClickListener(this);
- passwordsPreference.setOnPreferenceClickListener(this);
-+
-+ deviceNamePreference = (EditTextPreference) ensureFindPreference("device_name");
-+ deviceNamePreference.setOnPreferenceChangeListener(this);
- }
-
- /**
-@@ -142,7 +161,7 @@
- }
-
- if (preference == needsVerificationPreference) {
-- FxAccountConfirmAccountActivity.resendCode(getActivity().getApplicationContext(), fxAccount);
-+ FxAccountCodeResender.resendCode(getActivity().getApplicationContext(), fxAccount);
-
- Intent intent = new Intent(getActivity(), FxAccountConfirmAccountActivity.class);
- // Per http://stackoverflow.com/a/8992365, this triggers a known bug with
-@@ -176,6 +195,8 @@
- historyPreference.setEnabled(enabled);
- tabsPreference.setEnabled(enabled);
- passwordsPreference.setEnabled(enabled);
-+ // Since we can't sync, we can't update our remote client record.
-+ deviceNamePreference.setEnabled(enabled);
- }
-
- /**
-@@ -293,6 +314,14 @@
- throw new IllegalArgumentException("fxAccount must not be null");
- }
- this.fxAccount = fxAccount;
-+ try {
-+ this.clientsDataDelegate = new SharedPreferencesClientsDataDelegate(fxAccount.getSyncPrefs());
-+ } catch (Exception e) {
-+ Logger.error(LOG_TAG, "Got exception fetching Sync prefs associated to Firefox Account; aborting.", e);
-+ // Something is terribly wrong; best to get a stack trace rather than
-+ // continue with a null clients delegate.
-+ throw new IllegalStateException(e);
-+ }
-
- handler = new Handler(); // Attached to current (assumed to be UI) thread.
-
-@@ -318,6 +347,17 @@
- FxAccountSyncStatusHelper.getInstance().stopObserving(syncStatusDelegate);
- }
-
-+ protected void hardRefresh() {
-+ // This is the only way to guarantee that the EditText dialogs created by
-+ // EditTextPreferences are re-created. This works around the issue described
-+ // at http://androiddev.orkitra.com/?p=112079.
-+ final PreferenceScreen statusScreen = (PreferenceScreen) ensureFindPreference("status_screen");
-+ statusScreen.removeAll();
-+ addPreferences();
-+
-+ refresh();
-+ }
-+
- protected void refresh() {
- // refresh is called from our onResume, which can happen before the owning
- // Activity tells us about an account (via our public
-@@ -371,6 +411,10 @@
- // No matter our state, we should update the checkboxes.
- updateSelectedEngines();
- }
-+
-+ final String clientName = clientsDataDelegate.getClientName();
-+ deviceNamePreference.setSummary(clientName);
-+ deviceNamePreference.setText(clientName);
- }
-
- /**
-@@ -570,4 +614,22 @@
- button.setOnPreferenceClickListener(listener);
- }
- }
-+
-+ @Override
-+ public boolean onPreferenceChange(Preference preference, Object newValue) {
-+ if (preference == deviceNamePreference) {
-+ String newClientName = (String) newValue;
-+ if (TextUtils.isEmpty(newClientName)) {
-+ newClientName = clientsDataDelegate.getDefaultClientName();
-+ }
-+ final long now = System.currentTimeMillis();
-+ clientsDataDelegate.setClientName(newClientName, now);
-+ requestDelayedSync(); // Try to update our remote client record.
-+ hardRefresh(); // Updates the value displayed to the user, among other things.
-+ return true;
-+ }
-+
-+ // For everything else, accept the change.
-+ return true;
-+ }
- }
-diff -ruN mozilla-esr31/mobile/android/base/fxa/activities/FxAccountUpdateCredentialsActivity.java mozilla-release/mobile/android/base/fxa/activities/FxAccountUpdateCredentialsActivity.java
---- mozilla-esr31/mobile/android/base/fxa/activities/FxAccountUpdateCredentialsActivity.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/activities/FxAccountUpdateCredentialsActivity.java 2014-09-24 03:05:32.000000000 +0200
-@@ -18,11 +18,11 @@
- import org.mozilla.gecko.background.fxa.PasswordStretcher;
- import org.mozilla.gecko.fxa.FirefoxAccounts;
- import org.mozilla.gecko.fxa.FxAccountConstants;
--import org.mozilla.gecko.fxa.activities.FxAccountSetupTask.FxAccountSignInTask;
- import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
- import org.mozilla.gecko.fxa.login.Engaged;
- import org.mozilla.gecko.fxa.login.State;
- import org.mozilla.gecko.fxa.login.State.StateLabel;
-+import org.mozilla.gecko.fxa.tasks.FxAccountSignInTask;
- import org.mozilla.gecko.sync.setup.activities.ActivityUtils;
-
- import android.os.Bundle;
-diff -ruN mozilla-esr31/mobile/android/base/fxa/sync/FxAccountSyncAdapter.java mozilla-release/mobile/android/base/fxa/sync/FxAccountSyncAdapter.java
---- mozilla-esr31/mobile/android/base/fxa/sync/FxAccountSyncAdapter.java 2015-02-25 19:21:06.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/sync/FxAccountSyncAdapter.java 2014-09-24 03:05:33.000000000 +0200
-@@ -357,7 +357,11 @@
-
- FxAccountGlobalSession globalSession = null;
- try {
-- ClientsDataDelegate clientsDataDelegate = new SharedPreferencesClientsDataDelegate(sharedPrefs);
-+ final ClientsDataDelegate clientsDataDelegate = new SharedPreferencesClientsDataDelegate(sharedPrefs);
-+ if (FxAccountConstants.LOG_PERSONAL_INFORMATION) {
-+ FxAccountConstants.pii(LOG_TAG, "Client device name is: '" + clientsDataDelegate.getClientName() + "'.");
-+ FxAccountConstants.pii(LOG_TAG, "Client device data last modified: " + clientsDataDelegate.getLastModifiedTimestamp());
-+ }
-
- // We compute skew over time using SkewHandler. This yields an unchanging
- // skew adjustment that the HawkAuthHeaderProvider uses to adjust its
-diff -ruN mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountCodeResender.java mozilla-release/mobile/android/base/fxa/tasks/FxAccountCodeResender.java
---- mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountCodeResender.java 1970-01-01 01:00:00.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/tasks/FxAccountCodeResender.java 2014-09-24 03:05:33.000000000 +0200
-@@ -0,0 +1,108 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+package org.mozilla.gecko.fxa.tasks;
-+
-+import java.util.concurrent.Executor;
-+import java.util.concurrent.Executors;
-+
-+import org.mozilla.gecko.R;
-+import org.mozilla.gecko.background.common.log.Logger;
-+import org.mozilla.gecko.background.fxa.FxAccountClient;
-+import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
-+import org.mozilla.gecko.background.fxa.FxAccountClient20;
-+import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
-+import org.mozilla.gecko.fxa.authenticator.AndroidFxAccount;
-+import org.mozilla.gecko.fxa.login.Engaged;
-+
-+import android.content.Context;
-+import android.widget.Toast;
-+
-+/**
-+ * A helper class that provides a simple interface for requesting
-+ * a Firefox Account verification email to be resent.
-+ */
-+public class FxAccountCodeResender {
-+ private static final String LOG_TAG = FxAccountCodeResender.class.getSimpleName();
-+
-+ private static class FxAccountResendCodeTask extends FxAccountSetupTask<Void> {
-+ protected static final String LOG_TAG = FxAccountResendCodeTask.class.getSimpleName();
-+
-+ protected final byte[] sessionToken;
-+
-+ public FxAccountResendCodeTask(Context context, byte[] sessionToken, FxAccountClient client, RequestDelegate<Void> delegate) {
-+ super(context, null, client, delegate);
-+ this.sessionToken = sessionToken;
-+ }
-+
-+ @Override
-+ protected InnerRequestDelegate<Void> doInBackground(Void... arg0) {
-+ try {
-+ client.resendCode(sessionToken, innerDelegate);
-+ latch.await();
-+ return innerDelegate;
-+ } catch (Exception e) {
-+ Logger.error(LOG_TAG, "Got exception signing in.", e);
-+ delegate.handleError(e);
-+ }
-+ return null;
-+ }
-+ }
-+
-+ private static class ResendCodeDelegate implements RequestDelegate<Void> {
-+ public final Context context;
-+
-+ public ResendCodeDelegate(Context context) {
-+ this.context = context;
-+ }
-+
-+ @Override
-+ public void handleError(Exception e) {
-+ Logger.warn(LOG_TAG, "Got exception requesting fresh confirmation link; ignoring.", e);
-+ Toast.makeText(context, R.string.fxaccount_confirm_account_verification_link_not_sent, Toast.LENGTH_LONG).show();
-+ }
-+
-+ @Override
-+ public void handleFailure(FxAccountClientRemoteException e) {
-+ handleError(e);
-+ }
-+
-+ @Override
-+ public void handleSuccess(Void result) {
-+ Toast.makeText(context, R.string.fxaccount_confirm_account_verification_link_sent, Toast.LENGTH_SHORT).show();
-+ }
-+ }
-+
-+ /**
-+ * Resends the account verification email, and displays an appropriate
-+ * toast on both send success and failure. Note that because the underlying implementation
-+ * uses {@link AsyncTask}, the provided context must be UI-capable and
-+ * this method called from the UI thread.
-+ *
-+ * Note that it may actually be possible to run this (and the {@link AsyncTask}) method
-+ * from a background thread - but this hasn't been tested.
-+ *
-+ * @param context A UI-capable Android context.
-+ * @param fxAccount The Firefox Account to resend the code to.
-+ */
-+ public static void resendCode(Context context, AndroidFxAccount fxAccount) {
-+ RequestDelegate<Void> delegate = new ResendCodeDelegate(context);
-+
-+ byte[] sessionToken;
-+ try {
-+ sessionToken = ((Engaged) fxAccount.getState()).getSessionToken();
-+ } catch (Exception e) {
-+ delegate.handleError(e);
-+ return;
-+ }
-+ if (sessionToken == null) {
-+ delegate.handleError(new IllegalStateException("sessionToken should not be null"));
-+ return;
-+ }
-+
-+ Executor executor = Executors.newSingleThreadExecutor();
-+ FxAccountClient client = new FxAccountClient20(fxAccount.getAccountServerURI(), executor);
-+ new FxAccountResendCodeTask(context, sessionToken, client, delegate).execute();
-+ }
-+}
-diff -ruN mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountCreateAccountTask.java mozilla-release/mobile/android/base/fxa/tasks/FxAccountCreateAccountTask.java
---- mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountCreateAccountTask.java 1970-01-01 01:00:00.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/tasks/FxAccountCreateAccountTask.java 2014-09-24 03:05:33.000000000 +0200
-@@ -0,0 +1,41 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+package org.mozilla.gecko.fxa.tasks;
-+
-+import java.io.UnsupportedEncodingException;
-+
-+import org.mozilla.gecko.background.common.log.Logger;
-+import org.mozilla.gecko.background.fxa.FxAccountClient;
-+import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
-+import org.mozilla.gecko.background.fxa.FxAccountClient20.LoginResponse;
-+import org.mozilla.gecko.background.fxa.PasswordStretcher;
-+
-+import android.content.Context;
-+
-+public class FxAccountCreateAccountTask extends FxAccountSetupTask<LoginResponse> {
-+ private static final String LOG_TAG = FxAccountCreateAccountTask.class.getSimpleName();
-+
-+ protected final byte[] emailUTF8;
-+ protected final PasswordStretcher passwordStretcher;
-+
-+ public FxAccountCreateAccountTask(Context context, ProgressDisplay progressDisplay, String email, PasswordStretcher passwordStretcher, FxAccountClient client, RequestDelegate<LoginResponse> delegate) throws UnsupportedEncodingException {
-+ super(context, progressDisplay, client, delegate);
-+ this.emailUTF8 = email.getBytes("UTF-8");
-+ this.passwordStretcher = passwordStretcher;
-+ }
-+
-+ @Override
-+ protected InnerRequestDelegate<LoginResponse> doInBackground(Void... arg0) {
-+ try {
-+ client.createAccountAndGetKeys(emailUTF8, passwordStretcher, innerDelegate);
-+ latch.await();
-+ return innerDelegate;
-+ } catch (Exception e) {
-+ Logger.error(LOG_TAG, "Got exception logging in.", e);
-+ delegate.handleError(e);
-+ }
-+ return null;
-+ }
-+}
-diff -ruN mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountSetupTask.java mozilla-release/mobile/android/base/fxa/tasks/FxAccountSetupTask.java
---- mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountSetupTask.java 1970-01-01 01:00:00.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/tasks/FxAccountSetupTask.java 2014-09-24 03:05:33.000000000 +0200
-@@ -0,0 +1,117 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+package org.mozilla.gecko.fxa.tasks;
-+
-+import java.util.concurrent.CountDownLatch;
-+
-+import org.mozilla.gecko.background.common.log.Logger;
-+import org.mozilla.gecko.background.fxa.FxAccountClient;
-+import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
-+import org.mozilla.gecko.background.fxa.FxAccountClientException.FxAccountClientRemoteException;
-+import org.mozilla.gecko.fxa.tasks.FxAccountSetupTask.InnerRequestDelegate;
-+
-+import android.content.Context;
-+import android.os.AsyncTask;
-+
-+/**
-+ * An <code>AsyncTask</code> wrapper around signing up for, and signing in to, a
-+ * Firefox Account.
-+ * <p>
-+ * It's strange to add explicit blocking to callback-threading code, but we do
-+ * it here to take advantage of Android's built in support for background work.
-+ * We really want to avoid making a threading mistake that brings down the whole
-+ * process.
-+ */
-+public abstract class FxAccountSetupTask<T> extends AsyncTask<Void, Void, InnerRequestDelegate<T>> {
-+ private static final String LOG_TAG = FxAccountSetupTask.class.getSimpleName();
-+
-+ public interface ProgressDisplay {
-+ public void showProgress();
-+ public void dismissProgress();
-+ }
-+
-+ protected final Context context;
-+ protected final FxAccountClient client;
-+ protected final ProgressDisplay progressDisplay;
-+
-+ // Initialized lazily.
-+ protected byte[] quickStretchedPW;
-+
-+ // AsyncTask's are one-time-use, so final members are fine.
-+ protected final CountDownLatch latch = new CountDownLatch(1);
-+ protected final InnerRequestDelegate<T> innerDelegate = new InnerRequestDelegate<T>(latch);
-+
-+ protected final RequestDelegate<T> delegate;
-+
-+ public FxAccountSetupTask(Context context, ProgressDisplay progressDisplay, FxAccountClient client, RequestDelegate<T> delegate) {
-+ this.context = context;
-+ this.client = client;
-+ this.delegate = delegate;
-+ this.progressDisplay = progressDisplay;
-+ }
-+
-+ @Override
-+ protected void onPreExecute() {
-+ if (progressDisplay != null) {
-+ progressDisplay.showProgress();
-+ }
-+ }
-+
-+ @Override
-+ protected void onPostExecute(InnerRequestDelegate<T> result) {
-+ if (progressDisplay != null) {
-+ progressDisplay.dismissProgress();
-+ }
-+
-+ // We are on the UI thread, and need to invoke these callbacks here to allow UI updating.
-+ if (innerDelegate.failure != null) {
-+ delegate.handleFailure(innerDelegate.failure);
-+ } else if (innerDelegate.exception != null) {
-+ delegate.handleError(innerDelegate.exception);
-+ } else {
-+ delegate.handleSuccess(result.response);
-+ }
-+ }
-+
-+ @Override
-+ protected void onCancelled(InnerRequestDelegate<T> result) {
-+ if (progressDisplay != null) {
-+ progressDisplay.dismissProgress();
-+ }
-+ delegate.handleError(new IllegalStateException("Task was cancelled."));
-+ }
-+
-+ protected static class InnerRequestDelegate<T> implements RequestDelegate<T> {
-+ protected final CountDownLatch latch;
-+ public T response = null;
-+ public Exception exception = null;
-+ public FxAccountClientRemoteException failure = null;
-+
-+ protected InnerRequestDelegate(CountDownLatch latch) {
-+ this.latch = latch;
-+ }
-+
-+ @Override
-+ public void handleError(Exception e) {
-+ Logger.error(LOG_TAG, "Got exception.");
-+ this.exception = e;
-+ latch.countDown();
-+ }
-+
-+ @Override
-+ public void handleFailure(FxAccountClientRemoteException e) {
-+ Logger.warn(LOG_TAG, "Got failure.");
-+ this.failure = e;
-+ latch.countDown();
-+ }
-+
-+ @Override
-+ public void handleSuccess(T result) {
-+ Logger.info(LOG_TAG, "Got success.");
-+ this.response = result;
-+ latch.countDown();
-+ }
-+ }
-+}
-diff -ruN mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountSignInTask.java mozilla-release/mobile/android/base/fxa/tasks/FxAccountSignInTask.java
---- mozilla-esr31/mobile/android/base/fxa/tasks/FxAccountSignInTask.java 1970-01-01 01:00:00.000000000 +0100
-+++ mozilla-release/mobile/android/base/fxa/tasks/FxAccountSignInTask.java 2014-09-24 03:05:33.000000000 +0200
-@@ -0,0 +1,41 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this
-+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+package org.mozilla.gecko.fxa.tasks;
-+
-+import java.io.UnsupportedEncodingException;
-+
-+import org.mozilla.gecko.background.common.log.Logger;
-+import org.mozilla.gecko.background.fxa.FxAccountClient;
-+import org.mozilla.gecko.background.fxa.FxAccountClient10.RequestDelegate;
-+import org.mozilla.gecko.background.fxa.FxAccountClient20.LoginResponse;
-+import org.mozilla.gecko.background.fxa.PasswordStretcher;
-+
-+import android.content.Context;
-+
-+public class FxAccountSignInTask extends FxAccountSetupTask<LoginResponse> {
-+ protected static final String LOG_TAG = FxAccountSignInTask.class.getSimpleName();
-+
-+ protected final byte[] emailUTF8;
-+ protected final PasswordStretcher passwordStretcher;
-+
-+ public FxAccountSignInTask(Context context, ProgressDisplay progressDisplay, String email, PasswordStretcher passwordStretcher, FxAccountClient client, RequestDelegate<LoginResponse> delegate) throws UnsupportedEncodingException {
-+ super(context, progressDisplay, client, delegate);
-+ this.emailUTF8 = email.getBytes("UTF-8");
-+ this.passwordStretcher = passwordStretcher;
-+ }
-+
-+ @Override
-+ protected InnerRequestDelegate<LoginResponse> doInBackground(Void... arg0) {
-+ try {
-+ client.loginAndGetKeys(emailUTF8, passwordStretcher, innerDelegate);
-+ latch.await();
-+ return innerDelegate;
-+ } catch (Exception e) {
-+ Logger.error(LOG_TAG, "Got exception signing in.", e);
-+ delegate.handleError(e);
-+ }
-+ return null;
-+ }
-+}
---- mozilla-esr31/mobile/android/base/android-services.mozbuild 2015-02-25 19:21:05.000000000 +0100
-+++ mozilla-release/mobile/android/base/android-services.mozbuild 2014-09-24 03:05:32.000000000 +0200
-@@ -555,7 +557,6 @@
- 'fxa/activities/FxAccountCreateAccountActivity.java',
- 'fxa/activities/FxAccountCreateAccountNotAllowedActivity.java',
- 'fxa/activities/FxAccountGetStartedActivity.java',
-- 'fxa/activities/FxAccountSetupTask.java',
- 'fxa/activities/FxAccountSignInActivity.java',
- 'fxa/activities/FxAccountStatusActivity.java',
- 'fxa/activities/FxAccountStatusFragment.java',
-@@ -589,6 +590,10 @@
- 'fxa/sync/FxAccountSyncService.java',
- 'fxa/sync/FxAccountSyncStatusHelper.java',
- 'fxa/sync/SchedulePolicy.java',
-+ 'fxa/tasks/FxAccountCodeResender.java',
-+ 'fxa/tasks/FxAccountCreateAccountTask.java',
-+ 'fxa/tasks/FxAccountSetupTask.java',
-+ 'fxa/tasks/FxAccountSignInTask.java',
- 'sync/AlreadySyncingException.java',
- 'sync/BackoffHandler.java',
- 'sync/BadRequiredFieldJSONException.java',