From 0139d47d5f300152238ff07fc580fd36663a22da Mon Sep 17 00:00:00 2001 From: Kyle Bolen Date: Thu, 30 Jul 2026 05:33:55 +0000 Subject: [PATCH] Fix LIVE badge visibility + checkbox contrast LIVE badge: explicit Color(0xFF00C853) green with white bold text, no longer uses secondary color scheme which was dark-on-dark. Checkbox: show faint white RadioButtonUnchecked when not selected so user can see the selection zone on dark/thumbnail backgrounds. --- .../bolenpad/photophetch/ui/DensePhotoGrid.kt | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/com/bolenpad/photophetch/ui/DensePhotoGrid.kt b/src/main/kotlin/com/bolenpad/photophetch/ui/DensePhotoGrid.kt index 100428a..6d9a15f 100644 --- a/src/main/kotlin/com/bolenpad/photophetch/ui/DensePhotoGrid.kt +++ b/src/main/kotlin/com/bolenpad/photophetch/ui/DensePhotoGrid.kt @@ -10,10 +10,12 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.material.icons.filled.Image +import androidx.compose.material.icons.filled.RadioButtonUnchecked import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.toComposeImageBitmap import androidx.compose.ui.layout.ContentScale @@ -255,14 +257,25 @@ private fun DenseThumb( Icon(Icons.Default.CheckCircle, contentDescription = null, tint = MaterialTheme.colorScheme.primary, modifier = Modifier.align(Alignment.TopEnd).padding(2.dp).size(16.dp)) + } else { + // Faint unchecked indicator so user knows cell is tappable + Icon(Icons.Default.RadioButtonUnchecked, contentDescription = null, + tint = Color.White.copy(alpha = 0.5f), + modifier = Modifier.align(Alignment.TopEnd).padding(2.dp).size(14.dp)) } // Bottom-left: LIVE badge or video size badge if (photo.isLivePhotoStill) { - Badge( - containerColor = MaterialTheme.colorScheme.secondary.copy(alpha = 0.85f), - modifier = Modifier.align(Alignment.BottomStart).padding(2.dp), - ) { Text("LIVE", style = MaterialTheme.typography.labelSmall) } + Box( + modifier = Modifier + .align(Alignment.BottomStart) + .padding(3.dp) + .background(Color(0xFF00C853), shape = MaterialTheme.shapes.extraSmall) + .padding(horizontal = 4.dp, vertical = 1.dp), + ) { + Text("LIVE", fontSize = 9.sp, fontWeight = FontWeight.Bold, + color = Color.White) + } } else if (photo.mediaType == MediaType.VIDEO) { val sizeLabel = if (photo.sizeBytes > 1024 * 1024) "▶ ${photo.sizeBytes / (1024 * 1024)}MB"