From 01c08e1dbb94f255d3d81bfeb6a2b48b1bf672cf Mon Sep 17 00:00:00 2001 From: Jeena Date: Tue, 13 Oct 2026 07:51:44 +0000 Subject: [PATCH] player: Icon-only action row MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bell, thumbs, chat bubble and playlist icons instead of text labels — no translutable strings in the action row; labels live on as contentDescription for accessibility. Like/dislike get proper icons instead of emoji text with the count as a digit next to them. --- .../jeena/jtubetv/ui/screens/PlayerScreen.kt | 54 +++++++++++++------ 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/net/jeena/jtubetv/ui/screens/PlayerScreen.kt b/app/src/main/java/net/jeena/jtubetv/ui/screens/PlayerScreen.kt index 0531d30..07b3c7f 100644 --- a/app/src/main/java/net/jeena/jtubetv/ui/screens/PlayerScreen.kt +++ b/app/src/main/java/net/jeena/jtubetv/ui/screens/PlayerScreen.kt @@ -28,10 +28,16 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ChatBubbleOutline import androidx.compose.material.icons.filled.Forward10 +import androidx.compose.material.icons.filled.NotificationsActive +import androidx.compose.material.icons.filled.NotificationsNone import androidx.compose.material.icons.filled.Pause import androidx.compose.material.icons.filled.PlayArrow +import androidx.compose.material.icons.filled.PlaylistAdd import androidx.compose.material.icons.filled.Replay10 +import androidx.compose.material.icons.filled.ThumbDown +import androidx.compose.material.icons.filled.ThumbUp import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -708,11 +714,8 @@ private fun PausedControls( verticalAlignment = Alignment.CenterVertically, ) { PlayerActionButton( - label = when (subscribed) { - true -> "Subscribed" - false -> "Subscribe" - else -> "Subscribe" - }, + icon = if (subscribed == true) Icons.Filled.NotificationsActive else Icons.Filled.NotificationsNone, + desc = if (subscribed == true) "Subscribed" else "Subscribe", filled = subscribed == true, focusRequester = actionBarFocus, ) { done -> @@ -735,7 +738,9 @@ private fun PausedControls( } } PlayerActionButton( - label = "👍 " + likeCount, + icon = Icons.Filled.ThumbUp, + desc = "Like", + count = likeCount, filled = rating == "like", ) { done -> scope.launch { @@ -749,7 +754,9 @@ private fun PausedControls( } } PlayerActionButton( - label = "👎 " + dislikeCount, + icon = Icons.Filled.ThumbDown, + desc = "Dislike", + count = dislikeCount, filled = rating == "dislike", ) { done -> scope.launch { @@ -763,13 +770,15 @@ private fun PausedControls( } } PlayerActionButton( - label = "Comments", + icon = Icons.Filled.ChatBubbleOutline, + desc = "Comments", ) { done -> done() openSidebar("comments") } PlayerActionButton( - label = "Playlists", + icon = Icons.Filled.PlaylistAdd, + desc = "Playlists", ) { done -> done() openSidebar("playlists") @@ -907,7 +916,9 @@ private fun formatDuration(seconds: Int): String { * subscribed/liked states get a solid accent background. */ @Composable private fun PlayerActionButton( - label: String, + icon: androidx.compose.ui.graphics.vector.ImageVector, + desc: String, + count: Long? = null, filled: Boolean = false, focusRequester: FocusRequester? = null, // [onClick] receives an onDone callback; only call it when the action's @@ -946,12 +957,23 @@ private fun PlayerActionButton( ) // Click only for real pointer input; the key activation above is guarded. .pointerInput(Unit) { detectTapGestures { activate() } } - Box(modifier = m.padding(horizontal = 14.dp, vertical = 8.dp)) { - Text( - text = label, - color = Color.White, - style = MaterialTheme.typography.bodyMedium, - maxLines = 1, + Row( + modifier = Modifier.padding(horizontal = 12.dp, vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + androidx.compose.material3.Icon( + imageVector = icon, + contentDescription = desc, + tint = Color.White, + modifier = Modifier.size(26.dp), ) + if (count != null) { + Text( + text = count.toString(), + color = Color.White, + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier.padding(start = 6.dp), + ) + } } } \ No newline at end of file