Rename DragAndDrop -> DragToReorder to differentiate it from Android's drag-and-drop framework.

This commit is contained in:
jeffrey-signal
2026-04-08 19:17:48 -04:00
parent 7aadc208e1
commit 8a5faba985
7 changed files with 89 additions and 84 deletions

View File

@@ -52,10 +52,10 @@ import org.signal.core.ui.compose.DropdownMenus
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.SignalIcons
import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.copied.androidx.compose.DraggableItem
import org.signal.core.ui.compose.copied.androidx.compose.dragContainer
import org.signal.core.ui.compose.copied.androidx.compose.rememberDragDropState
import org.signal.core.ui.compose.list.ReorderListEvent
import org.signal.core.ui.compose.list.ReorderableItem
import org.signal.core.ui.compose.list.rememberReorderableListState
import org.signal.core.ui.compose.list.reorderableList
import org.signal.core.util.toInt
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.keyvalue.SignalStore
@@ -101,11 +101,11 @@ class ChatFoldersFragment : ComposeFragment() {
onDeleteDismissed = {
viewModel.showDeleteDialog(false)
},
onDragAndDropEvent = { event ->
onReorderListEvent = { event ->
when (event) {
is DragAndDropEvent.OnItemMove -> viewModel.updateItemPosition(event.fromIndex, event.toIndex)
is DragAndDropEvent.OnItemDrop -> viewModel.saveItemPositions()
is DragAndDropEvent.OnDragCancel -> {}
is ReorderListEvent.ItemMoved -> viewModel.updateItemPosition(event.fromIndex, event.toIndex)
is ReorderListEvent.ItemDropped -> viewModel.saveItemPositions()
is ReorderListEvent.DragCanceled -> {}
}
}
)
@@ -123,10 +123,10 @@ fun FoldersScreen(
onDeleteClicked: (ChatFolderRecord) -> Unit = {},
onDeleteConfirmed: () -> Unit = {},
onDeleteDismissed: () -> Unit = {},
onDragAndDropEvent: (DragAndDropEvent) -> Unit = {}
onReorderListEvent: (ReorderListEvent) -> Unit = {}
) {
val listState = rememberLazyListState()
val dragDropState = rememberDragDropState(listState, includeHeader = true, includeFooter = true, onEvent = onDragAndDropEvent)
val reorderableListState = rememberReorderableListState(listState, includeHeader = true, includeFooter = true, onEvent = onReorderListEvent)
LaunchedEffect(Unit) {
if (!SignalStore.uiHints.hasSeenChatFoldersEducationSheet) {
@@ -147,14 +147,14 @@ fun FoldersScreen(
}
LazyColumn(
modifier = Modifier.dragContainer(
dragDropState = dragDropState,
modifier = Modifier.reorderableList(
reorderableListState = reorderableListState,
dragHandleWidth = 56.dp
),
state = listState
) {
item {
DraggableItem(dragDropState, 0) {
ReorderableItem(reorderableListState, 0) {
Text(
text = stringResource(id = R.string.ChatFoldersFragment__organize_your_chats),
style = MaterialTheme.typography.bodyMedium,
@@ -175,7 +175,7 @@ fun FoldersScreen(
}
itemsIndexed(state.folders) { index, folder ->
DraggableItem(dragDropState, 1 + index) { isDragging ->
ReorderableItem(reorderableListState, 1 + index) { isDragging ->
val elevation = if (isDragging) 1.dp else 0.dp
val isAllChats = folder.folderType == ChatFolderRecord.FolderType.ALL
FolderRow(
@@ -193,7 +193,7 @@ fun FoldersScreen(
}
item {
DraggableItem(dragDropState, 1 + state.folders.size) {
ReorderableItem(reorderableListState, 1 + state.folders.size) {
if (state.suggestedFolders.isNotEmpty()) {
Dividers.Default()

View File

@@ -59,10 +59,10 @@ import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.SignalIcons
import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.copied.androidx.compose.DraggableItem
import org.signal.core.ui.compose.copied.androidx.compose.dragContainer
import org.signal.core.ui.compose.copied.androidx.compose.rememberDragDropState
import org.signal.core.ui.compose.list.ReorderListEvent
import org.signal.core.ui.compose.list.ReorderableItem
import org.signal.core.ui.compose.list.rememberReorderableListState
import org.signal.core.ui.compose.list.reorderableList
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.polls.Poll
@@ -154,15 +154,15 @@ private fun CreatePollScreen(
// Drag and drop
val listState = rememberLazyListState()
val dragDropState = rememberDragDropState(listState, includeHeader = true, includeFooter = true, onEvent = { event ->
val reorderableListState = rememberReorderableListState(listState, includeHeader = true, includeFooter = true, onEvent = { event ->
when (event) {
is DragAndDropEvent.OnItemMove -> {
is ReorderListEvent.ItemMoved -> {
val oldIndex = options[event.fromIndex]
options[event.fromIndex] = options[event.toIndex]
options[event.toIndex] = oldIndex
}
is DragAndDropEvent.OnItemDrop, is DragAndDropEvent.OnDragCancel -> Unit
is ReorderListEvent.ItemDropped, is ReorderListEvent.DragCanceled -> Unit
}
})
@@ -204,14 +204,14 @@ private fun CreatePollScreen(
modifier = Modifier
.fillMaxHeight()
.imePadding()
.dragContainer(
dragDropState = dragDropState,
.reorderableList(
reorderableListState = reorderableListState,
dragHandleWidth = 56.dp
),
state = listState
) {
item {
DraggableItem(dragDropState, 0) {
ReorderableItem(reorderableListState, 0) {
Text(
text = stringResource(R.string.CreatePollFragment__question),
modifier = Modifier.padding(vertical = 12.dp, horizontal = 24.dp),
@@ -246,7 +246,7 @@ private fun CreatePollScreen(
}
itemsIndexed(options) { index, option ->
DraggableItem(dragDropState, 1 + index) {
ReorderableItem(reorderableListState, 1 + index) {
TextFieldWithCountdown(
value = option,
label = { Text(text = stringResource(R.string.CreatePollFragment__option_n, index + 1)) },
@@ -273,7 +273,7 @@ private fun CreatePollScreen(
}
item {
DraggableItem(dragDropState, 1 + options.size) {
ReorderableItem(reorderableListState, 1 + options.size) {
Dividers.Default()
Rows.ToggleRow(checked = allowMultiple, text = stringResource(R.string.CreatePollFragment__allow_multiple_votes), onCheckChanged = { allowMultiple = it })
Spacer(modifier = Modifier.size(60.dp))

View File

@@ -16,7 +16,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.list.ReorderListEvent
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
@@ -73,11 +73,11 @@ class StickerManagementActivity : PassphraseRequiredActivity() {
override fun onRemoveStickerPacksCanceled() = viewModel.onUninstallStickerPacksCanceled()
override fun onSelectionToggle(pack: InstalledStickerPack) = viewModel.toggleSelection(pack)
override fun onSelectAllToggle() = viewModel.toggleSelectAll()
override fun onDragAndDropEvent(event: DragAndDropEvent) {
override fun onReorderableEvent(event: ReorderListEvent) {
when (event) {
is DragAndDropEvent.OnItemMove -> viewModel.updatePosition(event.fromIndex, event.toIndex)
is DragAndDropEvent.OnItemDrop -> viewModel.saveInstalledPacksSortOrder()
is DragAndDropEvent.OnDragCancel -> {}
is ReorderListEvent.ItemMoved -> viewModel.updatePosition(event.fromIndex, event.toIndex)
is ReorderListEvent.ItemDropped -> viewModel.saveInstalledPacksSortOrder()
is ReorderListEvent.DragCanceled -> {}
}
}

View File

@@ -29,7 +29,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.ComposeBottomSheetDialogFragment
import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.list.ReorderListEvent
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs
@@ -120,11 +120,11 @@ class StickerManagementBottomSheet : ComposeBottomSheetDialogFragment() {
override fun onRemoveStickerPacksCanceled() = viewModel.onUninstallStickerPacksCanceled()
override fun onSelectionToggle(pack: InstalledStickerPack) = viewModel.toggleSelection(pack)
override fun onSelectAllToggle() = viewModel.toggleSelectAll()
override fun onDragAndDropEvent(event: DragAndDropEvent) {
override fun onReorderableEvent(event: ReorderListEvent) {
when (event) {
is DragAndDropEvent.OnItemMove -> viewModel.updatePosition(event.fromIndex, event.toIndex)
is DragAndDropEvent.OnItemDrop -> viewModel.saveInstalledPacksSortOrder()
is DragAndDropEvent.OnDragCancel -> {}
is ReorderListEvent.ItemMoved -> viewModel.updatePosition(event.fromIndex, event.toIndex)
is ReorderListEvent.ItemDropped -> viewModel.saveInstalledPacksSortOrder()
is ReorderListEvent.DragCanceled -> {}
}
}

View File

@@ -69,10 +69,10 @@ import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.SignalIcons
import org.signal.core.ui.compose.Snackbars
import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.copied.androidx.compose.DraggableItem
import org.signal.core.ui.compose.copied.androidx.compose.dragContainer
import org.signal.core.ui.compose.copied.androidx.compose.rememberDragDropState
import org.signal.core.ui.compose.list.ReorderListEvent
import org.signal.core.ui.compose.list.ReorderableItem
import org.signal.core.ui.compose.list.rememberReorderableListState
import org.signal.core.ui.compose.list.reorderableList
import org.signal.core.ui.compose.showSnackbar
import org.signal.core.ui.getWindowSizeClass
import org.thoughtcrime.securesms.R
@@ -140,7 +140,7 @@ interface InstalledStickersContentCallbacks {
fun onRemoveStickerPacksCanceled()
fun onSelectionToggle(pack: InstalledStickerPack)
fun onSelectAllToggle()
fun onDragAndDropEvent(event: DragAndDropEvent)
fun onReorderableEvent(event: ReorderListEvent)
fun onShowPreviewClick(pack: InstalledStickerPack)
object Empty : InstalledStickersContentCallbacks {
@@ -150,7 +150,7 @@ interface InstalledStickersContentCallbacks {
override fun onRemoveStickerPacksCanceled() = Unit
override fun onSelectionToggle(pack: InstalledStickerPack) = Unit
override fun onSelectAllToggle() = Unit
override fun onDragAndDropEvent(event: DragAndDropEvent) = Unit
override fun onReorderableEvent(event: ReorderListEvent) = Unit
override fun onShowPreviewClick(pack: InstalledStickerPack) = Unit
}
}
@@ -456,7 +456,7 @@ private fun InstalledStickersContent(
EmptyView(text = stringResource(R.string.StickerManagement_installed_tab_empty_text))
} else {
val listState = rememberLazyListState()
val dragDropState = rememberDragDropState(lazyListState = listState, includeHeader = true, includeFooter = false, onEvent = callbacks::onDragAndDropEvent)
val reorderableListState = rememberReorderableListState(lazyListState = listState, includeHeader = true, includeFooter = false, onEvent = callbacks::onReorderableEvent)
val density = LocalDensity.current
val haptics = LocalHapticFeedback.current
@@ -473,13 +473,13 @@ private fun InstalledStickersContent(
state = listState,
modifier = modifier
.fillMaxHeight()
.dragContainer(
dragDropState = dragDropState,
.reorderableList(
reorderableListState = reorderableListState,
dragHandleWidth = 56.dp
)
) {
item(key = "installed_section_header") {
DraggableItem(dragDropState, 0) {
ReorderableItem(reorderableListState, 0) {
StickerPackSectionHeader(
text = stringResource(R.string.StickerManagement_installed_stickers_header),
modifier = Modifier.animateItem()
@@ -493,9 +493,9 @@ private fun InstalledStickersContent(
) { index, pack ->
val menuController = remember { DropdownMenus.MenuController() }
DraggableItem(
ReorderableItem(
index = index + 1,
dragDropState = dragDropState
reorderableListState = reorderableListState
) { isDragging ->
InstalledStickerPackRow(
pack = pack,