docs(chat): 채팅 탭 리뷰 개선을 기록한다
This commit is contained in:
@@ -496,3 +496,4 @@
|
|||||||
- 2026-06-10: Phase 5 완료. Task 5.1에서 `bg_chat_direct_badge.xml`, `item_v2_chat_room.xml`을 생성하고 `strings.xml`/`values-en`/`values-ja`에 `screen_chat_direct_badge`, `screen_chat_filter_all/ai/dm` 문자열을 추가했다. `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 6s`로 통과했다. Task 5.2에서 `ChatRoomListAdapterTest`를 추가해 DM/AI badge visibility, name/lastMessage 표시, 시간 포맷 변환, item click listener, unread dot 부재를 검증했다. 최초 실행은 `ChatRoomListAdapter` 미구현으로 RED 실패를 확인했다. Task 5.3에서 `ChatRoomListAdapter`를 구현해 `loadUrl`, `formatChatRoomLastMessageTime`, `showDirectBadge` visibility를 연결했다. 최초 테스트 실행 시 `ImageLoaderProvider is not initialized` 예외가 발생해 테스트 `@Before`에서 `ImageLoaderProvider.init(context)`를 추가했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`는 `BUILD SUCCESSFUL in 8s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"`는 `BUILD SUCCESSFUL in 7s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 1m 15s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 3s`로 통과했다.
|
- 2026-06-10: Phase 5 완료. Task 5.1에서 `bg_chat_direct_badge.xml`, `item_v2_chat_room.xml`을 생성하고 `strings.xml`/`values-en`/`values-ja`에 `screen_chat_direct_badge`, `screen_chat_filter_all/ai/dm` 문자열을 추가했다. `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 6s`로 통과했다. Task 5.2에서 `ChatRoomListAdapterTest`를 추가해 DM/AI badge visibility, name/lastMessage 표시, 시간 포맷 변환, item click listener, unread dot 부재를 검증했다. 최초 실행은 `ChatRoomListAdapter` 미구현으로 RED 실패를 확인했다. Task 5.3에서 `ChatRoomListAdapter`를 구현해 `loadUrl`, `formatChatRoomLastMessageTime`, `showDirectBadge` visibility를 연결했다. 최초 테스트 실행 시 `ImageLoaderProvider is not initialized` 예외가 발생해 테스트 `@Before`에서 `ImageLoaderProvider.init(context)`를 추가했다. 수정 후 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`는 `BUILD SUCCESSFUL in 8s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"`는 `BUILD SUCCESSFUL in 7s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 1m 15s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 3s`로 통과했다.
|
||||||
- 2026-06-10: Phase 5 리뷰와 Figma `177:3469` 대조를 추가 수행했다. 기존 `dimens.xml`, `typography.xml`, `bg_character_chat_count_badge.xml`, `loadUrl`/Coil 원형 변환 패턴을 확인해 `item_v2_chat_room.xml`의 하드코딩 spacing/typography 일부를 기존 토큰으로 치환하고, `bg_chat_direct_badge.xml`의 `4dp` radius를 `@dimen/radius_4`로 변경했다. Figma 기준에 맞춰 item padding `14dp`, profile/body gap `14dp`, title/message gap `12dp`, Direct badge horizontal padding `4dp`, badge text `14sp`, time/body medium typography를 반영했으며, profile image는 기존 `loadUrl` builder에 `CircleCropTransformation()`을 적용하도록 수정했다. `ChatRoomListAdapterTest`는 시간 텍스트를 formatter 결과와 직접 비교하도록 강화하고, profile image 원형 변환 테스트를 추가했다. RED 확인으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`가 `Unresolved reference 'profileImageTransformations'`로 실패한 뒤 production 구현을 추가해 GREEN 전환했다. 리뷰 게이트에서는 AI row에서 Direct badge가 `GONE`일 때 title/time `24dp` gap이 사라질 수 있다는 차단 의견을 받아 `tv_name`에 `app:layout_goneMarginEnd="@dimen/spacing_24"`를 추가했고, 재리뷰에서 무조건 승인을 받았다. 최종 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`는 `BUILD SUCCESSFUL in 23s`, `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 15s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"`는 `BUILD SUCCESSFUL in 30s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 7s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 17s`로 통과했다. Gradle deprecation warning은 기존 경고로 남아 있다.
|
- 2026-06-10: Phase 5 리뷰와 Figma `177:3469` 대조를 추가 수행했다. 기존 `dimens.xml`, `typography.xml`, `bg_character_chat_count_badge.xml`, `loadUrl`/Coil 원형 변환 패턴을 확인해 `item_v2_chat_room.xml`의 하드코딩 spacing/typography 일부를 기존 토큰으로 치환하고, `bg_chat_direct_badge.xml`의 `4dp` radius를 `@dimen/radius_4`로 변경했다. Figma 기준에 맞춰 item padding `14dp`, profile/body gap `14dp`, title/message gap `12dp`, Direct badge horizontal padding `4dp`, badge text `14sp`, time/body medium typography를 반영했으며, profile image는 기존 `loadUrl` builder에 `CircleCropTransformation()`을 적용하도록 수정했다. `ChatRoomListAdapterTest`는 시간 텍스트를 formatter 결과와 직접 비교하도록 강화하고, profile image 원형 변환 테스트를 추가했다. RED 확인으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`가 `Unresolved reference 'profileImageTransformations'`로 실패한 뒤 production 구현을 추가해 GREEN 전환했다. 리뷰 게이트에서는 AI row에서 Direct badge가 `GONE`일 때 title/time `24dp` gap이 사라질 수 있다는 차단 의견을 받아 `tv_name`에 `app:layout_goneMarginEnd="@dimen/spacing_24"`를 추가했고, 재리뷰에서 무조건 승인을 받았다. 최종 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatRoomListAdapterTest"`는 `BUILD SUCCESSFUL in 23s`, `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 15s`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.*"`는 `BUILD SUCCESSFUL in 30s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 7s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 17s`로 통과했다. Gradle deprecation warning은 기존 경고로 남아 있다.
|
||||||
- 2026-06-10: Phase 6 완료. `ChatMainFragmentLayoutTest`를 추가해 기본 title bar의 `tv_title_bar_title`, `ll_title_bar_actions`, `iv_title_bar_menu` 유지와 chat fragment layout의 black root, title bar/capsule tab/RecyclerView/floating button 배치, bottom navigation/unread dot 부재를 검증했다. `CapsuleTabBarViewTest`를 추가해 selected tab은 `bg_capsule_tab_selected`와 black text, normal tab은 `bg_capsule_tab_normal`과 white text를 사용하는지 검증했다. 최초 RED 검증 시 Gradle 병렬/장시간 실행이 timeout 또는 사용자 중단되어 assertion 결과까지 확보하지 못했으나, 테스트 작성 시점의 기존 구현은 `ll_title_bar_actions`, `view_chat_filter_tabs`, floating button layout, selected black text가 없어 실패 조건이 명확했다. 이후 `view_title_bar_default.xml`에 `ll_title_bar_actions` container를 추가하고 기존 `iv_title_bar_menu`를 내부로 이동했으며, `fragment_v2_main_chat.xml`을 `ConstraintLayout` 기반 title bar/capsule tab/list/floating button 구조로 변경하고 `bg_chat_floating_button.xml`을 추가했다. `CapsuleTabBarView`는 selected text `R.color.black`, normal text `R.color.white`로 보정했다. 구현 후 최초 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest"`는 테스트 helper의 XML source 경로 문제로 `FileNotFoundException` 실패했고, repository/module 실행 위치 모두에서 동작하도록 helper를 수정한 뒤 같은 명령은 `BUILD SUCCESSFUL in 14s`로 통과했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.*CapsuleTab*"`는 중복 테스트 정리 후 `BUILD SUCCESSFUL in 10s`, `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 1s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 1s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 3s`로 통과했다. ktlint의 `.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 남아 있다. Phase 6 리뷰 게이트는 `UNCONDITIONAL APPROVAL`을 받았다.
|
- 2026-06-10: Phase 6 완료. `ChatMainFragmentLayoutTest`를 추가해 기본 title bar의 `tv_title_bar_title`, `ll_title_bar_actions`, `iv_title_bar_menu` 유지와 chat fragment layout의 black root, title bar/capsule tab/RecyclerView/floating button 배치, bottom navigation/unread dot 부재를 검증했다. `CapsuleTabBarViewTest`를 추가해 selected tab은 `bg_capsule_tab_selected`와 black text, normal tab은 `bg_capsule_tab_normal`과 white text를 사용하는지 검증했다. 최초 RED 검증 시 Gradle 병렬/장시간 실행이 timeout 또는 사용자 중단되어 assertion 결과까지 확보하지 못했으나, 테스트 작성 시점의 기존 구현은 `ll_title_bar_actions`, `view_chat_filter_tabs`, floating button layout, selected black text가 없어 실패 조건이 명확했다. 이후 `view_title_bar_default.xml`에 `ll_title_bar_actions` container를 추가하고 기존 `iv_title_bar_menu`를 내부로 이동했으며, `fragment_v2_main_chat.xml`을 `ConstraintLayout` 기반 title bar/capsule tab/list/floating button 구조로 변경하고 `bg_chat_floating_button.xml`을 추가했다. `CapsuleTabBarView`는 selected text `R.color.black`, normal text `R.color.white`로 보정했다. 구현 후 최초 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest"`는 테스트 helper의 XML source 경로 문제로 `FileNotFoundException` 실패했고, repository/module 실행 위치 모두에서 동작하도록 helper를 수정한 뒤 같은 명령은 `BUILD SUCCESSFUL in 14s`로 통과했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.widget.*CapsuleTab*"`는 중복 테스트 정리 후 `BUILD SUCCESSFUL in 10s`, `./gradlew :app:mergeDebugResources`는 `BUILD SUCCESSFUL in 1s`, `./gradlew :app:compileDebugKotlin`은 `BUILD SUCCESSFUL in 1s`, `./gradlew :app:ktlintCheck`는 `BUILD SUCCESSFUL in 3s`로 통과했다. ktlint의 `.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 남아 있다. Phase 6 리뷰 게이트는 `UNCONDITIONAL APPROVAL`을 받았다.
|
||||||
|
- 2026-06-10: Phase 6 코드리뷰 경미 개선안 반영. (1) `btn_chat_floating`의 `contentDescription`을 `@null`에서 신규 string `screen_chat_floating_button`(values/values-en/values-ja)으로 교체해 접근성/의도를 명시했다. (2) `ChatMainFragmentLayoutTest`의 기본 title bar 테스트가 `tv_title_bar_title`이 title bar 직속이며 `ll_title_bar_actions`보다 앞 index임을 검증하도록 강화했다. (3) unread 부재 검증을 XML 파일 텍스트 파싱(`chatMainLayoutSource()`)에서 inflated view-tree id 순회(`containsViewIdContaining("unread")`)로 교체하고 미사용 `assertNotNull` import를 제거했다. 환경에 동작 가능한 JDK(`/usr/bin/java`는 스텁)가 없어 Gradle 테스트/빌드 실행은 불가했고, 대신 IDE lint로 `ChatMainFragmentLayoutTest.kt`, `fragment_v2_main_chat.xml`, `values/strings.xml`에서 오류 없음을 확인했다. (후속: JDK 사용 가능 환경에서 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragmentLayoutTest"`, `:app:mergeDebugResources`, `:app:ktlintCheck` 재실행 필요.)
|
||||||
|
|||||||
Reference in New Issue
Block a user