diff options
Diffstat (limited to 'src/com/android/browser/provider/BrowserProvider2.java')
-rw-r--r-- | src/com/android/browser/provider/BrowserProvider2.java | 61 |
1 files changed, 56 insertions, 5 deletions
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java index fe7a31b..1821b50 100644 --- a/src/com/android/browser/provider/BrowserProvider2.java +++ b/src/com/android/browser/provider/BrowserProvider2.java @@ -81,6 +81,15 @@ public class BrowserProvider2 extends SQLiteContentProvider { public static final String THUMBNAIL = "thumbnail"; } + public static interface OmniboxSuggestions { + public static final Uri CONTENT_URI = Uri.withAppendedPath( + BrowserContract.AUTHORITY_URI, "omnibox_suggestions"); + public static final String _ID = "_id"; + public static final String URL = "url"; + public static final String TITLE = "title"; + public static final String IS_BOOKMARK = "bookmark"; + } + static final String TABLE_BOOKMARKS = "bookmarks"; static final String TABLE_HISTORY = "history"; static final String TABLE_IMAGES = "images"; @@ -97,6 +106,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { static final String VIEW_ACCOUNTS = "v_accounts"; static final String VIEW_SNAPSHOTS_COMBINED = "v_snapshots_combined"; + static final String VIEW_OMNIBOX_SUGGESTIONS = "v_omnibox_suggestions"; static final String FORMAT_COMBINED_JOIN_SUBQUERY_JOIN_IMAGES = "history LEFT OUTER JOIN (%s) bookmarks " + @@ -121,6 +131,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { static final int THUMBNAILS = 10; static final int THUMBNAILS_ID = 11; + static final int OMNIBOX_SUGGESTIONS = 20; static final int BOOKMARKS = 1000; static final int BOOKMARKS_ID = 1001; @@ -200,6 +211,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { matcher.addURI(authority, "settings", SETTINGS); matcher.addURI(authority, "thumbnails", THUMBNAILS); matcher.addURI(authority, "thumbnails/#", THUMBNAILS_ID); + matcher.addURI(authority, "omnibox_suggestions", OMNIBOX_SUGGESTIONS); // Legacy matcher.addURI(LEGACY_AUTHORITY, "searches", SEARCHES); @@ -346,7 +358,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { final class DatabaseHelper extends SQLiteOpenHelper { static final String DATABASE_NAME = "browser2.db"; - static final int DATABASE_VERSION = 31; + static final int DATABASE_VERSION = 32; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @@ -418,6 +430,11 @@ public class BrowserProvider2 extends SQLiteContentProvider { } enableSync(db); + createOmniboxSuggestions(db); + } + + void createOmniboxSuggestions(SQLiteDatabase db) { + db.execSQL(SQL_CREATE_VIEW_OMNIBOX_SUGGESTIONS); } void createThumbnails(SQLiteDatabase db) { @@ -471,6 +488,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { BookmarkColumns.TITLE, // 1 BookmarkColumns.FAVICON, // 2 BookmarkColumns.TOUCH_ICON, // 3 + BookmarkColumns.CREATED, // 4 }, BookmarkColumns.BOOKMARK + "!=0", null, null, null, null); if (c != null) { @@ -478,6 +496,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { ContentValues values = new ContentValues(); values.put(Bookmarks.URL, c.getString(0)); values.put(Bookmarks.TITLE, c.getString(1)); + values.put(Bookmarks.DATE_CREATED, c.getInt(4)); values.put(Bookmarks.POSITION, 0); values.put(Bookmarks.PARENT, FIXED_ID_ROOT); ContentValues imageValues = new ContentValues(); @@ -497,7 +516,9 @@ public class BrowserProvider2 extends SQLiteContentProvider { BookmarkColumns.VISITS, // 2 BookmarkColumns.DATE, // 3 BookmarkColumns.CREATED, // 4 - }, null, null, null, null, null); + }, BookmarkColumns.VISITS + " > 0 OR " + + BookmarkColumns.BOOKMARK + " = 0", + null, null, null, null); if (c != null) { while (c.moveToNext()) { ContentValues values = new ContentValues(); @@ -541,6 +562,9 @@ public class BrowserProvider2 extends SQLiteContentProvider { @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + if (oldVersion < 32) { + createOmniboxSuggestions(db); + } if (oldVersion < 31) { createThumbnails(db); } @@ -1030,6 +1054,11 @@ public class BrowserProvider2 extends SQLiteContentProvider { break; } + case OMNIBOX_SUGGESTIONS: { + qb.setTables(VIEW_OMNIBOX_SUGGESTIONS); + break; + } + default: { throw new UnsupportedOperationException("Unknown URL " + uri.toString()); } @@ -1227,6 +1256,7 @@ public class BrowserProvider2 extends SQLiteContentProvider { new String[] { Long.toString(id) }); } } + c.close(); break; } case THUMBNAILS_ID: { @@ -1259,8 +1289,12 @@ public class BrowserProvider2 extends SQLiteContentProvider { " AND account_type = ? AND account_name = ?", new String[] { ChromeSyncColumns.FOLDER_NAME_BOOKMARKS_BAR, accountType, accountName }, null, null, null); - if (c.moveToFirst()) { - return c.getLong(0); + try { + if (c.moveToFirst()) { + return c.getLong(0); + } + } finally { + c.close(); } } return FIXED_ID_ROOT; @@ -1737,8 +1771,8 @@ public class BrowserProvider2 extends SQLiteContentProvider { if (c.moveToFirst()) { parentAccountName = c.getString(0); parentAccountType = c.getString(1); - c.close(); } + c.close(); } else if (values.containsKey(Bookmarks.ACCOUNT_NAME) || values.containsKey(Bookmarks.ACCOUNT_TYPE)) { // TODO: Implement if needed (no one needs this yet) @@ -2053,4 +2087,21 @@ public class BrowserProvider2 extends SQLiteContentProvider { return mSource.moveToPosition(newPosition); } } + + // --------------------------------------------------- + // SQL below, be warned + // --------------------------------------------------- + + private static final String SQL_CREATE_VIEW_OMNIBOX_SUGGESTIONS = + "CREATE VIEW IF NOT EXISTS v_omnibox_suggestions " + + " AS " + + " SELECT _id, url, title, 1 AS bookmark, 0 AS visits, 0 AS date" + + " FROM bookmarks " + + " WHERE deleted = 0 AND folder = 0 " + + " UNION ALL " + + " SELECT _id, url, title, 0 AS bookmark, visits, date " + + " FROM history " + + " WHERE url NOT IN (SELECT url FROM bookmarks" + + " WHERE deleted = 0 AND folder = 0) " + + " ORDER BY bookmark DESC, visits DESC, date DESC "; } |