Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninView.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/AccountFirstRunView.java b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninView.java |
| similarity index 84% |
| rename from chrome/android/java/src/org/chromium/chrome/browser/firstrun/AccountFirstRunView.java |
| rename to chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninView.java |
| index 5b83dffa4902df32d303f58437f9749883960160..da8ac03fca72dde2811359ae7bcdbcd23e8500cb 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/firstrun/AccountFirstRunView.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/signin/AccountSigninView.java |
| @@ -2,8 +2,9 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| -package org.chromium.chrome.browser.firstrun; |
| +package org.chromium.chrome.browser.signin; |
| +import android.app.FragmentManager; |
| import android.content.Context; |
| import android.graphics.Bitmap; |
| import android.graphics.drawable.Drawable; |
| @@ -24,10 +25,15 @@ import android.widget.Spinner; |
| import android.widget.TextView; |
| import org.chromium.base.ApiCompatibilityUtils; |
| +import org.chromium.base.metrics.RecordUserAction; |
| import org.chromium.chrome.R; |
| +import org.chromium.chrome.browser.firstrun.ImageCarousel; |
| import org.chromium.chrome.browser.firstrun.ImageCarousel.ImageCarouselPositionChangeListener; |
| +import org.chromium.chrome.browser.firstrun.ProfileDataCache; |
| +import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
| import org.chromium.chrome.browser.profiles.ProfileDownloader; |
| -import org.chromium.chrome.browser.signin.SigninManager; |
| +import org.chromium.chrome.browser.sync.ui.ConfirmImportSyncDataDialog; |
| +import org.chromium.chrome.browser.sync.ui.ConfirmImportSyncDataDialog.ImportSyncType; |
| import org.chromium.sync.signin.AccountManagerHelper; |
| import org.chromium.ui.text.SpanApplier; |
| import org.chromium.ui.text.SpanApplier.SpanInfo; |
| @@ -37,10 +43,10 @@ import java.util.List; |
| /** |
| * This view allows the user to select an account to log in to, add an account, |
| * cancel account selection, etc. Users of this class should |
| - * {@link AccountFirstRunView#setListener(Listener)} after the view has been |
| - * inflated. |
| + * {@link AccountSigninView#setListener(Listener)} and |
| + * {@link AccountSigninView#setDelegate(Delegate) after the view has been inflated. |
| */ |
| -public class AccountFirstRunView extends FrameLayout |
| +public class AccountSigninView extends FrameLayout |
| implements ImageCarouselPositionChangeListener, ProfileDownloader.Observer { |
| /** |
| @@ -59,7 +65,7 @@ public class AccountFirstRunView extends FrameLayout |
| /** |
| * The user selected an account. |
| - * This call will be followed by either {@link #onSettingsClicked} or |
| + * This call will be followed immediately by either {@link #onSettingsClicked} or |
| * {@link #onDoneClicked}. |
| * @param accountName The name of the account |
| */ |
| @@ -84,6 +90,18 @@ public class AccountFirstRunView extends FrameLayout |
| public void onFailedToSetForcedAccount(String forcedAccountName); |
| } |
| + // TODO(peconn): Investigate expanding the Delegate to simplify the Listener implementations. |
| + |
| + /** |
| + * Provides UI objects for new UI component creation. |
| + */ |
| + public interface Delegate { |
| + /** |
| + * Provides a FragmentManager for the view to create dialogs. |
| + */ |
| + public FragmentManager getFragmentManager(); |
| + } |
| + |
| private class SpinnerOnItemSelectedListener implements AdapterView.OnItemSelectedListener { |
| @Override |
| public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { |
| @@ -95,6 +113,7 @@ public class AccountFirstRunView extends FrameLayout |
| mSpinner.setSelection(oldPosition, false); |
| mListener.onNewAccount(); |
| + RecordUserAction.record("Signin_AddAccountToDevice"); |
| } else { |
| mAccountName = accountName; |
| if (!mPositionSetProgrammatically) mImageCarousel.scrollTo(pos, false, false); |
| @@ -107,7 +126,7 @@ public class AccountFirstRunView extends FrameLayout |
| } |
| } |
| - private static final String TAG = "AccountFirstRunView"; |
| + private static final String TAG = "AccountSigninView"; |
| private static final int EXPERIMENT_TITLE_VARIANT_MASK = 1; |
| private static final int EXPERIMENT_SUMMARY_VARIANT_MASK = 2; |
| @@ -126,6 +145,7 @@ public class AccountFirstRunView extends FrameLayout |
| private TextView mTitle; |
| private TextView mDescriptionText; |
| private Listener mListener; |
| + private Delegate mDelegate; |
| private Spinner mSpinner; |
| private Drawable mSpinnerBackground; |
| private String mForcedAccountName; |
| @@ -140,7 +160,7 @@ public class AccountFirstRunView extends FrameLayout |
| private boolean mHorizontalModeEnabled = true; |
| private boolean mShowSettingsSpan = true; |
| - public AccountFirstRunView(Context context, AttributeSet attrs) { |
| + public AccountSigninView(Context context, AttributeSet attrs) { |
| super(context, attrs); |
| mAccountManagerHelper = AccountManagerHelper.get(getContext().getApplicationContext()); |
| } |
| @@ -182,16 +202,16 @@ public class AccountFirstRunView extends FrameLayout |
| mDescriptionText = (TextView) findViewById(R.id.description); |
| // For the spans to be clickable. |
| mDescriptionText.setMovementMethod(LinkMovementMethod.getInstance()); |
| - mDescriptionTextId = R.string.fre_account_choice_description; |
| + mDescriptionTextId = R.string.signin_account_choice_description; |
| // TODO(peconn): Ensure this is changed to R.string.cancel when used in Settings > Sign In. |
| - mCancelButtonTextId = R.string.fre_skip_text; |
| + mCancelButtonTextId = R.string.no_thanks; |
| // Set the invisible TextView to contain the longest text the visible TextView can hold. |
| // It assumes that the signed in description for child accounts is the longest text. |
| ((TextView) findViewById(R.id.longest_description)).setText(getSignedInDescription(true)); |
| - mAddAnotherAccount = getResources().getString(R.string.fre_add_account); |
| + mAddAnotherAccount = getResources().getString(R.string.signin_add_account); |
| mSpinner = (Spinner) findViewById(R.id.google_accounts_spinner); |
| mSpinnerBackground = mSpinner.getBackground(); |
| @@ -213,13 +233,13 @@ public class AccountFirstRunView extends FrameLayout |
| public boolean performAccessibilityAction(View host, int action, Bundle args) { |
| if (mSpinner.getContentDescription() == null) { |
| mSpinner.setContentDescription(getResources().getString( |
| - R.string.accessibility_fre_account_spinner)); |
| + R.string.accessibility_signin_account_spinner)); |
| } |
| return super.performAccessibilityAction(host, action, args); |
| } |
| }); |
| - showSignInPage(); |
| + showSigninPage(); |
| } |
| @Override |
| @@ -236,7 +256,7 @@ public class AccountFirstRunView extends FrameLayout |
| // A new account has been added and the visibility has returned to us. |
| // The updateAccounts function will have selected the new account. |
| // Shortcut to confirm sign in page. |
| - showConfirmSignInPage(); |
| + checkForPreviousAccountThenShowConfirmSigninPage(); |
| } |
| } |
| } |
| @@ -247,10 +267,10 @@ public class AccountFirstRunView extends FrameLayout |
| assert MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY; |
| int width = MeasureSpec.getSize(widthMeasureSpec); |
| int height = MeasureSpec.getSize(heightMeasureSpec); |
| - LinearLayout content = (LinearLayout) findViewById(R.id.fre_content); |
| + LinearLayout content = (LinearLayout) findViewById(R.id.content); |
| int paddingStart = 0; |
| if (mHorizontalModeEnabled |
| - && width >= 2 * getResources().getDimension(R.dimen.fre_image_carousel_width) |
| + && width >= 2 * getResources().getDimension(R.dimen.signin_image_carousel_width) |
| && width > height) { |
| content.setOrientation(LinearLayout.HORIZONTAL); |
| paddingStart = getResources().getDimensionPixelSize(R.dimen.fre_margin); |
| @@ -297,7 +317,8 @@ public class AccountFirstRunView extends FrameLayout |
| } |
| mDescriptionTextId = (experimentGroup & EXPERIMENT_SUMMARY_VARIANT_MASK) != 0 |
| - ? R.string.sign_in_to_chrome_summary_variant : R.string.sign_in_to_chrome_summary; |
| + ? R.string.signin_sign_in_to_chrome_summary_variant |
| + : R.string.sign_in_to_chrome_summary; |
| if ((experimentGroup & EXPERIMENT_LAYOUT_VARIANT_MASK) != 0) { |
| mImageCarousel.setVisibility(GONE); |
| @@ -307,7 +328,7 @@ public class AccountFirstRunView extends FrameLayout |
| illustrationView.setBackgroundColor(ApiCompatibilityUtils.getColor(getResources(), |
| R.color.illustration_background_color)); |
| - LinearLayout linearLayout = (LinearLayout) findViewById(R.id.fre_account_linear_layout); |
| + LinearLayout linearLayout = (LinearLayout) findViewById(R.id.account_linear_layout); |
| linearLayout.addView(illustrationView, 0); |
| } |
| } |
| @@ -332,6 +353,14 @@ public class AccountFirstRunView extends FrameLayout |
| } |
| /** |
| + * Set the UI object creation delegate. See {@link Delegate} |
| + * @param delegate The delegate. |
| + */ |
| + public void setDelegate(Delegate delegate) { |
| + mDelegate = delegate; |
| + } |
| + |
| + /** |
| * Refresh the list of available system account. |
| * @return Whether any new accounts were added (the first newly added account will now be |
| * selected). |
| @@ -359,14 +388,14 @@ public class AccountFirstRunView extends FrameLayout |
| mArrayAdapter.addAll(mAccountNames); |
| mArrayAdapter.add(mAddAnotherAccount); |
| - setUpSignInButton(true); |
| + setUpSigninButton(true); |
| mDescriptionText.setText(mDescriptionTextId); |
| } else { |
| mSpinner.setVisibility(View.GONE); |
| mArrayAdapter.add(mAddAnotherAccount); |
| - setUpSignInButton(false); |
| - mDescriptionText.setText(R.string.fre_no_account_choice_description); |
| + setUpSigninButton(false); |
| + mDescriptionText.setText(R.string.signin_no_account_choice_description); |
| } |
| if (mProfileData != null) mProfileData.update(); |
| @@ -438,18 +467,21 @@ public class AccountFirstRunView extends FrameLayout |
| if (name == null) name = mProfileData.getFullName(mAccountName); |
| } |
| if (name == null) name = mAccountName; |
| - String text = String.format(getResources().getString(R.string.fre_hi_name), name); |
| + String text = String.format(getResources().getString(R.string.signin_hi_name), name); |
| mTitle.setText(text); |
| } |
| /** |
| * Updates the view to show that sign in has completed. |
| + * This should only be used if the user is not currently signed in (eg on the First |
| + * Run Experience). |
| */ |
| public void switchToSignedMode() { |
| - showConfirmSignInPage(); |
| + // TODO(peconn): Add a warning here |
| + showConfirmSigninPage(); |
| } |
| - private void showSignInPage() { |
| + private void showSigninPage() { |
| mSignedIn = false; |
| mTitle.setText(R.string.sign_in_to_chrome); |
| @@ -463,7 +495,7 @@ public class AccountFirstRunView extends FrameLayout |
| mImageCarousel.setSignedInMode(false); |
| } |
| - private void showConfirmSignInPage() { |
| + private void showConfirmSigninPage() { |
| mSignedIn = true; |
| updateProfileName(); |
| @@ -499,6 +531,24 @@ public class AccountFirstRunView extends FrameLayout |
| mImageCarousel.setSignedInMode(true); |
| } |
| + private void checkForPreviousAccountThenShowConfirmSigninPage() { |
| + if (SigninManager.shouldShowDataSyncDialog(mAccountName)) { |
|
newt (away)
2016/02/25 18:01:32
s/DataSync/SyncData/ ?
PEConn
2016/02/25 20:45:12
Acknowledged.
|
| + ConfirmImportSyncDataDialog.showNewInstance( |
| + PrefServiceBridge.getInstance().getSyncLastAccountName(), |
| + mAccountName, |
| + ImportSyncType.PREVIOUS_DATA_FOUND, |
| + mDelegate.getFragmentManager(), |
| + new ConfirmImportSyncDataDialog.Listener() { |
| + @Override |
| + public void onConfirm() { |
| + showConfirmSigninPage(); |
| + } |
| + }); |
| + } else { |
| + showConfirmSigninPage(); |
| + } |
| + } |
| + |
| private void setUpCancelButton() { |
| setNegativeButtonVisible(true); |
| @@ -512,20 +562,21 @@ public class AccountFirstRunView extends FrameLayout |
| }); |
| } |
| - private void setUpSignInButton(boolean hasAccounts) { |
| + private void setUpSigninButton(boolean hasAccounts) { |
| if (hasAccounts) { |
| mPositiveButton.setText(R.string.choose_account_sign_in); |
| - mPositiveButton.setOnClickListener(new OnClickListener() { |
| + mPositiveButton.setOnClickListener(new OnClickListener(){ |
|
Bernhard Bauer
2016/02/25 14:52:43
Space before opening brace.
PEConn
2016/02/25 20:45:12
Done.
|
| @Override |
| public void onClick(View v) { |
| - showConfirmSignInPage(); |
| + checkForPreviousAccountThenShowConfirmSigninPage(); |
| } |
| }); |
| } else { |
| - mPositiveButton.setText(R.string.fre_no_accounts); |
| + mPositiveButton.setText(R.string.signin_no_accounts); |
| mPositiveButton.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| + RecordUserAction.record("Signin_AddAccountToDevice"); |
| mListener.onNewAccount(); |
| } |
| }); |
| @@ -540,13 +591,14 @@ public class AccountFirstRunView extends FrameLayout |
| mNegativeButton.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| - showSignInPage(); |
| + RecordUserAction.record("Signin_Undo_Signin"); |
| + showSigninPage(); |
| } |
| }); |
| } |
| private void setUpConfirmButton() { |
| - mPositiveButton.setText(getResources().getText(R.string.fre_accept)); |
| + mPositiveButton.setText(getResources().getText(R.string.signin_accept)); |
| mPositiveButton.setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| @@ -568,10 +620,10 @@ public class AccountFirstRunView extends FrameLayout |
| private String getSignedInDescription(boolean childAccount) { |
| if (childAccount) { |
| - return getResources().getString(R.string.fre_signed_in_description) + '\n' |
| - + getResources().getString(R.string.fre_signed_in_description_uca_addendum); |
| + return getResources().getString(R.string.signin_signed_in_description) + '\n' |
| + + getResources().getString(R.string.signin_signed_in_description_uca_addendum); |
| } else { |
| - return getResources().getString(R.string.fre_signed_in_description); |
| + return getResources().getString(R.string.signin_signed_in_description); |
| } |
| } |