@@ -13,8 +13,10 @@ import androidx.compose.foundation.layout.PaddingValues
13
13
import androidx.compose.foundation.layout.Row
14
14
import androidx.compose.foundation.layout.fillMaxSize
15
15
import androidx.compose.foundation.layout.fillMaxWidth
16
+ import androidx.compose.foundation.layout.heightIn
16
17
import androidx.compose.foundation.layout.padding
17
18
import androidx.compose.foundation.layout.statusBarsPadding
19
+ import androidx.compose.foundation.lazy.LazyColumn
18
20
import androidx.compose.foundation.lazy.grid.GridCells
19
21
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
20
22
import androidx.compose.foundation.lazy.grid.itemsIndexed
@@ -45,6 +47,7 @@ import androidx.compose.ui.Alignment
45
47
import androidx.compose.ui.Modifier
46
48
import androidx.compose.ui.graphics.Color
47
49
import androidx.compose.ui.res.stringResource
50
+ import androidx.compose.ui.text.font.FontWeight
48
51
import androidx.compose.ui.unit.dp
49
52
import androidx.compose.ui.unit.sp
50
53
import com.huhx.picker.R
@@ -87,16 +90,16 @@ internal fun AssetDisplayScreen(
87
90
88
91
Column {
89
92
AssetTab (tabs = tabs, pagerState = pagerState)
90
- HorizontalPager (state = pagerState, userScrollEnabled = true ) { page ->
93
+ HorizontalPager (state = pagerState, userScrollEnabled = false ) { page ->
91
94
tabs[page].screen(viewModel)
92
95
}
93
96
}
94
97
}
95
98
}
96
99
}
97
100
98
- @OptIn(ExperimentalMaterial3Api ::class )
99
101
@Composable
102
+ @OptIn(ExperimentalMaterial3Api ::class )
100
103
private fun DisplayTopAppBar (
101
104
directory : String ,
102
105
selectedList : List <AssetInfo >,
@@ -186,24 +189,56 @@ private fun AssetTab(tabs: List<TabItem>, pagerState: PagerState) {
186
189
187
190
@Composable
188
191
private fun AssetContent (viewModel : AssetViewModel , requestType : RequestType ) {
189
- val assets = viewModel.getAssets (requestType)
192
+ val assets = viewModel.getGroupedAssets (requestType)
190
193
val gridCount = LocalAssetConfig .current.gridCount
191
194
192
- LazyVerticalGrid (
193
- modifier = Modifier .fillMaxSize(),
194
- columns = GridCells .Fixed (gridCount),
195
- contentPadding = PaddingValues (horizontal = 1 .dp),
196
- verticalArrangement = Arrangement .spacedBy(1 .dp),
197
- horizontalArrangement = Arrangement .spacedBy(1 .dp),
198
- userScrollEnabled = true
199
- ) {
200
- itemsIndexed(assets, key = { _, it -> it.id }) { index, assetInfo ->
201
- AssetImage (
202
- assetInfo = assetInfo,
203
- navigateToPreview = { viewModel.navigateToPreview(index, requestType) },
204
- selectedList = viewModel.selectedList,
205
- onLongClick = { selected -> viewModel.toggleSelect(selected, assetInfo) }
206
- )
195
+ LazyColumn {
196
+ assets.forEach { (dateString, resources) ->
197
+ val allSelected = viewModel.isAllSelected(resources)
198
+ item {
199
+ Row (
200
+ modifier = Modifier
201
+ .fillMaxWidth()
202
+ .padding(start = 16 .dp),
203
+ horizontalArrangement = Arrangement .SpaceBetween ,
204
+ verticalAlignment = Alignment .CenterVertically
205
+ ) {
206
+ Text (
207
+ text = dateString,
208
+ style = MaterialTheme .typography.bodyLarge.copy(fontWeight = FontWeight .Medium )
209
+ )
210
+
211
+ TextButton (onClick = {
212
+ if (allSelected) {
213
+ viewModel.unSelectAll(resources)
214
+ } else {
215
+ viewModel.selectAll(resources)
216
+ }
217
+ }) {
218
+ Text (text = if (allSelected) " 取消全选" else " 全选" )
219
+ }
220
+ }
221
+ }
222
+
223
+ item {
224
+ LazyVerticalGrid (
225
+ modifier = Modifier .heightIn(0 .dp, 600 .dp),
226
+ columns = GridCells .Fixed (gridCount),
227
+ contentPadding = PaddingValues (horizontal = 1 .dp),
228
+ verticalArrangement = Arrangement .spacedBy(1 .dp),
229
+ horizontalArrangement = Arrangement .spacedBy(1 .dp),
230
+ userScrollEnabled = false
231
+ ) {
232
+ itemsIndexed(resources, key = { _, it -> it.id }) { index, assetInfo ->
233
+ AssetImage (
234
+ assetInfo = assetInfo,
235
+ navigateToPreview = { viewModel.navigateToPreview(index, requestType) },
236
+ selectedList = viewModel.selectedList,
237
+ onLongClick = { selected -> viewModel.toggleSelect(selected, assetInfo) }
238
+ )
239
+ }
240
+ }
241
+ }
207
242
}
208
243
}
209
244
}
0 commit comments