Merge "Handle chrome sync account deleted case" into honeycomb
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 44d0129..c95ce21 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -33,6 +33,7 @@
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<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="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
@@ -134,9 +135,6 @@
<meta-data android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
- <activity android:name="BrowserBookmarksPage" android:label="@string/bookmarks"
- android:launchMode="singleTop" android:configChanges="orientation|keyboardHidden">
- </activity>
<activity android:name="ShortcutActivity"
android:theme="@style/ShortcutTheme"
@@ -150,17 +148,9 @@
</activity>
- <activity android:name="BrowserDownloadPage" android:label=""
- android:configChanges="orientation|keyboardHidden">
- </activity>
-
<activity android:name="BrowserPreferencesPage" android:label="@string/menu_preferences">
</activity>
- <activity android:name="BrowserHistoryPage" android:label=""
- android:configChanges="orientation|keyboardHidden">
- </activity>
-
<activity android:name="BookmarkSearch"
android:label="@string/bookmarks_search"
android:stateNotNeeded="true"
@@ -231,6 +221,12 @@
android:authorities="com.android.browser.home"
android:readPermission="com.android.browser.permission.READ_HISTORY_BOOKMARKS"
android:exported="false" />
+
+ <receiver android:name=".AccountsChangedReceiver">
+ <intent-filter>
+ <action android:name="android.accounts.LOGIN_ACCOUNTS_CHANGED" />
+ </intent-filter>
+ </receiver>
</application>
</manifest>
diff --git a/src/com/android/browser/AccountsChangedReceiver.java b/src/com/android/browser/AccountsChangedReceiver.java
new file mode 100644
index 0000000..92d6ad0
--- /dev/null
+++ b/src/com/android/browser/AccountsChangedReceiver.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.browser;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.provider.BrowserContract;
+
+public class AccountsChangedReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ // Validate that the account we are syncing to still exists
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ String accountType = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_TYPE, null);
+ String accountName = prefs.getString(BrowserBookmarksPage.PREF_ACCOUNT_NAME, null);
+ if (accountType == null || accountName == null) {
+ // Not syncing, nothing to do
+ return;
+ }
+ Account[] accounts = AccountManager.get(context).getAccountsByType(accountType);
+ for (Account a : accounts) {
+ if (accountName.equals(a.name)) {
+ // Still have a valid account, sweet
+ return;
+ }
+ }
+ // Account deleted - disable sync
+ prefs.edit()
+ .remove(BrowserBookmarksPage.PREF_ACCOUNT_TYPE)
+ .remove(BrowserBookmarksPage.PREF_ACCOUNT_NAME)
+ .commit();
+ BrowserContract.Settings.setSyncEnabled(context, false);
+ for (Account a : accounts) {
+ ContentResolver.setSyncAutomatically(a, BrowserContract.AUTHORITY, false);
+ ContentResolver.setIsSyncable(a, BrowserContract.AUTHORITY, 0);
+ }
+ }
+
+}
diff --git a/src/com/android/browser/preferences/GeneralPreferencesFragment.java b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
index 99a4ec9..2735166 100644
--- a/src/com/android/browser/preferences/GeneralPreferencesFragment.java
+++ b/src/com/android/browser/preferences/GeneralPreferencesFragment.java
@@ -304,7 +304,11 @@
// Enable bookmark sync on all accounts
Account[] accounts = (Account[]) getArguments().getParcelableArray("accounts");
for (Account account : accounts) {
- ContentResolver.setIsSyncable(account, BrowserContract.AUTHORITY, 1);
+ if (ContentResolver.getIsSyncable(account, BrowserContract.AUTHORITY) == 0) {
+ // Account wasn't syncable, enable it
+ ContentResolver.setIsSyncable(account, BrowserContract.AUTHORITY, 1);
+ ContentResolver.setSyncAutomatically(account, BrowserContract.AUTHORITY, true);
+ }
}
dismiss();