diff options
Diffstat (limited to 'src/com/android/browser/BrowserProvider.java')
| -rw-r--r-- | src/com/android/browser/BrowserProvider.java | 94 |
1 files changed, 92 insertions, 2 deletions
diff --git a/src/com/android/browser/BrowserProvider.java b/src/com/android/browser/BrowserProvider.java index 47477217c..bd6a723c1 100644 --- a/src/com/android/browser/BrowserProvider.java +++ b/src/com/android/browser/BrowserProvider.java @@ -53,6 +53,7 @@ import com.google.android.providers.GoogleSettings.Partner; import java.io.File; import java.io.FilenameFilter; +import java.util.ArrayList; import java.util.Date; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -718,16 +719,105 @@ public class BrowserProvider extends ContentProvider { } } + private static class ResultsCursor extends AbstractCursor { + // Array indices for RESULTS_COLUMNS + private static final int RESULT_ACTION_ID = 1; + private static final int RESULT_DATA_ID = 2; + private static final int RESULT_TEXT_ID = 3; + private static final int RESULT_ICON_ID = 4; + private static final int RESULT_EXTRA_ID = 5; + + private static final String[] RESULTS_COLUMNS = new String[] { + "_id", + SearchManager.SUGGEST_COLUMN_INTENT_ACTION, + SearchManager.SUGGEST_COLUMN_INTENT_DATA, + SearchManager.SUGGEST_COLUMN_TEXT_1, + SearchManager.SUGGEST_COLUMN_ICON_1, + SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA + }; + private final ArrayList<String> mResults; + public ResultsCursor(ArrayList<String> results) { + mResults = results; + } + public int getCount() { return mResults.size(); } + + public String[] getColumnNames() { + return RESULTS_COLUMNS; + } + + public String getString(int column) { + switch (column) { + case RESULT_ACTION_ID: + return Tab.VoiceSearchData.VOICE_SEARCH_RESULTS; + case RESULT_TEXT_ID: + // The data is used when the phone is in landscape mode. We + // still want to show the result string. + case RESULT_DATA_ID: + return mResults.get(mPos); + case RESULT_EXTRA_ID: + // The Intent's extra data will store the index into + // mResults so the BrowserActivity will know which result to + // use. + return Integer.toString(mPos); + case RESULT_ICON_ID: + return Integer.valueOf(R.drawable.magnifying_glass) + .toString(); + default: + return null; + } + } + public short getShort(int column) { + throw new UnsupportedOperationException(); + } + public int getInt(int column) { + throw new UnsupportedOperationException(); + } + public long getLong(int column) { + if ((mPos != -1) && column == 0) { + return mPos; // use row# as the _id + } + throw new UnsupportedOperationException(); + } + public float getFloat(int column) { + throw new UnsupportedOperationException(); + } + public double getDouble(int column) { + throw new UnsupportedOperationException(); + } + public boolean isNull(int column) { + throw new UnsupportedOperationException(); + } + } + + private ResultsCursor mResultsCursor; + + /** + * Provide a set of results to be returned to query, intended to be used + * by the SearchDialog when the BrowserActivity is in voice search mode. + * @param results Strings to display in the dropdown from the SearchDialog + */ + /* package */ void setQueryResults(ArrayList<String> results) { + if (results == null) { + mResultsCursor = null; + } else { + mResultsCursor = new ResultsCursor(results); + } + } + @Override public Cursor query(Uri url, String[] projectionIn, String selection, String[] selectionArgs, String sortOrder) throws IllegalStateException { - SQLiteDatabase db = mOpenHelper.getReadableDatabase(); - int match = URI_MATCHER.match(url); if (match == -1) { throw new IllegalArgumentException("Unknown URL"); } + if (match == URI_MATCH_SUGGEST && mResultsCursor != null) { + Cursor results = mResultsCursor; + mResultsCursor = null; + return results; + } + SQLiteDatabase db = mOpenHelper.getReadableDatabase(); if (match == URI_MATCH_SUGGEST || match == URI_MATCH_BOOKMARKS_SUGGEST) { String suggestSelection; |
