Keep home and the reading settings up while a page loads
The skeleton screens carried a top bar with nothing but Back, so going home or changing the theme meant waiting for a poem you might not have wanted. Neither action depends on the content: both are now in the loading bar for the poem and the category alike, from the first frame. Share and bookmark are not. They need a poem to act on, so they still arrive with it — the bar fills out as the content lands rather than appearing whole. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b3f4e527f1
commit
f21f4fa727
@ -60,7 +60,7 @@ fun CategoryScreen(
|
||||
key = fullUrl,
|
||||
block = { Ganjoor.category(fullUrl) },
|
||||
// The bar stays up with Back already working; only the list waits.
|
||||
placeholder = { LoadingCategory(onUp) },
|
||||
placeholder = { LoadingCategory(onUp, onHome) },
|
||||
) { cat ->
|
||||
// First lines are a separate, optional call; the list shows up without waiting for it.
|
||||
var excerpts by remember(cat.id) { mutableStateOf(emptyMap<Int, String>()) }
|
||||
@ -132,7 +132,7 @@ fun CategoryScreen(
|
||||
/** The category screen while its list is on the way: the real top bar over a skeleton list. */
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
private fun LoadingCategory(onUp: () -> Unit) {
|
||||
private fun LoadingCategory(onUp: () -> Unit, onHome: () -> Unit) {
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
@ -142,6 +142,12 @@ private fun LoadingCategory(onUp: () -> Unit) {
|
||||
Icon(Icons.AutoMirrored.Filled.ArrowBack, stringResource(R.string.back))
|
||||
}
|
||||
},
|
||||
// Home and the reading settings belong to the app, not to this page, so they are
|
||||
// there from the first frame. Downloading needs to know which poet this is.
|
||||
actions = {
|
||||
HomeAction(onHome)
|
||||
ReadingSettingsAction()
|
||||
},
|
||||
)
|
||||
}
|
||||
) { insets ->
|
||||
|
||||
@ -96,8 +96,9 @@ fun PoemScreen(
|
||||
Load(
|
||||
key = fullUrl,
|
||||
block = { Ganjoor.poem(fullUrl) },
|
||||
// The bar stays up with Back already working; only the text waits.
|
||||
placeholder = { LoadingPoem(wide, onUp, navigationToggle) },
|
||||
// The bar stays up with Back, Home and the reading settings already working; only
|
||||
// the text waits. Sharing and bookmarking need a poem, so they arrive with it.
|
||||
placeholder = { LoadingPoem(wide, onUp, onHome, navigationToggle) },
|
||||
) { poem ->
|
||||
val prefs = LocalSettings.current.value
|
||||
val style = readingStyle(prefs.font, prefs.fontSize, prefs.fontWeight.weight)
|
||||
@ -256,7 +257,12 @@ private data class WordTap(val word: String, val passage: Bookmark, val verse: I
|
||||
/** The poem screen while its poem is on the way: the real top bar, and the text as a skeleton. */
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
private fun LoadingPoem(wide: Boolean, onUp: () -> Unit, navigationToggle: (@Composable () -> Unit)?) {
|
||||
private fun LoadingPoem(
|
||||
wide: Boolean,
|
||||
onUp: () -> Unit,
|
||||
onHome: () -> Unit,
|
||||
navigationToggle: (@Composable () -> Unit)?,
|
||||
) {
|
||||
Scaffold(
|
||||
topBar = {
|
||||
TopAppBar(
|
||||
@ -269,6 +275,12 @@ private fun LoadingPoem(wide: Boolean, onUp: () -> Unit, navigationToggle: (@Com
|
||||
}
|
||||
}
|
||||
},
|
||||
// Going home and changing the reading settings do not depend on this poem, so
|
||||
// they do not wait for it. Share and bookmark do, and appear when it lands.
|
||||
actions = {
|
||||
HomeAction(onHome)
|
||||
ReadingSettingsAction()
|
||||
},
|
||||
)
|
||||
}
|
||||
) { insets ->
|
||||
|
||||
Loading…
Reference in New Issue
Block a user