Skip to content

Commit 6471b93

Browse files
committed
change navigation handling from reader screen
1 parent c2bbbda commit 6471b93

3 files changed

Lines changed: 45 additions & 38 deletions

File tree

app/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ dependencies {
9595
//Image loader
9696
implementation "io.coil-kt:coil-compose:2.7.0"
9797

98+
implementation "com.google.accompanist:accompanist-drawablepainter:0.32.0"
99+
98100
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
99101

100102
//For REST api

app/src/main/java/com/home/reader/ui/catalogue/screen/CatalogueScreen.kt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import androidx.paging.compose.collectAsLazyPagingItems
1818
import androidx.compose.material3.CircularProgressIndicator
1919
import androidx.compose.material3.Text
2020
import androidx.compose.runtime.LaunchedEffect
21-
import com.home.reader.api.dto.SeriesDto
21+
import androidx.compose.runtime.saveable.rememberSaveable
2222
import com.home.reader.ui.AppViewModelProvider
2323
import com.home.reader.ui.catalogue.component.CatalogueIssueItem
2424
import com.home.reader.ui.catalogue.component.CatalogueSeriesItem
@@ -35,33 +35,36 @@ fun CatalogueScreen(
3535

3636
val seriesState = viewModel.seriesState.collectAsLazyPagingItems()
3737
val issuesState by remember { viewModel.issuesState }
38-
var selectedSeries by remember { mutableStateOf<SeriesDto?>(null) }
38+
var selectedSeriesId by rememberSaveable { mutableStateOf<Long?>(null) }
39+
var selectedSeriesName by rememberSaveable { mutableStateOf<String?>(null) }
3940
val downloadProgressState by remember { viewModel.downloadProgress }
4041
val cached by remember { viewModel.cached }
4142

42-
LaunchedEffect(selectedSeries) {
43-
val seriesId = selectedSeries?.id
44-
if (seriesId != null) {
45-
viewModel.refreshIssuesState(seriesId)
46-
}
43+
LaunchedEffect(selectedSeriesId) {
44+
selectedSeriesId?.let { viewModel.refreshIssuesState(it) }
45+
if (selectedSeriesId == null) seriesState.refresh()
4746
}
4847

4948
Column {
50-
BackHandler(enabled = (selectedSeries != null)) {
51-
selectedSeries = null
49+
BackHandler(enabled = (selectedSeriesId != null)) {
50+
selectedSeriesId = null
5251
}
52+
5353
LazyVerticalGrid(
54-
columns = GridCells.Adaptive(COVER_WIDTH + if (selectedSeries == null) 0.dp else 30.dp)
54+
columns = GridCells.Adaptive(COVER_WIDTH + if (selectedSeriesId == null) 0.dp else 30.dp)
5555
) {
5656

57-
if (selectedSeries == null) {
57+
if (selectedSeriesId == null) {
5858
items(seriesState.itemCount) { index ->
5959
val item = seriesState[index]
6060
if (item != null) {
6161
CatalogueSeriesItem(
6262
item = item,
6363
coverUrl = viewModel.coverRequest(item.cover, "SMALL"),
64-
onClick = { selectedSeries = item }
64+
onClick = {
65+
selectedSeriesId = item.id
66+
selectedSeriesName = item.title
67+
}
6568
)
6669
}
6770
}
@@ -82,18 +85,18 @@ fun CatalogueScreen(
8285
}
8386
}
8487

85-
if (selectedSeries != null) {
88+
if (selectedSeriesId != null) {
8689
items(issuesState) {
8790
CatalogueIssueItem(
8891
item = it,
89-
seriesName = selectedSeries?.title ?: "",
92+
seriesName = selectedSeriesName ?: "",
9093
coverUrl = viewModel.coverRequest("/pages/${it.id}/0", "SMALL"),
9194
onClick = onNavigateToReaderScreen,
9295
downloadProgress = downloadProgressState[it.id],
9396
cached = (cached[it.id] == true),
9497
onDownloadClick = {
9598
val issueId = it.id
96-
val seriesId = selectedSeries?.id ?: 0L
99+
val seriesId = selectedSeriesId ?: 0L
97100
viewModel.download(seriesId, issueId)
98101
}
99102
)

app/src/main/java/com/home/reader/ui/reader/screen/ReaderScreen.kt

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -80,32 +80,34 @@ fun ReaderScreen(
8080
snapPositionalThreshold = 0.15f
8181
)
8282
) { page ->
83-
key(state.filler) {
84-
Image(
85-
painter = rememberAsyncImagePainter(
86-
viewModel.requestPage(page),
87-
filterQuality = FilterQuality.High
88-
),
89-
contentDescription = "Page $page",
90-
contentScale = state.filler.scale,
91-
modifier = Modifier
92-
.filler(rememberScrollState(), rememberScrollState())
93-
.pointerInput(Unit) {
94-
detectTapGestures(
95-
onDoubleTap = { viewModel.resolverFiller() },
96-
onLongPress = { showProgress = !showProgress },
97-
onTap = { offset ->
98-
viewModel.resolveClick(screenWidthInPx, offset.x) {
99-
coroutineScope.launch {
100-
withContext(this.coroutineContext) {
101-
pagerState.animateScrollToPage(it)
83+
Box {
84+
key(state.filler) {
85+
Image(
86+
painter = rememberAsyncImagePainter(
87+
viewModel.requestPage(page),
88+
filterQuality = FilterQuality.High
89+
),
90+
contentDescription = "Page $page",
91+
contentScale = state.filler.scale,
92+
modifier = Modifier
93+
.filler(rememberScrollState(), rememberScrollState())
94+
.pointerInput(Unit) {
95+
detectTapGestures(
96+
onDoubleTap = { viewModel.resolverFiller() },
97+
onLongPress = { showProgress = !showProgress },
98+
onTap = { offset ->
99+
viewModel.resolveClick(screenWidthInPx, offset.x) {
100+
coroutineScope.launch {
101+
withContext(this.coroutineContext) {
102+
pagerState.animateScrollToPage(it)
103+
}
102104
}
103105
}
104106
}
105-
}
106-
)
107-
}
108-
)
107+
)
108+
}
109+
)
110+
}
109111
}
110112
}
111113

0 commit comments

Comments
 (0)