feat(main): 홈 크리에이터 FAB를 추가한다
This commit is contained in:
94
docs/20260716_메인_V2_홈_FAB/prd.md
Normal file
94
docs/20260716_메인_V2_홈_FAB/prd.md
Normal file
@@ -0,0 +1,94 @@
|
||||
# PRD: 메인 V2 홈 FAB
|
||||
|
||||
## 1. Overview
|
||||
`MainV2Activity`의 하단 홈 탭에서 로그인한 크리에이터에게만 콘텐츠 생성 FAB를 제공한다.
|
||||
|
||||
---
|
||||
|
||||
## 2. Problem
|
||||
- `CreatorChannelActivity`에는 본인 채널 홈 탭에서 커뮤니티 글 작성, 오디오 콘텐츠 업로드, 라이브 생성을 바로 시작하는 FAB가 있다.
|
||||
- `MainV2Activity` 홈 탭에는 동일한 빠른 생성 진입점이 없어 크리에이터가 메인 홈에서 생성 기능으로 이동하기 어렵다.
|
||||
- 일반 유저와 비로그인 유저에게는 생성 권한이 없으므로 FAB를 노출하면 불필요한 진입점이 된다.
|
||||
|
||||
---
|
||||
|
||||
## 3. Goals
|
||||
- `MainV2Activity`에서 하단 홈 탭이 선택되어 있고 로그인한 사용자 role이 `CREATOR`일 때만 우측 하단 FAB를 표시한다.
|
||||
- FAB의 디자인, 확장/닫기 동작, 버튼 구성은 `CreatorChannelActivity`의 홈 탭 FAB와 동일하게 재사용한다.
|
||||
- FAB 액션은 기존 기능 진입점을 재사용한다.
|
||||
- 커뮤니티 글 올리기: `CreatorCommunityWriteActivity`
|
||||
- 오디오 콘텐츠 올리기: `AudioContentUploadActivity`
|
||||
- 라이브 만들기: `LiveRoomCreateActivity`
|
||||
- 일반 유저와 비로그인 유저에게 FAB를 표시하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 4. Non-Goals
|
||||
- `CreatorChannelActivity`의 기존 FAB 디자인/동작을 변경하지 않는다.
|
||||
- 커뮤니티 글쓰기, 오디오 업로드, 라이브 생성 화면 내부 로직을 변경하지 않는다.
|
||||
- 새 아이콘, 새 문자열, 새 디자인 시스템을 추가하지 않는다.
|
||||
- 레거시 화면 파일을 직접 수정하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 5. Target Users
|
||||
- SodaLive에 로그인한 크리에이터 계정 사용자
|
||||
|
||||
---
|
||||
|
||||
## 6. User Stories
|
||||
- 크리에이터는 메인 V2 홈 탭에서 FAB를 눌러 콘텐츠 생성 액션을 빠르게 선택하고 싶다.
|
||||
- 일반 유저는 생성 권한이 없으므로 메인 홈에서 생성 FAB를 보지 않는다.
|
||||
- 비로그인 사용자는 메인 홈을 볼 수 있더라도 생성 FAB를 보지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 7. Core Features
|
||||
|
||||
### Feature A: 메인 홈 크리에이터 FAB 표시
|
||||
|
||||
#### Requirements
|
||||
- `MainV2Activity`의 현재 탭이 `MainV2Tab.HOME`일 때만 표시 후보가 된다.
|
||||
- 로그인 상태가 아니면 표시하지 않는다.
|
||||
- `SharedPreferenceManager.role == MemberRole.CREATOR.name`일 때만 표시한다.
|
||||
- `MainV2Activity.getMemberInfo()`가 role을 갱신한 뒤 FAB visibility를 다시 평가한다.
|
||||
- 홈 탭이 아닌 탭으로 이동하면 확장 상태를 닫고 FAB를 숨긴다.
|
||||
|
||||
#### Edge Cases
|
||||
- 회원 정보 조회 전 role 기본값이 `USER`이면 FAB를 숨긴다.
|
||||
- 로그인 세션이 없거나 `ensureV2Access(AccessRequirement.Login)`이 실패하는 상태에서는 FAB를 숨긴다.
|
||||
- FAB 확장 중 탭이 변경되면 확장 상태를 닫고 숨긴다.
|
||||
|
||||
### Feature B: CreatorChannel FAB와 동일한 액션
|
||||
|
||||
#### Requirements
|
||||
- FAB collapsed/expanded/dim/close UI는 `activity_creator_channel.xml`의 owner FAB 구조와 리소스를 재사용한다.
|
||||
- 버튼 순서는 `CreatorChannelActivity`와 동일하게 커뮤니티, 오디오, 라이브, 닫기 순서로 둔다.
|
||||
- 각 액션은 실행 직전에 FAB를 닫는다.
|
||||
- 라이브 생성 결과는 기존 `LiveCreationResult`/`resolveLiveCreationResult`/`LiveActionCoordinator` 패턴을 사용한다.
|
||||
- 생성 후 홈 데이터 갱신이 필요한 경우 현재 `HomeMainFragment`의 추천 데이터 로드 경로를 최소 범위로 호출한다.
|
||||
|
||||
#### Edge Cases
|
||||
- 미니 플레이어가 표시될 때 FAB와 겹치지 않도록 하단 기준을 `cl_mini_player` 또는 `bottom_navigation` 구조와 함께 검토한다.
|
||||
- 비홈 탭에서 ActivityResult가 돌아와도 FAB가 다시 표시되지 않아야 한다.
|
||||
|
||||
---
|
||||
|
||||
## 8. UX / UI Expectations
|
||||
- 위치, 크기, 배경, 아이콘, dim, 확장 애니메이션은 `CreatorChannelActivity` FAB와 동일한 체감이어야 한다.
|
||||
- 홈 탭에서만 우측 하단에 노출된다.
|
||||
- 일반 유저/비로그인 유저에게는 FAB가 전혀 보이지 않는다.
|
||||
- 접근성용 `contentDescription`은 기존 CreatorChannel 문자열을 재사용한다.
|
||||
|
||||
---
|
||||
|
||||
## 9. Technical Constraints
|
||||
- Android Kotlin/ViewBinding 기반 기존 구조를 유지한다.
|
||||
- `MainV2Activity`와 `activity_main_v2.xml` 중심의 최소 변경으로 구현한다.
|
||||
- 크리에이터 판정은 기존 코드와 동일하게 `MemberRole.CREATOR.name`과 `SharedPreferenceManager.role`을 사용한다.
|
||||
- 기존 리소스(`bg_creator_channel_owner_fab`, `bg_creator_channel_owner_fab_live`, `bg_creator_channel_owner_fab_close`, `ic_new_upload_community_post`, `ic_new_upload_audio`, `ic_new_create_live`, `ic_new_x_black`, `creator_channel_owner_fab_*`)를 재사용한다.
|
||||
|
||||
---
|
||||
|
||||
## 10. Open Questions
|
||||
- 없음. 사용자 확인으로 FAB 표시 대상은 “로그인 후 크리에이터인 경우만”으로 확정했다.
|
||||
Reference in New Issue
Block a user