MainActivity 랜딩 탭 지정을 Navigator 인터페이스로 리팩토링 - #412
Conversation
MainActivity 랜딩 탭 지정 로직에서 앞으로 쓸 화면 전환 추상화를 먼저 도입한다. Intent 플래그를 그대로 노출하지 않고 NavigationMode로 감싸서, 추후 NavController 기반 구현체로 교체할 때 호출부를 건드리지 않아도 되게 했다.
문자열 기반 EXTRA_FRAGMENT_REPLACEMENT_DIRECTION 수신 로직을 타입 있는 MainTab enum 기반으로 교체했다. 아직 호출부들이 옛 키를 보내고 있어 이 커밋만으로는 탭 전환이 정상 동작하지 않는다 — 이후 커밋들에서 호출부를 순차적으로 Navigator로 옮긴다. onNewIntent를 방어적으로 추가했다. 현재 MainActivity는 launchMode가 standard이고 어떤 호출부도 SINGLE_TOP을 쓰지 않아 CLEAR_TOP/ NEW_TASK|CLEAR_TASK 모두 항상 onCreate를 다시 타므로 동작 변화는 없다 — 향후 launchMode 변경에 대비한 방어적 추가다.
상수화조차 안 돼있던 "fromMyScrap" 리터럴을 MainTab.DISCOVER로 교체.
삭제 후(STORAGE/DEFAULT)와 딥링크 백버튼(STORAGE/NEW_TASK_CLEAR_TASK) 2곳을 Navigator로 교체했다. EXTRA_FROM_MY_DRAW_DETAIL은 Intent extra 키가 아니라 CourseData.dataFrom에 실리는 데이터 마커였을 뿐이라 DATA_FROM_MY_DRAW_DETAIL로 리네이밍해 혼동을 없앴다.
backBtn/onBackPressed/저장 성공 3곳을 모두 Navigator로 교체했다.
CourseData.dataFrom(String)이 DrawActivity/CourseDetailActivity/
MyDrawDetailActivity를 거쳐 흘러들어오는 값이라 타입을 바꾸는 건
스코프 밖이라, mapDataFromToMainTab()으로 로컬 매핑만 했다 —
MainActivity.checkIntentValue()의 기존 when 분기를 그대로 옮긴 것이라
동작 변화는 없다("detail"처럼 기존에도 매칭 안 되던 값은 여전히
매칭 없음).
|
Warning Review limit reached
Next review available in: 11 minutes Limit details: You’ve used all 1 included review currently available under your plan. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (12)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
작업 배경
EXTRA_FRAGMENT_REPLACEMENT_DIRECTION문자열 키가 6개 파일에 각각 중복 선언돼 있고, 2곳은 상수화조차 안 돼 리터럴로 직접 박혀 있었음(타이포가 나도 컴파일 타임에 못 잡음).Navigator인터페이스로 호출부를 구체 Activity/Intent로부터 분리, 2단계(추후) =Navigator구현체만 NavController 기반으로 교체(strangler-fig 패턴, 호출부는 안 건드림).변경 사항
presentation/navigation/Navigator.ktNavigator인터페이스,MainTab/NavigationModeenum 신설presentation/navigation/NavigatorImpl.ktpresentation/navigation/MainTabDataFromMapper.ktEndRunActivity용String → MainTab?로컬 매핑 함수di/NavigationModule.ktRepositoryModule.kt패턴을 따르는@Binds바인딩MainActivity.ktMainTab타입 기반으로 교체, 방어적onNewIntent추가StorageScrapFragment.kt,DrawActivity.kt,CourseDetailActivity.kt,MyDrawDetailActivity.kt,EndRunActivity.kt영향 범위
onNewIntent추가는 현재 MainActivity가launchMode=standard이고 어떤 호출부도SINGLE_TOP을 쓰지 않아 항상onCreate를 다시 타므로 동작 변화 없음 — 향후 launchMode 변경에 대비한 방어적 추가.EndRunActivity는CourseData.dataFrom(String)이DrawActivity/CourseDetailActivity/MyDrawDetailActivity를 거쳐 흘러들어오는 값이라 타입을 바꾸는 게 스코프 밖이라,mapDataFromToMainTab()으로 로컬 매핑만 함 — 기존when분기를 그대로 옮긴 것이라 동작 변화 없음.검증 매트릭스
NavigationMode별 Intent 플래그 세팅 (DEFAULT/CLEAR_TOP/NEW_TASK_CLEAR_TASK)DEFAULT 모드는 플래그를 추가하지 않는다•CLEAR_TOP 모드는 FLAG_ACTIVITY_CLEAR_TOP을 추가한다•NEW_TASK_CLEAR_TASK 모드는 두 플래그를 함께 추가한다MainTabextra 세팅 여부 (지정/미지정)tab이 지정되면 EXTRA_MAIN_TAB extra를 담는다•tab이 null이면 extra를 담지 않는다EndRunActivity의 dataFrom→MainTab 매핑 (기존 동작 무변경 검증)그리기 관련 dataFrom 값은 STORAGE로 매핑된다•코스발견 관련 dataFrom 값은 DISCOVER로 매핑된다•매칭되지 않는 값은 null로 매핑된다•null 입력은 null로 매핑된다Test Plan
./gradlew :app:compileDebugKotlin통과./gradlew :app:assembleDebug통과./gradlew :app:testDebugUnitTest전체 통과(신규 9개 포함, 기존 테스트 회귀 없음)grep -rn "EXTRA_FRAGMENT_REPLACEMENT_DIRECTION"결과 0건 확인🤖 Generated with Claude Code