diff --git a/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/plan-task.md b/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/plan-task.md index 2a21077e..b16004ba 100644 --- a/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/plan-task.md +++ b/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/plan-task.md @@ -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에 미완료로 남겼다. diff --git a/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/prd.md b/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/prd.md index dd883c68..1c5c036a 100644 --- a/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/prd.md +++ b/docs/20260630_메인_홈_title_bar_우측_메뉴_액션/prd.md @@ -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를 구현 대상으로 확정한다.