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)
|
||||
if (absDx > maxAbsDx) maxAbsDx = absDx
|
||||
if (absDy > maxAbsDy) maxAbsDy = absDy
|
||||
} else if (
|
||||
recordUiState == RecordUiState.RECORDING ||
|
||||
recordUiState == RecordUiState.LOCKED
|
||||
) {
|
||||
} else if (recordUiState == RecordUiState.RECORDING) {
|
||||
// Only RECORDING processes slide gestures
|
||||
// LOCKED/PAUSED: no gesture processing (Telegram: return false)
|
||||
val dx = change.position.x - pressStartX
|
||||
val dy = change.position.y - pressStartY
|
||||
slideDx = dx
|
||||
slideDy = dy
|
||||
lockProgress = ((-dy) / lockDragThresholdPx).coerceIn(0f, 1f)
|
||||
|
||||
if (recordUiState == RecordUiState.RECORDING) {
|
||||
lockProgress = ((-dy) / lockDragThresholdPx).coerceIn(0f, 1f)
|
||||
if (dx <= -cancelDragThresholdPx) {
|
||||
inputJumpLog(
|
||||
"gesture CANCEL dx=${dx.toInt()} threshold=${cancelDragThresholdPx.toInt()} mode=$recordMode"
|
||||
)
|
||||
stopVoiceRecording(send = false)
|
||||
setRecordUiState(RecordUiState.IDLE, "slide-cancel")
|
||||
resetGestureState()
|
||||
finished = true
|
||||
} else if (dy <= -lockDragThresholdPx) {
|
||||
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
||||
lockProgress = 1f
|
||||
setRecordUiState(
|
||||
RecordUiState.LOCKED,
|
||||
"slide-lock dy=${dy.toInt()}"
|
||||
)
|
||||
}
|
||||
if (dx <= -cancelDragThresholdPx) {
|
||||
inputJumpLog(
|
||||
"gesture CANCEL dx=${dx.toInt()} threshold=${cancelDragThresholdPx.toInt()} mode=$recordMode"
|
||||
)
|
||||
stopVoiceRecording(send = false)
|
||||
setRecordUiState(RecordUiState.IDLE, "slide-cancel")
|
||||
resetGestureState()
|
||||
finished = true
|
||||
} else if (dy <= -lockDragThresholdPx) {
|
||||
view.performHapticFeedback(android.view.HapticFeedbackConstants.KEYBOARD_TAP)
|
||||
lockProgress = 1f
|
||||
slideDx = 0f // reset horizontal slide on lock
|
||||
slideDy = 0f
|
||||
setRecordUiState(
|
||||
RecordUiState.LOCKED,
|
||||
"slide-lock dy=${dy.toInt()}"
|
||||
)
|
||||
}
|
||||
}
|
||||
change.consume()
|
||||
|
||||
Reference in New Issue
Block a user