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