From d574eb0544466a7a9825c47e0a9010b2949f5346 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Wed, 15 Feb 2023 21:18:22 +0100 Subject: [PATCH] Highlight icon packs that support dynamic colors --- .../appearance/AppearanceSettingsScreen.kt | 91 ++++++++++++++++--- core/i18n/src/main/res/values/strings.xml | 2 + 2 files changed, 80 insertions(+), 13 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index 4d915a24..2eeb9de3 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -4,34 +4,53 @@ import android.graphics.drawable.ColorDrawable import androidx.appcompat.app.AppCompatActivity import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.basicMarquee +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items -import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.FormatPaint +import androidx.compose.material3.AlertDialog +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.core.content.ContextCompat import androidx.lifecycle.viewmodel.compose.viewModel -import com.airbnb.lottie.LottieProperty -import com.airbnb.lottie.compose.* import com.google.accompanist.pager.HorizontalPager import com.google.accompanist.pager.HorizontalPagerIndicator import com.google.accompanist.pager.rememberPagerState import de.mm20.launcher2.icons.StaticIconLayer import de.mm20.launcher2.icons.StaticLauncherIcon -import de.mm20.launcher2.preferences.Settings.* +import de.mm20.launcher2.preferences.Settings.AppearanceSettings import de.mm20.launcher2.preferences.Settings.AppearanceSettings.ColorScheme import de.mm20.launcher2.preferences.Settings.AppearanceSettings.Theme +import de.mm20.launcher2.preferences.Settings.IconSettings +import de.mm20.launcher2.preferences.Settings.SearchBarSettings import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarColors import de.mm20.launcher2.preferences.Settings.SearchBarSettings.SearchBarStyle import de.mm20.launcher2.preferences.Settings.SystemBarsSettings.SystemBarColors @@ -40,7 +59,14 @@ import de.mm20.launcher2.ui.component.SearchBar import de.mm20.launcher2.ui.component.SearchBarLevel import de.mm20.launcher2.ui.component.ShapedLauncherIcon import de.mm20.launcher2.ui.component.getShape -import de.mm20.launcher2.ui.component.preferences.* +import de.mm20.launcher2.ui.component.preferences.ListPreference +import de.mm20.launcher2.ui.component.preferences.Preference +import de.mm20.launcher2.ui.component.preferences.PreferenceCategory +import de.mm20.launcher2.ui.component.preferences.PreferenceScreen +import de.mm20.launcher2.ui.component.preferences.SliderPreference +import de.mm20.launcher2.ui.component.preferences.SwitchPreference +import de.mm20.launcher2.ui.component.preferences.label +import de.mm20.launcher2.ui.component.preferences.value import de.mm20.launcher2.ui.locals.LocalNavController import de.mm20.launcher2.ui.theme.getTypography import kotlinx.coroutines.delay @@ -221,10 +247,13 @@ fun AppearanceSettingsScreen() { } ) - val iconPack by viewModel.iconPack.observeAsState() + val iconPackPackage by viewModel.iconPack.observeAsState() val installedIconPacks by viewModel.installedIconPacks.observeAsState(emptyList()) + val iconPack by remember { + derivedStateOf { installedIconPacks.firstOrNull { it.packageName == iconPackPackage } } + } val items = installedIconPacks.map { - it.name to it.packageName + it.name to it } ListPreference( title = stringResource(R.string.preference_icon_pack), @@ -232,12 +261,48 @@ fun AppearanceSettingsScreen() { summary = if (items.size <= 1) { stringResource(R.string.preference_icon_pack_summary_empty) } else { - items.firstOrNull { iconPack == it.value }?.label ?: "System" + iconPack?.name ?: "System" }, enabled = installedIconPacks.size > 1, value = iconPack, onValueChanged = { - if (it != null) viewModel.setIconPack(it) + if (it != null) viewModel.setIconPack(it.packageName) + }, + itemLabel = { + Column( + verticalArrangement = Arrangement.Center, + ) { + Text( + text = it.label, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + if (it.value?.themed == true) { + Surface( + shape = MaterialTheme.shapes.extraSmall, + color = MaterialTheme.colorScheme.tertiary, + modifier = Modifier.padding(top = 8.dp) + ) { + Row( + modifier = Modifier.padding(horizontal = 4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(20.dp) + .padding(end = 4.dp), + imageVector = Icons.Rounded.FormatPaint, + contentDescription = null, + ) + Text( + text = stringResource(R.string.icon_pack_dynamic_colors), + style = MaterialTheme.typography.labelSmall + ) + } + } + } + + } } ) } diff --git a/core/i18n/src/main/res/values/strings.xml b/core/i18n/src/main/res/values/strings.xml index 7f29bc19..cfd7a861 100644 --- a/core/i18n/src/main/res/values/strings.xml +++ b/core/i18n/src/main/res/values/strings.xml @@ -486,6 +486,8 @@ Apply the application\'s color scheme to all icons, including unsupported ones (not recommended) Icon pack No icon packs installed + + Dynamic colors System bars Status bar icons Navigation bar icons