feat(#363): add descriptive text to loading spinners (#406)

* feat(#363): add descriptive text to loading spinners

- Updates LoadingState composable to accept optional subtitle
- Shows 'Fetching model providers...' on ModelScreen
- Shows 'Loading channels...' on ChannelsScreen
- Removes dead/unreachable CircularProgressIndicator from ModelScreen

* fix(#363): pass loading_state_subtitle_models string to LoadingState

---------

Co-authored-by: M57 <hy4ri@users.noreply.github.com>
This commit is contained in:
M57andM57 authored and GitHub committed 2026-06-27 01:26:27 +03:00
1 parent 96e754dd3b
commit c0ebc8ec64
4 files changed
+191 -190

No files matched your search

@@ -35,7 +35,10 @@ import com.m57.hermescontrol.theme.LocalSpacing
// ── Loading ───────────────────────────────────────────────────────────
@Composable
fun LoadingState(modifier: Modifier = Modifier) {
fun LoadingState(
modifier: Modifier = Modifier,
subtitle: String? = null,
) {
Box(
modifier =
modifier
@@ -43,14 +46,24 @@ fun LoadingState(modifier: Modifier = Modifier) {
.testTag("loading_state"),
contentAlignment = Alignment.Center,
) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.primary,
strokeWidth = 3.dp,
modifier =
Modifier
.size(40.dp)
.testTag("loading_spinner"),
)
Column(horizontalAlignment = Alignment.CenterHorizontally) {
CircularProgressIndicator(
color = MaterialTheme.colorScheme.primary,
strokeWidth = 3.dp,
modifier =
Modifier
.size(40.dp)
.testTag("loading_spinner"),
)
if (subtitle != null) {
Spacer(modifier = Modifier.height(16.dp))
Text(
text = subtitle,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
}
}
}
}