diff options
author | Leon Scroggins <scroggo@google.com> | 2010-12-07 15:22:21 -0500 |
---|---|---|
committer | Leon Scroggins <scroggo@google.com> | 2010-12-07 17:00:52 -0500 |
commit | 1961ed2f2856ca0993c8c4d15924bbb4e4ef98c0 (patch) | |
tree | 2bceecc682ed5b954fa5fd259536b5bd1f71d45d /src/com/android | |
parent | ffce12cded5227cc94752de75e3f00acdbf9c90f (diff) | |
download | packages_apps_Browser-1961ed2f2856ca0993c8c4d15924bbb4e4ef98c0.zip packages_apps_Browser-1961ed2f2856ca0993c8c4d15924bbb4e4ef98c0.tar.gz packages_apps_Browser-1961ed2f2856ca0993c8c4d15924bbb4e4ef98c0.tar.bz2 |
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
Diffstat (limited to 'src/com/android')
-rw-r--r-- | src/com/android/browser/BaseUi.java | 1 | ||||
-rw-r--r-- | src/com/android/browser/Controller.java | 17 | ||||
-rw-r--r-- | src/com/android/browser/Tab.java | 86 |
3 files changed, 70 insertions, 34 deletions
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java index b39cb43..b9ccd72 100644 --- a/src/com/android/browser/BaseUi.java +++ b/src/com/android/browser/BaseUi.java @@ -349,7 +349,6 @@ public class BaseUi implements UI, WebViewFactory { // Request focus on the top window. mTabBar.onSetActiveTab(tab); } - bookmarkedStatusHasChanged(tab); resetTitleIconAndProgress(tab); updateLockIconToLatest(tab); tab.getTopWindow().requestFocus(); 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.Intent; 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 @@ public class Controller 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 @@ public class Controller 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 @@ public class Controller dismissSubWindow(t); removeTab(t); } + mActivity.getContentResolver().unregisterContentObserver(mBookmarksObserver); // Destroy all the tabs mTabControl.destroy(); WebIconDatabase.getInstance().close(); diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java index 3e79edb..5b536f8 100644 --- a/src/com/android/browser/Tab.java +++ b/src/com/android/browser/Tab.java @@ -503,39 +503,7 @@ class Tab { // finally update the UI in the activity if it is in the foreground mWebViewController.onPageStarted(Tab.this, view, url, favicon); - final String urlInQuestion = url; - if (mBookmarkAsyncTask != null) { - mBookmarkAsyncTask.cancel(true); - } - mBookmarkAsyncTask = new AsyncTask<Void, Void, Boolean>() { - @Override - protected Boolean doInBackground(Void... unused) { - // Check to see if the site is bookmarked - Cursor cursor = null; - try { - cursor = mActivity.getContentResolver().query( - BrowserContract.Bookmarks.CONTENT_URI, - new String[] { BrowserContract.Bookmarks.URL }, - BrowserContract.Bookmarks.URL + " == ?", - new String[] { urlInQuestion }, - null); - return cursor.moveToFirst(); - } catch (SQLiteException e) { - Log.e(LOGTAG, "Error checking for bookmark: " + e); - return false; - } finally { - if (cursor != null) cursor.close(); - } - } - @Override - protected void onPostExecute(Boolean isBookmarked) { - if (this == mBookmarkAsyncTask) { - mIsBookmarkedSite = isBookmarked; - mWebViewController.bookmarkedStatusHasChanged(Tab.this); - } - } - }; - mBookmarkAsyncTask.execute(); + updateBookmarkedStatusForUrl(url); } @Override @@ -1450,6 +1418,7 @@ class Tab { if (mQueuedErrors != null && mQueuedErrors.size() > 0) { showError(mQueuedErrors.getFirst()); } + mWebViewController.bookmarkedStatusHasChanged(this); } void putInBackground() { @@ -1827,4 +1796,55 @@ class Tab { return true; } + public void updateBookmarkedStatus() { + if (mMainView == null) { + return; + } + String url = mMainView.getUrl(); + if (url == null) { + return; + } + updateBookmarkedStatusForUrl(url); + } + + /** + * Update mIsBookmarkedSite, using urlInQuestion to compare. + * @param urlInQuestion URL of the current page, to be checked in the + * bookmarks database. + */ + private void updateBookmarkedStatusForUrl(final String urlInQuestion) { + if (mBookmarkAsyncTask != null) { + mBookmarkAsyncTask.cancel(true); + } + mBookmarkAsyncTask = new AsyncTask<Void, Void, Boolean>() { + @Override + protected Boolean doInBackground(Void... unused) { + // Check to see if the site is bookmarked + Cursor cursor = null; + try { + cursor = mActivity.getContentResolver().query( + BrowserContract.Bookmarks.CONTENT_URI, + new String[] { BrowserContract.Bookmarks.URL }, + BrowserContract.Bookmarks.URL + " == ?", + new String[] { urlInQuestion }, + null); + return cursor.moveToFirst(); + } catch (SQLiteException e) { + Log.e(LOGTAG, "Error checking for bookmark: " + e); + return false; + } finally { + if (cursor != null) cursor.close(); + } + } + @Override + protected void onPostExecute(Boolean isBookmarked) { + if (this == mBookmarkAsyncTask) { + mIsBookmarkedSite = isBookmarked; + mWebViewController.bookmarkedStatusHasChanged(Tab.this); + } + } + }; + mBookmarkAsyncTask.execute(); + } + } |