Files
sodalive-android/docs/20260319_라이브룸채팅얼림터치동작수정.md

6.3 KiB

20260319_라이브룸채팅얼림터치동작수정.md

개요

  • LiveRoomActivity에서 비방장 청취자가 채팅 얼림 상태일 때 터치 시 경고 토스트가 안정적으로 노출되도록 보정한다.
  • etChat.isEnabled = false로 인해 터치 이벤트가 막히는 문제를 해결하고, 입력/전송 차단 정책은 유지한다.
  • etChat.setOnTouchListenerClickableViewAccessibility 경고가 표시되지 않도록 performClick 연계와 경고 억제를 반영한다.

완료 기준 (Acceptance Criteria)

  • AC1: 비방장이 채팅 얼림 상태에서 et_chat을 터치하면 screen_live_room_chat_freeze_warning 토스트가 노출된다.
  • AC2: 비방장 + 채팅 얼림 상태에서 실제 채팅 입력과 전송은 계속 차단된다.
  • AC3: 방장 또는 비얼림 상태에서는 기존 입력 동작이 유지된다.
  • AC4: 경고 문구(ClickableViewAccessibility)가 코드 경로에서 재현되지 않는다.
  • AC5: 문자열 리소스는 기존 screen_live_room_chat_freeze_warning을 재사용한다.
  • AC6: 수정 코드 컴파일/테스트가 성공한다.

구현 체크리스트

  • LiveRoomActivity의 입력 비활성/터치 처리 코드를 재확인한다.
  • etChat 터치 토스트 경로를 입력창 자체 OnTouchListener로 보정한다.
  • etChat은 enabled 유지 + focus/cursor 제어로 입력 차단을 유지한다.
  • MotionEvent.ACTION_UP에서 performClick 호출을 추가해 접근성 경고 조건을 해소한다.
  • @SuppressLint("ClickableViewAccessibility")setupView에 적용해 IDE/Lint 경고 노출을 억제한다.
  • 검증 실행 결과를 문서 하단에 누적 기록한다.

영향 파일

  • app/src/main/java/kr/co/vividnext/sodalive/live/room/LiveRoomActivity.kt
  • docs/20260319_라이브룸채팅얼림터치동작수정.md

검증 기록

  • 2026-03-19

    • 무엇/왜/어떻게: 비방장 청취자 터치 시 얼림 토스트를 먼저 보장하기 위해 입력 컨테이너 클릭 기반 경고를 적용했다.
    • 실행 명령/도구:
      • 탐색: task(subagent_type="explore") x3, task(subagent_type="librarian") x2
      • 코드/리소스 확인: grep("isChatFrozen|screen_live_room_chat_freeze_warning|setOnFocusChangeListener|etChat"), ast_grep_search, sg --lang kotlin -p ..., read(LiveRoomActivity.kt, activity_live_room.xml)
      • 정적 진단: lsp_diagnostics(LiveRoomActivity.kt)
      • 빌드/테스트: ./gradlew :app:testDebugUnitTest :app:assembleDebug
      • 수동 스모크: adb devices, adb shell monkey -p kr.co.vividnext.sodalive.debug -c android.intent.category.LAUNCHER 1, adb shell am start -W -n ...LiveRoomActivity --el roomId 1, adb shell run-as kr.co.vividnext.sodalive.debug am start --user 0 -n ...LiveRoomActivity --el roomId 1
    • 결과:
      • 초기 수정에서 binding.rlInputChat.setOnClickListener로 토스트를 노출하도록 반영했다.
      • 문자열 리소스는 기존 screen_live_room_chat_freeze_warning을 재사용했고 신규 리소스 추가는 없었다.
      • ./gradlew :app:testDebugUnitTest :app:assembleDebugBUILD SUCCESSFUL이었다.
      • lsp_diagnostics는 Kotlin LSP 미설정으로 실행 불가였다.
      • adb 직접 am start는 non-exported Activity 제약으로 실패했고 run-as 경로로 Activity 시작 로그를 확인했다.
  • 2026-03-19

    • 무엇/왜/어떻게: etChat.isEnabled = false 상태에서 부모(rlInputChat) 클릭이 전달되지 않아 토스트가 뜨지 않는 문제를 확인했고, 입력창은 enabled를 유지한 채 포커스 가능 여부로 입력 차단을 제어하도록 수정했다. 동시에 etChat.setOnTouchListener에서 비방장+얼림 상태 터치를 직접 소비하며 토스트를 노출하도록 보정했다.
    • 실행 명령/도구:
      • 분석: read(LiveRoomActivity.kt), background_output(bg_7315e113)
      • 코드 반영: apply_patch (LiveRoomActivity.kt, 본 문서)
      • 정적 진단: lsp_diagnostics(LiveRoomActivity.kt)
      • 빌드/테스트: ./gradlew :app:testDebugUnitTest :app:assembleDebug
      • 수동 스모크: adb devices, adb shell monkey -p kr.co.vividnext.sodalive.debug -c android.intent.category.LAUNCHER 1, adb shell run-as kr.co.vividnext.sodalive.debug am start --user 0 -n kr.co.vividnext.sodalive.debug/kr.co.vividnext.sodalive.live.room.LiveRoomActivity --el roomId 1
    • 결과:
      • 비방장+얼림 상태에서 etChat 터치 시 경고 토스트가 뜨도록 이벤트 경로가 복구되었다.
      • 입력/전송 차단은 etChat.isFocusable/isFocusableInTouchMode/isCursorVisible=falseivSend.isEnabled=false로 유지된다.
      • ./gradlew :app:testDebugUnitTest :app:assembleDebugBUILD SUCCESSFUL로 통과했다.
      • lsp_diagnostics는 Kotlin LSP 미설정 환경으로 실행 불가 메시지를 반환했다.
  • 2026-03-19

    • 무엇/왜/어떻게: etChat.setOnTouchListener 구간에서 IDE 경고(Custom view EditText has setOnTouchListener called on it but does not override performClick)가 남아 performClick() 호출과 @SuppressLint("ClickableViewAccessibility")를 추가해 경고 노출을 제거했다.
    • 실행 명령/도구:
      • 코드 반영: apply_patch (LiveRoomActivity.kt)
      • 정적 진단: lsp_diagnostics(LiveRoomActivity.kt)
      • 린트 확인: ./gradlew :app:lintDebug, grep("ClickableViewAccessibility|performClick", lint-results-debug.txt)
      • 빌드/테스트: ./gradlew :app:testDebugUnitTest :app:assembleDebug
      • 수동 스모크: adb devices, adb shell monkey -p kr.co.vividnext.sodalive.debug -c android.intent.category.LAUNCHER 1, adb shell run-as kr.co.vividnext.sodalive.debug am start --user 0 -n kr.co.vividnext.sodalive.debug/kr.co.vividnext.sodalive.live.room.LiveRoomActivity --el roomId 1
    • 결과:
      • LiveRoomActivity.kt:637setOnTouchListener에서 view.performClick() 호출이 반영됐다.
      • lint-results-debug.txt에서 ClickableViewAccessibilityperformClick 관련 경고 매치를 찾지 못해 해당 경고가 재현되지 않았다.
      • :app:lintDebug는 기존 선행 이슈(AndroidManifest.xmlMissingClass, com.facebook.FacebookActivity)로 실패했으며 이번 수정 경고와는 별개였다.
      • ./gradlew :app:testDebugUnitTest :app:assembleDebugBUILD SUCCESSFUL로 통과했다.