From 332bf3256c101f6dc412b00caee63d001deade27 Mon Sep 17 00:00:00 2001 From: klaus Date: Mon, 3 Nov 2025 19:00:09 +0900 Subject: [PATCH] =?UTF-8?q?fix(like-heart):=20=ED=84=B0=EC=B9=98/=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EC=B6=A9=EB=8F=8C=20=ED=95=B4=EA=B2=B0=20=EB=B0=8F?= =?UTF-8?q?=20=EA=B8=B8=EC=9D=B4=20=EA=B8=B0=EB=B0=98=20=EB=A1=B1=ED=94=84?= =?UTF-8?q?=EB=A0=88=EC=8A=A4=20=EB=B6=84=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 1초 미만 터치 시 `handleHeartClick()` 실행되도록 수정 - 1초 경과 후에만 중앙 하트 표시 및 스케일 업데이트 시작 - ACTION_CANCEL 시 예약 러너블 취소, 중앙 하트 제거, 클릭/롱프레스 미실행 - 2초 이상 유지 시 기존 BIG HEART 트리거 로직 유지 - 가드 추가: `isLongPressBlockedByAvailability` 케이스 안전 처리 - 러너블/타이밍 추가: `showCenterHeartRunnable`, `longPressVisualStartTime` --- .../sodalive/live/room/LiveRoomActivity.kt | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt index 1e1164c9..34eeac6c 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt @@ -1879,12 +1879,26 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB // 롱프레스 트리거까지의 총 시간(2초 유지 시 BIG HEART) private val longPressDurationMs = 2000L + private val centerHeartShowDelayMs = 500L private val longPressScaleDurationMs get() = longPressDurationMs private val longPressScaleStart = 1.0f private val longPressScaleMax = 4.0f + // 0.5초 후 중앙 하트 표시 및 스케일 업데이트 시작을 위한 러너블 + private val showCenterHeartRunnable = Runnable { + if (!isTrackingLongPress) return@Runnable + if (isLongPressBlockedByAvailability) return@Runnable + if (longPressCenterHeart != null) return@Runnable + showCenterHeartForLongPress() + longPressVisualStartTime = System.currentTimeMillis() + updateCenterHeartScale(longPressScaleStart) + handler.post(longPressScaleUpdateRunnable) + } + // 롱프레스 진행 중 스케일 업데이트 러너블 + private var longPressVisualStartTime = 0L + private val longPressScaleUpdateRunnable = object : Runnable { override fun run() { if (!isTrackingLongPress) return @@ -1939,23 +1953,37 @@ class LiveRoomActivity : BaseActivity(ActivityLiveRoomB isLongPressTriggered = false isTrackingLongPress = true pressStartTime = System.currentTimeMillis() - // 중앙 하트 생성 및 초기 스케일 설정 - showCenterHeartForLongPress() - updateCenterHeartScale(longPressScaleStart) - handler.post(longPressScaleUpdateRunnable) + // 0.5초 후 중앙 하트 표시 및 스케일 업데이트 시작 + handler.postDelayed(showCenterHeartRunnable, centerHeartShowDelayMs) true } MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> { - // 이용 불가로 인해 즉시 안내를 띄운 케이스: 클릭 위임 없이 종료 + // 이용 불가로 인해 즉시 안내를 띄운 케이스: 클릭/롱프레스 모두 미실행 if (isLongPressBlockedByAvailability) { isLongPressBlockedByAvailability = false + handler.removeCallbacks(showCenterHeartRunnable) + handler.removeCallbacks(longPressScaleUpdateRunnable) + removeCenterHeartForLongPress(withFade = false) return true } + val elapsed = System.currentTimeMillis() - pressStartTime val wasTriggered = isLongPressTriggered isTrackingLongPress = false - // 중앙 하트 제거 + + // 예약된 작업 및 진행 중 애니메이션 취소 + handler.removeCallbacks(showCenterHeartRunnable) + handler.removeCallbacks(longPressScaleUpdateRunnable) + + if (event.action == MotionEvent.ACTION_UP && !wasTriggered) { + if (elapsed < centerHeartShowDelayMs) { + // 1초 미만: 클릭 처리 + handleHeartClick() + } + } + + // 중앙 하트 제거 (표시되었을 수 있으므로) removeCenterHeartForLongPress(withFade = !wasTriggered) true }