From e58b5088b3cddfd5dfbb059f665dce2058113d82 Mon Sep 17 00:00:00 2001 From: xXJsonDeruloXx Date: Sat, 26 Sep 2026 16:29:05 -0400 Subject: [PATCH] feat(theme): add readable text colour for signal fills --- .../droiddeck/launcher/input/ControllerEditorActivity.kt | 3 ++- .../main/java/com/droiddeck/launcher/ui/ComponentsPage.kt | 8 ++++---- app/src/main/java/com/droiddeck/launcher/ui/Theme.kt | 7 +++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/droiddeck/launcher/input/ControllerEditorActivity.kt b/app/src/main/java/com/droiddeck/launcher/input/ControllerEditorActivity.kt index 2c7d7bc69..61fca40f4 100644 --- a/app/src/main/java/com/droiddeck/launcher/input/ControllerEditorActivity.kt +++ b/app/src/main/java/com/droiddeck/launcher/input/ControllerEditorActivity.kt @@ -25,6 +25,7 @@ import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.droiddeck.launcher.ui.DroidDeckTheme +import com.droiddeck.launcher.ui.onSignal import com.droiddeck.launcher.ui.LocalPalette class ControllerEditorActivity : ComponentActivity() { @@ -67,7 +68,7 @@ class ControllerEditorActivity : ComponentActivity() { val pal = LocalPalette.current Text( label, fontSize = 12.sp, fontWeight = FontWeight.SemiBold, - color = if (primary) Color.White else MaterialTheme.colorScheme.onBackground, + color = if (primary) pal.onSignal else MaterialTheme.colorScheme.onBackground, modifier = Modifier.clip(RoundedCornerShape(50)) .background(if (primary) pal.signal else Color.White.copy(alpha = 0.06f)) .clickable(onClick = onClick) diff --git a/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt b/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt index 820c9f9eb..a89c2a24e 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/ComponentsPage.kt @@ -304,7 +304,7 @@ private fun Segmented(options: List>, selected: String, onP val pick = { onPick(key) } Text( text, fontSize = 12.5.sp, fontWeight = FontWeight.Bold, maxLines = 1, - color = if (on) Color.White else if (hot) colors.onBackground else colors.onSurfaceVariant, + color = if (on) pal.onSignal else if (hot) colors.onBackground else colors.onSurfaceVariant, modifier = Modifier.clip(RoundedCornerShape(7.dp)) .background(if (on) pal.signal else if (hot) pal.signal.copy(alpha = 0.18f) else Color.Transparent) .border(if (hot && !on) 1.dp else 0.dp, if (hot && !on) pal.signal else Color.Transparent, RoundedCornerShape(7.dp)) @@ -356,7 +356,7 @@ private fun SmallButton(text: String, enabled: Boolean = true, accent: Boolean = ) { Text( text, fontSize = 12.sp, fontWeight = FontWeight.Bold, maxLines = 1, - color = if (!enabled) colors.onSurfaceVariant else if (hot) Color.White else if (accent) Color(0xFF5E9BFF) else colors.onBackground, + color = if (!enabled) colors.onSurfaceVariant else if (hot) pal.onSignal else if (accent) pal.signal else colors.onBackground, ) } } @@ -366,7 +366,7 @@ private fun Tag(text: String) { val colors = MaterialTheme.colorScheme val (fg, bg) = when (text) { "ORIGINAL" -> GOLD to Color(0x22F2C66D) - "IN USE" -> Color.White to LocalPalette.current.signal + "IN USE" -> LocalPalette.current.onSignal to LocalPalette.current.signal "NEW" -> LocalPalette.current.good to Color(0x224CD37F) else -> colors.onSurfaceVariant to Color.White.copy(alpha = 0.07f) } @@ -401,7 +401,7 @@ private fun InstalledLine(item: InstalledItem, modifier: Modifier = Modifier, on } Text( item.name, fontSize = 13.5.sp, fontWeight = FontWeight.SemiBold, maxLines = 1, overflow = TextOverflow.Ellipsis, - color = if (item.selected) Color(0xFF5E9BFF) else colors.onBackground, modifier = Modifier.weight(1f), + color = if (item.selected) pal.signal else colors.onBackground, modifier = Modifier.weight(1f), ) Box(Modifier.width(72.dp)) { Tag(item.tag) } Text(item.detail, fontSize = 11.5.sp, color = colors.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis, modifier = Modifier.width(DETAIL_WIDTH)) diff --git a/app/src/main/java/com/droiddeck/launcher/ui/Theme.kt b/app/src/main/java/com/droiddeck/launcher/ui/Theme.kt index fdbdcf4cb..331ad9507 100644 --- a/app/src/main/java/com/droiddeck/launcher/ui/Theme.kt +++ b/app/src/main/java/com/droiddeck/launcher/ui/Theme.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance import androidx.compose.ui.platform.LocalContext import com.droiddeck.launcher.session.SessionPrefs @@ -59,6 +60,12 @@ object Themes { val LocalPalette = staticCompositionLocalOf { Themes.byId(Themes.GRAPHITE) } +/** + * Text and icons drawn on a [Palette.signal] fill: near-black where the blue is light enough that + * white would not read (Graphite's #1A9FFF gives white 2.8:1), white where it is deep. + */ +val Palette.onSignal: Color get() = if (signal.luminance() > 0.18f) Color(0xFF03111F) else Color.White + @Composable fun DroidDeckTheme(theme: String? = null, content: @Composable () -> Unit) { val id = theme ?: SessionPrefs.theme(LocalContext.current)