/* * 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( private val mQuery: String?, private val mQueryLimit: Int, private val mProvider: SuggestionCursorProvider?, handler: Handler?, consumer: Consumer? ) : NamedTask { private val mHandler: Handler? private val mConsumer: Consumer? @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 startQuery( query: String?, maxResults: Int, provider: SuggestionCursorProvider?, executor: NamedTaskExecutor, handler: Handler?, consumer: Consumer? ) { 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 } }