diff options
author | Satish Sampath <satish@android.com> | 2009-06-03 18:25:32 +0100 |
---|---|---|
committer | Satish Sampath <satish@android.com> | 2009-06-03 18:25:32 +0100 |
commit | afcf198a24a9e88592067f544b8a132c2a2fcd10 (patch) | |
tree | a0581665da4bffb7b0d58139320d92877542c1c9 /src/com/android/browser/BrowserProvider.java | |
parent | 67ad85d94de610b798c22b841c9eb1415c1517a5 (diff) | |
parent | 565505b1a2c1d3099496af5910760087602e994a (diff) | |
download | packages_apps_browser-afcf198a24a9e88592067f544b8a132c2a2fcd10.zip packages_apps_browser-afcf198a24a9e88592067f544b8a132c2a2fcd10.tar.gz packages_apps_browser-afcf198a24a9e88592067f544b8a132c2a2fcd10.tar.bz2 |
resolved conflicts for merge of 565505 to master
Diffstat (limited to 'src/com/android/browser/BrowserProvider.java')
-rw-r--r-- | src/com/android/browser/BrowserProvider.java | 97 |
1 files changed, 63 insertions, 34 deletions
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java index df52d80..8ed889e 100644 --- a/src/com/android/browser/BrowserProvider.java +++ b/src/com/android/browser/BrowserProvider.java @@ -28,6 +28,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.content.UriMatcher; import android.content.SharedPreferences.Editor; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.database.AbstractCursor; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; @@ -62,7 +64,7 @@ public class BrowserProvider extends ContentProvider { private static final String[] SUGGEST_PROJECTION = new String[] { "_id", "url", "title", "bookmark" }; - private static final String SUGGEST_SELECTION = + private static final String SUGGEST_SELECTION = "url LIKE ? OR url LIKE ? OR url LIKE ? OR url LIKE ?" + " OR title LIKE ?"; private String[] SUGGEST_ARGS = new String[5]; @@ -141,11 +143,11 @@ public class BrowserProvider extends ContentProvider { // 17 -> 18 Added favicon in bookmarks table for Home shortcuts // 18 -> 19 Remove labels table private static final int DATABASE_VERSION = 19; - + // Regular expression which matches http://, followed by some stuff, followed by // optionally a trailing slash, all matched as separate groups. private static final Pattern STRIP_URL_PATTERN = Pattern.compile("^(http://)(.*?)(/$)?"); - + // The hex color string to be applied to urls of website suggestions, as derived from // the current theme. This is not set until/unless beautifyUrl is called, at which point // this variable caches the color value. @@ -153,12 +155,12 @@ public class BrowserProvider extends ContentProvider { public BrowserProvider() { } - + private static CharSequence replaceSystemPropertyInString(Context context, CharSequence srcString) { StringBuffer sb = new StringBuffer(); int lastCharLoc = 0; - + final String client_id = Partner.getString(context.getContentResolver(), Partner.CLIENT_ID); for (int i = 0; i < srcString.length(); ++i) { @@ -220,7 +222,7 @@ public class BrowserProvider extends ContentProvider { CharSequence bookmarkDestination = replaceSystemPropertyInString(mContext, bookmarks[i + 1]); db.execSQL("INSERT INTO bookmarks (title, url, visits, " + "date, created, bookmark)" + " VALUES('" + - bookmarks[i] + "', '" + bookmarkDestination + + bookmarks[i] + "', '" + bookmarkDestination + "', 0, 0, 0, 1);"); } } catch (ArrayIndexOutOfBoundsException e) { @@ -251,7 +253,7 @@ public class BrowserProvider extends ContentProvider { public boolean onCreate() { final Context context = getContext(); mOpenHelper = new DatabaseHelper(context); - // we added "picasa web album" into default bookmarks for version 19. + // we added "picasa web album" into default bookmarks for version 19. // To avoid erasing the bookmark table, we added it explicitly for // version 18 and 19 as in the other cases, we will erase the table. if (DATABASE_VERSION == 18 || DATABASE_VERSION == 19) { @@ -292,9 +294,9 @@ public class BrowserProvider extends ContentProvider { * Subclass AbstractCursor so we can combine multiple Cursors and add * "Google Search". * Here are the rules. - * 1. We only have MAX_SUGGESTION_LONG_ENTRIES in the list plus + * 1. We only have MAX_SUGGESTION_LONG_ENTRIES in the list plus * "Google Search"; - * 2. If bookmark/history entries are less than + * 2. If bookmark/history entries are less than * (MAX_SUGGESTION_SHORT_ENTRIES -1), we include Google suggest. */ private class MySuggestionCursor extends AbstractCursor { @@ -304,6 +306,9 @@ public class BrowserProvider extends ContentProvider { private int mSuggestionCount; private boolean mBeyondCursor; private String mString; + private int mSuggestText1Id; + private int mSuggestText2Id; + private int mSuggestQueryId; public MySuggestionCursor(Cursor hc, Cursor sc, String string) { mHistoryCursor = hc; @@ -315,6 +320,22 @@ public class BrowserProvider extends ContentProvider { } mString = string; mBeyondCursor = false; + + // Some web suggest providers only give suggestions and have no description string for + // items. The order of the result columns may be different as well. So retrieve the + // column indices for the fields we need now and check before using below. + if (mSuggestCursor == null) { + mSuggestText1Id = -1; + mSuggestText2Id = -1; + mSuggestQueryId = -1; + } else { + mSuggestText1Id = mSuggestCursor.getColumnIndex( + SearchManager.SUGGEST_COLUMN_TEXT_1); + mSuggestText2Id = mSuggestCursor.getColumnIndex( + SearchManager.SUGGEST_COLUMN_TEXT_2); + mSuggestQueryId = mSuggestCursor.getColumnIndex( + SearchManager.SUGGEST_COLUMN_QUERY); + } } @Override @@ -347,7 +368,7 @@ public class BrowserProvider extends ContentProvider { public String[] getColumnNames() { return COLUMNS; } - + @Override public String getString(int columnIndex) { if ((mPos != -1 && mHistoryCursor != null)) { @@ -370,7 +391,8 @@ public class BrowserProvider extends ContentProvider { if (mHistoryCount > mPos) { return getHistoryTitle(); } else if (!mBeyondCursor) { - return mSuggestCursor.getString(1); + if (mSuggestText1Id == -1) return null; + return mSuggestCursor.getString(mSuggestText1Id); } else { return mString; } @@ -379,7 +401,8 @@ public class BrowserProvider extends ContentProvider { if (mHistoryCount > mPos) { return getHistorySubtitle(); } else if (!mBeyondCursor) { - return mSuggestCursor.getString(2); + if (mSuggestText2Id == -1) return null; + return mSuggestCursor.getString(mSuggestText2Id); } else { return getContext().getString(R.string.search_the_web); } @@ -408,11 +431,12 @@ public class BrowserProvider extends ContentProvider { if (mHistoryCount > mPos) { return null; } else if (!mBeyondCursor) { - return mSuggestCursor.getString(3); + if (mSuggestQueryId == -1) return null; + return mSuggestCursor.getString(mSuggestQueryId); } else { return mString; } - + case SUGGEST_COLUMN_FORMAT: return "html"; } @@ -481,11 +505,11 @@ public class BrowserProvider extends ContentProvider { mSuggestCursor = null; } } - + /** * Provides the title (text line 1) for a browser suggestion, which should be the * webpage title. If the webpage title is empty, returns the stripped url instead. - * + * * @return the title string to use */ private String getHistoryTitle() { @@ -495,12 +519,12 @@ public class BrowserProvider extends ContentProvider { } return title; } - + /** * Provides the subtitle (text line 2) for a browser suggestion, which should be the * webpage url. If the webpage title is empty, then the url should go in the title * instead, and the subtitle should be empty, so this would return null. - * + * * @return the subtitle string to use, or null if none */ private String getHistorySubtitle() { @@ -511,7 +535,7 @@ public class BrowserProvider extends ContentProvider { return beautifyUrl(mHistoryCursor.getString(1 /* url */)); } } - + /** * Strips "http://" from the beginning of a url and "/" from the end, * and adds html formatting to make it green. @@ -523,19 +547,19 @@ public class BrowserProvider extends ContentProvider { getContext().getTheme().resolveAttribute( com.android.internal.R.attr.textColorSearchUrl, colorValue, true); int color = getContext().getResources().getColor(colorValue.resourceId); - + // Convert the int color value into a hex string, and strip the first two // characters which will be the alpha transparency (html doesn't want this). mSearchUrlColorHex = Integer.toHexString(color).substring(2); } - + return "<font color=\"#" + mSearchUrlColorHex + "\">" + stripUrl(url) + "</font>"; } } @Override public Cursor query(Uri url, String[] projectionIn, String selection, - String[] selectionArgs, String sortOrder) + String[] selectionArgs, String sortOrder) throws IllegalStateException { SQLiteDatabase db = mOpenHelper.getReadableDatabase(); @@ -580,15 +604,20 @@ public class BrowserProvider extends ContentProvider { // get Google suggest if there is still space in the list if (myArgs != null && myArgs.length > 1 && c.getCount() < (MAX_SUGGESTION_SHORT_ENTRIES - 1)) { - // TODO: This shouldn't be hard-coded. Instead, it should use the - // default web search provider. But the API for that is not implemented yet. - ComponentName googleSearchComponent = - new ComponentName("com.android.googlesearch", - "com.android.googlesearch.GoogleSearch"); - SearchableInfo si = - SearchManager.getSearchableInfo(googleSearchComponent, false); - Cursor sc = SearchManager.getSuggestions(getContext(), si, selectionArgs[0]); - return new MySuggestionCursor(c, sc, selectionArgs[0]); + Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); + intent.addCategory(Intent.CATEGORY_DEFAULT); + ResolveInfo info = getContext().getPackageManager().resolveActivity( + intent, PackageManager.MATCH_DEFAULT_ONLY); + if (info != null) { + ComponentName googleSearchComponent = + new ComponentName(info.activityInfo.packageName, + info.activityInfo.name); + SearchableInfo si = + SearchManager.getSearchableInfo(googleSearchComponent, false); + Cursor sc = SearchManager.getSuggestions( + getContext(), si, selectionArgs[0]); + return new MySuggestionCursor(c, sc, selectionArgs[0]); + } } return new MySuggestionCursor(c, null, selectionArgs[0]); } @@ -740,14 +769,14 @@ public class BrowserProvider extends ContentProvider { getContext().getContentResolver().notifyChange(url, null); return ret; } - + /** * Strips the provided url of preceding "http://" and any trailing "/". Does not * strip "https://". If the provided string cannot be stripped, the original string * is returned. - * + * * TODO: Put this in TextUtils to be used by other packages doing something similar. - * + * * @param url a url to strip, like "http://www.google.com/" * @return a stripped url like "www.google.com", or the original string if it could * not be stripped |