summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
authorLeon Scroggins <scroggo@google.com>2010-12-07 15:22:21 -0500
committerLeon Scroggins <scroggo@google.com>2010-12-07 17:00:52 -0500
commit1961ed2f2856ca0993c8c4d15924bbb4e4ef98c0 (patch)
tree2bceecc682ed5b954fa5fd259536b5bd1f71d45d /src/com/android
parentffce12cded5227cc94752de75e3f00acdbf9c90f (diff)
downloadpackages_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.java1
-rw-r--r--src/com/android/browser/Controller.java17
-rw-r--r--src/com/android/browser/Tab.java86
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();
+ }
+
}