michael@0: /* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: package org.mozilla.gecko.db; michael@0: michael@0: import java.util.List; michael@0: michael@0: import org.mozilla.gecko.db.BrowserContract.ExpirePriority; michael@0: import org.mozilla.gecko.favicons.decoders.LoadFaviconResult; michael@0: import org.mozilla.gecko.mozglue.RobocopTarget; michael@0: michael@0: import android.content.ContentResolver; michael@0: import android.content.ContentValues; michael@0: import android.database.ContentObserver; michael@0: import android.database.Cursor; michael@0: import android.graphics.drawable.BitmapDrawable; michael@0: michael@0: public class BrowserDB { michael@0: private static boolean sAreContentProvidersEnabled = true; michael@0: michael@0: public static interface URLColumns { michael@0: public static String URL = "url"; michael@0: public static String TITLE = "title"; michael@0: public static String FAVICON = "favicon"; michael@0: public static String THUMBNAIL = "thumbnail"; michael@0: public static String DATE_LAST_VISITED = "date-last-visited"; michael@0: public static String VISITS = "visits"; michael@0: public static String KEYWORD = "keyword"; michael@0: } michael@0: michael@0: private static BrowserDBIface sDb = null; michael@0: michael@0: public interface BrowserDBIface { michael@0: public void invalidateCachedState(); michael@0: michael@0: @RobocopTarget michael@0: public Cursor filter(ContentResolver cr, CharSequence constraint, int limit); michael@0: michael@0: // This should only return frecent sites. BrowserDB.getTopSites will do the michael@0: // work to combine that list with the pinned sites list. michael@0: public Cursor getTopSites(ContentResolver cr, int limit); michael@0: michael@0: public void updateVisitedHistory(ContentResolver cr, String uri); michael@0: michael@0: public void updateHistoryTitle(ContentResolver cr, String uri, String title); michael@0: michael@0: public void updateHistoryEntry(ContentResolver cr, String uri, String title, michael@0: long date, int visits); michael@0: michael@0: @RobocopTarget michael@0: public Cursor getAllVisitedHistory(ContentResolver cr); michael@0: michael@0: public Cursor getRecentHistory(ContentResolver cr, int limit); michael@0: michael@0: public void expireHistory(ContentResolver cr, ExpirePriority priority); michael@0: michael@0: public void removeHistoryEntry(ContentResolver cr, int id); michael@0: michael@0: @RobocopTarget michael@0: public void removeHistoryEntry(ContentResolver cr, String url); michael@0: michael@0: public void clearHistory(ContentResolver cr); michael@0: michael@0: @RobocopTarget michael@0: public Cursor getBookmarksInFolder(ContentResolver cr, long folderId); michael@0: michael@0: public Cursor getReadingList(ContentResolver cr); michael@0: michael@0: public boolean isVisited(ContentResolver cr, String uri); michael@0: michael@0: public int getReadingListCount(ContentResolver cr); michael@0: michael@0: @RobocopTarget michael@0: public boolean isBookmark(ContentResolver cr, String uri); michael@0: michael@0: public boolean isReadingListItem(ContentResolver cr, String uri); michael@0: michael@0: /** michael@0: * Return a combination of fields about the provided URI michael@0: * in a single hit on the DB. michael@0: */ michael@0: public int getItemFlags(ContentResolver cr, String uri); michael@0: michael@0: public String getUrlForKeyword(ContentResolver cr, String keyword); michael@0: michael@0: @RobocopTarget michael@0: public void addBookmark(ContentResolver cr, String title, String uri); michael@0: michael@0: public void removeBookmark(ContentResolver cr, int id); michael@0: michael@0: @RobocopTarget michael@0: public void removeBookmarksWithURL(ContentResolver cr, String uri); michael@0: michael@0: @RobocopTarget michael@0: public void updateBookmark(ContentResolver cr, int id, String uri, String title, String keyword); michael@0: michael@0: public void addReadingListItem(ContentResolver cr, ContentValues values); michael@0: michael@0: public void removeReadingListItemWithURL(ContentResolver cr, String uri); michael@0: michael@0: public void removeReadingListItem(ContentResolver cr, int id); michael@0: michael@0: public LoadFaviconResult getFaviconForUrl(ContentResolver cr, String uri); michael@0: michael@0: public String getFaviconUrlForHistoryUrl(ContentResolver cr, String url); michael@0: michael@0: public void updateFaviconForUrl(ContentResolver cr, String pageUri, byte[] encodedFavicon, String faviconUri); michael@0: michael@0: public void updateThumbnailForUrl(ContentResolver cr, String uri, BitmapDrawable thumbnail); michael@0: michael@0: @RobocopTarget michael@0: public byte[] getThumbnailForUrl(ContentResolver cr, String uri); michael@0: michael@0: public Cursor getThumbnailsForUrls(ContentResolver cr, List urls); michael@0: michael@0: @RobocopTarget michael@0: public void removeThumbnails(ContentResolver cr); michael@0: michael@0: public void registerBookmarkObserver(ContentResolver cr, ContentObserver observer); michael@0: michael@0: public void registerHistoryObserver(ContentResolver cr, ContentObserver observer); michael@0: michael@0: public int getCount(ContentResolver cr, String database); michael@0: michael@0: public void pinSite(ContentResolver cr, String url, String title, int position); michael@0: michael@0: public void unpinSite(ContentResolver cr, int position); michael@0: michael@0: public void unpinAllSites(ContentResolver cr); michael@0: michael@0: public Cursor getPinnedSites(ContentResolver cr, int limit); michael@0: michael@0: @RobocopTarget michael@0: public Cursor getBookmarkForUrl(ContentResolver cr, String url); michael@0: } michael@0: michael@0: static { michael@0: // Forcing local DB no option to switch to Android DB for now michael@0: sDb = null; michael@0: } michael@0: michael@0: public static void initialize(String profile) { michael@0: sDb = new LocalBrowserDB(profile); michael@0: } michael@0: michael@0: public static void invalidateCachedState() { michael@0: sDb.invalidateCachedState(); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static Cursor filter(ContentResolver cr, CharSequence constraint, int limit) { michael@0: return sDb.filter(cr, constraint, limit); michael@0: } michael@0: michael@0: public static Cursor getTopSites(ContentResolver cr, int minLimit, int maxLimit) { michael@0: // Note this is not a single query anymore, but actually returns a mixture michael@0: // of two queries, one for topSites and one for pinned sites. michael@0: Cursor pinnedSites = sDb.getPinnedSites(cr, minLimit); michael@0: Cursor topSites = sDb.getTopSites(cr, maxLimit - pinnedSites.getCount()); michael@0: return new TopSitesCursorWrapper(pinnedSites, topSites, minLimit); michael@0: } michael@0: michael@0: public static void updateVisitedHistory(ContentResolver cr, String uri) { michael@0: if (sAreContentProvidersEnabled) { michael@0: sDb.updateVisitedHistory(cr, uri); michael@0: } michael@0: } michael@0: michael@0: public static void updateHistoryTitle(ContentResolver cr, String uri, String title) { michael@0: if (sAreContentProvidersEnabled) { michael@0: sDb.updateHistoryTitle(cr, uri, title); michael@0: } michael@0: } michael@0: michael@0: public static void updateHistoryEntry(ContentResolver cr, String uri, String title, michael@0: long date, int visits) { michael@0: if (sAreContentProvidersEnabled) { michael@0: sDb.updateHistoryEntry(cr, uri, title, date, visits); michael@0: } michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static Cursor getAllVisitedHistory(ContentResolver cr) { michael@0: return (sAreContentProvidersEnabled ? sDb.getAllVisitedHistory(cr) : null); michael@0: } michael@0: michael@0: public static Cursor getRecentHistory(ContentResolver cr, int limit) { michael@0: return sDb.getRecentHistory(cr, limit); michael@0: } michael@0: michael@0: public static void expireHistory(ContentResolver cr, ExpirePriority priority) { michael@0: if (sDb == null) michael@0: return; michael@0: michael@0: if (priority == null) michael@0: priority = ExpirePriority.NORMAL; michael@0: sDb.expireHistory(cr, priority); michael@0: } michael@0: michael@0: public static void removeHistoryEntry(ContentResolver cr, int id) { michael@0: sDb.removeHistoryEntry(cr, id); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static void removeHistoryEntry(ContentResolver cr, String url) { michael@0: sDb.removeHistoryEntry(cr, url); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static void clearHistory(ContentResolver cr) { michael@0: sDb.clearHistory(cr); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static Cursor getBookmarksInFolder(ContentResolver cr, long folderId) { michael@0: return sDb.getBookmarksInFolder(cr, folderId); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static Cursor getReadingList(ContentResolver cr) { michael@0: return sDb.getReadingList(cr); michael@0: } michael@0: michael@0: public static String getUrlForKeyword(ContentResolver cr, String keyword) { michael@0: return sDb.getUrlForKeyword(cr, keyword); michael@0: } michael@0: michael@0: public static boolean isVisited(ContentResolver cr, String uri) { michael@0: return sDb.isVisited(cr, uri); michael@0: } michael@0: michael@0: public static int getReadingListCount(ContentResolver cr) { michael@0: return sDb.getReadingListCount(cr); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static boolean isBookmark(ContentResolver cr, String uri) { michael@0: return (sAreContentProvidersEnabled && sDb.isBookmark(cr, uri)); michael@0: } michael@0: michael@0: public static boolean isReadingListItem(ContentResolver cr, String uri) { michael@0: return (sAreContentProvidersEnabled && sDb.isReadingListItem(cr, uri)); michael@0: } michael@0: michael@0: public static int getItemFlags(ContentResolver cr, String uri) { michael@0: if (!sAreContentProvidersEnabled) { michael@0: return 0; michael@0: } michael@0: return sDb.getItemFlags(cr, uri); michael@0: } michael@0: michael@0: public static void addBookmark(ContentResolver cr, String title, String uri) { michael@0: sDb.addBookmark(cr, title, uri); michael@0: } michael@0: michael@0: public static void removeBookmark(ContentResolver cr, int id) { michael@0: sDb.removeBookmark(cr, id); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static void removeBookmarksWithURL(ContentResolver cr, String uri) { michael@0: sDb.removeBookmarksWithURL(cr, uri); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static void updateBookmark(ContentResolver cr, int id, String uri, String title, String keyword) { michael@0: sDb.updateBookmark(cr, id, uri, title, keyword); michael@0: } michael@0: michael@0: public static void addReadingListItem(ContentResolver cr, ContentValues values) { michael@0: sDb.addReadingListItem(cr, values); michael@0: } michael@0: michael@0: public static void removeReadingListItemWithURL(ContentResolver cr, String uri) { michael@0: sDb.removeReadingListItemWithURL(cr, uri); michael@0: } michael@0: michael@0: public static void removeReadingListItem(ContentResolver cr, int id) { michael@0: sDb.removeReadingListItem(cr, id); michael@0: } michael@0: michael@0: public static LoadFaviconResult getFaviconForFaviconUrl(ContentResolver cr, String faviconURL) { michael@0: return sDb.getFaviconForUrl(cr, faviconURL); michael@0: } michael@0: michael@0: public static String getFaviconUrlForHistoryUrl(ContentResolver cr, String url) { michael@0: return sDb.getFaviconUrlForHistoryUrl(cr, url); michael@0: } michael@0: michael@0: public static void updateFaviconForUrl(ContentResolver cr, String pageUri, byte[] encodedFavicon, String faviconUri) { michael@0: sDb.updateFaviconForUrl(cr, pageUri, encodedFavicon, faviconUri); michael@0: } michael@0: michael@0: public static void updateThumbnailForUrl(ContentResolver cr, String uri, BitmapDrawable thumbnail) { michael@0: sDb.updateThumbnailForUrl(cr, uri, thumbnail); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static byte[] getThumbnailForUrl(ContentResolver cr, String uri) { michael@0: return sDb.getThumbnailForUrl(cr, uri); michael@0: } michael@0: michael@0: public static Cursor getThumbnailsForUrls(ContentResolver cr, List urls) { michael@0: return sDb.getThumbnailsForUrls(cr, urls); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static void removeThumbnails(ContentResolver cr) { michael@0: sDb.removeThumbnails(cr); michael@0: } michael@0: michael@0: public static void registerBookmarkObserver(ContentResolver cr, ContentObserver observer) { michael@0: sDb.registerBookmarkObserver(cr, observer); michael@0: } michael@0: michael@0: public static void registerHistoryObserver(ContentResolver cr, ContentObserver observer) { michael@0: sDb.registerHistoryObserver(cr, observer); michael@0: } michael@0: michael@0: public static void unregisterContentObserver(ContentResolver cr, ContentObserver observer) { michael@0: cr.unregisterContentObserver(observer); michael@0: } michael@0: michael@0: public static int getCount(ContentResolver cr, String database) { michael@0: return sDb.getCount(cr, database); michael@0: } michael@0: michael@0: public static void pinSite(ContentResolver cr, String url, String title, int position) { michael@0: sDb.pinSite(cr, url, title, position); michael@0: } michael@0: michael@0: public static void unpinSite(ContentResolver cr, int position) { michael@0: sDb.unpinSite(cr, position); michael@0: } michael@0: michael@0: public static void unpinAllSites(ContentResolver cr) { michael@0: sDb.unpinAllSites(cr); michael@0: } michael@0: michael@0: public static Cursor getPinnedSites(ContentResolver cr, int limit) { michael@0: return sDb.getPinnedSites(cr, limit); michael@0: } michael@0: michael@0: @RobocopTarget michael@0: public static Cursor getBookmarkForUrl(ContentResolver cr, String url) { michael@0: return sDb.getBookmarkForUrl(cr, url); michael@0: } michael@0: michael@0: public static boolean areContentProvidersDisabled() { michael@0: return sAreContentProvidersEnabled; michael@0: } michael@0: michael@0: public static void setEnableContentProviders(boolean enableContentProviders) { michael@0: sAreContentProvidersEnabled = enableContentProviders; michael@0: } michael@0: }