From 10ecc5aba723937cbf82dc274d95dd72d324c916 Mon Sep 17 00:00:00 2001 From: Patryk Michalik Date: Sun, 4 Apr 2021 15:52:58 +0200 Subject: [PATCH] Add Adaptive Icon background lightness customisation This only applies to Adaptive Icons generated from legacy icons. Also see https://github.com/LawnchairLauncher/iconloader/commit/16c9980433771560c2eff73913fe8fbc7982e2bf. --- IconLoader | 2 +- lawnchair/res/values/strings.xml | 3 + .../src/app/lawnchair/ui/preferences/About.kt | 2 + .../ui/preferences/AppDrawerPreferences.kt | 2 + .../ui/preferences/DockPreferences.kt | 2 + .../ui/preferences/FolderPreferences.kt | 2 + .../ui/preferences/GeneralPreferences.kt | 55 +++++++++++-------- .../ui/preferences/HomeScreenPreferences.kt | 2 + .../ui/preferences/PreferenceGroup.kt | 29 +++++++++- .../ui/preferences/PreferenceInteractor.kt | 5 +- .../ui/preferences/PreferenceViewModel.kt | 13 +++-- .../util/preferences/LawnchairPreferences.kt | 8 +-- .../util/preferences/PreferenceManager.kt | 2 +- 13 files changed, 87 insertions(+), 40 deletions(-) diff --git a/IconLoader b/IconLoader index 0c8c408bc2..16c9980433 160000 --- a/IconLoader +++ b/IconLoader @@ -1 +1 @@ -Subproject commit 0c8c408bc2fdb4a2fad257e0dfa895996d76c33f +Subproject commit 16c9980433771560c2eff73913fe8fbc7982e2bf diff --git a/lawnchair/res/values/strings.xml b/lawnchair/res/values/strings.xml index b9329ab171..eda6eaa4b4 100644 --- a/lawnchair/res/values/strings.xml +++ b/lawnchair/res/values/strings.xml @@ -54,4 +54,7 @@ Item removed. No apps found matching “%1$s”. Background Opacity + Background Lightness + Adaptive Icons + Background Lightness only affects generated Adaptive Icons. Use 100% for white. diff --git a/lawnchair/src/app/lawnchair/ui/preferences/About.kt b/lawnchair/src/app/lawnchair/ui/preferences/About.kt index bd7fb9b487..2371d14525 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/About.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/About.kt @@ -2,6 +2,7 @@ package app.lawnchair.ui.preferences import android.content.Intent import androidx.annotation.StringRes +import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -92,6 +93,7 @@ val teamMembers = listOf( ), ) +@ExperimentalAnimationApi @Composable fun About() { val context = LocalContext.current diff --git a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt index ab794d8529..77ce9dcf39 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/AppDrawerPreferences.kt @@ -1,5 +1,6 @@ package app.lawnchair.ui.preferences +import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.rememberScrollState @@ -9,6 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.launcher3.R +@ExperimentalAnimationApi @Composable fun AppDrawerPreferences(interactor: PreferenceInteractor) { Column( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt index c5bb050abb..350d3e487a 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/DockPreferences.kt @@ -1,5 +1,6 @@ package app.lawnchair.ui.preferences +import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.rememberScrollState @@ -9,6 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.launcher3.R +@ExperimentalAnimationApi @Composable fun DockPreferences(interactor: PreferenceInteractor) { Column( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt index 5c7b55e814..85dfa57145 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/FolderPreferences.kt @@ -1,5 +1,6 @@ package app.lawnchair.ui.preferences +import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.rememberScrollState @@ -9,6 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.launcher3.R +@ExperimentalAnimationApi @Composable fun FolderPreferences(interactor: PreferenceInteractor) { Column( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt index e28b0d4b68..e7eb476f17 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/GeneralPreferences.kt @@ -25,32 +25,9 @@ fun GeneralPreferences(navController: NavController, interactor: PreferenceInter checked = interactor.allowRotation.value, onCheckedChange = { interactor.setAllowRotation(it) }, label = stringResource(id = R.string.home_screen_rotation_label), - description = stringResource(id = R.string.home_screen_rotaton_description), - showDivider = false + description = stringResource(id = R.string.home_screen_rotaton_description) ) - } - PreferenceGroup(heading = stringResource(id = R.string.icons)) { NotificationDotsPreference(interactor) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - SwitchPreference( - checked = interactor.wrapAdaptiveIcons.value, - onCheckedChange = { interactor.setWrapAdaptiveIcons(it) }, - label = stringResource(id = R.string.make_icon_packs_adaptive_label), - description = stringResource(id = R.string.make_icon_packs_adaptive_description) - ) - AnimatedVisibility( - visible = interactor.wrapAdaptiveIcons.value, - enter = expandVertically() + fadeIn(), - exit = shrinkVertically() + fadeOut() - ) { - SwitchPreference( - checked = interactor.makeColoredBackgrounds.value, - onCheckedChange = { interactor.setMakeColoredBackgrounds(it) }, - label = stringResource(id = R.string.colored_generated_icon_backgrounds_label), - description = stringResource(id = R.string.colored_generated_icon_backgrounds_description) - ) - } - } NavigationActionPreference( label = stringResource(id = R.string.icon_pack), navController = navController, @@ -58,5 +35,35 @@ fun GeneralPreferences(navController: NavController, interactor: PreferenceInter showDivider = false ) } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + PreferenceGroup( + heading = stringResource(id = R.string.adaptive_icons), + description = stringResource(id = (R.string.adaptive_icon_background_description)), + showDescription = interactor.wrapAdaptiveIcons.value + ) { + SwitchPreference( + checked = interactor.wrapAdaptiveIcons.value, + onCheckedChange = { interactor.setWrapAdaptiveIcons(it) }, + label = stringResource(id = R.string.make_icon_packs_adaptive_label), + description = stringResource(id = R.string.make_icon_packs_adaptive_description), + showDivider = interactor.wrapAdaptiveIcons.value + ) + AnimatedVisibility( + visible = interactor.wrapAdaptiveIcons.value, + enter = expandVertically() + fadeIn(), + exit = shrinkVertically() + fadeOut() + ) { + SliderPreference( + label = stringResource(id = R.string.background_lightness_label), + value = interactor.coloredBackgroundLightness.value, + onValueChange = { interactor.setColoredBackgroundLightness(it) }, + valueRange = 0F..1F, + steps = 9, + showAsPercentage = true, + showDivider = false + ) + } + } + } } } \ No newline at end of file diff --git a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt index 4ed26c13aa..9d3aeca0bc 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/HomeScreenPreferences.kt @@ -1,5 +1,6 @@ package app.lawnchair.ui.preferences +import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.rememberScrollState @@ -9,6 +10,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import com.android.launcher3.R +@ExperimentalAnimationApi @Composable fun HomeScreenPreferences(interactor: PreferenceInteractor) { Column( diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGroup.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGroup.kt index 6ae608e63b..49e8804696 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGroup.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceGroup.kt @@ -1,5 +1,6 @@ package app.lawnchair.ui.preferences +import androidx.compose.animation.* import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.runtime.Composable @@ -9,8 +10,15 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import app.lawnchair.util.smartBorder +@ExperimentalAnimationApi @Composable -fun PreferenceGroup(heading: String? = null, isFirstChild: Boolean = false, content: @Composable () -> Unit) { +fun PreferenceGroup( + heading: String? = null, + isFirstChild: Boolean = false, + description: String? = null, + showDescription: Boolean = true, + content: @Composable () -> Unit +) { Spacer( modifier = Modifier.requiredHeight( if (isFirstChild) { @@ -54,4 +62,23 @@ fun PreferenceGroup(heading: String? = null, isFirstChild: Boolean = false, cont content() } } + description?.let { + AnimatedVisibility( + visible = showDescription, + enter = expandVertically() + fadeIn(), + exit = shrinkVertically() + fadeOut() + ) { + Row(modifier = Modifier.padding(start = 32.dp, end = 32.dp, top = 16.dp)) { + CompositionLocalProvider( + LocalContentAlpha provides ContentAlpha.medium, + LocalContentColor provides MaterialTheme.colors.onBackground + ) { + Text( + text = it, + style = MaterialTheme.typography.body2 + ) + } + } + } + } } \ No newline at end of file diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceInteractor.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceInteractor.kt index 60e36d51bd..21e2a9cfd9 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceInteractor.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceInteractor.kt @@ -18,9 +18,9 @@ interface PreferenceInteractor { val allAppsTextSizeFactor: State val allAppsColumns: State val allowEmptyPages: State - val makeColoredBackgrounds: State val notificationDotsEnabled: State val drawerOpacity: State + val coloredBackgroundLightness: State fun setIconPackPackage(iconPackPackage: String) fun setAllowRotation(allowRotation: Boolean) @@ -37,9 +37,8 @@ interface PreferenceInteractor { fun setAllAppsTextSizeFactor(allAppsTextSizeFactor: Float) fun setAllAppsColumns(allAppsColumns: Float) fun setAllowEmptyPages(allowEmptyPages: Boolean) - fun setMakeColoredBackgrounds(makeColoredBackgrounds: Boolean) fun setDrawerOpacity(drawerOpacity: Float) - + fun setColoredBackgroundLightness(coloredBackgroundLightness: Float) fun getIconPacks(): MutableMap } \ No newline at end of file diff --git a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceViewModel.kt b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceViewModel.kt index b5c728657e..2c0c9a91dc 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/PreferenceViewModel.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/PreferenceViewModel.kt @@ -7,6 +7,7 @@ import android.content.pm.ResolveInfo import android.provider.Settings import androidx.appcompat.content.res.AppCompatResources import androidx.compose.runtime.MutableState +import androidx.compose.runtime.State import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.AndroidViewModel import app.lawnchair.util.preferences.PreferenceManager @@ -38,10 +39,10 @@ class PreferenceViewModel(application: Application) : AndroidViewModel(applicati override val allAppsTextSizeFactor: MutableState = mutableStateOf(pm.allAppsTextSizeFactor) override val allAppsColumns: MutableState = mutableStateOf(pm.allAppsColumns) override val allowEmptyPages: MutableState = mutableStateOf(pm.allowEmptyPages) - override val makeColoredBackgrounds: MutableState = mutableStateOf(pm.makeColoredBackgrounds) override val notificationDotsEnabled: MutableState = mutableStateOf(enabledNotificationListeners?.contains(lawnchairNotificationListener.flattenToString()) == true) override val drawerOpacity: MutableState = mutableStateOf(pm.drawerOpacity) + override val coloredBackgroundLightness: MutableState = mutableStateOf(pm.coloredBackgroundLightness) override fun setIconPackPackage(iconPackPackage: String) { pm.iconPackPackage = iconPackPackage @@ -118,16 +119,16 @@ class PreferenceViewModel(application: Application) : AndroidViewModel(applicati this.allowEmptyPages.value = allowEmptyPages } - override fun setMakeColoredBackgrounds(makeColoredBackgrounds: Boolean) { - pm.makeColoredBackgrounds = makeColoredBackgrounds - this.makeColoredBackgrounds.value = makeColoredBackgrounds - } - override fun setDrawerOpacity(drawerOpacity: Float) { pm.drawerOpacity = drawerOpacity this.drawerOpacity.value = drawerOpacity } + override fun setColoredBackgroundLightness(coloredBackgroundLightness: Float) { + pm.coloredBackgroundLightness = coloredBackgroundLightness + this.coloredBackgroundLightness.value = coloredBackgroundLightness + } + override fun getIconPacks(): MutableMap { val pm = getApplication().packageManager val iconPacks: MutableMap = HashMap() diff --git a/lawnchair/src/app/lawnchair/util/preferences/LawnchairPreferences.kt b/lawnchair/src/app/lawnchair/util/preferences/LawnchairPreferences.kt index c42d7645e8..a0c70da9f2 100644 --- a/lawnchair/src/app/lawnchair/util/preferences/LawnchairPreferences.kt +++ b/lawnchair/src/app/lawnchair/util/preferences/LawnchairPreferences.kt @@ -13,7 +13,7 @@ class LawnchairPreferences(val context: Context) { SharedPreferences.OnSharedPreferenceChangeListener { prefs: SharedPreferences?, key: String? -> val las = LauncherAppState.getInstance(context) when (key) { - ICON_PACK_PACKAGE, WRAP_ADAPTIVE_ICONS, MAKE_COLORED_BACKGROUNDS -> { + ICON_PACK_PACKAGE, WRAP_ADAPTIVE_ICONS, COLORED_BACKGROUND_LIGHTNESS -> { las.model.clearIconCache() las.model.forceReload() } @@ -83,9 +83,6 @@ class LawnchairPreferences(val context: Context) { @kotlin.jvm.JvmField var ALLOW_EMPTY_PAGES: String = "pref_allowEmptyPages" - @kotlin.jvm.JvmField - var MAKE_COLORED_BACKGROUNDS: String = "pref_makeColoredBackgrounds" - @kotlin.jvm.JvmField var IGNORE_FEED_WHITELIST: String = "pref_ignoreFeedWhitelist" @@ -98,6 +95,9 @@ class LawnchairPreferences(val context: Context) { @kotlin.jvm.JvmField var DRAWER_OPACITY: String = "pref_drawerOpacity" + @kotlin.jvm.JvmField + var COLORED_BACKGROUND_LIGHTNESS: String = "pref_coloredBackgroundLightness" + fun getInstance(context: Context?): SharedPreferences? = when { context == null -> null INSTANCE == null -> Utilities.getPrefs(context) diff --git a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt index c59783ab17..b82384d1bf 100644 --- a/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt +++ b/lawnchair/src/app/lawnchair/util/preferences/PreferenceManager.kt @@ -24,6 +24,6 @@ class PreferenceManager(context: Context) { var allAppsTextSizeFactor by FloatPreferenceDelegate(lp.ALL_APPS_TEXT_SIZE_FACTOR, 1F) var allAppsColumns by FloatPreferenceDelegate(lp.ALL_APPS_COLUMNS, idp.numAllAppsColumns.toFloat()) var allowEmptyPages by BooleanPreferenceDelegate(lp.ALLOW_EMPTY_PAGES, false) - var makeColoredBackgrounds by BooleanPreferenceDelegate(lp.MAKE_COLORED_BACKGROUNDS, false) var drawerOpacity by FloatPreferenceDelegate(lp.DRAWER_OPACITY, 1F) + var coloredBackgroundLightness by FloatPreferenceDelegate(lp.COLORED_BACKGROUND_LIGHTNESS, 0.9F) } \ No newline at end of file