Bug 1234967 - Pre: implement getBookmarkForID
Rebased, with review comments addressed, by Tom Klein.
MozReview-Commit-ID: 7lWNOC3sUoX
--- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java
@@ -101,17 +101,36 @@ public abstract class BrowserDB {
public abstract void clearHistory(ContentResolver cr, boolean clearSearchHistory);
public abstract String getUrlForKeyword(ContentResolver cr, String keyword);
public abstract boolean isBookmark(ContentResolver cr, String uri);
public abstract boolean addBookmark(ContentResolver cr, String title, String uri);
+
+ /**
+ * @return an open cursor if the bookmark with id {@code id} is found, null if not.
+ */
+ public abstract Cursor getBookmarkForID(ContentResolver cr, int id);
+
+ /**
+ * Retrieve a (random) bookmark for a given URL. If there are multiple bookmarks with the same
+ * URL there is no guarantee as to which bookmark will be returned.
+ *
+ * @return an open cursor if a bookmark with url {@code url} is found, null if not.
+ *
+ * @deprecated Use {@link #getBookmarkForID(ContentResolver, int)} instead to retrieve a specific bookmark.
+ */
+ @Deprecated
public abstract Cursor getBookmarkForUrl(ContentResolver cr, String url);
+
+ /**
+ * @return an open cursor if at least one bookmark with the {@code partialUrl} is found, null if not.
+ */
public abstract Cursor getBookmarksForPartialUrl(ContentResolver cr, String partialUrl);
public abstract void removeBookmarksWithURL(ContentResolver cr, String uri);
public abstract void removeBookmarkWithID(ContentResolver cr, int id);
public abstract void registerBookmarkObserver(ContentResolver cr, ContentObserver observer);
public abstract void updateBookmark(ContentResolver cr, int id, String uri, String title, String keyword);
public abstract boolean hasBookmarkWithGuid(ContentResolver cr, String guid);
public abstract boolean insertPageMetadata(ContentProviderClient contentProviderClient, String pageUrl, boolean hasImage, String metadataJSON);
--- a/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
@@ -1737,16 +1737,45 @@ public class LocalBrowserDB extends Brow
cr.delete(mBookmarksUriWithProfile,
Bookmarks.PARENT + " == ? AND " + Bookmarks.POSITION + " = ?",
new String[] {
String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID),
Integer.toString(position)
});
}
+ private static Cursor nonemptyCursorOrNull(Cursor c) {
+ if (c == null) {
+ return null;
+ }
+
+ if (c.moveToFirst()) {
+ // Non-empty.
+ return c;
+ }
+
+ c.close();
+ return null;
+ }
+
+ @Override
+ @RobocopTarget
+ public Cursor getBookmarkForID(ContentResolver cr, int id) {
+ final Cursor c = cr.query(bookmarksUriWithLimit(1),
+ new String[] { Bookmarks._ID,
+ Bookmarks.URL,
+ Bookmarks.TITLE,
+ Bookmarks.KEYWORD },
+ Bookmarks._ID + " = " + id,
+ null,
+ null);
+
+ return nonemptyCursorOrNull(c);
+ }
+
@Override
public void pinSiteForAS(ContentResolver cr, String url, String title) {
ContentValues values = new ContentValues();
final long now = System.currentTimeMillis();
values.put(Bookmarks.TITLE, title);
values.put(Bookmarks.URL, url);
values.put(Bookmarks.PARENT, Bookmarks.FIXED_PINNED_LIST_ID);
values.put(Bookmarks.DATE_MODIFIED, now);
@@ -1789,47 +1818,37 @@ public class LocalBrowserDB extends Brow
} finally {
c.close();
}
}
@Override
@RobocopTarget
public Cursor getBookmarkForUrl(ContentResolver cr, String url) {
- Cursor c = cr.query(bookmarksUriWithLimit(1),
+ final Cursor c = cr.query(bookmarksUriWithLimit(1),
new String[] { Bookmarks._ID,
Bookmarks.URL,
Bookmarks.TITLE,
Bookmarks.KEYWORD },
Bookmarks.URL + " = ?",
new String[] { url },
null);
- if (c != null && c.getCount() == 0) {
- c.close();
- c = null;
- }
-
- return c;
+ return nonemptyCursorOrNull(c);
}
@Override
public Cursor getBookmarksForPartialUrl(ContentResolver cr, String partialUrl) {
- Cursor c = cr.query(mBookmarksUriWithProfile,
+ final Cursor c = cr.query(mBookmarksUriWithProfile,
new String[] { Bookmarks.GUID, Bookmarks._ID, Bookmarks.URL },
Bookmarks.URL + " LIKE '%" + partialUrl + "%'", // TODO: Escaping!
null,
null);
- if (c != null && c.getCount() == 0) {
- c.close();
- c = null;
- }
-
- return c;
+ return nonemptyCursorOrNull(c);
}
@Override
public void setSuggestedSites(SuggestedSites suggestedSites) {
mSuggestedSites = suggestedSites;
}
@Override