From 89171b0b0d92f311e1768866de890c3ab899fe36 Mon Sep 17 00:00:00 2001 From: Jeena Date: Thu, 15 Oct 2026 14:20:35 +0000 Subject: [PATCH] loading: one loading card on the grids, not a full fake grid (#31) My videos, Subscriptions, History and the channel pages painted two whole rows of placeholder cards on first open, and Channels painted two stub rows. Show a single loading card instead, matching the Home rows. Co-Authored-By: Claude Opus 5 --- .../jtubetv/ui/screens/ChannelsScreen.kt | 23 ++++++++----------- .../ui/screens/list/VideoListScreen.kt | 19 +++++---------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/net/jeena/jtubetv/ui/screens/ChannelsScreen.kt b/app/src/main/java/net/jeena/jtubetv/ui/screens/ChannelsScreen.kt index 131a64d..194c71e 100644 --- a/app/src/main/java/net/jeena/jtubetv/ui/screens/ChannelsScreen.kt +++ b/app/src/main/java/net/jeena/jtubetv/ui/screens/ChannelsScreen.kt @@ -317,21 +317,18 @@ fun ChannelsScreen( when { viewModel.loading && viewModel.userRows.isEmpty() -> - // Placeholder rows while the channels load (issue #19): header stub - // + a row of shimmer card-shaped placeholders, twice. + // One row header stub + a single loading card, not a fake grid (#31). androidx.compose.foundation.layout.Column { - repeat(2) { - Box(Modifier.padding(start = 16.dp, top = 12.dp, bottom = 4.dp)) { - Box( - Modifier - .width(180.dp) - .height(22.dp) - .clip(CircleShape) - .background(Color(0xFF232323)), - ) - } - ShimmerRow() + Box(Modifier.padding(start = 16.dp, top = 12.dp, bottom = 4.dp)) { + Box( + Modifier + .width(180.dp) + .height(22.dp) + .clip(CircleShape) + .background(Color(0xFF232323)), + ) } + ShimmerRow(size = 1) } viewModel.error != null && viewModel.userRows.isEmpty() -> Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { diff --git a/app/src/main/java/net/jeena/jtubetv/ui/screens/list/VideoListScreen.kt b/app/src/main/java/net/jeena/jtubetv/ui/screens/list/VideoListScreen.kt index cedb561..8496cb8 100644 --- a/app/src/main/java/net/jeena/jtubetv/ui/screens/list/VideoListScreen.kt +++ b/app/src/main/java/net/jeena/jtubetv/ui/screens/list/VideoListScreen.kt @@ -211,19 +211,12 @@ fun VideoListScreen( // VideoListScreen (My videos, Search, Subscriptions, History, channel pages). item(key = "initial-placeholders", span = { androidx.compose.foundation.lazy.grid.GridItemSpan(maxLineSpan) }) { LaunchedEffect(source) { viewModel.loadMore(force = true) } - androidx.compose.foundation.layout.Column { - repeat(2) { - androidx.compose.foundation.layout.Row { - repeat(cardsPerRow) { - ShimmerCard( - modifier = Modifier - .padding(6.dp) - .width(rowCardWidth()), - ) - } - } - } - } + // A single loading card, not a full fake grid (issue #31). + ShimmerCard( + modifier = Modifier + .padding(6.dp) + .width(rowCardWidth() - 12.dp), + ) } } itemsIndexed(items, key = { _, item -> itemStableKey(item) }) { index, item ->