Bug 1291751 - Allow filter() on just bookmarks or history draft
authorAndrzej Hunt <ahunt@mozilla.com>
Wed, 03 Aug 2016 11:25:59 -0700
changeset 398860 a70612489ec13f7dec804fafaf057dcd49a0f0ba
parent 398859 e8ddf6cc2e217050e031fa0e60111cf7c1a47b25
child 398861 29221a7b59cf81a5d8c1095195b6504a93898001
push id25659
push userahunt@mozilla.com
push dateTue, 09 Aug 2016 21:55:04 +0000
bugs1291751
milestone51.0a1
Bug 1291751 - Allow filter() on just bookmarks or history filter() previously operated on both bookmarks and history at the same time, i.e. by using the combined table. For the AS detail-view search functionality we want to be able to search on just history, or just bookmarks. For now it's probably best to implement this by filtering out history or bookmarks as appropriate in the existing search (the specs aren't finalised yet, and this provides a good interim solution). In future we might want to have optimised specific queries for history and bookmarks separately, but we'll want to have telemetry data on how often these views are even used before investing in that. MozReview-Commit-ID: BjRcHcdw5t4
mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java
mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
--- a/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/BrowserDB.java
@@ -32,17 +32,19 @@ import android.graphics.drawable.BitmapD
  * {@link GeckoProfile#setBrowserDBFactory(BrowserDB.Factory)}.
  */
 public interface BrowserDB {
     public interface Factory {
         public BrowserDB get(String profileName, File profileDir);
     }
 
     public static enum FilterFlags {
-        EXCLUDE_PINNED_SITES
+        EXCLUDE_PINNED_SITES,
+        EXCLUDE_BOOKMARKS,
+        EXCLUDE_HISTORY
     }
 
     public abstract Searches getSearches();
     public abstract TabsAccessor getTabsAccessor();
     public abstract URLMetadata getURLMetadata();
     @RobocopTarget UrlAnnotations getUrlAnnotations();
 
     /**
--- a/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
+++ b/mobile/android/base/java/org/mozilla/gecko/db/LocalBrowserDB.java
@@ -630,16 +630,22 @@ public class LocalBrowserDB implements B
 
         if (flags.contains(FilterFlags.EXCLUDE_PINNED_SITES)) {
             selection = Combined.URL + " NOT IN (SELECT " +
                                                  Bookmarks.URL + " FROM bookmarks WHERE " +
                                                  DBUtils.qualifyColumn("bookmarks", Bookmarks.PARENT) + " = ? AND " +
                                                  DBUtils.qualifyColumn("bookmarks", Bookmarks.IS_DELETED) + " == 0)";
             selectionArgs = new String[] { String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID) };
         }
+        if (flags.contains(FilterFlags.EXCLUDE_BOOKMARKS)) {
+            selection = DBUtils.concatenateWhere(selection, Combined.HISTORY_ID + " != -1");
+        }
+        if (flags.contains(FilterFlags.EXCLUDE_HISTORY)) {
+            selection = DBUtils.concatenateWhere(selection, Combined.BOOKMARK_ID + " NOT NULL");
+        }
 
         return filterAllSites(cr,
                               new String[] { Combined._ID,
                                              Combined.URL,
                                              Combined.TITLE,
                                              Combined.BOOKMARK_ID,
                                              Combined.HISTORY_ID },
                               constraint,