|
|
|
@ -7,6 +7,7 @@ package org.mozilla.fenix.components.searchengine
|
|
|
|
|
import android.content.Context
|
|
|
|
|
import androidx.annotation.VisibleForTesting
|
|
|
|
|
import kotlinx.coroutines.CoroutineScope
|
|
|
|
|
import kotlinx.coroutines.Deferred
|
|
|
|
|
import kotlinx.coroutines.Dispatchers
|
|
|
|
|
import kotlinx.coroutines.Job
|
|
|
|
|
import kotlinx.coroutines.async
|
|
|
|
@ -32,16 +33,14 @@ import java.util.Locale
|
|
|
|
|
open class FenixSearchEngineProvider(
|
|
|
|
|
private val context: Context
|
|
|
|
|
) : SearchEngineProvider, CoroutineScope by CoroutineScope(Job() + Dispatchers.IO) {
|
|
|
|
|
private val locationService = with(MozillaLocationService(
|
|
|
|
|
private val locationService: LocationService = if (Config.channel.isDebug) {
|
|
|
|
|
LocationService.dummy()
|
|
|
|
|
} else {
|
|
|
|
|
MozillaLocationService(
|
|
|
|
|
context,
|
|
|
|
|
context.components.core.client,
|
|
|
|
|
BuildConfig.MLS_TOKEN
|
|
|
|
|
)) {
|
|
|
|
|
if (Config.channel.isDebug || !this.hasRegionCached()) {
|
|
|
|
|
LocationService.dummy()
|
|
|
|
|
} else {
|
|
|
|
|
this
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We have two search engine types: one based on MLS reported region, one based only on Locale.
|
|
|
|
@ -94,6 +93,17 @@ open class FenixSearchEngineProvider(
|
|
|
|
|
|
|
|
|
|
private var loadedSearchEngines = refreshAsync()
|
|
|
|
|
|
|
|
|
|
// https://github.com/mozilla-mobile/fenix/issues/9935
|
|
|
|
|
// Create new getter that will return the fallback SearchEngineList if
|
|
|
|
|
// the main one hasn't completed yet
|
|
|
|
|
private val searchEngines: Deferred<SearchEngineList>
|
|
|
|
|
get() =
|
|
|
|
|
if (isRegionCachedByLocationService) {
|
|
|
|
|
loadedSearchEngines
|
|
|
|
|
} else {
|
|
|
|
|
fallbackEngines
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun getDefaultEngine(context: Context): SearchEngine {
|
|
|
|
|
val engines = installedSearchEngines(context)
|
|
|
|
|
val selectedName = context.settings().defaultSearchEngineName
|
|
|
|
@ -107,7 +117,7 @@ open class FenixSearchEngineProvider(
|
|
|
|
|
*/
|
|
|
|
|
fun installedSearchEngines(context: Context): SearchEngineList = runBlocking {
|
|
|
|
|
val installedIdentifiers = installedSearchEngineIdentifiers(context)
|
|
|
|
|
val engineList = loadedSearchEngines.await()
|
|
|
|
|
val engineList = searchEngines.await()
|
|
|
|
|
|
|
|
|
|
engineList.copy(
|
|
|
|
|
list = engineList.list.filter {
|
|
|
|
@ -178,11 +188,7 @@ open class FenixSearchEngineProvider(
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun refreshAsync() = async {
|
|
|
|
|
val engineList = if (isRegionCachedByLocationService) {
|
|
|
|
|
baseSearchEngines.await()
|
|
|
|
|
} else {
|
|
|
|
|
fallbackEngines.await()
|
|
|
|
|
}
|
|
|
|
|
val engineList = baseSearchEngines.await()
|
|
|
|
|
val bundledList = bundledSearchEngines.await().list
|
|
|
|
|
val customList = customSearchEngines.await().list
|
|
|
|
|
|
|
|
|
|