19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.provider; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentResolver; 206f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamiltonimport android.content.ContentUris; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ContentValues; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Intent; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.DatabaseUtils; 2631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamiltonimport android.graphics.BitmapFactory; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.net.Uri; 286f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamiltonimport android.provider.BrowserContract.Bookmarks; 29ba5c41212f31b80ecfd87d1e6ae3f7c4d378746dJohn Reckimport android.provider.BrowserContract.Combined; 306f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamiltonimport android.provider.BrowserContract.History; 3188697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamiltonimport android.provider.BrowserContract.Searches; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.Log; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.webkit.WebIconDatabase; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Browser { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final String LOGTAG = "browser"; 3731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 3831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 3931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * A table containing both bookmarks and history items. The columns of the table are defined in 4031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * {@link BookmarkColumns}. Reading this table requires the 4131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} permission and writing to it 4231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * requires the {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} permission. 4331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 4431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton public static final Uri BOOKMARKS_URI = Uri.parse("content://browser/bookmarks"); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The name of extra data when starting Browser with ACTION_VIEW or 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ACTION_SEARCH intent. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The value should be an integer between 0 and 1000. If not set or set to 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 0, the Browser will use default. If set to 100, the Browser will start 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with 100%. 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String INITIAL_ZOOM_LEVEL = "browser.initialZoomLevel"; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 56ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project /** 57ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * The name of the extra data when starting the Browser from another 58ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * application. 59ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * <p> 60ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * The value is a unique identification string that will be used to 6131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * identify the calling application. The Browser will attempt to reuse the 62ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * same window each time the application launches the Browser with the same 63ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * identifier. 64ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project */ 6531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton public static final String EXTRA_APPLICATION_ID = "com.android.browser.application_id"; 668eb241b877d78cb665e99c6412876ebb1e5c0939Mitsuru Oshima 678eb241b877d78cb665e99c6412876ebb1e5c0939Mitsuru Oshima /** 68679091849754c60bdde5670495c38493065fd308Grace Kloba * The name of the extra data in the VIEW intent. The data are key/value 69679091849754c60bdde5670495c38493065fd308Grace Kloba * pairs in the format of Bundle. They will be sent in the HTTP request 70d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8eGrace Kloba * headers for the provided url. The keys can't be the standard HTTP headers 71d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8eGrace Kloba * as they are set by the WebView. The url's schema must be http(s). 72d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8eGrace Kloba * <p> 73d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8eGrace Kloba */ 74679091849754c60bdde5670495c38493065fd308Grace Kloba public static final String EXTRA_HEADERS = "com.android.browser.headers"; 75d0d9bc2f2fe737d186c0cc8c29a325e4f2907e8eGrace Kloba 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* if you change column order you must also change indices 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project below */ 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] HISTORY_PROJECTION = new String[] { 7931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns._ID, // 0 8031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.URL, // 1 8131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.VISITS, // 2 8231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.DATE, // 3 8331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.BOOKMARK, // 4 8431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.TITLE, // 5 8531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.FAVICON, // 6 8631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.THUMBNAIL, // 7 8731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.TOUCH_ICON, // 8 8831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.USER_ENTERED, // 9 8931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton }; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* these indices dependent on HISTORY_PROJECTION */ 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_ID_INDEX = 0; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_URL_INDEX = 1; 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_VISITS_INDEX = 2; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_DATE_INDEX = 3; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_BOOKMARK_INDEX = 4; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_TITLE_INDEX = 5; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HISTORY_PROJECTION_FAVICON_INDEX = 6; 999f53fcaacf745c1337144685cc30ad3f4740e885Leon Scroggins /** 1007e2ff1a600555accb1836e4e960d705d13e35f60Leon Scroggins * @hide 1017e2ff1a600555accb1836e4e960d705d13e35f60Leon Scroggins */ 102908baedfcf83abc8f5564aa8b427b05989f8591fLeon Scroggins public static final int HISTORY_PROJECTION_THUMBNAIL_INDEX = 7; 1032ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott /** 1042ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott * @hide 1052ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott */ 1062ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott public static final int HISTORY_PROJECTION_TOUCH_ICON_INDEX = 8; 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* columns needed to determine whether to truncate history */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] TRUNCATE_HISTORY_PROJECTION = new String[] { 11031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns._ID, 11131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton BookmarkColumns.DATE, 11231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton }; 11331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TRUNCATE_HISTORY_PROJECTION_ID_INDEX = 0; 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* truncate this many history items at a time */ 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int TRUNCATE_N_OLDEST = 5; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 11931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 12031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * A table containing a log of browser searches. The columns of the table are defined in 12131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * {@link SearchColumns}. Reading this table requires the 12231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} permission and writing to it 12331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * requires the {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} permission. 12431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 12531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton public static final Uri SEARCHES_URI = Uri.parse("content://browser/searches"); 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 12831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * A projection of {@link #SEARCHES_URI} that contains {@link SearchColumns#_ID}, 12931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * {@link SearchColumns#SEARCH}, and {@link SearchColumns#DATE}. 13031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String[] SEARCHES_PROJECTION = new String[] { 13231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton // if you change column order you must also change indices below 13331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton SearchColumns._ID, // 0 13431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton SearchColumns.SEARCH, // 1 13531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton SearchColumns.DATE, // 2 13631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton }; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* these indices dependent on SEARCHES_PROJECTION */ 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEARCHES_PROJECTION_SEARCH_INDEX = 1; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int SEARCHES_PROJECTION_DATE_INDEX = 2; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Set a cap on the count of history items in the history/bookmark 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project table, to prevent db and layout operations from dragging to a 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project crawl. Revisit this cap when/if db/layout performance 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project improvements are made. Note: this does not affect bookmark 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project entries -- if the user wants more bookmarks than the cap, they 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project get them. */ 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static final int MAX_HISTORY_COUNT = 250; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 15131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Open an activity to save a bookmark. Launch with a title 15231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * and/or a url, both of which can be edited by the user before saving. 15331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * 15431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * @param c Context used to launch the activity to add a bookmark. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param title Title for the bookmark. Can be null or empty string. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url Url for the bookmark. Can be null or empty string. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void saveBookmark(Context c, 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String title, 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String url) { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent i = new Intent(Intent.ACTION_INSERT, Browser.BOOKMARKS_URI); 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i.putExtra("title", title); 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i.putExtra("url", url); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c.startActivity(i); 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 167dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins /** 16831cb0bedc66b1cee4b5252df2b8e04e653358df3Leon Scroggins * Boolean extra passed along with an Intent to a browser, specifying that 16931cb0bedc66b1cee4b5252df2b8e04e653358df3Leon Scroggins * a new tab be created. Overrides EXTRA_APPLICATION_ID; if both are set, 17031cb0bedc66b1cee4b5252df2b8e04e653358df3Leon Scroggins * a new tab will be used, rather than using the same one. 171af5b406ad62af6f9d9e9f9f278683fb42015a4a2Leon Scroggins */ 172af5b406ad62af6f9d9e9f9f278683fb42015a4a2Leon Scroggins public static final String EXTRA_CREATE_NEW_TAB = "create_new_tab"; 173af5b406ad62af6f9d9e9f9f278683fb42015a4a2Leon Scroggins 174af5b406ad62af6f9d9e9f9f278683fb42015a4a2Leon Scroggins /** 175dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * Stores a Bitmap extra in an {@link Intent} representing the screenshot of 176dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * a page to share. When receiving an {@link Intent#ACTION_SEND} from the 177dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * Browser, use this to access the screenshot. 178dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * @hide 179dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins */ 180dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins public final static String EXTRA_SHARE_SCREENSHOT = "share_screenshot"; 181dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins 182dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins /** 183dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * Stores a Bitmap extra in an {@link Intent} representing the favicon of a 184dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * page to share. When receiving an {@link Intent#ACTION_SEND} from the 185dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * Browser, use this to access the favicon. 186dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins * @hide 187dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins */ 188dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins public final static String EXTRA_SHARE_FAVICON = "share_favicon"; 189dcf19a8d34d85255184bac6ac5083d3d68ed5953Leon Scroggins 19031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 19131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Sends the given string using an Intent with {@link Intent#ACTION_SEND} and a mime type 19231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * of text/plain. The string is put into {@link Intent#EXTRA_TEXT}. 19331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * 19431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * @param context the context used to start the activity 19531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * @param string the string to send 19631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 19731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton public static final void sendString(Context context, String string) { 19831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton sendString(context, string, context.getString(com.android.internal.R.string.sendText)); 199354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu } 200354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu 201354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu /** 202354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * Find an application to handle the given string and, if found, invoke 203354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * it with the given string as a parameter. 204354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * @param c Context used to launch the new activity. 205354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * @param stringToSend The string to be handled. 206354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * @param chooserDialogTitle The title of the dialog that allows the user 207354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * to select between multiple applications that are all capable of handling 208354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * the string. 209354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu * @hide pending API council approval 210354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu */ 211354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu public static final void sendString(Context c, 212354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu String stringToSend, 213354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu String chooserDialogTitle) { 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Intent send = new Intent(Intent.ACTION_SEND); 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project send.setType("text/plain"); 216354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu send.putExtra(Intent.EXTRA_TEXT, stringToSend); 217354eb66673bbf7a6251583c135d13bcc2c62af0bAndrei Popescu 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 219fe026bdd3c0fd7543ceaf0732aeb824cfddb5b23Leon Scroggins Intent i = Intent.createChooser(send, chooserDialogTitle); 220fe026bdd3c0fd7543ceaf0732aeb824cfddb5b23Leon Scroggins // In case this is called from outside an Activity 221fe026bdd3c0fd7543ceaf0732aeb824cfddb5b23Leon Scroggins i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 222fe026bdd3c0fd7543ceaf0732aeb824cfddb5b23Leon Scroggins c.startActivity(i); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch(android.content.ActivityNotFoundException ex) { 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if no app handles it, do nothing 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 22931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Return a cursor pointing to a list of all the bookmarks. The cursor will have a single 23031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * column, {@link BookmarkColumns#URL}. 23131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p> 2329ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 23331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor getAllBookmarks(ContentResolver cr) throws 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IllegalStateException { 2386f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton return cr.query(Bookmarks.CONTENT_URI, 2396f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton new String[] { Bookmarks.URL }, 2406f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton Bookmarks.IS_FOLDER + " = 0", null, null); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 24431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Return a cursor pointing to a list of all visited site urls. The cursor will 24531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * have a single column, {@link BookmarkColumns#URL}. 24631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p> 2479ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 24831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Cursor getAllVisitedUrls(ContentResolver cr) throws 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IllegalStateException { 253ba5c41212f31b80ecfd87d1e6ae3f7c4d378746dJohn Reck return cr.query(Combined.CONTENT_URI, 254ba5c41212f31b80ecfd87d1e6ae3f7c4d378746dJohn Reck new String[] { Combined.URL }, null, null, 255ba5c41212f31b80ecfd87d1e6ae3f7c4d378746dJohn Reck Combined.DATE_CREATED + " ASC"); 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 258d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins private static final void addOrUrlEquals(StringBuilder sb) { 259d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins sb.append(" OR " + BookmarkColumns.URL + " = "); 260d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } 261d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins 2626f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton private static final Cursor getVisitedLike(ContentResolver cr, String url) { 263d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins boolean secure = false; 264d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins String compareString = url; 265d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins if (compareString.startsWith("http://")) { 266d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins compareString = compareString.substring(7); 267d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } else if (compareString.startsWith("https://")) { 268d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins compareString = compareString.substring(8); 269d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins secure = true; 270d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } 271d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins if (compareString.startsWith("www.")) { 272d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins compareString = compareString.substring(4); 273d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } 274d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins StringBuilder whereClause = null; 275d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins if (secure) { 2766f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton whereClause = new StringBuilder(Bookmarks.URL + " = "); 277d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 278d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins "https://" + compareString); 279d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins addOrUrlEquals(whereClause); 280d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 281d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins "https://www." + compareString); 282d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } else { 2836f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton whereClause = new StringBuilder(Bookmarks.URL + " = "); 284d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 285d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins compareString); 286d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins addOrUrlEquals(whereClause); 287d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins String wwwString = "www." + compareString; 288d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 289d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins wwwString); 290d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins addOrUrlEquals(whereClause); 291d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 292d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins "http://" + compareString); 293d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins addOrUrlEquals(whereClause); 294d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins DatabaseUtils.appendEscapedSQLString(whereClause, 295d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins "http://" + wwwString); 296d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } 2976f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton return cr.query(History.CONTENT_URI, new String[] { History._ID, History.VISITS }, 298d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins whereClause.toString(), null, null); 299d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins } 300d2334cb68aa4897a44ad33037c4c2e8657480466Leon Scroggins 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update the visited history to acknowledge that a site has been 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * visited. 3049ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 3059ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url The site being visited. 308331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins * @param real If true, this is an actual visit, and should add to the 309331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins * number of visits. If false, the user entered it manually. 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void updateVisitedHistory(ContentResolver cr, 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String url, boolean real) { 31331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton long now = System.currentTimeMillis(); 314e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins Cursor c = null; 315e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins try { 316e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins c = getVisitedLike(cr, url); 317e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins /* We should only get one answer that is exactly the same. */ 318e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins if (c.moveToFirst()) { 3196f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton ContentValues values = new ContentValues(); 320e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins if (real) { 3216f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.VISITS, c.getInt(1) + 1); 322331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins } else { 3236f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.USER_ENTERED, 1); 324331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins } 3256f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.DATE_LAST_VISITED, now); 3266f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cr.update(ContentUris.withAppendedId(History.CONTENT_URI, c.getLong(0)), 3276f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values, null, null); 328e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins } else { 329e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins truncateHistory(cr); 3306f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton ContentValues values = new ContentValues(); 331e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins int visits; 332e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins int user_entered; 333e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins if (real) { 334e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins visits = 1; 335e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins user_entered = 0; 336e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins } else { 337e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins visits = 0; 338e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins user_entered = 1; 339e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins } 3406f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.URL, url); 3416f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.VISITS, visits); 3426f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.DATE_LAST_VISITED, now); 3436f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.TITLE, url); 3446f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.DATE_CREATED, 0); 3456f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton values.put(History.USER_ENTERED, user_entered); 3466f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cr.insert(History.CONTENT_URI, values); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 348e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins } catch (IllegalStateException e) { 349e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins Log.e(LOGTAG, "updateVisitedHistory", e); 350e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins } finally { 351e77852c8853465ce69a567a5446f251274f98a15Leon Scroggins if (c != null) c.close(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3569c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke * Returns all the URLs in the history. 3579c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 3589c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke * @param cr The ContentResolver used to access the database. 3599c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke * @hide pending API council approval 3609c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke */ 3619c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke public static final String[] getVisitedHistory(ContentResolver cr) { 362fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins Cursor c = null; 363fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins String[] str = null; 364bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba try { 365bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba String[] projection = new String[] { 3666f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton History.URL, 367bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba }; 3686f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton c = cr.query(History.CONTENT_URI, projection, History.VISITS + " > 0", null, null); 3696f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (c == null) return new String[0]; 370fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins str = new String[c.getCount()]; 371bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba int i = 0; 372bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba while (c.moveToNext()) { 373bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba str[i] = c.getString(0); 374bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba i++; 375bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba } 376bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba } catch (IllegalStateException e) { 377fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins Log.e(LOGTAG, "getVisitedHistory", e); 378fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins str = new String[0]; 379fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins } finally { 380fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins if (c != null) c.close(); 381bf54f02b598254c6fc7df0ae47a3a02398a8ef02Grace Kloba } 382fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins return str; 3839c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke } 3849c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke 3859c8d886bb776ab98fc3b8aa26134c7a2611a6076Leon Clarke /** 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If there are more than MAX_HISTORY_COUNT non-bookmark history 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * items in the bookmark/history table, delete TRUNCATE_N_OLDEST 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of them. This is used to keep our history table to a 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * reasonable size. Note: it does not prune bookmarks. If the 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * user wants 1000 bookmarks, the user gets 1000 bookmarks. 3919ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 3929ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void truncateHistory(ContentResolver cr) { 3976f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton // TODO make a single request to the provider to do this in a single transaction 3986f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton Cursor cursor = null; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4006f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Select non-bookmark history, ordered by date 4026f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cursor = cr.query(History.CONTENT_URI, 4036f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton new String[] { History._ID, History.URL, History.DATE_LAST_VISITED }, 4046f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton null, null, History.DATE_LAST_VISITED + " ASC"); 4056f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton 4066f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (cursor.moveToFirst() && cursor.getCount() >= MAX_HISTORY_COUNT) { 4076f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton final WebIconDatabase iconDb = WebIconDatabase.getInstance(); 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* eliminate oldest history items */ 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < TRUNCATE_N_OLDEST; i++) { 4106f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cr.delete(ContentUris.withAppendedId(History.CONTENT_URI, cursor.getLong(0)), 4116f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton null, null); 4126f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton iconDb.releaseIconForPageUrl(cursor.getString(1)); 4136f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (!cursor.moveToNext()) break; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException e) { 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOGTAG, "truncateHistory", e); 418fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins } finally { 4196f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (cursor != null) cursor.close(); 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns whether there is any history to clear. 4259ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return boolean True if the history can be cleared. 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final boolean canClearHistory(ContentResolver cr) { 4306f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton Cursor cursor = null; 431fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins boolean ret = false; 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4336f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cursor = cr.query(History.CONTENT_URI, 4346f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton new String [] { History._ID, History.VISITS }, 4356f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton null, null, null); 4366f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton ret = cursor.getCount() > 0; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException e) { 438fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins Log.e(LOGTAG, "canClearHistory", e); 439fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins } finally { 4406f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (cursor != null) cursor.close(); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 442fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins return ret; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Delete all entries from the bookmarks/history table which are 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not bookmarks. Also set all visited bookmarks to unvisited. 4489ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void clearHistory(ContentResolver cr) { 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteHistoryWhere(cr, null); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4566f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * Helper function to delete all history items and release the icons for them in the 4576f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * {@link WebIconDatabase}. 4586f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * 4596f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 4606f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 4616f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton * 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param whereClause String to limit the items affected. 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * null means all items. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4666f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton private static final void deleteHistoryWhere(ContentResolver cr, String whereClause) { 4676f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton Cursor cursor = null; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4696f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cursor = cr.query(History.CONTENT_URI, new String[] { History.URL }, whereClause, 4706f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton null, null); 4716f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (cursor.moveToFirst()) { 472fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins final WebIconDatabase iconDb = WebIconDatabase.getInstance(); 473fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins do { 4746f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton // Delete favicons 4756f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton // TODO don't release if the URL is bookmarked 4766f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton iconDb.releaseIconForPageUrl(cursor.getString(0)); 4776f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton } while (cursor.moveToNext()); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4795360eab8bbe7e86f78aec945a8492066f0c6ef8cJeff Hamilton cr.delete(History.CONTENT_URI, whereClause, null); 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException e) { 482fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins Log.e(LOGTAG, "deleteHistoryWhere", e); 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 484fe1143b43bc09fc7135254b10a118e42eb8f53cbLeon Scroggins } finally { 4856f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton if (cursor != null) cursor.close(); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Delete all history items from begin to end. 4919ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param begin First date to remove. If -1, all dates before end. 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Inclusive. 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param end Last date to remove. If -1, all dates after begin. 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Non-inclusive. 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void deleteHistoryTimeFrame(ContentResolver cr, 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long begin, long end) { 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String whereClause; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String date = BookmarkColumns.DATE; 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (-1 == begin) { 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (-1 == end) { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clearHistory(cr); 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project whereClause = date + " < " + Long.toString(end); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (-1 == end) { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project whereClause = date + " >= " + Long.toString(begin); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project whereClause = date + " >= " + Long.toString(begin) + " AND " + date 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project + " < " + Long.toString(end); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project deleteHistoryWhere(cr, whereClause); 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remove a specific url from the history database. 5199ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param url url to remove. 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void deleteFromHistory(ContentResolver cr, 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String url) { 5256f42edc2079fcdc3ba44484e21b206a6c638a607Jeff Hamilton cr.delete(History.CONTENT_URI, History.URL + "=?", new String[] { url }); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Add a search string to the searches database. 5309ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 5319ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param search The string to add to the searches database. 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void addSearchUrl(ContentResolver cr, String search) { 53688697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton // The content provider will take care of updating existing searches instead of duplicating 53788697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton ContentValues values = new ContentValues(); 53888697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton values.put(Searches.SEARCH, search); 53988697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton values.put(Searches.DATE, System.currentTimeMillis()); 54088697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton cr.insert(Searches.CONTENT_URI, values); 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 54231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remove all searches from the search database. 5459ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS} 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void clearSearches(ContentResolver cr) { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // FIXME: Should this clear the urls to which these searches lead? 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // (i.e. remove google.com/query= blah blah blah) 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 55288697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton cr.delete(Searches.CONTENT_URI, null, null); 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IllegalStateException e) { 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Log.e(LOGTAG, "clearSearches", e); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 55936acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott * Request all icons from the database. This call must either be called 56036acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott * in the main thread or have had Looper.prepare() invoked in the calling 56136acfbc2b8df6e62f2d583933eca3a49265279a6Patrick Scott * thread. 5629ce4c6c5cfc111a73e0cfc3c94daa50346c56867Leon Scroggins * Requires {@link android.Manifest.permission#READ_HISTORY_BOOKMARKS} 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cr The ContentResolver used to access the database. 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param where Clause to be used to limit the query from the database. 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Must be an allowable string to be passed into a database query. 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param listener IconListener that gets the icons once they are 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * retrieved. 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final void requestAllIcons(ContentResolver cr, String where, 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project WebIconDatabase.IconListener listener) { 57188697b5a3344215f7190b3841b2fc63dae3d0c37Jeff Hamilton WebIconDatabase.getInstance().bulkRequestIconForPageUrl(cr, where, listener); 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 57431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 57531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Column definitions for the mixed bookmark and history items available 57631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * at {@link #BOOKMARKS_URI}. 57731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class BookmarkColumns implements BaseColumns { 57931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 58031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The URL of the bookmark or history item. 58131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: TEXT (URL)</p> 58231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String URL = "url"; 58431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 58531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 58631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The number of time the item has been visited. 58731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: NUMBER</p> 58831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String VISITS = "visits"; 59031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 59131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 59231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The date the item was last visited, in milliseconds since the epoch. 59331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: NUMBER (date in milliseconds since January 1, 1970)</p> 59431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE = "date"; 59631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 59731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 59831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Flag indicating that an item is a bookmark. A value of 1 indicates a bookmark, a value 59931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * of 0 indicates a history item. 60031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: INTEGER (boolean)</p> 60131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String BOOKMARK = "bookmark"; 60331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 60431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 60531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The user visible title of the bookmark or history item. 60631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: TEXT</p> 60731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String TITLE = "title"; 60931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 61031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 61131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The date the item created, in milliseconds since the epoch. 61231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: NUMBER (date in milliseconds since January 1, 1970)</p> 61331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String CREATED = "created"; 61531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 61631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 61731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The favicon of the bookmark. Must decode via {@link BitmapFactory#decodeByteArray}. 61831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: BLOB (image)</p> 61931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String FAVICON = "favicon"; 62131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 6229f53fcaacf745c1337144685cc30ad3f4740e885Leon Scroggins /** 6237e2ff1a600555accb1836e4e960d705d13e35f60Leon Scroggins * @hide 6247e2ff1a600555accb1836e4e960d705d13e35f60Leon Scroggins */ 625908baedfcf83abc8f5564aa8b427b05989f8591fLeon Scroggins public static final String THUMBNAIL = "thumbnail"; 62631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 6272ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott /** 6282ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott * @hide 6292ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott */ 6302ba1262b420ef5b9abebcd818c46774b8517f244Patrick Scott public static final String TOUCH_ICON = "touch_icon"; 63131d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 632331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins /** 633331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins * @hide 634331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins */ 635331c7788a84fc6f625ac1bafbb33cf7da1116407Leon Scroggins public static final String USER_ENTERED = "user_entered"; 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 63831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 63931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * Column definitions for the search history table, available at {@link #SEARCHES_URI}. 64031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static class SearchColumns implements BaseColumns { 64231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 643b5503c168a49f0f2b1372678f87d874e7d82aaadKristian Monsen * @deprecated Not used. 64431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 64531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton @Deprecated 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String URL = "url"; 64731d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 64831d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 64931d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The user entered search term. 65031d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String SEARCH = "search"; 65231d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton 65331d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton /** 65431d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * The date the search was performed, in milliseconds since the epoch. 65531d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton * <p>Type: NUMBER (date in milliseconds since January 1, 1970)</p> 65631d95db2cc0ef2ce777cc7f4d3cc560d3f7e6e42Jeff Hamilton */ 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final String DATE = "date"; 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 660