19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.database.Cursor; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p>The CursorFilter delegates most of the work to the CursorAdapter. 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Subclasses should override these delegate methods to run the queries 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and convert the results into String that can be used by auto-completion 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * widgets.</p> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass CursorFilter extends Filter { 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CursorFilterClient mClient; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project interface CursorFilterClient { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CharSequence convertToString(Cursor cursor); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor runQueryOnBackgroundThread(CharSequence constraint); 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor getCursor(); 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void changeCursor(Cursor cursor); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CursorFilter(CursorFilterClient client) { 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mClient = client; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CharSequence convertResultToString(Object resultValue) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mClient.convertToString((Cursor) resultValue); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected FilterResults performFiltering(CharSequence constraint) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor cursor = mClient.runQueryOnBackgroundThread(constraint); 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FilterResults results = new FilterResults(); 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cursor != null) { 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.count = cursor.getCount(); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.values = cursor; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.count = 0; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project results.values = null; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return results; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void publishResults(CharSequence constraint, FilterResults results) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Cursor oldCursor = mClient.getCursor(); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (results.values != null && results.values != oldCursor) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mClient.changeCursor((Cursor) results.values); 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 71