docs(chat): 타이틀바 액션 간격 검증을 기록한다

This commit is contained in:
2026-06-10 15:20:33 +09:00
parent ccc4a822e3
commit 40f8355037
2 changed files with 37 additions and 19 deletions

View File

@@ -425,9 +425,37 @@
---
### Phase 8: 통합 검증과 문서 기록
### Phase 8: 탭 전환 및 첫 페이지 로딩 시 스크롤 최상단 이동 처리
- [ ] **Task 8.1: 리소스/컴파일 검증**
- [x] **Task 8.1: 스크롤 최상단 이동 기능 검증을 위한 RED 테스트 작성**
- `ChatMainFragmentLayoutTest.kt`에 탭 전환 시 및 첫 번째 페이지 로드 시 RecyclerView의 scrollToPosition(0)이 호출되는지 검증하는 테스트 코드를 추가한다.
- run_test로 검증하여 RED 상태를 확인한다.
- [x] **Task 8.2: ChatMainFragment.kt의 탭 전환 및 첫 페이지 로딩 시 스크롤 최상단 이동 구현**
- `setOnTabSelectedListener` 내부와 `bindViewModel``ChatRoomListUiState.Content` (isAppending = false인 경우)에 `scrollToPosition(0)` 또는 적절한 스크롤 탑 이동 처리를 추가한다.
- run_test를 실행해 정상적으로 PASS(GREEN)하는지 확인한다.
- [x] **Task 8.3: 전체 통합 테스트 검증 및 ktlint 검사**
- `:app:mergeDebugResources`, `:app:compileDebugKotlin`, `:app:ktlintCheck` 및 전체 테스트를 돌려 이상이 없는지 검증한다.
- [x] **Task 8.4: 최종 Verification Log 작성 및 제출**
- 작업 결과를 plan-task.md 및 prd.md에 기록한다.
---
### Phase 9: 채팅 타이틀바 우측 액션 메뉴 이미지 간격 조정
- [x] **Task 9.1: dimens 리소스 및 타이틀바 구조 분석**
- `dimens.xml``spacing_14` 리소스 확인 및 `ChatMainFragment.kt``setupTitleBar()`에 있는 동적 아이콘 추가 코드 구조 분석.
- [x] **Task 9.2: 타이틀바 우측 액션 메뉴 이미지 마진 적용**
- `ChatMainFragment.kt``setupTitleBar()`에서 검색 `ImageView`를 추가할 때 `LinearLayout.LayoutParams`를 생성하여 `marginStart` 값을 `@dimen/spacing_14`로 동적으로 세팅.
- [x] **Task 9.3: Layout 유닛 테스트 검증**
- `ChatMainFragmentLayoutTest.kt``LinearLayout.LayoutParams` 사용 및 `marginStart = resources.getDimensionPixelSize(R.dimen.spacing_14)` 설정 여부를 확인하는 유닛 테스트 추가 및 run_test 수행.
- [x] **Task 9.4: 최종 Verification Log 작성 및 제출**
- 작업 결과를 plan-task.md 및 prd.md에 기록하고 검증 기록 누적.
---
### Phase 10: 통합 검증과 문서 기록
- [ ] **Task 10.1: 리소스/컴파일 검증**
- 실행:
- `./gradlew :app:mergeDebugResources`
- `./gradlew :app:compileDebugKotlin`
@@ -435,7 +463,7 @@
- 모든 신규 layout/drawable/string/binding 생성 성공
- Kotlin compile 성공
- [ ] **Task 8.2: 단위 테스트 검증**
- [ ] **Task 10.2: 단위 테스트 검증**
- 실행:
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"`
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.*CapsuleTab*"`
@@ -443,11 +471,11 @@
- 채팅 탭 filter/formatter/mapper/ViewModel/Adapter/Layout 테스트 통과
- CapsuleTab 기존 테스트와 색상 보정 테스트 통과
- [ ] **Task 8.3: ktlint 검증**
- [ ] **Task 10.3: ktlint 검증**
- 실행: `./gradlew :app:ktlintCheck`
- 기대 결과: ktlint error 없음
- [ ] **Task 8.4: 검증 기록 누적**
- [ ] **Task 10.4: 검증 기록 누적**
- Modify: `docs/20260609_채팅_탭_페이지/plan-task.md`
- Modify: `docs/20260609_채팅_탭_페이지/prd.md`
- 기록:
@@ -504,18 +532,7 @@
- 2026-06-10: Phase 7 코드리뷰 및 통합 검증을 완료했다. `CapsuleTabBarView.kt`에서 `ViewGroup` 임포트 누락 및 `LayoutParams.WRAP_CONTENT` 오분석에 따른 빌드 에러를 수정(`ViewGroup.LayoutParams.WRAP_CONTENT`로 명시적 선언 및 임포트 추가)하였으며, 이후 `run_test`를 통해 `widget``main.chat` 관련 211개 유닛 테스트가 모두 성공적으로(GREEN) 작동함을 확인했다. 전체적인 Phase 7의 코드 구성(ChatMainFragment, 뷰 바인딩, 페이지네이션 롤링 스크롤, AI 룸 클릭 액션)이 설계 명세 및 Figma 가이드라인에 완벽히 부합함을 검증했다.
- 2026-06-10: CapsuleTabBarView의 탭 전환 시 또는 첫 번째 페이지 로드 시(isAppending = false) RecyclerView의 스크롤을 최상단(position 0)으로 이동시키는 추가 요구사항에 맞춰 Plan-Task에 Phase 9를 신설하고 구현 및 검증을 마쳤다.
- 2026-06-10: Phase 9의 Task 9.1(RED 테스트), Task 9.2(최상단 스크롤 구현), Task 9.3(통합 유닛 테스트)을 완료했다. 탭 전환 시 `binding.rvChatRooms.scrollToPosition(0)`이 실행되고, `bindViewModel`에서 첫 페이지 로딩 시(`!state.isAppending`) 동일하게 `scrollToPosition(0)`이 정상 호출되는지 유닛 테스트로 검증하여 GREEN 상태로 통과시켰다.
- 2026-06-10: 채팅 타이틀바 우측 액션 메뉴 이미지 간격 조정 요구사항을 해결하기 위해 Plan-Task에 Phase 10을 신설하고 구현 및 검증을 마쳤다. `dimens.xml`에 정의된 `@dimen/spacing_14` 리소스를 적용하여 하드코딩 없이 간격을 14dp로 안전하게 맞췄으며, `ChatMainFragmentLayoutTest.kt` 유닛 테스트를 업데이트하여 검증을 통과시켰다.
- 2026-06-10: 사용자 피드백에 따라 통합 검증 Phase가 마지막에 오도록 Plan-Task 순서를 정리했다. 기존 Phase 9(탭 전환/첫 페이지 로딩 시 스크롤 최상단 이동 처리)를 Phase 8로, 기존 Phase 10(채팅 타이틀바 우측 액션 메뉴 이미지 간격 조정)을 Phase 9로 한 단계씩 당기고, 기존 Phase 8(통합 검증과 문서 기록)을 마지막 Phase 10으로 이동했다. 문서 순서 정정만 수행했으며 빌드/테스트는 실행하지 않았다.
---
### Phase 9: 탭 전환 및 첫 페이지 로딩 시 스크롤 최상단 이동 처리
- [x] **Task 9.1: 스크롤 최상단 이동 기능 검증을 위한 RED 테스트 작성**
- `ChatMainFragmentLayoutTest.kt`에 탭 전환 시 및 첫 번째 페이지 로드 시 RecyclerView의 scrollToPosition(0)이 호출되는지 검증하는 테스트 코드를 추가한다.
- run_test로 검증하여 RED 상태를 확인한다.
- [x] **Task 9.2: ChatMainFragment.kt의 탭 전환 및 첫 페이지 로딩 시 스크롤 최상단 이동 구현**
- `setOnTabSelectedListener` 내부와 `bindViewModel``ChatRoomListUiState.Content` (isAppending = false인 경우)에 `scrollToPosition(0)` 또는 적절한 스크롤 탑 이동 처리를 추가한다.
- run_test를 실행해 정상적으로 PASS(GREEN)하는지 확인한다.
- [x] **Task 9.3: 전체 통합 테스트 검증 및 ktlint 검사**
- `:app:mergeDebugResources`, `:app:compileDebugKotlin`, `:app:ktlintCheck` 및 전체 테스트를 돌려 이상이 없는지 검증한다.
- [x] **Task 9.4: 최종 Verification Log 작성 및 제출**
- 작업 결과를 plan-task.md 및 prd.md에 기록한다.

View File

@@ -56,7 +56,7 @@
#### Requirements
- 전체 배경은 `@color/black`을 사용한다.
- 상단에는 높이 `60dp` 수준의 타이틀바를 배치하고 제목은 `대화`로 표시한다.
- 타이틀바 우측에는 기존 `ic_bar_cash`, `ic_bar_search` 리소스를 재사용한다.
- 타이틀바 우측에는 기존 `ic_bar_cash`, `ic_bar_search` 리소스를 재사용한다. 우측 상단의 action menu 이미지 사이 간격을 14dp로 지정하며, dimens에 정의되어 있는 값(`@dimen/spacing_14`)이 있으면 하드코딩 하지 않고 dimens의 값을 가져다가 설정한다. 타 화면 공통 컴포넌트 마크업 훼손을 피하기 위해 코드단(`ChatMainFragment.kt` 내)에서 동적으로 LayoutParams 마진을 부여한다.
- Figma의 하단 nav는 `MainV2Activity`의 기존 `BottomNavigationView`가 담당하므로 Fragment layout에는 포함하지 않는다.
- content 영역은 타이틀바 아래 필터 탭과 채팅방 목록으로 구성한다.
- 플로팅 액션 버튼은 우측 하단, 하단 내비게이션과 겹치지 않는 위치에 표시한다.
@@ -260,3 +260,4 @@ data class ChatRoomListItemResponse(
- 2026-06-09: 사용자 피드백에 따라 채팅 전용 `view_title_bar_chat.xml` 신규 생성을 제외하고, 기존 `view_title_bar_default.xml`의 우측 아이콘 영역을 가변 개수로 확장해 재사용하는 방향으로 위젯 분류를 갱신했다.
- 2026-06-10: Phase 6에서 채팅 탭 layout 골격과 CapsuleTab selected 색상 보정을 구현했다. 기존 `view_title_bar_default.xml``ll_title_bar_actions`를 추가해 우측 action icon을 가변으로 담을 수 있게 했고, `fragment_v2_main_chat.xml`은 black `ConstraintLayout` root 아래 title bar, `view_capsule_tab_bar`, `rv_chat_rooms`, `btn_chat_floating`만 포함하도록 구성했다. floating button은 `bg_chat_floating_button.xml``soda_400` 원형 배경과 기존 `ic_plus_no_bg`를 사용하며 클릭 동작은 추가하지 않았다. `CapsuleTabBarView`는 PRD 요구대로 selected tab black text, normal tab white text를 사용하도록 수정했다. 검증으로 `ChatMainFragmentLayoutTest`, `CapsuleTabBarViewTest`를 추가했고 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.*CapsuleTab*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`가 모두 `BUILD SUCCESSFUL`로 통과했다. Phase 7 범위인 `ChatMainFragment` 동작 연결, 실제 title/icon 세팅, filter listener, navigation/click action은 구현하지 않았다.
- 2026-06-10: CapsuleTabBarView의 탭 전환 시 또는 첫 번째 페이지 로드 시(isAppending = false) RecyclerView의 스크롤을 최상단(position 0)으로 이동시키는 추가 요구사항을 수렴하고, 기존 PRD와 Plan-Task 문서를 갱신한 뒤 구현 및 검증을 완료했다.
- 2026-06-10: 채팅 타이틀바 우측 액션 메뉴 이미지 간의 간격을 14dp로 조정하는 요구사항을 반영했습니다. `dimens.xml`에 정의된 `@dimen/spacing_14` 리소스를 사용하여 하드코딩 없이 안전하게 `ChatMainFragment.kt`의 코드단에서 동적으로 LayoutParams를 통해 `marginStart` 값을 적용했습니다. 검증을 위한 `ChatMainFragmentLayoutTest.kt`도 업데이트하고 테스트 통과를 완료했습니다.