| /* | |
| * Copyright (C) 2022 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package com.android.quicksearchbox | |
| import android.os.Handler | |
| import android.util.Log | |
| import com.android.quicksearchbox.util.Consumer | |
| import com.android.quicksearchbox.util.Consumers | |
| import com.android.quicksearchbox.util.NamedTask | |
| import com.android.quicksearchbox.util.NamedTaskExecutor | |
| /** | |
| * A task that gets suggestions from a corpus. | |
| */ | |
| class QueryTask<C : SuggestionCursor?>( | |
| private val mQuery: String?, | |
| private val mQueryLimit: Int, | |
| private val mProvider: SuggestionCursorProvider<C>?, | |
| handler: Handler?, | |
| consumer: Consumer<C>? | |
| ) : NamedTask { | |
| private val mHandler: Handler? | |
| private val mConsumer: Consumer<C>? | |
| @get:Override | |
| override val name: String? | |
| get() = mProvider?.name | |
| @Override | |
| override fun run() { | |
| val cursor = mProvider?.getSuggestions(mQuery, mQueryLimit) | |
| if (DBG) Log.d( | |
| TAG, | |
| "Suggestions from $mProvider = $cursor" | |
| ) | |
| Consumers.consumeCloseableAsync(mHandler, mConsumer, cursor) | |
| } | |
| @Override | |
| override fun toString(): String { | |
| return "$mProvider[$mQuery]" | |
| } | |
| companion object { | |
| private const val TAG = "QSB.QueryTask" | |
| private const val DBG = false | |
| @JvmStatic | |
| fun <C : SuggestionCursor?> startQuery( | |
| query: String?, | |
| maxResults: Int, | |
| provider: SuggestionCursorProvider<C>?, | |
| executor: NamedTaskExecutor, handler: Handler?, | |
| consumer: Consumer<C>? | |
| ) { | |
| val task = QueryTask( | |
| query, maxResults, provider, handler, | |
| consumer | |
| ) | |
| executor.execute(task) | |
| } | |
| } | |
| /** | |
| * Creates a new query task. | |
| * | |
| * @param query Query to run. | |
| * @param queryLimit The number of suggestions to ask each provider for. | |
| * @param provider The provider to ask for suggestions. | |
| * @param handler Handler that [Consumer.consume] will | |
| * get called on. If null, the method is called on the query thread. | |
| * @param consumer Consumer to notify when the suggestions have been returned. | |
| */ | |
| init { | |
| mHandler = handler | |
| mConsumer = consumer | |
| } | |
| } |