Update each Tab when the bookmarks database changes.

Bug:3222677

When the bookmarks database changes, we may have added or
removed a bookmark.  For each Tab, make sure that it knows
whether or not it is a bookmark, and update the UI
accordingly.

Change-Id: Ie91008973c2841dc7367e38ad5db40bf25b1dddf
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index a2caf90..e433e29 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -33,6 +33,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
+import android.database.ContentObserver;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteException;
@@ -191,6 +192,9 @@
     private boolean mLoadStopped;
 
     private Handler mHandler;
+    // Checks to see when the bookmarks database has changed, and updates the
+    // Tabs' notion of whether they represent bookmarked sites.
+    private ContentObserver mBookmarksObserver;
 
     private static class ClearThumbnails extends AsyncTask<File, Void, Void> {
         @Override
@@ -221,6 +225,18 @@
         mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Browser");
 
         startHandler();
+        mBookmarksObserver = new ContentObserver(mHandler) {
+            @Override
+            public void onChange(boolean selfChange) {
+                int size = mTabControl.getTabCount();
+                for (int i = 0; i < size; i++) {
+                    mTabControl.getTab(i).updateBookmarkedStatus();
+                }
+            }
+
+        };
+        browser.getContentResolver().registerContentObserver(
+                BrowserContract.Bookmarks.CONTENT_URI, true, mBookmarksObserver);
 
         mNetworkHandler = new NetworkStateHandler(mActivity, this);
         // Start watching the default geolocation permissions
@@ -668,6 +684,7 @@
             dismissSubWindow(t);
             removeTab(t);
         }
+        mActivity.getContentResolver().unregisterContentObserver(mBookmarksObserver);
         // Destroy all the tabs
         mTabControl.destroy();
         WebIconDatabase.getInstance().close();