From 66116351c21952d03984f4882cc3aa7f917b0909 Mon Sep 17 00:00:00 2001 From: klaus Date: Fri, 26 Jun 2026 15:43:30 +0900 Subject: [PATCH] =?UTF-8?q?docs(home):=20=ED=8C=94=EB=A1=9C=EC=9E=89=20?= =?UTF-8?q?=ED=83=AD=20=ED=9B=84=EC=86=8D=20=EA=B2=80=EC=A6=9D=EC=9D=84=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260625_메인_홈_팔로잉_탭/plan-task.md | 79 ++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md index e743f747..6dd6c27f 100644 --- a/docs/20260625_메인_홈_팔로잉_탭/plan-task.md +++ b/docs/20260625_메인_홈_팔로잉_탭/plan-task.md @@ -439,6 +439,80 @@ - 더보기 chevron 터치 시 앱이 크래시하지 않고 화면 이동은 발생하지 않는다. - 검증 기록: - 2026-06-25 Figma `24:5682` 디자인 컨텍스트와 스크린샷 기준 정적 대조를 수행했다. 실제 기기/에뮬레이터에서의 수동 화면 확인은 아직 실행하지 않았다. + - 2026-06-25 Phase 5 진행: Figma `24:5682` 스크린샷과 `fragment_v2_main_home.xml`, `HomeMainFragment.kt`를 대조했다. 팔로잉 탭 전용 `nsv_home_following_content`가 title bar/tab bar 아래 별도 scroll surface로 배치되어 있고, 팔로잉 선택 시 추천/랭킹 surface를 숨기는 분기, 섹션 순서, empty/login-required 섹션 숨김, 더보기 chevron no-op callback 연결을 정적으로 확인했다. + - 2026-06-25 Phase 5 진행: 실제 기기 검증을 위해 `adb devices`에서 `2cec640c34017ece` 연결을 확인한 뒤 `./gradlew :app:installDebug`를 실행했으나, 설치 중 디바이스 연결이 해제되어 `device '2cec640c34017ece' not found`로 실패했다. 재확인 시 `adb devices`에 연결된 디바이스가 없어 실제 화면 수동 확인은 blocked 상태로 남긴다. + +--- + +### Phase 6: Figma 디자인 재대조 후속 수정 + +- [x] **Task 6.1: 디자인 불일치 RED 테스트 추가** + - 수정: + - `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt` + - 작업: + - 팔로잉 크리에이터 섹션에 header include가 없는지 검증한다. + - 최근 대화 RecyclerView가 horizontal인지 검증한다. + - 최근 대화 item이 Figma box 카드 폭/프로필/Direct badge/상대시간 바인딩을 갖는지 검증한다. + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` + - Expected: 구현 전 RED 실패. + - Result: RED 확인. 팔로잉 크리에이터 header 제거, 최근 대화 horizontal box list, 최근 대화 Figma box field 검증 3개가 현재 구현과 맞지 않아 실패했다. + +- [x] **Task 6.2: 팔로잉 크리에이터와 최근 대화 UI 수정** + - 수정: + - `app/src/main/res/layout/fragment_v2_main_home.xml` + - `app/src/main/res/layout/item_home_following_creator.xml` + - `app/src/main/res/layout/item_home_following_chat.xml` + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingChatAdapter.kt` + - 작업: + - 팔로잉 크리에이터 section header를 제거한다. + - 팔로잉 크리에이터 profile item을 Figma의 simple profile 크기에 맞춘다. + - 최근 대화 RecyclerView를 horizontal로 변경한다. + - 최근 대화 item을 Figma의 box card 형태로 조정하고 Direct badge와 상대시간 표시를 유지한다. + - 최근 대화 시간은 기존 `formatChatRoomLastMessageTime()`을 유지해 server ISO 시간을 디바이스 timezone 기준 상대시간/날짜로 표시한다. + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` + - Expected: PASS. + - Result: PASS. 팔로잉 크리에이터 header 제거, 75dp simple profile item, 최근 대화 horizontal box list, Direct badge/상대시간 바인딩이 source test로 검증됐다. + +- [x] **Task 6.3: 후속 변경 통합 검증** + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` + - Expected: 팔로잉 관련 local unit/source test가 모두 PASS. + - Run: `./gradlew :app:mergeDebugResources` + - Expected: layout/resource merge PASS. + - Run: `./gradlew :app:compileDebugKotlin` + - Expected: Kotlin compile PASS. + - Run: `./gradlew :app:ktlintCheck` + - Expected: ktlint PASS. + - Run: `git diff --check` + - Expected: whitespace error 없음. + - 검증 기록: + - 2026-06-26 후속 변경 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` 최초 병렬 실행 중 `HomeFollowingViewModelTest.blank token이면 repository에 null auth header를 전달한다` 1건이 실패했으나, 동일 테스트 단독 재실행과 전체 팔로잉 테스트 단독 재실행은 모두 PASS했다. 실패는 `SharedPreferenceManager` 전역 상태를 쓰는 테스트의 병렬 Gradle 실행 간섭으로 판단했다. + - 2026-06-26 후속 변경 검증: `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. + - 2026-06-26 실제 표면 검증: `adb devices`에서 `2cec640c34017ece` 연결을 확인했고, `./gradlew :app:installDebug`로 `kr.co.vividnext.sodalive.debug` 설치 PASS. `adb shell monkey -p kr.co.vividnext.sodalive.debug -c android.intent.category.LAUNCHER 1`로 런처 실행 PASS. 팔로잉 탭 내부 API 데이터 기반 화면 대조는 자동 조작/테스트 계정 상태가 없어 정적 source test와 설치/실행 검증으로 대체했다. + - 2026-06-26 리뷰 지적 수정: 최근 대화 adapter가 XML `284dp` 폭을 런타임 `MATCH_PARENT`로 덮는 문제를 확인했다. `HomeFollowingFragmentSourceTest.following recent chat item matches figma box fields`에 RED 검증을 추가했고, `HomeFollowingChatAdapter`를 `recyclerItemLayoutParams(parent)` 사용으로 변경해 XML 폭을 유지했다. 해당 테스트 재실행 PASS. + - 2026-06-26 테스트 안정화: `SharedPreferenceManager.resetForTest()`가 DataStore 저장값을 지우지 않아 `HomeFollowingViewModelTest` 묶음 실행 시 token이 이전 값으로 복원될 수 있음을 확인했다. 테스트 `setUp()`의 시작 token을 빈 값으로 명시해 테스트 격리를 보강했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"` 재실행 PASS. + - 2026-06-26 후속 요청 반영: 최근 대화 item의 대화 내용 표시를 한 줄로 제한하고 `ellipsize="end"`를 유지했다. `HomeFollowingFragmentSourceTest.following recent chat item matches figma box fields`에 `maxLines="1"`/ellipsis 검증을 추가해 RED 확인 후 GREEN 전환했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest.following recent chat item matches figma box fields"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `git diff --check` 모두 PASS. + +- [x] **Task 6.4: 최근 소식 Feed 위젯 재사용과 chevron 후속 수정** + - 수정: + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/ui/HomeFollowingNewsAdapter.kt` + - `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt` + - `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeFollowingFragmentSourceTest.kt` + - 작업: + - 최근 소식 section title의 chevron을 표시하지 않는다. + - `COMMUNITY_POST` 최근 소식은 기존 `v2.widget.feed.FeedCommunityView`와 `view_feed_community.xml`을 재사용한다. + - ranking 최근 소식은 기존 `v2.widget.feed.FeedRankView`와 `view_feed_rank.xml`을 재사용한다. + - 오디오/화보 content 최근 소식은 기존 `v2.widget.feed.FeedContentView`와 `view_feed_content.xml`을 재사용한다. + - 최근 소식 API에 없는 댓글 수, 좋아요 수, 잠금/오너 액션 값은 임의 생성하지 않고 현재 모델 범위에서 0 또는 빈 값으로 둔다. + - 검증: + - Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"` + - Expected: PASS. + - 검증 기록: + - 2026-06-26 최근 소식 후속 수정: 먼저 `HomeFollowingFragmentSourceTest`에 최근 소식 chevron 제거와 Feed 위젯 재사용 검증을 추가해 RED를 확인했다. 이후 `HomeMainFragment`에서 최근 소식 `showMore = true`와 chevron listener를 제거했고, `HomeFollowingNewsAdapter`가 `COMMUNITY_POST`는 `FeedCommunityView`, ranking은 `FeedRankView`, audio/photo content는 `FeedContentView`를 inflate/bind하도록 변경했다. + - 2026-06-26 최근 소식 후속 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. --- @@ -447,3 +521,8 @@ - 2026-06-25 Phase 1-3 코드 리뷰 및 재검증: blocking finding 없음. `./gradlew :app:mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했고, 나머지 검증 명령도 PASS. - 2026-06-25 Phase 4 코드 리뷰 및 검증: Figma `24:5682` 기준 UI 필드 바인딩 누락을 보완했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. - 2026-06-25 Phase 4 재코드 리뷰 및 검증: blocking finding 없음. Figma `24:5682` 디자인 컨텍스트/스크린샷과 현재 Phase 4 변경을 정적 대조했고, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `mergeDebugResources`는 최초 sandbox lock 권한 오류 후 승인 실행으로 PASS했다. +- 2026-06-25 Phase 5 진행 검증: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `./gradlew :app:installDebug`는 실행 중 Android 디바이스 연결 해제로 실패했고, 재확인 시 연결된 디바이스가 없어 실제 화면 수동 확인은 blocked 상태다. +- 2026-06-26 Phase 6 후속 디자인 수정 검증: Figma `24:5682` 기준 팔로잉 크리에이터 header 제거, 최근 대화 horizontal box list, Direct badge/상대시간 표시를 RED 테스트로 고정한 뒤 GREEN 확인했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`, `./gradlew :app:installDebug`, `adb shell monkey -p kr.co.vividnext.sodalive.debug -c android.intent.category.LAUNCHER 1` 모두 PASS. +- 2026-06-26 Phase 6 리뷰 지적 후 재검증: 최근 대화 item 폭 override를 제거하고 source test를 보강했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest.following recent chat item matches figma box fields"`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.*Following*"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`, `./gradlew :app:installDebug` 모두 PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다. +- 2026-06-26 최근 대화 한 줄 제한 후속 검증: `item_home_following_chat.xml`의 `tv_home_following_chat_message`를 `maxLines="1"`로 변경하고 기존 `ellipsize="end"`를 유지했다. RED/GREEN source test, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `git diff --check` 모두 PASS. +- 2026-06-26 최근 소식 Feed 위젯 재사용 후속 검증: 최근 소식 chevron 제거와 `FeedCommunityView`/`FeedRankView`/`FeedContentView` 재사용을 source test로 고정했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeFollowingFragmentSourceTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check` 모두 PASS. `ktlintCheck`에서는 기존 `.editorconfig disabled_rules` deprecation warning만 출력됐다.