# 라이브룸 UI 미갱신 버그 수정 ## 현상 - 라이브 입장 후 공지, 메뉴판 터치 시 UI가 보이지 않음 - 상대방 채팅이 화면에 갱신되지 않음 - 방장이 아닌 유저에게서 두드러지게 나타남 - 키보드가 올라오거나 화면에 변화가 생기면 모든 것이 해결됨 ## 원인 분석 - `BaseActivity`에서 `WindowCompat.setDecorFitsSystemWindows(window, false)` (edge-to-edge) 적용 - `LiveRoomActivity`의 manifest에 `adjustPan` 설정과 edge-to-edge가 충돌 - `adjustPan`은 시스템이 창을 pan 하려 하지만, edge-to-edge 모드에서는 앱이 insets을 직접 처리 - 이 충돌로 DecorView 내부 스크롤 트래킹 상태가 불일치하여 `invalidate()` 더티 영역 계산 오류 발생 - 키보드가 올라가면 시스템이 WindowInsets를 재분배하고, `OnApplyWindowInsetsListener`에서 `setPadding()` 호출 → `requestLayout()` → 전체 레이아웃 패스가 강제 수행되어 해결됨 ## 수정 방법 - RTM과 RTC가 모두 연결 완료된 시점에 키보드를 프로그래밍적으로 올렸다 내려 레이아웃을 강제 갱신 - `isRtcJoined`, `isRtmJoined` 플래그로 두 연결 상태를 추적 - 두 플래그가 모두 true가 되면 `tryForceLayoutRefresh()`를 호출 ### 눈속임 처리 (사용자에게 변화가 보이지 않도록) 1. 로딩 다이얼로그가 화면을 덮고 있는 동안 키보드 트릭을 수행 2. `adjustNothing`으로 임시 전환하여 키보드가 화면을 밀어올리지 않도록 방지 3. 키보드 show → 200ms 후 hide → `adjustPan` 복원 → 로딩 다이얼로그 dismiss 4. RTM 콜백의 `loadingDialog.dismiss()`를 `tryForceLayoutRefresh()` 내부로 이동 ## 수정 계획 - [x] `isRtcJoined`, `isRtmJoined` 플래그 추가 - [x] `onJoinChannelSuccess`에서 `isRtcJoined = true` 설정 및 `tryForceLayoutRefresh()` 호출 - [x] RTM 성공 콜백에서 `isRtmJoined = true` 설정 및 `tryForceLayoutRefresh()` 호출 - [x] `tryForceLayoutRefresh()` 메서드 구현 - [x] adjustNothing 임시 전환으로 화면 이동 방지 - [x] 로딩 다이얼로그 뒤에서 키보드 트릭 수행 - [x] 완료 후 adjustPan 복원 및 로딩 다이얼로그 dismiss - [x] Boolean 반환으로 RTM 콜백에서 fallback dismiss 처리 - [x] 빌드 검증 ## 검증 기록 ### 2026-03-29 빌드 검증 (1차 - adjustNothing 방식) - 명령: `./gradlew :app:assembleDebug` - 결과: BUILD SUCCESSFUL (16s, 46 tasks) - 변경 파일: `AndroidManifest.xml` (adjustPan→adjustNothing), `LiveRoomActivity.kt` (API S→R) - 비고: 실기기에서 효과 없음 → 되돌림 ### 2026-03-29 빌드 검증 (2차 - 키보드 강제 갱신 방식) - 명령: `./gradlew :app:assembleDebug` - 결과: BUILD SUCCESSFUL (21s, 46 tasks) - 변경 파일: `LiveRoomActivity.kt` (RTM/RTC 연결 완료 후 키보드 올렸다 내리기) - 비고: 키보드가 화면을 위로 밀어올리는 것이 사용자에게 보임 → 눈속임 개선 필요 ### 2026-03-29 빌드 검증 (3차 - 눈속임 개선) - 명령: `./gradlew :app:assembleDebug` - 결과: BUILD SUCCESSFUL (18s, 46 tasks) - 변경 파일: `LiveRoomActivity.kt` - 방식: adjustNothing 임시 전환 + 로딩 다이얼로그 뒤에서 키보드 트릭 수행