@@ -16,6 +16,7 @@ import androidx.compose.foundation.layout.fillMaxSize
16
16
import androidx.compose.foundation.layout.padding
17
17
import androidx.compose.foundation.layout.wrapContentHeight
18
18
import androidx.compose.foundation.pager.HorizontalPager
19
+ import androidx.compose.foundation.pager.rememberPagerState
19
20
20
21
import androidx.compose.foundation.shape.CircleShape
21
22
import androidx.compose.material.icons.Icons
@@ -24,6 +25,7 @@ import androidx.compose.material3.FloatingActionButton
24
25
import androidx.compose.material3.Icon
25
26
import androidx.compose.material3.Scaffold
26
27
import androidx.compose.material3.SnackbarHost
28
+ import androidx.compose.material3.SnackbarHostState
27
29
import androidx.compose.material3.Text
28
30
29
31
import androidx.compose.runtime.Composable
@@ -63,6 +65,7 @@ import me.saket.telephoto.zoomable.zoomable
63
65
64
66
import app.grapheneos.camera.ITEM_TYPE_IMAGE
65
67
import app.grapheneos.camera.R
68
+ import app.grapheneos.camera.ui.composable.component.SnackBarMessageHandler
66
69
import app.grapheneos.camera.ui.composable.component.tooltip.QuickTooltip
67
70
import app.grapheneos.camera.ui.composable.component.tooltip.QuickTooltipVerticalDirection
68
71
@@ -90,10 +93,23 @@ fun GalleryScreen(
90
93
91
94
val coroutineScope = rememberCoroutineScope()
92
95
96
+ val snackBarHostState = remember {
97
+ SnackbarHostState ()
98
+ }
99
+
93
100
val viewModel = viewModel {
94
101
GalleryViewModel (context)
95
102
}
96
103
104
+ val pagerState = rememberPagerState {
105
+ viewModel.capturedItems.size
106
+ }
107
+
108
+ SnackBarMessageHandler (
109
+ snackBarHostState = snackBarHostState,
110
+ snackBarMessage = viewModel.snackBarMessage
111
+ )
112
+
97
113
val backgroundColor by animateColorAsState(
98
114
label = " background_color_animation" ,
99
115
targetValue = if (viewModel.inFocusMode) Color .Black else AppColor .BackgroundColor ,
@@ -111,7 +127,7 @@ fun GalleryScreen(
111
127
112
128
val focusIndex = viewModel.capturedItems.indexOf(focusItem)
113
129
if (focusIndex != - 1 ) {
114
- viewModel. pagerState.scrollToPage(focusIndex)
130
+ pagerState.scrollToPage(focusIndex)
115
131
}
116
132
}
117
133
@@ -121,8 +137,9 @@ fun GalleryScreen(
121
137
}
122
138
123
139
// Update the current focus item when the user slides between pages
124
- LaunchedEffect (viewModel.pagerState.currentPage) {
125
- val page = viewModel.pagerState.currentPage
140
+ LaunchedEffect (pagerState.currentPage) {
141
+ val page = pagerState.currentPage
142
+ viewModel.currentPage = page
126
143
if (page < viewModel.capturedItems.size) {
127
144
viewModel.focusItem = viewModel.capturedItems[page]
128
145
}
@@ -169,7 +186,7 @@ fun GalleryScreen(
169
186
Scaffold (
170
187
containerColor = backgroundColor,
171
188
172
- snackbarHost = { SnackbarHost (hostState = viewModel.snackbarHostState ) },
189
+ snackbarHost = { SnackbarHost (hostState = snackBarHostState ) },
173
190
174
191
floatingActionButton = {
175
192
AnimatedVisibility (
@@ -239,7 +256,7 @@ fun GalleryScreen(
239
256
} else {
240
257
if (viewModel.hasCapturedItems) {
241
258
HorizontalPager (
242
- state = viewModel. pagerState,
259
+ state = pagerState,
243
260
userScrollEnabled = ! viewModel.isZoomedIn,
244
261
beyondViewportPageCount = 1 ,
245
262
modifier = Modifier
0 commit comments