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();