1
1
package com.huhx.picker.view
2
2
3
3
import android.net.Uri
4
+ import android.widget.Toast
4
5
import androidx.activity.compose.BackHandler
5
6
import androidx.activity.compose.rememberLauncherForActivityResult
6
7
import androidx.activity.result.contract.ActivityResultContracts
@@ -46,8 +47,10 @@ import androidx.compose.ui.Modifier
46
47
import androidx.compose.ui.graphics.Color
47
48
import androidx.compose.ui.graphics.FilterQuality
48
49
import androidx.compose.ui.platform.LocalConfiguration
50
+ import androidx.compose.ui.platform.LocalContext
49
51
import androidx.compose.ui.res.stringResource
50
52
import androidx.compose.ui.text.font.FontWeight
53
+ import androidx.compose.ui.text.style.TextAlign
51
54
import androidx.compose.ui.unit.Dp
52
55
import androidx.compose.ui.unit.dp
53
56
import androidx.compose.ui.unit.sp
@@ -66,7 +69,7 @@ internal fun AssetDisplayScreen(
66
69
onClose : (List <AssetInfo >) -> Unit ,
67
70
) {
68
71
BackHandler {
69
- if (viewModel.selectedList.isNotEmpty()) {
72
+ if (viewModel.selectedList.isNotEmpty()) {
70
73
viewModel.clear()
71
74
} else {
72
75
onClose(viewModel.selectedList)
@@ -193,7 +196,22 @@ private fun AssetTab(tabs: List<TabItem>, pagerState: PagerState) {
193
196
@Composable
194
197
private fun AssetContent (viewModel : AssetViewModel , requestType : RequestType ) {
195
198
val assets = viewModel.getGroupedAssets(requestType)
199
+ val context = LocalContext .current
196
200
val gridCount = LocalAssetConfig .current.gridCount
201
+ val maxAssets = LocalAssetConfig .current.maxAssets
202
+ val errorMessage = stringResource(R .string.message_selected_exceed, maxAssets)
203
+
204
+ if (assets.isEmpty()) {
205
+ return Box (
206
+ modifier = Modifier .fillMaxSize(),
207
+ contentAlignment = Alignment .Center
208
+ ) {
209
+ Text (
210
+ text = " 对应的资源为空" ,
211
+ textAlign = TextAlign .Center
212
+ )
213
+ }
214
+ }
197
215
198
216
LazyColumn {
199
217
assets.forEach { (dateString, resources) ->
@@ -215,7 +233,9 @@ private fun AssetContent(viewModel: AssetViewModel, requestType: RequestType) {
215
233
if (allSelected) {
216
234
viewModel.unSelectAll(resources)
217
235
} else {
218
- viewModel.selectAll(resources)
236
+ if (viewModel.selectAll(resources, maxAssets)) {
237
+ Toast .makeText(context, errorMessage, Toast .LENGTH_SHORT ).show()
238
+ }
219
239
}
220
240
}) {
221
241
Text (
@@ -258,6 +278,9 @@ private fun AssetImage(
258
278
onLongClick : (Boolean ) -> Unit ,
259
279
) {
260
280
val selected = selectedList.any { it.id == assetInfo.id }
281
+ val context = LocalContext .current
282
+ val maxAssets = LocalAssetConfig .current.maxAssets
283
+ val errorMessage = stringResource(R .string.message_selected_exceed, maxAssets)
261
284
262
285
Box (
263
286
modifier = modifier.fillMaxSize(),
@@ -270,7 +293,14 @@ private fun AssetImage(
270
293
resourceType = assetInfo.resourceType,
271
294
durationString = assetInfo.formatDuration(),
272
295
navigateToPreview = navigateToPreview,
273
- onLongClick = { onLongClick(! selected) }
296
+ onLongClick = {
297
+ val selectResult = ! selected
298
+ if (! selectResult || selectedList.size < maxAssets) {
299
+ onLongClick(selectResult)
300
+ } else {
301
+ Toast .makeText(context, errorMessage, Toast .LENGTH_SHORT ).show()
302
+ }
303
+ }
274
304
)
275
305
AssetImageIndicator (assetInfo = assetInfo, selected = selected, assetSelected = selectedList)
276
306
}
0 commit comments