1cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/*
2cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Copyright (C) 2011 The Android Open Source Project
3cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
4cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License");
5cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * you may not use this file except in compliance with the License.
6cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * You may obtain a copy of the License at
7cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
8cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *      http://www.apache.org/licenses/LICENSE-2.0
9cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn *
10cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * Unless required by applicable law or agreed to in writing, software
11cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS,
12cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * See the License for the specific language governing permissions and
14cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn * limitations under the License.
15cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn */
16cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
17cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornpackage android.support.v4.widget;
18cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
19cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.database.Cursor;
20cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornimport android.widget.Filter;
21cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
22cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/**
230574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * The CursorFilter delegates most of the work to the
240574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * {@link android.widget.CursorAdapter}. Subclasses should override these
250574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * delegate methods to run the queries and convert the results into String
260574ca37da4619afe4e26753f5a1b4de314b6565Svetoslav Ganov * that can be used by auto-completion widgets.
27cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn */
28cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackbornclass CursorFilter extends Filter {
294d2c7b7c4f194034c5f17c4bee7320d808aabe4cAurimas Liutikas
30cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    CursorFilterClient mClient;
314d2c7b7c4f194034c5f17c4bee7320d808aabe4cAurimas Liutikas
32cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    interface CursorFilterClient {
33cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        CharSequence convertToString(Cursor cursor);
34cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Cursor runQueryOnBackgroundThread(CharSequence constraint);
35cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Cursor getCursor();
36cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        void changeCursor(Cursor cursor);
37cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
38cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
39cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    CursorFilter(CursorFilterClient client) {
40cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        mClient = client;
41cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
424d2c7b7c4f194034c5f17c4bee7320d808aabe4cAurimas Liutikas
43cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    @Override
44cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    public CharSequence convertResultToString(Object resultValue) {
45cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return mClient.convertToString((Cursor) resultValue);
46cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
47cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
48cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    @Override
49cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    protected FilterResults performFiltering(CharSequence constraint) {
50cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Cursor cursor = mClient.runQueryOnBackgroundThread(constraint);
51cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
52cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        FilterResults results = new FilterResults();
53cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (cursor != null) {
54cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            results.count = cursor.getCount();
55cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            results.values = cursor;
56cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        } else {
57cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            results.count = 0;
58cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            results.values = null;
59cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
60cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        return results;
61cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
62cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn
63cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    @Override
64cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    protected void publishResults(CharSequence constraint, FilterResults results) {
65cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        Cursor oldCursor = mClient.getCursor();
664d2c7b7c4f194034c5f17c4bee7320d808aabe4cAurimas Liutikas
67cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        if (results.values != null && results.values != oldCursor) {
68cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn            mClient.changeCursor((Cursor) results.values);
69cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn        }
70cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn    }
71cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn}
72