| Index: chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
|
| diff --git a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
|
| index f1018e3cf04bbf68342e713083d965f7d48dd6c4..9db47f5bcdd9c3f4371c5351d3ccbcdfffedc7c8 100644
|
| --- a/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
|
| +++ b/chrome/android/shell/java/src/org/chromium/chrome/shell/ChromeShellActivity.java
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.chrome.shell;
|
|
|
| import android.app.Activity;
|
| +import android.app.FragmentManager;
|
| import android.content.Intent;
|
| import android.os.Bundle;
|
| import android.support.v7.app.ActionBarActivity;
|
| @@ -31,15 +32,20 @@ import org.chromium.chrome.browser.Tab;
|
| import org.chromium.chrome.browser.appmenu.AppMenuHandler;
|
| import org.chromium.chrome.browser.appmenu.AppMenuPropertiesDelegate;
|
| import org.chromium.chrome.browser.dom_distiller.DomDistillerTabUtils;
|
| +import org.chromium.chrome.browser.identity.UniqueIdentificationGeneratorFactory;
|
| +import org.chromium.chrome.browser.identity.UuidBasedUniqueIdentificationGenerator;
|
| import org.chromium.chrome.browser.nfc.BeamController;
|
| import org.chromium.chrome.browser.nfc.BeamProvider;
|
| import org.chromium.chrome.browser.preferences.PreferencesLauncher;
|
| import org.chromium.chrome.browser.printing.PrintingControllerFactory;
|
| import org.chromium.chrome.browser.printing.TabPrinter;
|
| import org.chromium.chrome.browser.share.ShareHelper;
|
| +import org.chromium.chrome.browser.sync.ProfileSyncService;
|
| +import org.chromium.chrome.browser.sync.SyncController;
|
| import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
|
| import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| -import org.chromium.chrome.shell.sync.SyncController;
|
| +import org.chromium.chrome.shell.sync.AccountChooserFragment;
|
| +import org.chromium.chrome.shell.sync.SignoutFragment;
|
| import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
|
| import org.chromium.content.app.ContentApplication;
|
| import org.chromium.content.browser.ActivityContentVideoViewClient;
|
| @@ -59,6 +65,8 @@ import org.chromium.ui.base.WindowAndroid;
|
| public class ChromeShellActivity extends ActionBarActivity implements AppMenuPropertiesDelegate {
|
| private static final String TAG = "ChromeShellActivity";
|
|
|
| + private static final String SESSIONS_UUID_PREF_KEY = "chromium.sync.sessions.id";
|
| +
|
| /**
|
| * Factory used to set up a mock ActivityWindowAndroid for testing.
|
| */
|
| @@ -177,10 +185,12 @@ public class ChromeShellActivity extends ActionBarActivity implements AppMenuPro
|
|
|
| mPrintingController = PrintingControllerFactory.create(this);
|
|
|
| + setupSessionSyncId();
|
| +
|
| mSyncController = SyncController.get(this);
|
| // In case this method is called after the first onStart(), we need to inform the
|
| // SyncController that we have started.
|
| - mSyncController.onStart();
|
| + mSyncController.updateSyncStateFromAndroid();
|
| ContentUriUtils.setFileProviderUtil(new FileProviderHelper());
|
|
|
| BeamController.registerForBeam(this, new BeamProvider() {
|
| @@ -249,7 +259,7 @@ public class ChromeShellActivity extends ActionBarActivity implements AppMenuPro
|
| if (activeTab != null) activeTab.onActivityStart();
|
|
|
| if (mSyncController != null) {
|
| - mSyncController.onStart();
|
| + mSyncController.updateSyncStateFromAndroid();
|
| }
|
| }
|
|
|
| @@ -328,9 +338,9 @@ public class ChromeShellActivity extends ActionBarActivity implements AppMenuPro
|
| int id = item.getItemId();
|
| if (id == R.id.signin) {
|
| if (ChromeSigninController.get(this).isSignedIn()) {
|
| - SyncController.openSignOutDialog(getFragmentManager());
|
| + openSignOutDialog(getFragmentManager());
|
| } else if (AccountManagerHelper.get(this).hasGoogleAccounts()) {
|
| - SyncController.openSigninDialog(getFragmentManager());
|
| + openSigninDialog(getFragmentManager());
|
| } else {
|
| Toast.makeText(this, R.string.signin_no_account, Toast.LENGTH_SHORT).show();
|
| }
|
| @@ -449,4 +459,37 @@ public class ChromeShellActivity extends ActionBarActivity implements AppMenuPro
|
| public static void setAppMenuHandlerFactory(AppMenuHandlerFactory factory) {
|
| sAppMenuHandlerFactory = factory;
|
| }
|
| +
|
| + private void setupSessionSyncId() {
|
| + // Ensure that sync uses the correct UniqueIdentificationGenerator, but do not force the
|
| + // registration, in case a test case has already overridden it.
|
| + UuidBasedUniqueIdentificationGenerator generator =
|
| + new UuidBasedUniqueIdentificationGenerator(this, SESSIONS_UUID_PREF_KEY);
|
| + UniqueIdentificationGeneratorFactory.registerGenerator(
|
| + UuidBasedUniqueIdentificationGenerator.GENERATOR_ID, generator, false);
|
| + // Since we do not override the UniqueIdentificationGenerator, we get it from the factory,
|
| + // instead of using the instance we just created.
|
| + ProfileSyncService.get(this).setSessionsId(UniqueIdentificationGeneratorFactory
|
| + .getInstance(UuidBasedUniqueIdentificationGenerator.GENERATOR_ID));
|
| + }
|
| +
|
| + /**
|
| + * Open a dialog that gives the user the option to sign in from a list of available accounts.
|
| + *
|
| + * @param fragmentManager the FragmentManager.
|
| + */
|
| + private static void openSigninDialog(FragmentManager fragmentManager) {
|
| + AccountChooserFragment chooserFragment = new AccountChooserFragment();
|
| + chooserFragment.show(fragmentManager, null);
|
| + }
|
| +
|
| + /**
|
| + * Open a dialog that gives the user the option to sign out.
|
| + *
|
| + * @param fragmentManager the FragmentManager.
|
| + */
|
| + private static void openSignOutDialog(FragmentManager fragmentManager) {
|
| + SignoutFragment signoutFragment = new SignoutFragment();
|
| + signoutFragment.show(fragmentManager, null);
|
| + }
|
| }
|
|
|