From d291aa92eb7af059a9e06c515df7086fd063105f Mon Sep 17 00:00:00 2001 From: paphonb Date: Sat, 12 Oct 2019 10:01:49 +0700 Subject: [PATCH] Fix search provider fallback mechanism --- .../globalsearch/SearchProviderController.kt | 30 ++++++++++++------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/lawnchair/src/ch/deletescape/lawnchair/globalsearch/SearchProviderController.kt b/lawnchair/src/ch/deletescape/lawnchair/globalsearch/SearchProviderController.kt index e1042870b4c..3b1e3bc54a8 100644 --- a/lawnchair/src/ch/deletescape/lawnchair/globalsearch/SearchProviderController.kt +++ b/lawnchair/src/ch/deletescape/lawnchair/globalsearch/SearchProviderController.kt @@ -2,6 +2,7 @@ package ch.deletescape.lawnchair.globalsearch import android.content.Context import android.support.v7.view.ContextThemeWrapper +import ch.deletescape.lawnchair.LawnchairConfig import ch.deletescape.lawnchair.colors.ColorEngine import ch.deletescape.lawnchair.ensureOnMainThread import ch.deletescape.lawnchair.globalsearch.providers.* @@ -52,22 +53,31 @@ class SearchProviderController(private val context: Context) : ColorEngine.OnCol get() { val curr = prefs.searchProvider if (cache == null || cached != curr) { - cache = null - try { - val constructor = Class.forName(prefs.searchProvider).getConstructor(Context::class.java) - val themedContext = ContextThemeWrapper(context, themeRes) - val prov = constructor.newInstance(themedContext) as SearchProvider - if (prov.isAvailable) { - cache = prov - } - } catch (ignored: Exception) { } - if (cache == null) cache = GoogleSearchProvider(context) + cache = createProvider(prefs.searchProvider) { + val lcConfig = LawnchairConfig.getInstance(context) + createProvider(lcConfig.defaultSearchProvider) { AppSearchSearchProvider(context) } + } cached = cache!!::class.java.name + if (prefs.searchProvider != cached) { + prefs.searchProvider = cached + } notifyProviderChanged() } return cache!! } + private fun createProvider(providerName: String, fallback: () -> SearchProvider): SearchProvider { + try { + val constructor = Class.forName(providerName).getConstructor(Context::class.java) + val themedContext = ContextThemeWrapper(context, themeRes) + val prov = constructor.newInstance(themedContext) as SearchProvider + if (prov.isAvailable) { + return prov + } + } catch (ignored: Exception) { } + return fallback() + } + override fun onColorChange(resolveInfo: ColorEngine.ResolveInfo) { if (resolveInfo.key == ColorEngine.Resolvers.ACCENT) { cache = null