# 20260319_라이브룸채팅얼림터치동작수정.md ## 개요 - `LiveRoomActivity`에서 비방장 청취자가 채팅 얼림 상태일 때 터치 시 경고 토스트가 안정적으로 노출되도록 보정한다. - `etChat.isEnabled = false`로 인해 터치 이벤트가 막히는 문제를 해결하고, 입력/전송 차단 정책은 유지한다. - `etChat.setOnTouchListener`의 `ClickableViewAccessibility` 경고가 표시되지 않도록 `performClick` 연계와 경고 억제를 반영한다. ## 완료 기준 (Acceptance Criteria) - [x] AC1: 비방장이 채팅 얼림 상태에서 `et_chat`을 터치하면 `screen_live_room_chat_freeze_warning` 토스트가 노출된다. - [x] AC2: 비방장 + 채팅 얼림 상태에서 실제 채팅 입력과 전송은 계속 차단된다. - [x] AC3: 방장 또는 비얼림 상태에서는 기존 입력 동작이 유지된다. - [x] AC4: 경고 문구(ClickableViewAccessibility)가 코드 경로에서 재현되지 않는다. - [x] AC5: 문자열 리소스는 기존 `screen_live_room_chat_freeze_warning`을 재사용한다. - [x] AC6: 수정 코드 컴파일/테스트가 성공한다. ## 구현 체크리스트 - [x] `LiveRoomActivity`의 입력 비활성/터치 처리 코드를 재확인한다. - [x] `etChat` 터치 토스트 경로를 입력창 자체 `OnTouchListener`로 보정한다. - [x] `etChat`은 enabled 유지 + focus/cursor 제어로 입력 차단을 유지한다. - [x] `MotionEvent.ACTION_UP`에서 `performClick` 호출을 추가해 접근성 경고 조건을 해소한다. - [x] `@SuppressLint("ClickableViewAccessibility")`를 `setupView`에 적용해 IDE/Lint 경고 노출을 억제한다. - [x] 검증 실행 결과를 문서 하단에 누적 기록한다. ## 영향 파일 - `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:assembleDebug`는 `BUILD 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=false`와 `ivSend.isEnabled=false`로 유지된다. - `./gradlew :app:testDebugUnitTest :app:assembleDebug`는 `BUILD 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:637`의 `setOnTouchListener`에서 `view.performClick()` 호출이 반영됐다. - `lint-results-debug.txt`에서 `ClickableViewAccessibility`와 `performClick` 관련 경고 매치를 찾지 못해 해당 경고가 재현되지 않았다. - `:app:lintDebug`는 기존 선행 이슈(`AndroidManifest.xml`의 `MissingClass`, `com.facebook.FacebookActivity`)로 실패했으며 이번 수정 경고와는 별개였다. - `./gradlew :app:testDebugUnitTest :app:assembleDebug`는 `BUILD SUCCESSFUL`로 통과했다.