parent
54f5bb9a27
commit
0bfdd1484f
@ -12,7 +12,6 @@ import androidx.compose.ui.hapticfeedback.HapticFeedback
|
|||||||
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalHapticFeedback
|
import androidx.compose.ui.platform.LocalHapticFeedback
|
||||||
import androidx.compose.ui.platform.LocalLayoutDirection
|
|
||||||
import androidx.compose.ui.unit.*
|
import androidx.compose.ui.unit.*
|
||||||
import androidx.compose.ui.zIndex
|
import androidx.compose.ui.zIndex
|
||||||
import de.mm20.launcher2.ui.ktx.animateTo
|
import de.mm20.launcher2.ui.ktx.animateTo
|
||||||
@ -178,7 +177,6 @@ fun LazyVerticalDragAndDropGrid(
|
|||||||
columns,
|
columns,
|
||||||
modifier.dragAndDrop(
|
modifier.dragAndDrop(
|
||||||
state,
|
state,
|
||||||
LocalLayoutDirection.current == LayoutDirection.Rtl,
|
|
||||||
LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
),
|
),
|
||||||
state.gridState,
|
state.gridState,
|
||||||
@ -208,7 +206,6 @@ fun LazyHorizontalDragAndDropGrid(
|
|||||||
rows,
|
rows,
|
||||||
modifier.dragAndDrop(
|
modifier.dragAndDrop(
|
||||||
state,
|
state,
|
||||||
LocalLayoutDirection.current == LayoutDirection.Rtl,
|
|
||||||
LocalHapticFeedback.current
|
LocalHapticFeedback.current
|
||||||
),
|
),
|
||||||
state.gridState,
|
state.gridState,
|
||||||
@ -224,7 +221,6 @@ fun LazyHorizontalDragAndDropGrid(
|
|||||||
|
|
||||||
fun Modifier.dragAndDrop(
|
fun Modifier.dragAndDrop(
|
||||||
state: LazyDragAndDropGridState,
|
state: LazyDragAndDropGridState,
|
||||||
isRtl: Boolean,
|
|
||||||
hapticFeedback: HapticFeedback
|
hapticFeedback: HapticFeedback
|
||||||
) =
|
) =
|
||||||
this then pointerInput(null) {
|
this then pointerInput(null) {
|
||||||
@ -235,10 +231,7 @@ fun Modifier.dragAndDrop(
|
|||||||
onDragStart = { offset ->
|
onDragStart = { offset ->
|
||||||
val draggedItem = state.gridState.layoutInfo.visibleItemsInfo.find {
|
val draggedItem = state.gridState.layoutInfo.visibleItemsInfo.find {
|
||||||
Rect(
|
Rect(
|
||||||
it.offset.toOffset().let {off ->
|
it.offset.toOffset(),
|
||||||
if (isRtl) off.copy(x = state.gridState.layoutInfo.viewportSize.width - off.x - it.size.width)
|
|
||||||
else off
|
|
||||||
},
|
|
||||||
it.size.toSize()
|
it.size.toSize()
|
||||||
).contains(offset)
|
).contains(offset)
|
||||||
}
|
}
|
||||||
@ -250,10 +243,7 @@ fun Modifier.dragAndDrop(
|
|||||||
val absPosition = state.draggedItemAbsolutePosition
|
val absPosition = state.draggedItemAbsolutePosition
|
||||||
val draggedItem = state.draggedItem
|
val draggedItem = state.draggedItem
|
||||||
if (absPosition != null && draggedItem != null) {
|
if (absPosition != null && draggedItem != null) {
|
||||||
state.draggedItemAbsolutePosition = absPosition + dragAmount.let {
|
state.draggedItemAbsolutePosition = absPosition + dragAmount
|
||||||
if (isRtl) it.copy(x = -it.x)
|
|
||||||
else it
|
|
||||||
}
|
|
||||||
val draggedCenter = Rect(absPosition, draggedItem.size.toSize()).center
|
val draggedCenter = Rect(absPosition, draggedItem.size.toSize()).center
|
||||||
val dragOver = state.gridState.layoutInfo.visibleItemsInfo.find {
|
val dragOver = state.gridState.layoutInfo.visibleItemsInfo.find {
|
||||||
Rect(
|
Rect(
|
||||||
@ -308,7 +298,7 @@ fun LazyGridItemScope.DraggableItem(
|
|||||||
modifier = modifier
|
modifier = modifier
|
||||||
.then(if (isDragged) Modifier else Modifier.animateItemPlacement())
|
.then(if (isDragged) Modifier else Modifier.animateItemPlacement())
|
||||||
.zIndex(if (isDragged) 1f else 0f)
|
.zIndex(if (isDragged) 1f else 0f)
|
||||||
.offset {
|
.absoluteOffset {
|
||||||
if (state.draggedItem?.key == key) {
|
if (state.draggedItem?.key == key) {
|
||||||
state.draggedItemOffset?.toIntOffset() ?: IntOffset.Zero
|
state.draggedItemOffset?.toIntOffset() ?: IntOffset.Zero
|
||||||
} else if (state.droppedItemKey == key) {
|
} else if (state.droppedItemKey == key) {
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
package de.mm20.launcher2.ui.launcher.sheets
|
package de.mm20.launcher2.ui.launcher.sheets
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
|
||||||
import android.content.pm.LauncherApps
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import androidx.activity.result.IntentSenderRequest
|
import androidx.activity.result.IntentSenderRequest
|
||||||
@ -33,7 +31,6 @@ import androidx.compose.material.icons.rounded.Delete
|
|||||||
import androidx.compose.material.icons.rounded.Settings
|
import androidx.compose.material.icons.rounded.Settings
|
||||||
import androidx.compose.material.icons.rounded.Tag
|
import androidx.compose.material.icons.rounded.Tag
|
||||||
import androidx.compose.material3.CircularProgressIndicator
|
import androidx.compose.material3.CircularProgressIndicator
|
||||||
import androidx.compose.material3.Divider
|
|
||||||
import androidx.compose.material3.DropdownMenu
|
import androidx.compose.material3.DropdownMenu
|
||||||
import androidx.compose.material3.DropdownMenuItem
|
import androidx.compose.material3.DropdownMenuItem
|
||||||
import androidx.compose.material3.FilledTonalIconButton
|
import androidx.compose.material3.FilledTonalIconButton
|
||||||
@ -65,12 +62,13 @@ import androidx.compose.ui.graphics.drawOutline
|
|||||||
import androidx.compose.ui.graphics.drawscope.Stroke
|
import androidx.compose.ui.graphics.drawscope.Stroke
|
||||||
import androidx.compose.ui.input.pointer.pointerInput
|
import androidx.compose.ui.input.pointer.pointerInput
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalLayoutDirection
|
||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.Density
|
import androidx.compose.ui.unit.Density
|
||||||
|
import androidx.compose.ui.unit.LayoutDirection
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.toOffset
|
import androidx.compose.ui.unit.toOffset
|
||||||
import androidx.compose.ui.unit.toSize
|
import androidx.compose.ui.unit.toSize
|
||||||
@ -173,6 +171,7 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
|||||||
val tagsListState = rememberLazyListState()
|
val tagsListState = rememberLazyListState()
|
||||||
val tagsTitleSize = 48.dp.toPixels()
|
val tagsTitleSize = 48.dp.toPixels()
|
||||||
val tagsSpacing = 12.dp.toPixels()
|
val tagsSpacing = 12.dp.toPixels()
|
||||||
|
val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
|
||||||
val state = rememberLazyDragAndDropGridState(
|
val state = rememberLazyDragAndDropGridState(
|
||||||
gridState = gridState,
|
gridState = gridState,
|
||||||
onDragStart = {
|
onDragStart = {
|
||||||
@ -200,8 +199,11 @@ fun ReorderFavoritesGrid(viewModel: EditFavoritesSheetVM, paddingValues: Padding
|
|||||||
&& hoveredItem.offset.y + tagsTitleSize < position.y
|
&& hoveredItem.offset.y + tagsTitleSize < position.y
|
||||||
) {
|
) {
|
||||||
val scroll = tagsListState.layoutInfo.viewportStartOffset
|
val scroll = tagsListState.layoutInfo.viewportStartOffset
|
||||||
|
val relCenter =
|
||||||
|
if (isRtl) draggedCenter.copy(x = tagsListState.layoutInfo.viewportSize.width - draggedCenter.x)
|
||||||
|
else draggedCenter
|
||||||
val tag = tagsListState.layoutInfo.visibleItemsInfo.find {
|
val tag = tagsListState.layoutInfo.visibleItemsInfo.find {
|
||||||
draggedCenter.x + scroll > it.offset && draggedCenter.x + scroll < it.offset + it.size - tagsSpacing
|
relCenter.x + scroll > it.offset && relCenter.x + scroll < it.offset + it.size - tagsSpacing
|
||||||
}
|
}
|
||||||
hoveredTag = tag?.index?.let { pinnedTags[it].tag }
|
hoveredTag = tag?.index?.let { pinnedTags[it].tag }
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user