From fcbf2eb8d29ef9c251eee4c850cace0e055597af Mon Sep 17 00:00:00 2001 From: Suphon Thanakornpakapong Date: Tue, 18 May 2021 00:17:30 +0700 Subject: [PATCH] Show hidden app count in preference --- lawnchair/res/values/strings.xml | 4 ++++ .../ui/preferences/AppDrawerPreferences.kt | 1 + .../ui/preferences/HiddenAppsPreferences.kt | 14 ++++++++++++-- .../util/preferences/PreferenceAdapter.kt | 12 ++++++++---- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index 7bc068751a..12f28bdfde 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -77,4 +77,8 @@ Product Apps Hidden apps + + %1$d app hidden + %1$d apps hidden + diff --git a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt index 02e0e2f226..12052a4649 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt @@ -86,6 +86,7 @@ fun AppDrawerPreferences() { PreferenceGroup(heading = stringResource(id = R.string.app_drawer_section_apps)) { NavigationActionPreference( label = stringResource(id = R.string.hidden_apps_label), + subtitle = hiddenAppsCount(), destination = subRoute(name = AppDrawerRoutes.HIDDEN_APPS), showDivider = false ) diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt index 65cc7f2342..08fe4859cc 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HiddenAppsPreferences.kt @@ -4,11 +4,12 @@ import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.remember -import androidx.compose.ui.res.stringResource +import androidx.compose.ui.platform.LocalContext import androidx.navigation.NavGraphBuilder import app.lawnchair.ui.preferences.components.* import app.lawnchair.util.* import app.lawnchair.util.preferences.getAdapter +import app.lawnchair.util.preferences.getState import app.lawnchair.util.preferences.preferenceManager import com.android.launcher3.R import java.util.* @@ -22,7 +23,7 @@ fun NavGraphBuilder.hiddenAppsGraph(route: String) { @ExperimentalAnimationApi @Composable fun HiddenAppsPreferences() { - pageMeta.provide(Meta(title = stringResource(id = R.string.hidden_apps_label))) + pageMeta.provide(Meta(title = hiddenAppsCount())) var hiddenApps by preferenceManager().hiddenAppSet.getAdapter() val optionalApps by appsList( filter = defaultAppFilter(), @@ -52,6 +53,15 @@ fun HiddenAppsPreferences() { } } +@Composable +fun hiddenAppsCount(): String { + val resources = LocalContext.current.resources + val count = preferenceManager().hiddenAppSet.getState().value.size + return remember(count) { + resources.getQuantityString(R.plurals.hidden_apps_count, count, count) + } +} + @Composable fun hiddenAppsComparator(hiddenApps: Set): Comparator { return remember { diff --git a/lawnchair/src/app/lawnchair/util/preferences/PreferenceAdapter.kt b/lawnchair/src/app/lawnchair/util/preferences/PreferenceAdapter.kt index 2a62ae2da3..cfb2d41bcc 100644 --- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceAdapter.kt +++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceAdapter.kt @@ -10,18 +10,19 @@ class PreferenceAdapter( private val get: () -> T, private val set: (T) -> Unit ) : BasePreferenceManager.PreferenceChangeListener { - val state = mutableStateOf(get()) + private val stateInternal = mutableStateOf(get()) + val state: State get() = stateInternal fun onChange(newValue: T) { set(newValue) - state.value = newValue + stateInternal.value = newValue } override fun onPreferenceChange(pref: BasePreferenceManager.PrefEntry<*>) { - state.value = get() + stateInternal.value = get() } - operator fun getValue(thisObj: Any?, property: KProperty<*>): T = state.value + operator fun getValue(thisObj: Any?, property: KProperty<*>): T = stateInternal.value operator fun setValue(thisObj: Any?, property: KProperty<*>, newValue: T) { onChange(newValue) } @@ -39,6 +40,9 @@ fun BasePreferenceManager.PrefEntry.getAdapter(): PreferenceAdapter { return getAdapter(this, ::get, ::set) } +@Composable +fun BasePreferenceManager.PrefEntry.getState() = getAdapter().state + @Composable fun BasePreferenceManager.PrefEntry.observeAsState(): State { return getAdapter().state