Skip to content

[Feat] 스크린 Route 연결#94

Merged
nahy-512 merged 4 commits into
developfrom
feat/#74-screen-route-connect
Jan 14, 2026
Merged

[Feat] 스크린 Route 연결#94
nahy-512 merged 4 commits into
developfrom
feat/#74-screen-route-connect

Conversation

@nahy-512

@nahy-512 nahy-512 commented Jan 14, 2026

Copy link
Copy Markdown
Contributor

📮 관련 이슈

📌 작업 내용

  • @kimjw2003가 각 화면별 Screen 만들고, 화면 이동 그래프 고려해서 navigation 코드 미리 넣어놔 주셨어요

📸 스크린샷

스크린샷 2026-01-14 오후 3 31 18 스크린샷 2026-01-14 오후 3 31 24

😅 미구현

  • 각 화면 간 이동 확인

🫛 To. 리뷰어

  • 안드로이드 피그마 페이지에 각 Screen 이름과 이동 플로우 정리해놨는데 참고해서 작업해주시면 되겠습니다!
  • Screen 프리뷰로 보셔도 되는데, 실제로 돌려보고 싶으시다면 MainNavigatorstartDestination 변경해서 빌드 돌려보시면 됩니다.
  • 화면 별로 이동을 확인할까 했는데, UI 작업 담당자가 진행하는 게 낫다는 생각도 들고, 바로 개발을 들어가야 할 것 같아 먼저 올립니다.
  • 현재는 모두 data object로 되어있는데, 추후 화면 담당자가 작업하면서 이전 화면에서 받아와야 할 정보 넘기는 식으로 진행해보면 좋을 것 같아요!

논의해볼 만한 포인트

  1. Onboarding을 중첩 그래프로 관리하는 것 -> 'MainNavHost가 현재가 온보딩 중에서 어떤 단계인지를 알아야할까?'의 측면
  2. 현재 CollectionList를 한 화면으로 구현할까를 생각중인데, 명칭이 기획과 잘 통일될 수 있을까? 라는 측면에서 차라리 Screen을 나눠보는 게 좋을지 고민이 되네요.
image

Summary by CodeRabbit

릴리스 노트

  • New Features
    • 컬렉션 생성 및 관리: 새로운 컬렉션을 생성하고 영화를 추가하며 상세 정보를 조회할 수 있습니다.
    • 온보딩 프로세스 완성: 사용자 프로필, 선호하는 영화, OTT 플랫폼 선택 설정이 추가되었습니다.
    • 저장된 영화 목록 화면: 개인 영화 저장 목록을 별도 화면에서 관리할 수 있습니다.
    • 개선된 앱 네비게이션 구조로 더욱 매끄러운 사용 경험을 제공합니다.

✏️ Tip: You can customize this high-level summary in your review settings.

@nahy-512 nahy-512 requested a review from a team as a code owner January 14, 2026 06:32
@nahy-512 nahy-512 added the Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경 label Jan 14, 2026
@coderabbitai

coderabbitai Bot commented Jan 14, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

네비게이션 라우트에 Kotlin 직렬화(@Serializable)를 도입하고, 각 화면에 대응하는 Composable Route/Screen 쌍과 NavController 확장 함수 및 NavGraphBuilder를 추가해 앱 내 네비게이션 그래프를 중앙화했습니다.

Changes

Cohort / File(s) 변경사항
코어 라우트 정의
app/src/main/java/com/flint/core/navigation/Route.kt, app/src/main/java/com/flint/core/navigation/MainTabRoute.kt
kotlinx.serialization.Serializable 임포트 및 각 Route/MainTabRoute 내 데이터 객체들에 @Serializable 추가(여러 Route 및 MainTabRoute.Home/Explore/Profile 도입)
메인 네비게이션 호스트 & 내비게이터
app/src/main/java/com/flint/presentation/main/MainNavHost.kt, app/src/main/java/com/flint/presentation/main/MainNavigator.kt, app/src/main/java/com/flint/presentation/main/MainTab.kt, app/src/main/java/com/flint/presentation/main/MainScreen.kt
중앙화된 MainNavHost 추가, MainNavigator에 여러 navigateTo* 헬퍼 추가/수정, MainTab이 MainTabRoute 상수 참조로 전환, MainScreen이 MainNavHost로 위임
스플래시 및 인증/온보딩
app/src/main/java/com/flint/presentation/splash/*, app/src/main/java/com/flint/presentation/login/*, app/src/main/java/com/flint/presentation/onboarding/*
Splash/Login/Onboarding 화면용 Route/Screen 컴포저블 및 대응하는 NavController 확장과 NavGraphBuilder 추가 (3단계 온보딩 포함)
홈 / 탐색 / 프로필 탭
app/src/main/java/com/flint/presentation/home/*, app/src/main/java/com/flint/presentation/explore/*, app/src/main/java/com/flint/presentation/profile/*
각 Route 시그니처에 네비게이션 콜백 파라미터 추가, 기존 로컬 Tab 객체 제거 후 MainTabRoute.* 사용, ProfileNavigator 제거 및 ProfileNavigation으로 통합
콜렉션 관련 화면
app/src/main/java/com/flint/presentation/collectionlist/*, .../collectiondetail/*, .../collectioncreate/*
CollectionList/Detail/Create 및 AddFilm Screen/Route 추가, 각 기능별 NavController 확장과 NavGraphBuilder 등록, 컴포넌트 패키지 경로 조정(CollectionFileItem 패키지 변경)
저장된 영화 화면
app/src/main/java/com/flint/presentation/savedfilm/*
SavedFilmListRoute/Screen 및 대응 NavGraphBuilder와 NavController 확장 추가
내비게이션 그래프 연결
여러 .../navigation/*.kt 파일들
각 기능별 NavGraphBuilder들을 MainNavHost에 등록하도록 연결(패딩 및 콜백 전달)

Sequence Diagram(s)

sequenceDiagram
  participant MainNavHost
  participant NavHost
  participant NavController
  participant NavGraphBuilder
  participant Screen

  MainNavHost->>NavHost: 생성(startDestination, navController)
  NavHost->>NavController: 내부 라우팅 요청 수신
  NavController->>NavGraphBuilder: 각 feature 그래프 등록 요청
  NavGraphBuilder->>Screen: composable 등록(예: Splash, Home, Explore...)
  NavController->>Screen: navigateTo* 호출 -> 화면 전환
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐰✨ 길 따라 점프하니 라우트들이 반겨요
작은 화면들 하나둘 제자리를 찾아
호기심 가득 콜백들이 손을 잡고
중앙의 문(MainNavHost)으로 모두 모였네요
당근 한 입, 배포 준비 완료! 🥕🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목은 화면 Route 연결이라는 주요 작업 내용을 간결하게 요약하고 있으며, 변경사항의 핵심을 명확히 전달합니다.
Linked Issues check ✅ Passed PR은 이슈 #74의 각 Screen 파일 생성 및 Route 연결이라는 주요 목표를 충족하며, 모든 화면별 스크린과 네비게이션 코드가 구현되어 있습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 화면 Route 구축과 네비게이션 연결이라는 이슈 #74의 범위 내에 포함되어 있으며, 범위를 벗어난 변경은 없습니다.
Description check ✅ Passed PR 설명이 한국어 템플릿을 따르고 관련 이슈, 작업 내용, 스크린샷, 미구현 항목, 리뷰어 안내를 포함하고 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Comment @coderabbitai help to get the list of available commands and usage tips.

@nahy-512 nahy-512 added the ⚙️ Setting feat - 기본 세팅 label Jan 14, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In
`@app/src/main/java/com/flint/presentation/collectiondetail/navigation/CollectionDetailNavigation.kt`:
- Around line 15-25: The nav graph registers the wrong route:
collectionDetailNavGraph currently registers Route.CollectionList but the app
navigates using navigateToCollectionDetail to Route.CollectionDetail, causing
missing composable and duplicate registration; update collectionDetailNavGraph
to register composable for Route.CollectionDetail (returning
CollectionDetailRoute with the same paddingValues and navigateToCollectionList)
and remove any Route.CollectionList registration from this function so
Route.CollectionList remains only in the collection list navigation.

In
`@app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt`:
- Around line 11-13: Change the navigateToLogin extension so its navOptions
parameter matches the other navigation helpers: make it nullable with a default
of null (i.e., NavOptions? = null) and pass that nullable value into
navigate(Route.Login, navOptions); update the function signature for
navigateToLogin accordingly to keep it consistent with
navigateToHome/navigateToExplore/navigateToProfile/navigateToCollectionList.

In `@app/src/main/java/com/flint/presentation/main/MainNavHost.kt`:
- Around line 67-70: The route key for the collection detail nav graph is wrong
and collides with the collection list route; change the route used by
collectionDetailNavGraph/CollectionDetailNavigation so it uses
Route.CollectionDetail instead of Route.CollectionList. Locate the composable
declaration in CollectionDetailNavigation (the composable<T> generic) and update
the generic/type parameter and any route key references to
Route.CollectionDetail, ensuring collectionDetailNavGraph(...) in MainNavHost
remains paired with that Route.CollectionDetail target and the
navigateToCollectionList callback is unchanged.
🧹 Nitpick comments (10)
app/src/main/java/com/flint/presentation/onboarding/OnboardingFilmScreen.kt (1)

6-15: 다른 Screen 파일과 패턴 불일치

CollectionCreateRouteSplashRoute는 각각 해당 Screen 함수를 호출하지만, OnboardingFilmRouteOnboardingFilmScreen()을 호출하지 않습니다. 일관성을 위해 동일한 패턴을 적용해 주세요.

♻️ 제안된 수정
 `@Composable`
 fun OnboardingFilmRoute(
     paddingValues: PaddingValues,
     navigateToOnboardingOtt: () -> Unit,
 ) {
+    OnboardingFilmScreen()
 }
app/src/main/java/com/flint/presentation/collectioncreate/AddFilmScreen.kt (1)

6-15: 같은 패키지 내 패턴 불일치

같은 collectioncreate 패키지의 CollectionCreateRouteCollectionCreateScreen()을 호출하지만, AddFilmRouteAddFilmScreen()을 호출하지 않습니다. 패키지 내 일관성을 위해 수정이 필요합니다.

♻️ 제안된 수정
 `@Composable`
 fun AddFilmRoute(
     paddingValues: PaddingValues,
     navigateToCollectionCreate: () -> Unit,
 ) {
+    AddFilmScreen()
 }
app/src/main/java/com/flint/presentation/onboarding/OnboardingProfileScreen.kt (1)

6-11: 플레이스홀더 Route에서 Screen 호출 및 파라미터 사용 누락

CollectionCreateRoute에서는 CollectionCreateScreen()을 호출하는 반면, 이 Route는 OnboardingProfileScreen()을 호출하지 않습니다. 또한 paddingValuesnavigateToOnboardingFilm 파라미터가 사용되지 않고 있습니다.

UI 구현 시 일관성을 위해 다른 Route들과 동일한 패턴을 적용해 주세요.

♻️ 제안하는 수정
 `@Composable`
 fun OnboardingProfileRoute(
     paddingValues: PaddingValues,
     navigateToOnboardingFilm: () -> Unit,
 ) {
+    OnboardingProfileScreen()
 }
app/src/main/java/com/flint/presentation/onboarding/OnboardingOttScreen.kt (1)

6-14: 이전 파일과 동일한 플레이스홀더 패턴 이슈

OnboardingProfileScreen.kt와 마찬가지로 Route에서 Screen 호출과 파라미터 사용이 누락되어 있습니다. UI 구현 시 함께 수정해 주세요.

app/src/main/java/com/flint/core/navigation/Route.kt (1)

5-35: Route 구조가 적절합니다.

Type-safe navigation을 위한 @Serializable data object 패턴이 잘 적용되어 있습니다.

한 가지 고려사항: interface Route 대신 sealed interface Route를 사용하면 컴파일 타임에 모든 Route 구현체가 이 파일 내에서만 정의되도록 보장할 수 있어 더 안전합니다.

♻️ sealed interface 사용 제안
-interface Route {
+sealed interface Route {
     `@Serializable`
     data object Splash : Route
app/src/main/java/com/flint/presentation/onboarding/navigation/OnboardingNavigation.kt (1)

12-22: NavOptions 파라미터 추가 고려

다른 네비게이션 함수들(예: navigateToHome, navigateToExplore)과의 일관성을 위해 NavOptions 파라미터를 추가하는 것을 고려해 주세요. 현재는 기본 동작으로도 충분하지만, 향후 백스택 관리가 필요할 수 있습니다.

♻️ NavOptions 파라미터 추가 예시
+import androidx.navigation.NavOptions
+
-fun NavController.navigateToOnboarding() {
-    navigate(Route.OnboardingProfile)
+fun NavController.navigateToOnboarding(navOptions: NavOptions? = null) {
+    navigate(Route.OnboardingProfile, navOptions)
 }
app/src/main/java/com/flint/presentation/savedfilm/SavedFilmListScreen.kt (1)

6-15: paddingValues가 사용되지 않음

SavedFilmListRoute에서 paddingValues를 받지만 SavedFilmListScreen에 전달하지 않고 있습니다. 다른 Screen 패턴(예: HomeScreen)과 일관성을 위해 Modifier.padding(paddingValues)를 적용하는 것이 좋습니다.

빈 함수 body는 스캐폴딩 단계에서 의도된 것으로 이해됩니다.

♻️ paddingValues 적용 예시
 `@Composable`
 fun SavedFilmListRoute(
     paddingValues: PaddingValues,
 ) {
-    SavedFilmListScreen()
+    SavedFilmListScreen(
+        modifier = Modifier.padding(paddingValues),
+    )
 }

 `@Composable`
-fun SavedFilmListScreen() {
+fun SavedFilmListScreen(modifier: Modifier = Modifier) {
+    // TODO: Implement UI
 }

추가 import 필요:

import androidx.compose.ui.Modifier
import androidx.compose.foundation.layout.padding
app/src/main/java/com/flint/presentation/collectionlist/CollectionListScreen.kt (1)

6-16: 플레이스홀더 구현 확인됨 - 미사용 파라미터 주의

네비게이션 구조 설정을 위한 스캐폴딩 코드로 이해됩니다. paddingValuesnavigateToCollectionDetail 파라미터가 현재 사용되지 않고 있으며, 향후 UI 구현 시 연결이 필요합니다.

detekt의 EmptyFunctionBlock 경고는 플레이스홀더 특성상 현 단계에서는 무시해도 됩니다. 다만, 실제 UI 구현 시 파라미터 연결을 잊지 않도록 TODO 주석을 추가하는 것을 권장합니다.

💡 권장 수정
 `@Composable`
 fun CollectionListRoute(
     paddingValues: PaddingValues,
     navigateToCollectionDetail: () -> Unit,
 ) {
-    CollectionListScreen()
+    // TODO: paddingValues와 navigateToCollectionDetail 연결 필요
+    CollectionListScreen(
+        modifier = Modifier.padding(paddingValues),
+        onCollectionDetailClick = navigateToCollectionDetail,
+    )
 }
app/src/main/java/com/flint/presentation/main/MainNavHost.kt (1)

28-33: 하드코딩된 배경색을 테마 색상으로 교체하세요.

Color.White 하드코딩은 다크 모드 지원을 방해합니다. MaterialTheme.colorScheme.background 또는 앱의 디자인 시스템 색상을 사용하는 것이 좋습니다.

♻️ 제안된 수정
-import androidx.compose.ui.graphics.Color
+import androidx.compose.material3.MaterialTheme

 Box(
     modifier =
         modifier
             .fillMaxSize()
-            .background(color = Color.White),
+            .background(color = MaterialTheme.colorScheme.background),
 ) {
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)

105-114: 파라미터 이름 navOptions가 빌더 함수를 섀도잉합니다.

파라미터 이름 navOptionsnavOptions { } 빌더 함수와 동일하여 혼란을 줄 수 있습니다. 현재 코드는 정상 동작하지만, 가독성을 위해 파라미터 이름을 변경하는 것을 권장합니다.

♻️ 제안된 수정
-fun navigateToHome(navOptions: NavOptions? = null) {
+fun navigateToHome(options: NavOptions? = null) {
     navController.navigateToHome(
-        navOptions ?: navOptions {
+        options ?: navOptions {
             popUpTo(navController.graph.findStartDestination().id) {
                 inclusive = true
             }
             launchSingleTop = true
         },
     )
 }
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 64fb197 and a00181f.

📒 Files selected for processing (31)
  • app/src/main/java/com/flint/core/navigation/MainTabRoute.kt
  • app/src/main/java/com/flint/core/navigation/Route.kt
  • app/src/main/java/com/flint/presentation/collectioncreate/AddFilmScreen.kt
  • app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt
  • app/src/main/java/com/flint/presentation/collectioncreate/navigation/CollectionCreateNavigation.kt
  • app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt
  • app/src/main/java/com/flint/presentation/collectiondetail/navigation/CollectionDetailNavigation.kt
  • app/src/main/java/com/flint/presentation/collectionlist/CollectionListScreen.kt
  • app/src/main/java/com/flint/presentation/collectionlist/component/CollectionFileItem.kt
  • app/src/main/java/com/flint/presentation/collectionlist/navigation/CollectionListNavigation.kt
  • app/src/main/java/com/flint/presentation/explore/ExploreScreen.kt
  • app/src/main/java/com/flint/presentation/explore/navigation/ExploreNavigation.kt
  • app/src/main/java/com/flint/presentation/home/HomeScreen.kt
  • app/src/main/java/com/flint/presentation/home/navigation/HomeNavigation.kt
  • app/src/main/java/com/flint/presentation/login/LoginScreen.kt
  • app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt
  • app/src/main/java/com/flint/presentation/main/MainNavHost.kt
  • app/src/main/java/com/flint/presentation/main/MainNavigator.kt
  • app/src/main/java/com/flint/presentation/main/MainScreen.kt
  • app/src/main/java/com/flint/presentation/main/MainTab.kt
  • app/src/main/java/com/flint/presentation/onboarding/OnboardingFilmScreen.kt
  • app/src/main/java/com/flint/presentation/onboarding/OnboardingOttScreen.kt
  • app/src/main/java/com/flint/presentation/onboarding/OnboardingProfileScreen.kt
  • app/src/main/java/com/flint/presentation/onboarding/navigation/OnboardingNavigation.kt
  • app/src/main/java/com/flint/presentation/profile/ProfileScreen.kt
  • app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigation.kt
  • app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigator.kt
  • app/src/main/java/com/flint/presentation/savedfilm/SavedFilmListScreen.kt
  • app/src/main/java/com/flint/presentation/savedfilm/navigation/SavedFilmListNavigation.kt
  • app/src/main/java/com/flint/presentation/splash/SplashScreen.kt
  • app/src/main/java/com/flint/presentation/splash/navigation/SplashNavigation.kt
💤 Files with no reviewable changes (1)
  • app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigator.kt
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-13T19:02:41.580Z
Learnt from: chanmi1125
Repo: imflint/Flint-Android PR: 77
File: app/src/main/java/com/flint/presentation/collectioncreate/component/CollectionCreateThumbnail.kt:45-72
Timestamp: 2026-01-13T19:02:41.580Z
Learning: In `app/src/main/java/com/flint/presentation/collectioncreate/component/CollectionCreateThumbnail.kt`, the height difference between CollectionCreateEmptyThumbnail (no aspectRatio) and CollectionCreateFillThumbnail (aspectRatio 1.5f / 1f) is intentional design - the empty state should not have the same aspectRatio as the filled state.

Applied to files:

  • app/src/main/java/com/flint/presentation/collectionlist/component/CollectionFileItem.kt
  • app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt
  • app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt
📚 Learning: 2026-01-13T19:02:56.195Z
Learnt from: chanmi1125
Repo: imflint/Flint-Android PR: 77
File: app/src/main/java/com/flint/presentation/collectioncreate/component/CollectionCreateThumbnail.kt:45-72
Timestamp: 2026-01-13T19:02:56.195Z
Learning: In `app/src/main/java/com/flint/presentation/collectioncreate/component/CollectionCreateThumbnail.kt`, the aspect ratio difference between `CollectionCreateEmptyThumbnail` (no aspect ratio) and `CollectionCreateFillThumbnail` (1.5f / 1f) is intentional by design.

Applied to files:

  • app/src/main/java/com/flint/presentation/collectionlist/component/CollectionFileItem.kt
  • app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt
  • app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt
🧬 Code graph analysis (11)
app/src/main/java/com/flint/presentation/splash/navigation/SplashNavigation.kt (1)
app/src/main/java/com/flint/presentation/splash/SplashScreen.kt (1)
  • SplashRoute (6-13)
app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/login/LoginScreen.kt (1)
  • LoginRoute (6-13)
app/src/main/java/com/flint/presentation/main/MainScreen.kt (1)
app/src/main/java/com/flint/presentation/main/MainNavHost.kt (1)
  • MainNavHost (22-95)
app/src/main/java/com/flint/presentation/collectioncreate/navigation/CollectionCreateNavigation.kt (3)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt (1)
  • CollectionCreateRoute (6-12)
app/src/main/java/com/flint/presentation/collectioncreate/AddFilmScreen.kt (1)
  • AddFilmRoute (6-11)
app/src/main/java/com/flint/presentation/main/MainNavHost.kt (10)
app/src/main/java/com/flint/presentation/splash/navigation/SplashNavigation.kt (1)
  • splashNavGraph (9-21)
app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt (1)
  • loginNavGraph (15-27)
app/src/main/java/com/flint/presentation/onboarding/navigation/OnboardingNavigation.kt (1)
  • onBoardingNavGraph (24-49)
app/src/main/java/com/flint/presentation/home/navigation/HomeNavigation.kt (1)
  • homeNavGraph (15-27)
app/src/main/java/com/flint/presentation/collectionlist/navigation/CollectionListNavigation.kt (1)
  • collectionListNavGraph (15-25)
app/src/main/java/com/flint/presentation/collectiondetail/navigation/CollectionDetailNavigation.kt (1)
  • collectionDetailNavGraph (15-25)
app/src/main/java/com/flint/presentation/collectioncreate/navigation/CollectionCreateNavigation.kt (1)
  • collectionCreateNavGraph (20-37)
app/src/main/java/com/flint/presentation/savedfilm/navigation/SavedFilmListNavigation.kt (1)
  • savedFilmListNavGraph (15-23)
app/src/main/java/com/flint/presentation/explore/navigation/ExploreNavigation.kt (1)
  • exploreNavGraph (15-27)
app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigation.kt (1)
  • profileNavGraph (15-29)
app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/profile/ProfileScreen.kt (1)
  • ProfileRoute (14-24)
app/src/main/java/com/flint/presentation/collectionlist/navigation/CollectionListNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/collectionlist/CollectionListScreen.kt (1)
  • CollectionListRoute (6-12)
app/src/main/java/com/flint/presentation/explore/navigation/ExploreNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/explore/ExploreScreen.kt (1)
  • ExploreRoute (14-23)
app/src/main/java/com/flint/presentation/savedfilm/navigation/SavedFilmListNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/savedfilm/SavedFilmListScreen.kt (1)
  • SavedFilmListRoute (6-11)
app/src/main/java/com/flint/presentation/home/navigation/HomeNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/home/HomeScreen.kt (1)
  • HomeRoute (14-23)
app/src/main/java/com/flint/presentation/collectiondetail/navigation/CollectionDetailNavigation.kt (2)
app/src/main/java/com/flint/presentation/main/MainNavigator.kt (1)
  • navigate (73-88)
app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt (1)
  • CollectionDetailRoute (6-12)
🪛 detekt (1.23.8)
app/src/main/java/com/flint/presentation/onboarding/OnboardingProfileScreen.kt

[warning] 10-11: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)


[warning] 14-15: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)

app/src/main/java/com/flint/presentation/savedfilm/SavedFilmListScreen.kt

[warning] 14-15: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)

app/src/main/java/com/flint/presentation/onboarding/OnboardingFilmScreen.kt

[warning] 10-11: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)


[warning] 14-15: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)

app/src/main/java/com/flint/presentation/collectionlist/CollectionListScreen.kt

[warning] 15-16: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)

app/src/main/java/com/flint/presentation/splash/SplashScreen.kt

[warning] 16-17: This empty block of code can be removed.

(detekt.empty-blocks.EmptyFunctionBlock)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: PR Build Check
  • GitHub Check: PR Lint Check
🔇 Additional comments (26)
app/src/main/java/com/flint/presentation/collectionlist/component/CollectionFileItem.kt (1)

1-1: 패키지 이동이 적절합니다.

collectiondetail.component에서 collectionlist.component로의 패키지 이동은 컬렉션 목록 기능에 맞게 정리된 것입니다. 기존 패키지 경로를 참조하는 파일이 없으므로 이전이 완전히 처리되었습니다.

app/src/main/java/com/flint/presentation/main/MainScreen.kt (1)

27-30: LGTM!

네비게이션 로직을 MainNavHost로 위임하여 관심사 분리가 잘 되었습니다. MainScreen은 Scaffold 설정과 하단 바에만 집중하고, 실제 네비게이션 그래프 구성은 별도 컴포저블에서 관리하는 구조가 깔끔합니다.

app/src/main/java/com/flint/presentation/collectioncreate/CollectionCreateScreen.kt (1)

6-16: 미사용 파라미터 참고 사항

paddingValuesnavigateToAddFilm 파라미터가 현재 사용되지 않고 있습니다. PR 설명에 따르면 화면 구현이 추후 진행될 예정이므로, 실제 UI 구현 시 해당 파라미터들을 활용해 주세요.

  • paddingValues: 하단 바와의 겹침 방지를 위해 콘텐츠 패딩에 적용
  • navigateToAddFilm: 영화 추가 화면으로 이동 시 호출
app/src/main/java/com/flint/presentation/splash/SplashScreen.kt (1)

6-17: 플레이스홀더로 승인

Route가 Screen을 호출하는 패턴이 일관되게 적용되어 있습니다. Static analysis의 빈 함수 경고는 의도된 플레이스홀더이므로 무시해도 됩니다.

실제 구현 시 paddingValues를 콘텐츠에 적용하고, 인증 상태에 따라 navigateToLogin 또는 navigateToHome을 호출하는 로직이 필요합니다.

app/src/main/java/com/flint/core/navigation/MainTabRoute.kt (1)

5-14: LGTM!

MainTabRoute 인터페이스를 통해 탭 라우트를 타입 안전하게 정의했습니다. @Serializable 어노테이션 적용으로 Navigation Compose의 type-safe navigation을 잘 활용하고 있습니다.

app/src/main/java/com/flint/presentation/main/MainTab.kt (1)

13-27: LGTM!

MainTabRoute 상수를 사용하여 라우트 참조를 중앙 집중화했습니다. 이로 인해 타입 안전성과 유지보수성이 향상됩니다.

app/src/main/java/com/flint/presentation/collectioncreate/navigation/CollectionCreateNavigation.kt (3)

31-36: AddFilm에서 CollectionCreate로의 네비게이션 방식 확인 필요

AddFilmRoute에서 navigateToCollectionCreate를 호출하면 백스택에 새로운 CollectionCreate 화면이 추가됩니다. 만약 "영화 추가 완료 후 이전 화면으로 돌아가기"가 의도라면 popBackStack()을 사용하는 것이 적절할 수 있습니다.

현재 구현은 CollectionCreate → AddFilm → CollectionCreate → ... 형태로 백스택이 무한히 쌓일 수 있습니다.

♻️ popBackStack 사용 예시
 composable<Route.AddFilm> {
     AddFilmRoute(
         paddingValues = paddingValues,
-        navigateToCollectionCreate = navController::navigateToCollectionCreate,
+        navigateToCollectionCreate = { navController.popBackStack() },
     )
 }

12-18: 네비게이션 확장 함수 구현 확인

NavController 확장 함수들이 잘 정의되어 있습니다. 다른 네비게이션 모듈과 일관된 패턴을 따르고 있습니다.


20-29: collectionCreateNavGraph 구현 확인

NavGraphBuilder 확장 함수로 네비게이션 그래프가 잘 구성되어 있습니다. type-safe한 composable<Route.X> 패턴을 사용하고 있습니다.

app/src/main/java/com/flint/presentation/splash/navigation/SplashNavigation.kt (1)

9-21: LGTM!

네비게이션 그래프 설정이 올바르게 구성되어 있습니다. SplashRoute에 필요한 콜백들이 잘 전달되고 있습니다.

app/src/main/java/com/flint/presentation/onboarding/navigation/OnboardingNavigation.kt (1)

24-49: LGTM!

온보딩 플로우(Profile → Film → Ott → Home)가 명확하게 구성되어 있습니다. 내부 네비게이션은 navController 참조를 사용하고, 외부 네비게이션(Home)은 콜백 패턴을 사용하는 것이 적절합니다.

app/src/main/java/com/flint/presentation/home/HomeScreen.kt (1)

14-23: 네비게이션 콜백이 아직 사용되지 않음

navigateToCollectionListnavigateToCollectionCreate 콜백이 추가되었지만 현재 HomeScreen에 전달되지 않고 있습니다. PR 설명에 따르면 UI 담당자 확인 후 연결 예정이므로 현재 상태는 의도된 것으로 보입니다.

향후 UI 작업 시 이 콜백들을 HomeScreen에 전달하여 사용해 주세요.

app/src/main/java/com/flint/presentation/profile/ProfileScreen.kt (1)

14-24: 네비게이션 콜백 확장 확인됨

ProfileRoute에 3개의 네비게이션 콜백(navigateToCollectionList, navigateToSavedFilmList, navigateToCollectionDetail)이 추가되었습니다. 현재는 미사용 상태이며, 이는 네비게이션 그래프 연결을 위한 사전 준비로 이해됩니다.

UI 담당자 확인 후 실제 버튼/이벤트와 연결될 예정이므로 현재 구현은 적절합니다.

app/src/main/java/com/flint/presentation/explore/ExploreScreen.kt (1)

14-23: 네비게이션 콜백 확장 확인됨

ExploreRoute에 navigateToCollectionDetailnavigateToCollectionCreate 콜백이 추가되었습니다. ProfileRoute와 동일한 패턴으로, 네비게이션 그래프 연결을 위한 사전 배치입니다.

app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt (1)

15-27: loginNavGraph 구현 확인됨

NavGraphBuilder 확장 함수가 표준 패턴을 따르고 있으며, LoginRoute와 올바르게 연결되어 있습니다. composable<Route.Login> 구문으로 type-safe navigation을 사용하고 있어 좋습니다.

app/src/main/java/com/flint/presentation/login/LoginScreen.kt (1)

6-17: 플레이스홀더 구현 확인됨 - CollectionListScreen과 동일 패턴

paddingValues, navigateToOnBoarding, navigateToHome 파라미터가 모두 미사용 상태입니다. CollectionListScreen과 마찬가지로 향후 UI 구현 시 연결이 필요합니다.

네비게이션 구조 사전 배치 목적으로 현재 구현은 적절하나, 실제 로그인 화면 구현 시 파라미터 연결을 잊지 않도록 주의가 필요합니다.

app/src/main/java/com/flint/presentation/collectiondetail/CollectionDetailScreen.kt (1)

6-16: LGTM - 스캐폴딩 구조 확인

paddingValuesnavigateToCollectionList 파라미터가 현재 사용되지 않지만, PR 설명에 따르면 화면 이동 흐름을 위한 사전 배치 코드이므로 이해됩니다. 추후 UI 구현 시 해당 파라미터들을 활용해야 함을 기억해 주세요.

app/src/main/java/com/flint/presentation/savedfilm/navigation/SavedFilmListNavigation.kt (1)

11-23: LGTM!

navigateToSavedFilmListsavedFilmListNavGraph가 동일한 Route.SavedFilmList를 사용하여 일관된 네비게이션 패턴을 따르고 있습니다.

app/src/main/java/com/flint/presentation/collectionlist/navigation/CollectionListNavigation.kt (1)

11-25: LGTM!

navigateToCollectionListcollectionListNavGraph가 동일한 Route.CollectionList를 올바르게 사용하고 있습니다. 네비게이션 콜백 전달도 적절합니다.

app/src/main/java/com/flint/presentation/profile/navigation/ProfileNavigation.kt (1)

11-29: LGTM!

MainTabRoute.Profile을 사용하여 탭 기반 네비게이션을 올바르게 구현했습니다. 모든 네비게이션 콜백이 ProfileRoute에 적절히 전달되고 있습니다.

app/src/main/java/com/flint/presentation/home/navigation/HomeNavigation.kt (1)

11-27: LGTM!

MainTabRoute.Home을 route key로 사용하여 navigate 함수와 composable 등록이 일관성 있게 구현되었습니다. Navigation callback들이 HomeRoute에 올바르게 전달되고 있습니다.

app/src/main/java/com/flint/presentation/main/MainNavHost.kt (1)

34-93: 전체 네비게이션 구조가 잘 구성되었습니다.

모든 feature navigation graph가 중앙 집중식으로 구성되어 있고, paddingValues와 navigator callback들이 일관성 있게 전달되고 있습니다. 위에서 언급한 collectionDetailNavGraph의 route key 문제만 수정되면 됩니다.

app/src/main/java/com/flint/presentation/explore/navigation/ExploreNavigation.kt (1)

11-27: LGTM!

HomeNavigation.kt와 동일한 패턴으로 일관성 있게 구현되었습니다. MainTabRoute.Explore를 route key로 사용하여 네비게이션 구조가 올바르게 설정되었습니다.

app/src/main/java/com/flint/presentation/main/MainNavigator.kt (3)

101-103: navigateToOnBoarding의 back stack 동작을 확인하세요.

navigateToLoginpopUpTo로 이전 화면을 정리하지만, navigateToOnBoarding은 navOptions 없이 호출됩니다. Login → OnBoarding 이동 후 뒤로가기 시 Login 화면으로 돌아갈 수 있습니다. 이것이 의도된 UX인지 확인이 필요합니다.


116-130: LGTM!

Collection 및 SavedFilm 관련 네비게이션 헬퍼들이 깔끔하게 구현되었습니다. 앱 내부 화면 이동이므로 기본 navOptions 사용이 적절합니다.


35-35: LGTM!

startDestinationMainTabRoute.Home으로 변경되어 PR 목표에 맞게 탭 기반 라우팅 아키텍처와 일관성을 유지합니다.

✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.

Comment thread app/src/main/java/com/flint/presentation/login/navigation/LoginNavigation.kt Outdated
Comment thread app/src/main/java/com/flint/presentation/main/MainNavHost.kt

@giovannijunseokim giovannijunseokim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 💪

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feat ✨ 신규 기능을 추가하거나 기존 기능의 동작, 정책을 변경 ⚙️ Setting feat - 기본 세팅

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feat] Screen Route 생성

3 participants