18d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert/* 28d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * Copyright (C) 2009 The Android Open Source Project 38d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * 48d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); 58d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * you may not use this file except in compliance with the License. 68d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * You may obtain a copy of the License at 78d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * 88d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 98d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * 108d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * Unless required by applicable law or agreed to in writing, software 118d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * distributed under the License is distributed on an "AS IS" BASIS, 128d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * See the License for the specific language governing permissions and 148d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * limitations under the License. 158d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert */ 168d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage android.app; 188d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 198d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.app.SearchManager; 208d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.content.ContentProvider; 218d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.content.ContentValues; 228d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.content.Intent; 238d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.content.UriMatcher; 248d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.database.Cursor; 258d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.database.MatrixCursor; 268d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertimport android.net.Uri; 278d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 288d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert/** Simple test provider that runs in the local process. 298d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * 308d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert * Used by {@link SearchManagerTest}. 318d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert */ 328d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringertpublic class SuggestionProvider extends ContentProvider { 338d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private static final String TAG = "SuggestionProvider"; 348d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 358d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private static final int SEARCH_SUGGESTIONS = 1; 368d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 378d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private static final UriMatcher sURLMatcher = new UriMatcher( 388d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert UriMatcher.NO_MATCH); 398d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 408d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert static { 418d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert sURLMatcher.addURI("*", SearchManager.SUGGEST_URI_PATH_QUERY, 428d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert SEARCH_SUGGESTIONS); 438d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert sURLMatcher.addURI("*", SearchManager.SUGGEST_URI_PATH_QUERY + "/*", 448d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert SEARCH_SUGGESTIONS); 458d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 468d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 478d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private static final String[] COLUMNS = new String[] { 488d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert "_id", 498d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert SearchManager.SUGGEST_COLUMN_TEXT_1, 508d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert SearchManager.SUGGEST_COLUMN_INTENT_ACTION, 518d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert SearchManager.SUGGEST_COLUMN_QUERY 528d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert }; 538d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 548d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public SuggestionProvider() { 558d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 568d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 578d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 588d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public boolean onCreate() { 598d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return true; 608d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 618d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 628d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 638d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public Cursor query(Uri url, String[] projectionIn, String selection, 648d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert String[] selectionArgs, String sort) { 658d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert int match = sURLMatcher.match(url); 668d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert switch (match) { 678d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert case SEARCH_SUGGESTIONS: 688d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert String query = url.getLastPathSegment(); 698d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert MatrixCursor cursor = new MatrixCursor(COLUMNS); 708d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert String[] suffixes = { "", "a", " foo", "XXXXXXXXXXXXXXXXX" }; 718d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert for (String suffix : suffixes) { 728d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert addRow(cursor, query + suffix); 738d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 748d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return cursor; 758d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert default: 768d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert throw new IllegalArgumentException("Unknown URL: " + url); 778d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 788d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 798d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 808d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert private void addRow(MatrixCursor cursor, String string) { 818d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert long id = cursor.getCount(); 828d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert cursor.newRow().add(id).add(string).add(Intent.ACTION_SEARCH).add(string); 838d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 848d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 858d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 868d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public String getType(Uri url) { 878d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert int match = sURLMatcher.match(url); 888d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert switch (match) { 898d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert case SEARCH_SUGGESTIONS: 908d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert return SearchManager.SUGGEST_MIME_TYPE; 918d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert default: 928d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert throw new IllegalArgumentException("Unknown URL: " + url); 938d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 948d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 958d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 968d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 978d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public int update(Uri url, ContentValues values, String where, String[] whereArgs) { 988d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert throw new UnsupportedOperationException("update not supported"); 998d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 1008d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 1018d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 1028d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public Uri insert(Uri url, ContentValues initialValues) { 1038d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert throw new UnsupportedOperationException("insert not supported"); 1048d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 1058d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert 1068d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert @Override 1078d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert public int delete(Uri url, String where, String[] whereArgs) { 1088d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert throw new UnsupportedOperationException("delete not supported"); 1098d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert } 1108d17f3f24bbda9a9cd7ea08c5925508dc2c011beBjorn Bringert} 111