From d449184faa95fcf0f2c2bf1b34ebc54b2973378e Mon Sep 17 00:00:00 2001 From: Mugurell Date: Tue, 14 Jul 2020 16:38:56 +0300 Subject: [PATCH] For #12544 - Prevent search engines mixup Stricter synchronization by always using the same "loadedSearchEngines" variable. With "loadedSearchEngines" calling "refreshAsync()" we also get the fallback engines to contain reddit and youtube (which are programatically added) and also now we properly remember and display the engines added by user. --- .../searchengine/FenixSearchEngineProvider.kt | 38 ++++++++----------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt b/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt index 8e1c28ed8..149620a54 100644 --- a/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt +++ b/app/src/main/java/org/mozilla/fenix/components/searchengine/FenixSearchEngineProvider.kt @@ -7,7 +7,6 @@ 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 @@ -33,14 +32,16 @@ import java.util.Locale open class FenixSearchEngineProvider( private val context: Context ) : SearchEngineProvider, CoroutineScope by CoroutineScope(Job() + Dispatchers.IO) { - private val locationService: LocationService = if (Config.channel.isDebug) { - LocationService.dummy() - } else { - MozillaLocationService( - context, - context.components.core.client, - BuildConfig.MLS_TOKEN - ) + private val locationService = with(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. @@ -93,17 +94,6 @@ 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 - get() = - if (isRegionCachedByLocationService) { - loadedSearchEngines - } else { - fallbackEngines - } - fun getDefaultEngine(context: Context): SearchEngine { val engines = installedSearchEngines(context) val selectedName = context.settings().defaultSearchEngineName @@ -117,7 +107,7 @@ open class FenixSearchEngineProvider( */ fun installedSearchEngines(context: Context): SearchEngineList = runBlocking { val installedIdentifiers = installedSearchEngineIdentifiers(context) - val engineList = searchEngines.await() + val engineList = loadedSearchEngines.await() engineList.copy( list = engineList.list.filter { @@ -188,7 +178,11 @@ open class FenixSearchEngineProvider( } private fun refreshAsync() = async { - val engineList = baseSearchEngines.await() + val engineList = if (isRegionCachedByLocationService) { + baseSearchEngines.await() + } else { + fallbackEngines.await() + } val bundledList = bundledSearchEngines.await().list val customList = customSearchEngines.await().list