From fdc9e9735d61dceebbfd15091e45e5c115386607 Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Sun, 22 May 2022 12:25:51 +0700 Subject: [PATCH] Fix qsb in backup screenshot --- .../lawnchair/preferences2/PreferenceUtils.kt | 17 +++++++++++++++++ lawnchair/src/app/lawnchair/qsb/QsbLayout.kt | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lawnchair/src/app/lawnchair/preferences2/PreferenceUtils.kt b/lawnchair/src/app/lawnchair/preferences2/PreferenceUtils.kt index 6520849ff6..7cc74c90e2 100644 --- a/lawnchair/src/app/lawnchair/preferences2/PreferenceUtils.kt +++ b/lawnchair/src/app/lawnchair/preferences2/PreferenceUtils.kt @@ -4,6 +4,23 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import com.patrykmichalik.preferencemanager.Preference import com.patrykmichalik.preferencemanager.firstBlocking +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.drop +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach @Composable fun Preference.asState() = get().collectAsState(initial = firstBlocking()) + +fun Preference.subscribeBlocking( + scope: CoroutineScope, + block: (C) -> Unit, +) { + block(firstBlocking()) + get() + .onEach { block(it) } + .drop(1) + .distinctUntilChanged() + .launchIn(scope = scope) +} diff --git a/lawnchair/src/app/lawnchair/qsb/QsbLayout.kt b/lawnchair/src/app/lawnchair/qsb/QsbLayout.kt index 4294707231..73a331eadd 100644 --- a/lawnchair/src/app/lawnchair/qsb/QsbLayout.kt +++ b/lawnchair/src/app/lawnchair/qsb/QsbLayout.kt @@ -19,6 +19,7 @@ import app.lawnchair.launcher import app.lawnchair.launcherNullable import app.lawnchair.preferences.PreferenceManager import app.lawnchair.preferences2.PreferenceManager2 +import app.lawnchair.preferences2.subscribeBlocking import app.lawnchair.qsb.providers.AppSearch import app.lawnchair.qsb.providers.Google import app.lawnchair.qsb.providers.GoogleGo @@ -68,7 +69,7 @@ class QsbLayout(context: Context, attrs: AttributeSet?) : FrameLayout(context, a val supportsLens = searchProvider == Google - preferenceManager2.themedHotseatQsb.onEach(launchIn = viewAttachedScope) { themed -> + preferenceManager2.themedHotseatQsb.subscribeBlocking(scope = viewAttachedScope) { themed -> setUpBackground(themed) val iconRes = if (themed) searchProvider.themedIcon else searchProvider.icon