fix: slide-to-cancel не работает при LOCKED/PAUSED — как в Telegram
Telegram: при sendButtonVisible=true gesture handler возвращает false, полностью блокируя горизонтальный свайп. Slide-to-cancel исчезает, вместо него кнопка Cancel. Изменения: - Gesture handler: только RECORDING обрабатывает slide (было RECORDING||LOCKED) - slideDx/slideDy не обновляются при LOCKED/PAUSED - При lock: slideDx=0, slideDy=0 — сбрасываем горизонтальное смещение - AnimatedContent уже переключает SlideToCancel→waveform при LOCKED Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2513,33 +2513,32 @@ fun MessageInputBar(
|
|||||||
val absDy = kotlin.math.abs(dy)
|
val absDy = kotlin.math.abs(dy)
|
||||||
if (absDx > maxAbsDx) maxAbsDx = absDx
|
if (absDx > maxAbsDx) maxAbsDx = absDx
|
||||||
if (absDy > maxAbsDy) maxAbsDy = absDy
|
if (absDy > maxAbsDy) maxAbsDy = absDy
|
||||||
} else if (
|
} else if (recordUiState == RecordUiState.RECORDING) {
|
||||||
recordUiState == RecordUiState.RECORDING ||
|
// Only RECORDING processes slide gestures
|
||||||
recordUiState == RecordUiState.LOCKED
|
// LOCKED/PAUSED: no gesture processing (Telegram: return false)
|
||||||
) {
|
|
||||||
val dx = change.position.x - pressStartX
|
val dx = change.position.x - pressStartX
|
||||||
val dy = change.position.y - pressStartY
|
val dy = change.position.y - pressStartY
|
||||||
slideDx = dx
|
slideDx = dx
|
||||||
slideDy = dy
|
slideDy = dy
|
||||||
|
lockProgress = ((-dy) / lockDragThresholdPx).coerceIn(0f, 1f)
|
||||||
|
|
||||||
if (recordUiState == RecordUiState.RECORDING) {
|
if (dx <= -cancelDragThresholdPx) {
|
||||||
lockProgress = ((-dy) / lockDragThresholdPx).coerceIn(0f, 1f)
|
inputJumpLog(
|
||||||
if (dx <= -cancelDragThresholdPx) {
|
"gesture CANCEL dx=${dx.toInt()} threshold=${cancelDragThresholdPx.toInt()} mode=$recordMode"
|
||||||
inputJumpLog(
|
)
|
||||||
"gesture CANCEL dx=${dx.toInt()} threshold=${cancelDragThresholdPx.toInt()} mode=$recordMode"
|
stopVoiceRecording(send = false)
|
||||||
)
|
setRecordUiState(RecordUiState.IDLE, "slide-cancel")
|
||||||
stopVoiceRecording(send = false)
|
resetGestureState()
|
||||||
setRecordUiState(RecordUiState.IDLE, "slide-cancel")
|
finished = true
|
||||||
resetGestureState()
|
} else if (dy <= -lockDragThresholdPx) {
|
||||||
finished = true
|
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
||||||
} else if (dy <= -lockDragThresholdPx) {
|
lockProgress = 1f
|
||||||
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
slideDx = 0f // reset horizontal slide on lock
|
||||||
lockProgress = 1f
|
slideDy = 0f
|
||||||
setRecordUiState(
|
setRecordUiState(
|
||||||
RecordUiState.LOCKED,
|
RecordUiState.LOCKED,
|
||||||
"slide-lock dy=${dy.toInt()}"
|
"slide-lock dy=${dy.toInt()}"
|
||||||
)
|
)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
change.consume()
|
change.consume()
|
||||||
|
|||||||
Reference in New Issue
Block a user