docs(channel): 탭 전환 스크롤 요구사항을 기록한다
This commit is contained in:
@@ -1567,6 +1567,58 @@
|
||||
|
||||
---
|
||||
|
||||
### Phase 18: 탭 전환 자동 스크롤 제거
|
||||
|
||||
- [x] **Task 18.1: 탭 전환 scroll 보정 제거 RED 테스트 작성**
|
||||
- 수정:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
|
||||
- 작업:
|
||||
- 기존 `탭 전환은 sticky tabbar anchor 아래로 내려간 scroll 위치를 되돌리지 않고 부족할 때만 보정한다` source 계약을 변경한다.
|
||||
- 새 source 계약은 `onPageSelected(position)`에서 `adjustCreatorChannelStickyAnchorOnTabSelected(position)`를 호출하지 않는지 검증한다.
|
||||
- 새 source 계약은 `private fun adjustCreatorChannelStickyAnchorOnTabSelected(position: Int)`와 탭 전환용 `binding.nestedScrollView.scrollTo(0, stickyScrollY)` 보정이 제거되는지 검증한다.
|
||||
- 동시에 `updateOwnerFabVisibility()`, `updateDonationFloatingButtonVisibility()`, `updateOwnerCtaVisibility()`, `updateCreatorChannelTabViewportHeight()`, `updateViewPagerHeight()` 호출은 유지되는지 검증한다.
|
||||
- 검증:
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
|
||||
- 기대 결과:
|
||||
- production 변경 전에는 탭 전환 scroll 보정 함수와 호출이 남아 있어 RED 실패한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-27: `CreatorChannelActivitySourceTest`의 기존 탭 전환 보정 source 계약을 `탭 전환은 공통 scroll 위치를 자동 보정하지 않는다`로 변경했다. production 변경 전 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.탭 전환은 공통 scroll 위치를 자동 보정하지 않는다"`를 실행해 `CreatorChannelActivitySourceTest.kt:1164`에서 기존 `lastSelectedCreatorChannelTabPosition` 상태가 남아 있어 RED 실패함을 확인했다.
|
||||
|
||||
- [x] **Task 18.2: `CreatorChannelActivity` 탭 전환 자동 스크롤 제거**
|
||||
- 수정:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivity.kt`
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/creator/channel/CreatorChannelActivitySourceTest.kt`
|
||||
- 작업:
|
||||
- `onPageSelected(position)`에서 `adjustCreatorChannelStickyAnchorOnTabSelected(position)` 호출을 제거한다.
|
||||
- `adjustCreatorChannelStickyAnchorOnTabSelected(position)` 함수와 해당 함수만을 위한 `lastSelectedCreatorChannelTabPosition` 상태를 제거한다.
|
||||
- 탭 전환 시 `binding.nestedScrollView.scrollTo(0, stickyScrollY)` 또는 `smoothScrollTo`를 새로 추가하지 않는다.
|
||||
- 기존 sticky title-bar/tab-bar 계산에 필요한 `calculateCreatorChannelStickyScrollY()`는 `calculateCreatorChannelTabEmptyMinHeight()` 등 다른 경로에서 사용 중이면 유지한다.
|
||||
- owner FAB/CTA 표시 갱신, 탭별 최초 로드 callback, ViewPager 높이 갱신, load-more viewport 계산은 기존 호출 순서를 유지한다.
|
||||
- 검증:
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`
|
||||
- `./gradlew :app:compileDebugKotlin`
|
||||
- `git diff --check`
|
||||
- 기대 결과:
|
||||
- focused source test와 Kotlin compile이 통과한다.
|
||||
- diff에 탭 전환 자동 scroll 제거 외 불필요한 refactor가 포함되지 않는다.
|
||||
- 검증 기록:
|
||||
- 2026-06-27: `CreatorChannelActivity.kt`에서 `onPageSelected(position)`의 `adjustCreatorChannelStickyAnchorOnTabSelected(position)` 호출, `adjustCreatorChannelStickyAnchorOnTabSelected(position)` 함수, 해당 함수 전용 상태 `lastSelectedCreatorChannelTabPosition`을 제거했다. `calculateCreatorChannelStickyScrollY()`는 `calculateCreatorChannelTabEmptyMinHeight()`에서 계속 사용하므로 유지했다. 구현 후 focused GREEN으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest.탭 전환은 공통 scroll 위치를 자동 보정하지 않는다"`가 `BUILD SUCCESSFUL`로 PASS했다.
|
||||
- 2026-06-27 코드 리뷰: diff를 재확인해 `CreatorChannelActivity.kt` 변경이 탭 전환 scroll 보정 제거와 해당 상태 제거에 한정되어 있고, `onPageSelected(position)`의 owner FAB/후원 floating button/owner CTA/탭 viewport/ViewPager 높이 갱신 및 탭별 selected callback 호출은 유지됨을 확인했다. 추가 수정이 필요한 finding은 발견하지 못했다.
|
||||
|
||||
- [x] **Task 18.3: 탭 전환 수동 동작 확인**
|
||||
- 확인:
|
||||
- 크리에이터 채널 진입 후 header 상단 위치에서 다른 탭을 선택해도 화면이 자동으로 sticky tab-bar 위치까지 내려가지 않는다.
|
||||
- sticky tab-bar anchor 이전 위치에서 다른 탭을 선택해도 현재 scroll 위치가 유지된다.
|
||||
- sticky tab-bar anchor 이후 또는 목록 하단 근처에서 다른 탭을 선택해도 최상단으로 되돌아가지 않는다.
|
||||
- 탭 전환 후 각 탭의 최초 로드, empty 최소 높이, pagination bottom 감지는 기존처럼 동작한다.
|
||||
- 기대 결과:
|
||||
- 탭 이동만으로 scroll 위치가 바뀌지 않고, 컨텐츠 확인을 위한 이동은 사용자 직접 스크롤로만 발생한다.
|
||||
- 연결된 device/emulator가 없어 수동 확인하지 못하면 `adb devices` 결과와 함께 차단 기록을 남긴다.
|
||||
- 검증 기록:
|
||||
- 2026-06-27: source 계약과 production diff 기준으로 탭 클릭/`ViewPager2` page selected 경로에서 `scrollTo(0, stickyScrollY)`/`smoothScrollTo(0, stickyScrollY)` 보정이 제거되었고, owner FAB/후원 floating button/owner CTA/탭 viewport/ViewPager 높이 갱신 호출은 유지됨을 확인했다. `adb devices`에서 `2cec640c34017ece device` 연결을 확인했고, `./gradlew :app:assembleDebug`와 `adb install -r "app/build/outputs/apk/debug/app-debug.apk"`가 성공했다. 다만 `adb shell am start -n kr.co.vividnext.sodalive.debug/kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivity --el extra_creator_id 100`는 `not exported` permission denial로 차단되어 shell 직접 실행 기반 화면 조작 검증은 수행하지 못했다.
|
||||
|
||||
---
|
||||
|
||||
## Verification Log
|
||||
- 2026-06-12: `docs/20260611_크리에이터_채널_홈_탭/prd.md`, `docs/agent-guides/work-plan-docs.md`, `docs/agent-guides/build-test-style.md`, `docs/agent-guides/code-style.md`를 확인해 계획 문서 작성 규칙과 검증 명령 규칙을 확인했다.
|
||||
- 2026-06-12: 기존 `HomeRecommendationApi`, `HomeRecommendationModels`, `HomeRecommendationRepository`, `HomeRecommendationViewModel`, `RecommendedActivityType`, `HomeRecommendationMappers`, `HomeRecommendationUiModels`, `AppDI`, `ChatRoomActivity`, `DmChatRoomActivity`를 확인해 신규 크리에이터 채널 홈 구현 계획의 파일 경계와 재사용 지점을 정리했다.
|
||||
@@ -1654,3 +1706,7 @@
|
||||
|
||||
- 2026-06-25: 후속 UI 보정 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest" --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainFragmentSourceTest" --tests "kr.co.vividnext.sodalive.v2.widget.SeriesContentCardViewTest" --tests "kr.co.vividnext.sodalive.v2.widget.AudioContentCardViewTest"`, `./gradlew :app:mergeDebugResources`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`를 실행해 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. `ktlintCheck`의 `.editorconfig disabled_rules` deprecation warning과 Gradle deprecation warning은 기존 경고로 이번 변경과 무관하다.
|
||||
- 2026-06-25: 실제 화면 수동 검증 가능 여부 확인을 위해 `adb devices`를 실행했으나 연결된 device/emulator가 없어 전면 화면 육안 검증은 수행하지 못했다. 이번 후속 보정은 source/widget 테스트와 Gradle 리소스/컴파일/스타일 검증으로 확인했다.
|
||||
- 2026-06-27: 사용자 후속 요구사항에 따라 탭 전환 시 `CreatorChannelActivity`의 공통 `NestedScrollView`를 최상단 또는 sticky tab-bar anchor 위치로 자동 스크롤하지 않도록 Phase 18을 추가했다. 구현 범위는 `CreatorChannelActivity.kt`의 탭 전환 scroll 보정 제거와 `CreatorChannelActivitySourceTest.kt` source 계약 갱신으로 제한했다. 이번 단계는 문서 수정만 수행했으며 구현/빌드/테스트는 실행하지 않았다.
|
||||
|
||||
- 2026-06-27: Phase 18 구현 검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:assembleDebug`, `./gradlew :app:ktlintCheck`, `git diff --check`를 실행해 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다. `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`는 303개 중 `CreatorChannelHomeViewModelTest > 채널 후원 성공은 기존 후원 API를 호출하고 홈을 다시 로드한다` 1건이 한 차례 실패했으나, 동일 테스트 단독 재실행 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelHomeViewModelTest.채널 후원 성공은 기존 후원 API를 호출하고 홈을 다시 로드한다"`는 `BUILD SUCCESSFUL`로 PASS했다. 이번 Phase 18 변경은 Activity 탭 전환 scroll source 제거에 한정되어 해당 ViewModel 후원 테스트 실패와 직접 관련이 없다.
|
||||
- 2026-06-27 Phase 18 코드 리뷰 및 재검증: `git diff` 기준 변경 범위가 `CreatorChannelActivity.kt`의 탭 전환 scroll 보정 제거, `CreatorChannelActivitySourceTest.kt` source 계약 갱신, 문서 기록에 한정됨을 확인했다. 재검증으로 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivitySourceTest"`, `./gradlew :app:compileDebugKotlin`, `./gradlew :app:ktlintCheck`, `git diff --check`, `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.creator.channel.*"`를 실행해 모두 `BUILD SUCCESSFUL` 또는 출력 없음으로 PASS했다.
|
||||
|
||||
Reference in New Issue
Block a user