From 9de21c01902afaef0a017bd7de90492ff08a24a3 Mon Sep 17 00:00:00 2001 From: Margaret Leibovic Date: Thu, 10 May 2012 12:08:36 -0700 Subject: [PATCH] Bug 753534 - Desktop Bookmarks folder is created after migration from XUL to Native. r=lucasr --- mobile/android/base/db/LocalBrowserDB.java | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/mobile/android/base/db/LocalBrowserDB.java b/mobile/android/base/db/LocalBrowserDB.java index 76c9e767d7dc..53500f49b369 100644 --- a/mobile/android/base/db/LocalBrowserDB.java +++ b/mobile/android/base/db/LocalBrowserDB.java @@ -40,6 +40,7 @@ package org.mozilla.gecko.db; import java.io.ByteArrayOutputStream; +import java.util.HashMap; import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserContract.History; @@ -76,6 +77,9 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { private final String mProfile; private long mMobileFolderId; + // Map of folder GUIDs to IDs. Used for caching. + private HashMap mFolderIdMap; + // Use wrapped Boolean so that we can have a null state private Boolean mDesktopBookmarksExist; @@ -100,6 +104,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { public LocalBrowserDB(String profile) { mProfile = profile; mMobileFolderId = -1; + mFolderIdMap = new HashMap(); mDesktopBookmarksExist = null; mBookmarksUriWithProfile = appendProfile(Bookmarks.CONTENT_URI); @@ -346,12 +351,16 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { Cursor c = null; int count = 0; try { + // Check to see if there are any bookmarks in one of our three + // fixed "Desktop Boomarks" folders. c = cr.query(bookmarksUriWithLimit(1), new String[] { Bookmarks._ID }, - Bookmarks.PARENT + " != ? AND " + - Bookmarks.PARENT + " != ?", - new String[] { String.valueOf(getMobileBookmarksFolderId(cr)), - String.valueOf(Bookmarks.FIXED_ROOT_ID) }, + Bookmarks.PARENT + " = ? OR " + + Bookmarks.PARENT + " = ? OR " + + Bookmarks.PARENT + " = ?", + new String[] { String.valueOf(getFolderIdFromGuid(cr, Bookmarks.TOOLBAR_FOLDER_GUID)), + String.valueOf(getFolderIdFromGuid(cr, Bookmarks.MENU_FOLDER_GUID)), + String.valueOf(getFolderIdFromGuid(cr, Bookmarks.UNFILED_FOLDER_GUID)) }, null); count = c.getCount(); } finally { @@ -402,7 +411,10 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { return mMobileFolderId; } - private long getFolderIdFromGuid(ContentResolver cr, String guid) { + private synchronized long getFolderIdFromGuid(ContentResolver cr, String guid) { + if (mFolderIdMap.containsKey(guid)) + return mFolderIdMap.get(guid); + long folderId = -1; Cursor c = null; @@ -420,6 +432,7 @@ public class LocalBrowserDB implements BrowserDB.BrowserDBIface { c.close(); } + mFolderIdMap.put(guid, folderId); return folderId; }