Skip to content

Commit c2a081e

Browse files
committed
feat: add BackHandler and onLongClick
1 parent 5ab5fcc commit c2a081e

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

app/src/main/java/com/huhx/picker/AppRoute.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fun AppRoute(
2020
) {
2121
NavHost(
2222
navController = navController,
23-
startDestination = "asset_picker",
23+
startDestination = "moment_list",
2424
) {
2525
composable("moment_list") {
2626
MomentListScreen(viewModel) { navController.navigate("moment_add") }

compose_image_picker/src/main/java/com/huhx/picker/view/AssetDisplayScreen.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.huhx.picker.view
22

33
import android.net.Uri
4+
import androidx.activity.compose.BackHandler
45
import androidx.activity.compose.rememberLauncherForActivityResult
56
import androidx.activity.result.contract.ActivityResultContracts
67
import androidx.annotation.StringRes
@@ -60,6 +61,8 @@ internal fun AssetDisplayScreen(
6061
onPicked: (List<AssetInfo>) -> Unit,
6162
onClose: (List<AssetInfo>) -> Unit,
6263
) {
64+
BackHandler { viewModel.clear() }
65+
6366
Scaffold(
6467
topBar = {
6568
val directory = viewModel.directory
@@ -188,11 +191,12 @@ private fun AssetContent(viewModel: AssetViewModel, requestType: RequestType) {
188191
horizontalArrangement = Arrangement.spacedBy(1.dp),
189192
userScrollEnabled = true
190193
) {
191-
itemsIndexed(assets, key = { _, it -> it.id }) { index, it ->
194+
itemsIndexed(assets, key = { _, it -> it.id }) { index, assetInfo ->
192195
AssetImage(
193-
assetInfo = it,
196+
assetInfo = assetInfo,
194197
navigateToPreview = { viewModel.navigateToPreview(index, requestType) },
195-
selectedList = viewModel.selectedList
198+
selectedList = viewModel.selectedList,
199+
onLongClick = { selected -> viewModel.toggleSelect(selected, assetInfo) }
196200
)
197201
}
198202
}
@@ -203,6 +207,7 @@ private fun AssetImage(
203207
assetInfo: AssetInfo,
204208
selectedList: SnapshotStateList<AssetInfo>,
205209
navigateToPreview: () -> Unit,
210+
onLongClick: (Boolean) -> Unit,
206211
) {
207212
val selected = selectedList.any { it.id == assetInfo.id }
208213

@@ -216,6 +221,7 @@ private fun AssetImage(
216221
resourceType = assetInfo.resourceType,
217222
durationString = assetInfo.formatDuration(),
218223
navigateToPreview = navigateToPreview,
224+
onLongClick = { onLongClick(!selected) }
219225
)
220226
AssetImageIndicator(assetInfo = assetInfo, selected = selected, assetSelected = selectedList)
221227
}

compose_image_picker/src/main/java/com/huhx/picker/viewmodel/AssetViewModel.kt

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,26 @@ internal class AssetViewModel(
5050
assets.addAll(assetPickerRepository.getAssets(requestType))
5151
}
5252

53+
fun clear() {
54+
selectedList.clear()
55+
}
56+
57+
fun toggleSelect(selected: Boolean, assetInfo: AssetInfo) {
58+
if (selected) {
59+
select(assetInfo)
60+
} else {
61+
unSelect(assetInfo)
62+
}
63+
}
64+
65+
private fun select(assetInfo: AssetInfo) {
66+
selectedList += assetInfo
67+
}
68+
69+
private fun unSelect(assetInfo: AssetInfo) {
70+
selectedList -= assetInfo
71+
}
72+
5373
fun getAssets(requestType: RequestType): List<AssetInfo> {
5474
val assetList = _directoryGroup.first { it.directory == directory }.assets
5575

0 commit comments

Comments
 (0)