docs(main): title bar 추가 범위를 기록한다
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: 구현 시 `superpowers:subagent-driven-development` 또는 `superpowers:executing-plans`를 사용해 task 단위로 진행한다. 각 단계는 체크박스(`- [ ]`)로 추적하고, 완료 즉시 `- [x]`로 갱신한다. 구현 범위 변경이 생기면 이 문서를 먼저 수정한 뒤 코드에 반영한다.
|
||||
|
||||
**Goal:** v2 메인 홈 title bar 우측 `cash`, `search`, `bell` 아이콘 터치 시 기존 충전, 검색, 알림 리스트 페이지로 이동한다.
|
||||
**Goal:** v2 메인 홈, 콘텐츠, 대화 title bar 우측 아이콘 터치 시 기존 충전, 검색, 알림 리스트, 내 보관함 페이지로 이동한다.
|
||||
|
||||
**Architecture:** `view_title_bar_home.xml`과 `fragment_v2_main_home.xml`의 기존 UI는 유지하고, `HomeMainFragment`에서 title bar action click listener만 연결한다. 목적지 화면은 기존 레거시 Activity를 명시적 `Intent`로 호출하며, 비로그인 처리는 기존 `ensureMainV2NavigationAllowed`를 재사용한다.
|
||||
**Architecture:** `view_title_bar_home.xml`, `view_title_bar_content.xml`, `view_title_bar_default.xml`의 기존 UI는 유지하고 각 v2 메인 Fragment에서 title bar action click listener만 연결한다. 목적지 화면은 기존 레거시 Activity를 명시적 `Intent`로 호출하며, 비로그인 처리는 기존 `ensureMainV2NavigationAllowed`를 재사용한다.
|
||||
|
||||
**Tech Stack:** Kotlin, Android XML Views, ViewBinding, Fragment, Android explicit Intent, JUnit4 source-level test.
|
||||
|
||||
@@ -14,22 +14,33 @@
|
||||
- PRD: `docs/20260630_메인_홈_title_bar_우측_메뉴_액션/prd.md`
|
||||
- 구현 대상:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- 확인 대상:
|
||||
- `app/src/main/res/layout/view_title_bar_home.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||
- `app/src/main/res/layout/view_title_bar_content.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_content.xml`
|
||||
- `app/src/main/res/layout/view_title_bar_default.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_chat.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuard.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt`
|
||||
- 목적지:
|
||||
- cash: `CanChargeActivity`
|
||||
- search: `SearchActivity`
|
||||
- bell: `PushNotificationListActivity`
|
||||
- storage: `AudioContentBoxActivity`
|
||||
- 성공 기준:
|
||||
- `HomeMainFragment`가 `setupTitleBarActions()` 또는 동등한 최소 메서드에서 세 아이콘 click listener를 연결한다.
|
||||
- 세 click listener는 모두 `ensureMainV2NavigationAllowed`를 거친다.
|
||||
- `ContentMainFragment`가 `cash`, `search`, `storage` click listener를 연결한다.
|
||||
- `ChatMainFragment`가 `cash`, `search` click listener를 연결한다.
|
||||
- 모든 title bar action click listener는 `ensureMainV2NavigationAllowed`를 거친다.
|
||||
- 목적지 기존 Activity 파일은 수정하지 않는다.
|
||||
- 레이아웃 XML과 아이콘 리소스는 변경하지 않는다.
|
||||
- 구현 완료 후 최소 다음 명령을 실행한다.
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:compileDebugKotlin`
|
||||
- `./gradlew :app:ktlintCheck`
|
||||
- `git diff --check`
|
||||
@@ -40,14 +51,29 @@
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||
- title bar action click listener를 추가한다.
|
||||
- `CanChargeActivity`, `SearchActivity`, `PushNotificationListActivity` import를 추가한다.
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt`
|
||||
- content title bar action click listener를 추가한다.
|
||||
- `AudioContentBoxActivity`, `CanChargeActivity`, `SearchActivity` import를 추가한다.
|
||||
- Modify: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- default title bar의 cash/search action click listener를 추가한다.
|
||||
- `CanChargeActivity`, `SearchActivity`, `ensureMainV2NavigationAllowed`, `Intent` import를 추가한다.
|
||||
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainTitleBarActionSourceTest.kt`
|
||||
- source-level로 세 아이콘 routing 계약을 검증한다.
|
||||
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt`
|
||||
- source-level로 콘텐츠 title bar routing 계약을 검증한다.
|
||||
- Create: `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt`
|
||||
- source-level로 대화 title bar routing 계약을 검증한다.
|
||||
- No Modify:
|
||||
- `app/src/main/res/layout/view_title_bar_home.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||
- `app/src/main/res/layout/view_title_bar_content.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_content.xml`
|
||||
- `app/src/main/res/layout/view_title_bar_default.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_chat.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/home/pushnotification/PushNotificationListActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/audio_content/box/AudioContentBoxActivity.kt`
|
||||
|
||||
---
|
||||
|
||||
@@ -190,7 +216,143 @@
|
||||
|
||||
---
|
||||
|
||||
### Phase 5: v2 메인 콘텐츠/대화 title bar 추가 범위 확인
|
||||
|
||||
- [x] **Task 5.1: 콘텐츠/대화 title bar 아이콘 선언 위치 확인**
|
||||
- 확인:
|
||||
- `app/src/main/res/layout/view_title_bar_content.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_content.xml`
|
||||
- `app/src/main/res/layout/view_title_bar_default.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_chat.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- 결과:
|
||||
- `view_title_bar_content.xml`에 `iv_title_bar_cash`, `iv_title_bar_search`, `iv_title_bar_storage`가 선언되어 있다.
|
||||
- `fragment_v2_main_content.xml`이 해당 title bar를 `view_content_title_bar`로 include한다.
|
||||
- `fragment_v2_main_chat.xml`은 `view_title_bar_default.xml`을 `view_chat_title_bar`로 include한다.
|
||||
- `ChatMainFragment.setupTitleBar()`가 `ivTitleBarMenu`를 cash 아이콘으로 사용하고 search ImageView를 동적으로 추가한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-30: `rg -n "view.*TitleBar|view_title_bar|ic_bar_storage|ic_bar_cash|ic_bar_search" app/src/main/java/kr/co/vividnext/sodalive app/src/main/res/layout app/src/test/java/kr/co/vividnext/sodalive/v2`로 콘텐츠/대화 title bar 구조와 미연결 상태를 확인했다.
|
||||
|
||||
- [x] **Task 5.2: 내 보관함 목적지 확인**
|
||||
- 확인:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/audio_content/box/AudioContentBoxActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/mypage/MyPageFragment.kt`
|
||||
- `app/src/main/AndroidManifest.xml`
|
||||
- 결과:
|
||||
- 레거시 홈의 `ivStorage`와 마이페이지 보관함 버튼이 `AudioContentBoxActivity`를 호출한다.
|
||||
- `AndroidManifest.xml`에 `.audio_content.box.AudioContentBoxActivity`가 선언되어 있다.
|
||||
- 검증 기록:
|
||||
- 2026-06-30: `rg -n "class AudioContentBoxActivity|AudioContentBoxActivity" app/src/main/java app/src/main/AndroidManifest.xml app/src/test/java`로 기존 내 보관함 목적지를 확인했다.
|
||||
|
||||
---
|
||||
|
||||
### Phase 6: 추가 source-level 회귀 테스트
|
||||
|
||||
- [x] **Task 6.1: 콘텐츠 title bar action source test 작성**
|
||||
- 생성:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainTitleBarActionSourceTest.kt`
|
||||
- 작업:
|
||||
- `ContentMainFragment.kt` source text를 읽어 다음 계약을 검증한다.
|
||||
- `viewContentTitleBar.ivTitleBarCash.setOnClickListener`
|
||||
- `viewContentTitleBar.ivTitleBarSearch.setOnClickListener`
|
||||
- `viewContentTitleBar.ivTitleBarStorage.setOnClickListener`
|
||||
- `ensureMainV2NavigationAllowed`
|
||||
- `CanChargeActivity::class.java`
|
||||
- `SearchActivity::class.java`
|
||||
- `AudioContentBoxActivity::class.java`
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"`
|
||||
- Expected: 구현 전에는 `AssertionError`로 실패한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-30: 테스트 추가 후 구현 전 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"`를 실행해 `ContentMainTitleBarActionSourceTest.kt:15`의 listener 문자열 누락 `AssertionError`로 RED를 확인했다.
|
||||
- 2026-06-30: `ContentMainFragment` 구현 후 같은 명령을 재실행해 PASS를 확인했다.
|
||||
|
||||
- [x] **Task 6.2: 대화 title bar action source test 작성**
|
||||
- 생성:
|
||||
- `app/src/test/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainTitleBarActionSourceTest.kt`
|
||||
- 작업:
|
||||
- `ChatMainFragment.kt` source text를 읽어 다음 계약을 검증한다.
|
||||
- `ivTitleBarMenu.setOnClickListener`
|
||||
- `searchAction.setOnClickListener`
|
||||
- `ensureMainV2NavigationAllowed`
|
||||
- `CanChargeActivity::class.java`
|
||||
- `SearchActivity::class.java`
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"`
|
||||
- Expected: 구현 전에는 `AssertionError`로 실패한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-30: 테스트 추가 후 구현 전 `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"`를 실행해 `ChatMainTitleBarActionSourceTest.kt:15`의 listener 문자열 누락 `AssertionError`로 RED를 확인했다. 병렬 Gradle 실행으로 Kotlin incremental cache warning이 함께 출력됐으나 최종 실패 원인은 기대한 AssertionError였다.
|
||||
- 2026-06-30: `ChatMainFragment` 구현 후 같은 명령을 순차 재실행해 PASS를 확인했다.
|
||||
|
||||
---
|
||||
|
||||
### Phase 7: 콘텐츠/대화 title bar action 최소 구현
|
||||
|
||||
- [x] **Task 7.1: `ContentMainFragment`에 title bar action setup 추가**
|
||||
- 수정:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt`
|
||||
- 작업:
|
||||
- `onViewCreated()`에서 기존 setup 흐름을 깨지 않는 위치에 `setupTitleBarActions()`를 호출한다.
|
||||
- `setupTitleBarActions()`에서 세 icon click listener를 연결한다.
|
||||
- `openWithLoginGuard(activityClass: Class<*>)` helper를 추가한다.
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"`
|
||||
- Expected: PASS
|
||||
- 검증 기록:
|
||||
- 2026-06-30: `ContentMainFragment`에 `setupTitleBarActions()`와 `openWithLoginGuard()`를 추가해 cash/search/storage listener가 각각 `CanChargeActivity`, `SearchActivity`, `AudioContentBoxActivity`로 이동하도록 구현했다. 구현 후 `ContentMainTitleBarActionSourceTest` PASS를 확인했다.
|
||||
|
||||
- [x] **Task 7.2: `ChatMainFragment`에 title bar action setup 추가**
|
||||
- 수정:
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- 작업:
|
||||
- `ivTitleBarMenu`에 `CanChargeActivity` 이동 listener를 연결한다.
|
||||
- 동적 search ImageView를 `searchAction` 변수로 만들고 `SearchActivity` 이동 listener를 연결한다.
|
||||
- `openWithLoginGuard(activityClass: Class<*>)` helper를 추가한다.
|
||||
- 검증:
|
||||
- Run: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"`
|
||||
- Expected: PASS
|
||||
- 검증 기록:
|
||||
- 2026-06-30: `ChatMainFragment`에서 `ivTitleBarMenu` cash listener와 동적 `searchAction` listener를 각각 `CanChargeActivity`, `SearchActivity`로 이동하도록 구현했다. 구현 후 `ChatMainTitleBarActionSourceTest` PASS를 확인했다.
|
||||
|
||||
---
|
||||
|
||||
### Phase 8: 추가 빌드/린트와 수동 확인
|
||||
|
||||
- [x] **Task 8.1: 추가 테스트, Kotlin compile 및 ktlint 확인**
|
||||
- 실행:
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"`
|
||||
- `./gradlew :app:compileDebugKotlin`
|
||||
- `./gradlew :app:ktlintCheck`
|
||||
- `git diff --check`
|
||||
- 기대 결과:
|
||||
- 모두 PASS한다.
|
||||
- 검증 기록:
|
||||
- 2026-06-30: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.home.HomeMainTitleBarActionSourceTest"` PASS를 확인했다.
|
||||
- 2026-06-30: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.content.ContentMainTitleBarActionSourceTest"` PASS를 확인했다.
|
||||
- 2026-06-30: `./gradlew :app:testDebugUnitTest --tests "kr.co.vividnext.sodalive.v2.main.chat.ChatMainTitleBarActionSourceTest"` PASS를 확인했다.
|
||||
- 2026-06-30: `./gradlew :app:compileDebugKotlin` PASS를 확인했다.
|
||||
- 2026-06-30: `./gradlew :app:ktlintCheck` PASS를 확인했다. 기존 `.editorconfig disabled_rules` deprecation warning은 출력됐으나 실패는 없었다.
|
||||
- 2026-06-30: `git diff --check` PASS를 확인했다.
|
||||
|
||||
- [ ] **Task 8.2: 추가 수동 화면 확인**
|
||||
- 확인:
|
||||
- v2 메인 콘텐츠 진입 후 title bar 우측 cash/search/storage 아이콘이 기존과 동일하게 보인다.
|
||||
- 로그인 상태에서 콘텐츠 cash 터치 시 충전 페이지로 이동한다.
|
||||
- 로그인 상태에서 콘텐츠 search 터치 시 검색 페이지로 이동한다.
|
||||
- 로그인 상태에서 콘텐츠 storage 터치 시 내 보관함으로 이동한다.
|
||||
- v2 메인 대화 진입 후 title bar 우측 cash/search 아이콘이 기존과 동일하게 보인다.
|
||||
- 로그인 상태에서 대화 cash/search 터치 시 각각 충전/검색 페이지로 이동한다.
|
||||
- 비로그인 상태에서 각 아이콘 터치 시 기존 v2 login guard 흐름으로 이동한다.
|
||||
- 검증 기록:
|
||||
- 구현 후 실행 결과를 이 항목 아래에 누적한다.
|
||||
|
||||
---
|
||||
|
||||
## Verification Log
|
||||
- 2026-06-30: 문서 작성 단계에서 코드 구현은 수행하지 않았다. `view_title_bar_home.xml`, `fragment_v2_main_home.xml`, `HomeMainFragment.kt`, 레거시 `HomeFragment.kt`, 목적지 Activity 세 개를 정적으로 확인해 구현 위치와 범위를 확정했다.
|
||||
- 2026-06-30: Phase 2, 3 구현 후 `./gradlew :app:ktlintCheck` PASS를 확인했다. 실행 중 `.editorconfig`의 기존 `disabled_rules` deprecation warning이 출력됐으나 lint 실패는 없었다.
|
||||
- 2026-06-30: Phase 2, 3 구현 후 `git diff --check` PASS를 확인했다.
|
||||
- 2026-06-30: 추가 범위로 v2 메인 콘텐츠/대화 title bar action을 연결한 뒤 홈/콘텐츠/대화 title bar source test, `:app:compileDebugKotlin`, `:app:ktlintCheck`, `git diff --check` PASS를 확인했다. 수동 화면 확인은 기기/에뮬레이터에서 수행하지 못해 Task 8.2에 미완료로 남겼다.
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
## 1. Overview
|
||||
v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시 기존 충전, 검색, 알림 리스트 페이지로 이동하도록 액션을 연결한다.
|
||||
|
||||
2026-06-30 추가 범위로 v2 메인 콘텐츠, v2 메인 대화 탭의 `view_title_bar_*` 우측 아이콘도 홈과 동일한 목적지 규칙으로 연결한다.
|
||||
|
||||
---
|
||||
|
||||
## 2. Problem
|
||||
@@ -17,6 +19,9 @@ v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시
|
||||
- `ic_bar_cash` 터치 시 기존 `CanChargeActivity`로 이동한다.
|
||||
- `ic_bar_search` 터치 시 기존 `SearchActivity`로 이동한다.
|
||||
- `ic_bar_bell` 터치 시 기존 `PushNotificationListActivity`로 이동한다.
|
||||
- v2 메인 콘텐츠 title bar의 `ic_bar_cash`, `ic_bar_search`, `ic_bar_storage` 액션을 연결한다.
|
||||
- v2 메인 대화 title bar의 `ic_bar_cash`, `ic_bar_search` 액션을 연결한다.
|
||||
- `ic_bar_storage` 터치 시 기존 내 보관함인 `AudioContentBoxActivity`로 이동한다.
|
||||
- 목적지 기존 Activity는 수정하지 않고 호출만 한다.
|
||||
- 로그인 필요 여부는 기존 v2 navigation guard 패턴을 따른다.
|
||||
|
||||
@@ -26,9 +31,10 @@ v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시
|
||||
- 이번 PRD 작성 단계에서는 코드, 리소스, 레이아웃 파일을 구현하지 않는다.
|
||||
- title bar 디자인, 아이콘 리소스, 간격, 크기, 노출 조건을 변경하지 않는다.
|
||||
- `CanChargeActivity`, `SearchActivity`, `PushNotificationListActivity` 내부 동작을 수정하지 않는다.
|
||||
- `AudioContentBoxActivity` 내부 동작을 수정하지 않는다.
|
||||
- 신규 충전, 검색, 알림 화면을 만들지 않는다.
|
||||
- 레거시 `HomeFragment`의 short icon 액션은 변경하지 않는다.
|
||||
- 콘텐츠 탭의 `ic_bar_storage` 등 이번 요구에 없는 아이콘 액션은 범위에 포함하지 않는다.
|
||||
- 신규 보관함 화면을 만들지 않는다.
|
||||
|
||||
---
|
||||
|
||||
@@ -42,6 +48,8 @@ v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시
|
||||
- 사용자는 홈 상단 cash 아이콘을 누르면 충전 페이지로 이동하고 싶다.
|
||||
- 사용자는 홈 상단 search 아이콘을 누르면 검색 페이지로 이동하고 싶다.
|
||||
- 사용자는 홈 상단 bell 아이콘을 누르면 알림 리스트 페이지로 이동하고 싶다.
|
||||
- 사용자는 콘텐츠 상단 storage 아이콘을 누르면 내 보관함으로 이동하고 싶다.
|
||||
- 사용자는 콘텐츠와 대화 상단의 cash/search 아이콘도 홈과 동일하게 동작하길 기대한다.
|
||||
|
||||
---
|
||||
|
||||
@@ -62,7 +70,31 @@ v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시
|
||||
- 각 클릭은 `ensureMainV2NavigationAllowed { ... }` 안에서 `startActivity(Intent(requireContext(), TargetActivity::class.java))`를 호출한다.
|
||||
- 새 wrapper, adapter, ViewModel은 만들지 않는다.
|
||||
|
||||
#### Edge Cases
|
||||
### v2 메인 탭 title bar action 확장
|
||||
|
||||
#### Requirements
|
||||
- 추가 구현 대상 title bar:
|
||||
- `app/src/main/res/layout/view_title_bar_content.xml`
|
||||
- include 위치: `app/src/main/res/layout/fragment_v2_main_content.xml`
|
||||
- 연결 Fragment: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt`
|
||||
- `app/src/main/res/layout/view_title_bar_default.xml`
|
||||
- include 위치: `app/src/main/res/layout/fragment_v2_main_chat.xml`
|
||||
- 연결 Fragment: `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- 목적지 Activity:
|
||||
- `ic_bar_cash` / `iv_title_bar_cash` 또는 `iv_title_bar_menu` -> `kr.co.vividnext.sodalive.mypage.can.charge.CanChargeActivity`
|
||||
- `ic_bar_search` / `iv_title_bar_search` 또는 동적 ImageView -> `kr.co.vividnext.sodalive.search.SearchActivity`
|
||||
- `ic_bar_storage` / `iv_title_bar_storage` -> `kr.co.vividnext.sodalive.audio_content.box.AudioContentBoxActivity`
|
||||
- `ContentMainFragment.onViewCreated()` 흐름에서 title bar action setup을 호출한다.
|
||||
- `ChatMainFragment.setupTitleBar()`에서 생성하는 cash/search icon view에 click listener를 함께 연결한다.
|
||||
- 각 클릭은 `ensureMainV2NavigationAllowed { ... }` 안에서 `startActivity(Intent(requireContext(), TargetActivity::class.java))`를 호출한다.
|
||||
- 홈에 이미 연결된 cash/search/bell 동작은 변경하지 않는다.
|
||||
|
||||
#### 추가 범위 Edge Cases
|
||||
- 비로그인 상태에서 콘텐츠/대화 title bar 아이콘을 터치하면 기존 `ensureMainV2NavigationAllowed` 정책에 따라 로그인 화면으로 유도한다.
|
||||
- 동적으로 추가되는 채팅 search ImageView는 `setupTitleBar()` 호출 시점에 click listener가 함께 설정되어야 한다.
|
||||
- Activity launch 실패에 대한 별도 처리나 Toast는 추가하지 않는다.
|
||||
|
||||
#### 공통 Edge Cases
|
||||
- 비로그인 상태에서 아이콘을 터치하면 기존 `ensureMainV2NavigationAllowed` 정책에 따라 로그인 화면으로 유도한다.
|
||||
- Fragment가 view lifecycle 밖에 있을 때 클릭 리스너가 실행되지 않도록 기존 ViewBinding 생명주기 안에서만 연결한다.
|
||||
- Activity launch 실패에 대한 별도 처리나 Toast는 추가하지 않는다. 기존 명시적 Activity intent 경로만 사용한다.
|
||||
@@ -73,31 +105,39 @@ v2 메인 홈 title bar 우측의 `cash`, `search`, `bell` 아이콘 터치 시
|
||||
- 화면에 이미 표시되는 title bar 아이콘의 디자인은 유지한다.
|
||||
- 터치 후 목적지 화면 전환은 기존 Android Activity 전환 방식과 동일하게 동작한다.
|
||||
- 아이콘 순서와 의미는 기존 title bar XML과 동일하게 cash, search, bell 순서를 유지한다.
|
||||
- 콘텐츠 title bar의 storage 아이콘은 기존 레거시 내 보관함 이동과 동일한 의미를 유지한다.
|
||||
|
||||
---
|
||||
|
||||
## 9. Technical Constraints
|
||||
- Android XML View, ViewBinding, Fragment 기반 기존 구조를 유지한다.
|
||||
- 신규 구현은 `kr.co.vividnext.sodalive.v2.main.home.HomeMainFragment`에 한정한다.
|
||||
- 신규 구현은 `kr.co.vividnext.sodalive.v2.main.home.HomeMainFragment`, `kr.co.vividnext.sodalive.v2.main.content.ContentMainFragment`, `kr.co.vividnext.sodalive.v2.main.chat.ChatMainFragment`에 한정한다.
|
||||
- 기존 레거시 화면은 직접 수정하지 않는다.
|
||||
- 로그인 guard는 `kr.co.vividnext.sodalive.v2.main.ensureMainV2NavigationAllowed`를 재사용한다.
|
||||
- 관련 근거 파일:
|
||||
- `app/src/main/res/layout/view_title_bar_home.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_home.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/home/HomeMainFragment.kt`
|
||||
- `app/src/main/res/layout/view_title_bar_content.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_content.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/content/ContentMainFragment.kt`
|
||||
- `app/src/main/res/layout/view_title_bar_default.xml`
|
||||
- `app/src/main/res/layout/fragment_v2_main_chat.xml`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/chat/ChatMainFragment.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/home/HomeFragment.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/v2/main/MainV2LoginGuard.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/mypage/can/charge/CanChargeActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/search/SearchActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/home/pushnotification/PushNotificationListActivity.kt`
|
||||
- `app/src/main/java/kr/co/vividnext/sodalive/audio_content/box/AudioContentBoxActivity.kt`
|
||||
|
||||
---
|
||||
|
||||
## 10. Metrics
|
||||
- 정량 지표는 이번 범위에 추가하지 않는다.
|
||||
- 검증 기준은 세 아이콘 클릭 리스너가 코드에 존재하고 각 목적지 Activity로 routing되는지 여부다.
|
||||
- 검증 기준은 홈/콘텐츠/대화 title bar 우측 아이콘 클릭 리스너가 코드에 존재하고 각 목적지 Activity로 routing되는지 여부다.
|
||||
|
||||
---
|
||||
|
||||
## 11. Open Questions
|
||||
- 없음. 이번 문서는 세 아이콘이 모두 존재하는 v2 메인 홈 title bar를 구현 대상으로 확정한다.
|
||||
- 없음. 이번 문서는 v2 메인 홈, 콘텐츠, 대화 title bar를 구현 대상으로 확정한다.
|
||||
|
||||
Reference in New Issue
Block a user