Add account for Chrome Sync if none exist
Bug: 3408686
Change-Id: I0db1808930d7543eea97bffe67d02382b0bea3a2
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c32b76a..8ac2c87 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -35,6 +35,7 @@
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
+ <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 33bfd9c..1c82e1c 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -25,6 +25,8 @@
import android.accounts.Account;
import android.accounts.AccountManager;
+import android.accounts.AccountManagerCallback;
+import android.accounts.AccountManagerFuture;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
@@ -132,6 +134,40 @@
};
+ private AccountManagerCallback<Bundle> mCallback =
+ new AccountManagerCallback<Bundle>() {
+
+ @Override
+ public void run(AccountManagerFuture<Bundle> future) {
+ try {
+ Bundle bundle = future.getResult();
+ String name = bundle.getString(AccountManager.KEY_ACCOUNT_NAME);
+ String type = bundle.getString(AccountManager.KEY_ACCOUNT_TYPE);
+ Account account = new Account(name, type);
+ Fragment frag = new ImportWizardDialog();
+ Bundle extras = mChromeSync.getExtras();
+ extras.putParcelableArray("accounts", new Account[] { account });
+ frag.setArguments(extras);
+ getFragmentManager().beginTransaction()
+ .add(frag, null)
+ .commit();
+ } catch (Exception ex) {
+ // Canceled or failed to login, doesn't matter to us
+ }
+ }
+ };
+
+ OnPreferenceClickListener mAddAccount = new OnPreferenceClickListener() {
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AccountManager am = AccountManager.get(getActivity());
+ am.addAccount("com.google", null, null, null, getActivity(),
+ mCallback, null);
+ return true;
+ }
+ };
+
private class GetAccountsTask extends AsyncTask<Void, Void, String> {
private Context mContext;
@@ -146,7 +182,7 @@
if (accounts == null || accounts.length == 0) {
// No Google accounts setup, don't offer Chrome sync
if (mChromeSync != null) {
- getPreferenceScreen().removePreference(mChromeSync);
+ mChromeSync.setOnPreferenceClickListener(mAddAccount);
}
} else {
// Google accounts are present.