From b40c38d30ffcd9feab289b6653ef59465c25f827 Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Thu, 9 Feb 2012 10:01:57 -0800 Subject: [PATCH] Bug 724756 - removeBookmark can remove an arbitrary number of bookmarks. r=lucasr --- mobile/android/base/AwesomeBar.java | 6 +++++- mobile/android/base/Tab.java | 4 +++- mobile/android/base/db/AndroidBrowserDB.java | 6 +++++- mobile/android/base/db/BrowserDB.java | 12 +++++++++--- mobile/android/base/db/LocalBrowserDB.java | 8 +++++++- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/mobile/android/base/AwesomeBar.java b/mobile/android/base/AwesomeBar.java index 9cf5ecd488e..43641f26a92 100644 --- a/mobile/android/base/AwesomeBar.java +++ b/mobile/android/base/AwesomeBar.java @@ -76,6 +76,7 @@ import android.widget.Toast; import java.net.URLEncoder; import java.util.Map; +import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.db.BrowserDB; @@ -472,16 +473,19 @@ public class AwesomeBar extends Activity implements GeckoEventListener { if (mContextMenuSubject == null) return false; + final int id; final String url; byte[] b = null; String title = ""; if (mContextMenuSubject instanceof Cursor) { Cursor cursor = (Cursor)mContextMenuSubject; + id = cursor.getInt(cursor.getColumnIndexOrThrow(Bookmarks._ID)); url = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.URL)); b = cursor.getBlob(cursor.getColumnIndexOrThrow(URLColumns.FAVICON)); title = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.TITLE)); } else if (mContextMenuSubject instanceof Map) { Map map = (Map)mContextMenuSubject; + id = -1; url = (String)map.get(URLColumns.URL); b = (byte[]) map.get(URLColumns.FAVICON); title = (String)map.get(URLColumns.TITLE); @@ -500,7 +504,7 @@ public class AwesomeBar extends Activity implements GeckoEventListener { case R.id.remove_bookmark: { GeckoAppShell.getHandler().post(new Runnable() { public void run() { - BrowserDB.removeBookmark(mResolver, url); + BrowserDB.removeBookmark(mResolver, id); GeckoApp.mAppContext.mMainHandler.post(new Runnable() { public void run() { diff --git a/mobile/android/base/Tab.java b/mobile/android/base/Tab.java index eec8f3cee74..c8628aca2a6 100644 --- a/mobile/android/base/Tab.java +++ b/mobile/android/base/Tab.java @@ -552,7 +552,9 @@ public final class Tab { @Override protected Void doInBackground(Void... unused) { ContentResolver resolver = Tabs.getInstance().getContentResolver(); - BrowserDB.removeBookmark(resolver, getURL()); + + // We want to remove all bookmarks with this URL + BrowserDB.removeBookmarksWithURL(resolver, getURL()); return null; } diff --git a/mobile/android/base/db/AndroidBrowserDB.java b/mobile/android/base/db/AndroidBrowserDB.java index 40afedeba8d..b5400710359 100644 --- a/mobile/android/base/db/AndroidBrowserDB.java +++ b/mobile/android/base/db/AndroidBrowserDB.java @@ -330,7 +330,11 @@ public class AndroidBrowserDB implements BrowserDB.BrowserDBIface { new String[] { uri }); } - public void removeBookmark(ContentResolver cr, String uri) { + public void removeBookmark(ContentResolver cr, int id) { + // Not implemented + } + + public void removeBookmarksWithURL(ContentResolver cr, String uri) { if (Build.VERSION.SDK_INT >= 11) removeBookmarkPost11(cr, uri); else diff --git a/mobile/android/base/db/BrowserDB.java b/mobile/android/base/db/BrowserDB.java index ab8b5216b14..74f6fb14b04 100644 --- a/mobile/android/base/db/BrowserDB.java +++ b/mobile/android/base/db/BrowserDB.java @@ -88,7 +88,9 @@ public class BrowserDB { public void addBookmark(ContentResolver cr, String title, String uri); - public void removeBookmark(ContentResolver cr, String uri); + public void removeBookmark(ContentResolver cr, int id); + + public void removeBookmarksWithURL(ContentResolver cr, String uri); public void updateBookmark(ContentResolver cr, String oldUri, String uri, String title, String keyword); @@ -167,8 +169,12 @@ public class BrowserDB { sDb.addBookmark(cr, title, uri); } - public static void removeBookmark(ContentResolver cr, String uri) { - sDb.removeBookmark(cr, uri); + public static void removeBookmark(ContentResolver cr, int id) { + sDb.removeBookmark(cr, id); + } + + public static void removeBookmarksWithURL(ContentResolver cr, String uri) { + sDb.removeBookmarksWithURL(cr, uri); } public static void updateBookmark(ContentResolver cr, String oldUri, String uri, String title, String keyword) { diff --git a/mobile/android/base/db/LocalBrowserDB.java b/mobile/android/base/db/LocalBrowserDB.java index 415a9ee72cc..47423f7204d 100644 --- a/mobile/android/base/db/LocalBrowserDB.java +++ b/mobile/android/base/db/LocalBrowserDB.java @@ -380,7 +380,13 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { cr.insert(appendProfile(Bookmarks.CONTENT_URI), values); } - public void removeBookmark(ContentResolver cr, String uri) { + public void removeBookmark(ContentResolver cr, int id) { + cr.delete(appendProfile(Bookmarks.CONTENT_URI), + Bookmarks._ID + " = ?", + new String[] { String.valueOf(id) }); + } + + public void removeBookmarksWithURL(ContentResolver cr, String uri) { cr.delete(appendProfile(Bookmarks.CONTENT_URI), Bookmarks.URL + " = ?", new String[] { uri });