blob: 32e936754a990e0c8421775a1563c0c19597f479 [file]
/*
* 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.google
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import com.android.quicksearchbox.AbstractInternalSource
import com.android.quicksearchbox.CursorBackedSourceResult
import com.android.quicksearchbox.R
import com.android.quicksearchbox.SourceResult
import com.android.quicksearchbox.SuggestionCursor
import com.android.quicksearchbox.util.NamedTaskExecutor
/** Special source implementation for Google suggestions. */
abstract class AbstractGoogleSource(
context: Context?,
uiThread: Handler?,
iconLoader: NamedTaskExecutor
) :
AbstractInternalSource(context, uiThread, iconLoader),
com.android.quicksearchbox.google.GoogleSource {
@get:Override abstract override val intentComponent: ComponentName?
@Override
abstract override fun refreshShortcut(shortcutId: String?, extraData: String?): SuggestionCursor?
/** Called by QSB to get web suggestions for a query. */
@Override abstract override fun queryInternal(query: String?): SourceResult?
/** Called by external apps to get web suggestions for a query. */
@Override abstract override fun queryExternal(query: String?): SourceResult?
@Override
override fun createVoiceSearchIntent(appData: Bundle?): Intent? {
return createVoiceWebSearchIntent(appData)
}
@get:Override
override val defaultIntentAction: String
get() = Intent.ACTION_WEB_SEARCH
@get:Override
override val hint: CharSequence
get() = context!!.getString(R.string.google_search_hint)
@get:Override
override val label: CharSequence
get() = context!!.getString(R.string.google_search_label)
@get:Override
override val name: String
get() = AbstractGoogleSource.Companion.GOOGLE_SOURCE_NAME
@get:Override
override val settingsDescription: CharSequence
get() = context!!.getString(R.string.google_search_description)
@get:Override
override val sourceIconResource: Int
get() = R.mipmap.google_icon
@Override
override fun getSuggestions(query: String?, queryLimit: Int): SourceResult? {
return emptyIfNull(queryInternal(query), query)
}
fun getSuggestionsExternal(query: String?): SourceResult {
return emptyIfNull(queryExternal(query), query)
}
private fun emptyIfNull(result: SourceResult?, query: String?): SourceResult {
return if (result == null) CursorBackedSourceResult(this, query) else result
}
@Override
override fun voiceSearchEnabled(): Boolean {
return true
}
@Override
override fun includeInAll(): Boolean {
return true
}
companion object {
/*
* This name corresponds to what was used in previous version of quick search box. We use the
* same name so that shortcuts continue to work after an upgrade. (It also makes logging more
* consistent).
*/
private const val GOOGLE_SOURCE_NAME = "com.android.quicksearchbox/.google.GoogleSearch"
}
}