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

71 lines
6.3 KiB
Markdown

# 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`로 통과했다.