1cba2e2c881e8e16ea5025b564c94320174d65f01Dianne Hackborn/* 2ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas * Copyright 2018 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 17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.cursoradapter.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