@@ -13,8 +13,10 @@ import androidx.compose.foundation.layout.PaddingValues
1313import androidx.compose.foundation.layout.Row
1414import androidx.compose.foundation.layout.fillMaxSize
1515import androidx.compose.foundation.layout.fillMaxWidth
16+ import androidx.compose.foundation.layout.heightIn
1617import androidx.compose.foundation.layout.padding
1718import androidx.compose.foundation.layout.statusBarsPadding
19+ import androidx.compose.foundation.lazy.LazyColumn
1820import androidx.compose.foundation.lazy.grid.GridCells
1921import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
2022import androidx.compose.foundation.lazy.grid.itemsIndexed
@@ -45,6 +47,7 @@ import androidx.compose.ui.Alignment
4547import androidx.compose.ui.Modifier
4648import androidx.compose.ui.graphics.Color
4749import androidx.compose.ui.res.stringResource
50+ import androidx.compose.ui.text.font.FontWeight
4851import androidx.compose.ui.unit.dp
4952import androidx.compose.ui.unit.sp
5053import com.huhx.picker.R
@@ -87,16 +90,16 @@ internal fun AssetDisplayScreen(
8790
8891 Column {
8992 AssetTab (tabs = tabs, pagerState = pagerState)
90- HorizontalPager (state = pagerState, userScrollEnabled = true ) { page ->
93+ HorizontalPager (state = pagerState, userScrollEnabled = false ) { page ->
9194 tabs[page].screen(viewModel)
9295 }
9396 }
9497 }
9598 }
9699}
97100
98- @OptIn(ExperimentalMaterial3Api ::class )
99101@Composable
102+ @OptIn(ExperimentalMaterial3Api ::class )
100103private fun DisplayTopAppBar (
101104 directory : String ,
102105 selectedList : List <AssetInfo >,
@@ -186,24 +189,56 @@ private fun AssetTab(tabs: List<TabItem>, pagerState: PagerState) {
186189
187190@Composable
188191private fun AssetContent (viewModel : AssetViewModel , requestType : RequestType ) {
189- val assets = viewModel.getAssets (requestType)
192+ val assets = viewModel.getGroupedAssets (requestType)
190193 val gridCount = LocalAssetConfig .current.gridCount
191194
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+ }
207242 }
208243 }
209244}
0 commit comments