-
Notifications
You must be signed in to change notification settings - Fork 0
[Feat] 네비게이션 UI, 로직 수정 #113 #114 #132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This commit updates the NavController back stack entry for HomeViewModel from "main" to `MainTabRoute.Home` in multiple detail screens. Changes were made in the following files: - `MedicineDetail.kt` - `StateHealthDetail.kt` - `StateMentalDetail.kt` - `MealDetail.kt` - `SleepDetail.kt` - `GlucoseDetail.kt`
|
Caution Review failedThe pull request is closed. Walkthrough앱의 네비게이션 아키텍처를 NavController 기반에서 타입 안전 콜백 기반 시스템으로 마이그레이션했습니다. MainNavigator 추상화, Route 시드 인터페이스, MainTab 열거형, MainBottomBar 컴포넌트를 도입하고 모든 화면을 NavController 대신 콜백을 사용하도록 리팩토링했습니다. Changes
Sequence DiagramsequenceDiagram
participant User
participant MainActivity
participant MainNavigator
participant NavGraph
participant Screen
User->>MainActivity: 앱 시작
MainActivity->>MainNavigator: rememberMainNavigator() 생성
MainNavigator->>NavGraph: navigator 주입
NavGraph->>NavGraph: Route 기반 composable 등록
User->>MainBottomBar: 탭 선택 (예: Home)
MainBottomBar->>MainNavigator: navigateToMainTab(MainTab.HOME)
MainNavigator->>NavGraph: MainTabRoute.Home로 이동
NavGraph->>Screen: HomeScreen 렌더링
Screen->>MainNavigator: navigateToMealDetail() 호출
MainNavigator->>NavGraph: Route.MealDetail로 이동
NavGraph->>Screen: MealDetail 렌더링 (onBack 콜백 제공)
User->>Screen: 뒤로가기 버튼 클릭
Screen->>MainNavigator: onBack() → popBackStack()
MainNavigator->>NavGraph: 이전 화면으로 복귀
NavGraph->>Screen: HomeScreen으로 돌아가기
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes 추가 검토 필요 영역:
Possibly related PRs
Suggested reviewers
Poem
Pre-merge checks and finishing touches❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (23)
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt (1)
91-104: Line 94의navigateToUserInfo()호출을 제거해야 합니다.두 번째
LaunchedEffect는 기존 사용자의 네비게이션을 처리하는데, Line 94에서 모든 destination에 대해 무조건navigateToUserInfo()를 먼저 호출하고 있어요. 이렇게 되면GoToHome케이스일 때도 UserInfo → Home 순서로 이동하게 되는데, 이건 명백히 잘못된 플로우입니다.실제로 Line 93의 주석에서도 "기존 사용자는 바로 회원정보 입력 화면으로 이동하지 않고 다른 처리가 필요할 수 있음"이라고 명시되어 있고,
LoginStartScreen에서도navigateToUserInfo()없이 when 분기만 처리하는 패턴을 사용하고 있어요.새 사용자는 첫 번째
LaunchedEffect(line 63)에서 이미navigateToUserInfo()를 호출하므로, 두 번째LaunchedEffect에서는 Line 94를 제거하고 when 분기만 남겨두면 됩니다.
🧹 Nitpick comments (26)
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt (2)
97-101: 코드 포맷팅 개선 제안97-101번 줄의
getStateFlow호출에서false,파라미터가 별도 줄에 있어 가독성이 다소 떨어집니다.다음과 같이 한 줄로 정리하는 것을 고려해보세요:
val savedStateHandle = navController.currentBackStackEntry?.savedStateHandle -val medsChanged by (savedStateHandle?.getStateFlow("medsChanged", false) ?: MutableStateFlow( - false, -)) +val medsChanged by (savedStateHandle?.getStateFlow("medsChanged", false) ?: MutableStateFlow(false)) .collectAsState()
313-323: Preview 함수에 navigateToAlarm 명시 제안Preview 함수들에서
navigateToAlarm파라미터를 명시적으로 전달하지 않고 있습니다. 기본값 빈 람다가 사용되므로 동작에는 문제없지만, 명시적으로 전달하면 더 명확합니다.StatisticsScreenLayout( uiState = dummyUiState, elderNameList = listOf("김옥자", "박막례"), + navigateToAlarm = {}, currentWeek = Pair(LocalDate.now(), LocalDate.now().plusDays(6)), isLatestWeek = false, isEarliestWeek = false, onPreviousWeek = {}, onNextWeek = {}, onDropdownItemSelected = {}, currentElderName = "김옥자", )동일한 변경을 334-346번 줄의 두 번째 preview에도 적용하세요.
app/src/main/java/com/konkuk/medicarecall/ui/common/extension/NavBackStackEntryExt.kt (1)
12-12: 참고 링크의 유효성을 확인하거나 설명 추가를 고려하세요.YouTube 링크로 구현 참고자료를 제공하는 것은 좋지만, 링크가 깨질 수 있습니다. 핵심 개념을 간단히 주석으로 설명하거나 링크의 유효성을 확인해주세요.
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/NaverPayScreen.kt (1)
154-220: JavaScript 인터페이스 로직이 중복되고 있습니다.메인 WebView와 팝업 WebView에서
onPaymentComplete처리 로직이 거의 동일하게 반복되고 있습니다. JSON 파싱,PaymentResult생성, 성공/실패 처리 로직이 두 곳에 중복으로 존재하네요.공통 로직을 별도 함수로 추출하는 것을 고려해보세요:
private fun createPaymentBridge( navigateToFinish: () -> Unit, onBack: () -> Unit, navigated: MutableState<Boolean> ) = object { @JavascriptInterface fun onPaymentComplete(json: String) { Log.d("NaverPayScreen", "Payment complete callback: $json") Handler(Looper.getMainLooper()).post { try { val o = JSONObject(json) val result = PaymentResult( success = o.optBoolean("success", false), orderCode = o.optString("orderCode", null), paymentId = o.optString("paymentId", null), resultCode = o.optString("resultCode", null), message = o.optString("message", null), ) Log.d("NaverPayScreen", "Payment result: $result") if (result.success && !navigated.value) { navigated.value = true navigateToFinish() } else if (!result.success) { Log.w("NaverPayScreen", "Payment failed: ${result.message ?: "unknown"}") onBack() } } catch (e: Exception) { Log.e("NaverPayScreen", "Parse error: ${e.message}") } } } @JavascriptInterface fun closePage() { // popup-specific implementation if needed } }이렇게 하면 메인 WebView와 팝업 WebView에서 동일한 브릿지 객체를 재사용할 수 있습니다.
Also applies to: 474-509
app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavType.kt (2)
13-101: NavType 구현에 상당한 코드 중복이 보입니다.5개의 DTO 타입에 대해 거의 동일한 NavType 구현이 반복되고 있네요. 제네릭 함수나 인라인 함수를 활용하면 중복을 크게 줄일 수 있을 것 같습니다.
다음과 같이 제네릭 팩토리 함수를 사용하는 것을 고려해보세요:
import kotlinx.serialization.KSerializer inline fun <reified T : Any> createNavType( serializer: KSerializer<T> ): NavType<T> = object : NavType<T>(isNullableAllowed = false) { override fun get(bundle: Bundle, key: String): T? { return bundle.getString(key)?.let { Json.decodeFromString(serializer, it) } } override fun parseValue(value: String): T { return Json.decodeFromString(serializer, value) } override fun serializeAsValue(value: T): String { return Json.encodeToString(serializer, value) } override fun put(bundle: Bundle, key: String, value: T) { bundle.putString(key, Json.encodeToString(serializer, value)) } } // Usage val MyInfoResponseDtoType = createNavType(MyInfoResponseDto.serializer()) val EldersInfoResponseDtoType = createNavType(EldersInfoResponseDto.serializer()) // ... and so on이렇게 하면 보일러플레이트를 대폭 줄이고, 명시적인 serializer를 사용하여 타입 안정성도 개선할 수 있습니다.
13-101: 직렬화 시 명시적 serializer 사용을 고려해보세요.현재
Json.decodeFromString(value)형태로 암시적 serializer를 사용하고 있는데, Kotlin Serialization 라이브러리에서는 명시적으로Json.decodeFromString(Dto.serializer(), value)형태를 권장합니다. 이렇게 하면 타입 안정성이 향상되고, 컴파일 타임에 serializer 존재 여부를 확인할 수 있습니다.app/src/main/java/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt (2)
21-22: 사용하지 않는 import를 정리해 주세요.NavHostController와 rememberNavController import가 더 이상 사용되지 않으므로 제거하는 게 좋겠습니다.
-import androidx.navigation.NavHostController -import androidx.navigation.compose.rememberNavController
21-22: 사용하지 않는 import 정리 추천
NavHostController와rememberNavControllerimport가 더 이상 사용되지 않으니 제거해도 좋을 것 같습니다.-import androidx.navigation.NavHostController -import androidx.navigation.compose.rememberNavControllerapp/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt (1)
141-153: 생년월일 입력 처리가 잘 구현되어 있습니다.
DateOfBirthVisualTransformation을 사용해서 YYYY / MM / DD 포맷을 표시하고,maxLength=8로 입력 제한을 두었네요. 깔끔합니다.152번 라인의 불필요한 빈 줄을 제거하면 코드가 더 깔끔해질 것 같아요:
visualTransformation = DateOfBirthVisualTransformation(), maxLength = 8, - - ) + )app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt (2)
93-94: 주석 처리된 코드를 제거하세요이전 네비게이션 패턴의 예시 코드가 주석으로 남아있습니다. 마이그레이션이 완료되었다면 제거하는 것이 좋겠습니다.
-// PersonalInfoCard("김옥자", onClick = {navController.navigate(Route.PersonalDetail.route)}) -// PersonalInfoCard("박막례", onClick = {navController.navigate(Route.PersonalDetail.route)})
53-58: 프로덕션 환경에서는 디버그 로그 제거 고려하세요여러 개의 디버그 로그가 남아있습니다. 개발 중에는 유용하지만, 릴리스 빌드에서는 제거하거나 적절한 로그 레벨로 조정하는 것을 권장합니다.
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt (1)
200-205: 전화번호 포맷팅 함수를 유틸리티로 추출하는 것을 고려하세요
formatPhoneNumber함수가 파일 하단에 정의되어 있습니다. 다른 화면에서도 재사용 가능성이 있다면 공통 유틸리티로 분리하는 것이 좋겠습니다. LoginPhoneScreen.kt에서도PhoneNumberVisualTransformation을 사용하는 것을 보면, 전화번호 관련 유틸리티를 한 곳에 모으면 유지보수에 도움이 될 것 같습니다.app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetail.kt (1)
51-51: 사용하지 않는 import를 제거해주세요.
MainTabRoute를 import 하고 있지만 파일 내에서 사용되지 않습니다.-import com.konkuk.medicarecall.ui.navigation.MainTabRouteapp/src/main/java/com/konkuk/medicarecall/MainActivity.kt (1)
44-48: 코드 포맷팅을 정리해주세요.빈 줄이 불필요하게 추가되어 있습니다.
window.insetsController?.setSystemBarsAppearance( WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, - )app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetail.kt (1)
39-39: 사용하지 않는 import를 제거해주세요.
MainTabRoute를 import 하고 있지만 파일 내에서 사용되지 않습니다.-import com.konkuk.medicarecall.ui.navigation.MainTabRouteapp/src/main/java/com/konkuk/medicarecall/ui/navigation/NavGraph.kt (5)
106-123: 홈 내비게이션을homeNavGraph로 위임한 점은 좋지만, 주석 처리된 코드는 정리하는 게 좋겠어요.
navigator::navigateToMealDetail같은 메서드 참조를 사용해서 리컴포지션마다 람다 재생성을 피하는 패턴은 훌륭합니다. 다만 106~115번 라인의 주석 처리된 코드는 마이그레이션이 완료되면 제거하는 것을 추천합니다.- // 홈 -// composable<MainTabRoute.Home> { backStackEntry -> -// HomeScreen( -// navigateToMealDetail = { navController.navigate(Route.MealDetail) }, -// navigateToMedicationDetail = { navController.navigate(Route.MedicationDetail) }, -// navigateToSleepDetail = { navController.navigate(Route.SleepDetail) }, -// navigateToHealthAnalysisDetail = { navController.navigate(Route.HealthAnalysisDetail) }, -// navigateToMentalAnalysisDetail = { navController.navigate(Route.MentalAnalysisDetail) }, -// navigateToGlucoseDetail = { navController.navigate(Route.GlucoseDetail) }, -// ) -// } homeNavGraph(
185-190: 주석 처리된statisticsNavGraph코드도 정리 예정이신가요?마이그레이션이 완료되면 이 주석 코드도 제거하는 것을 추천합니다.
193-356: 설정 관련 라우트들이 일관되게 구현되었습니다.Type-safe navigation을 활용해 복잡한 객체(
EldersInfoResponseDto,MyInfoResponseDto등)를typeMap을 통해 전달하는 방식이 깔끔합니다. 로그아웃 후navigateToLoginAfterLogout에서Home을 포함해 백스택을 정리하는 로직도 정확합니다.다만 358~373번 라인의 주석 처리된
settingNavGraph코드는 정리하는 것을 추천합니다.
384-502: 로그인 플로우가 잘 구성되어 있습니다.각 로그인 화면이
loginViewModel과loginElderViewModel을 적절히 공유하며, 백스택 관리(popUpTo)도 정확하게 이루어지고 있습니다.LoginFinish에서navigateToMainAfterLogin()을 호출해 로그인 스택을 정리하는 부분도 의도대로 작동할 것 같습니다.다만 504~526번 라인의 주석 처리된
loginNavGraph코드는 마이그레이션 완료 후 제거하는 것을 추천합니다.
173-183: 백스택 기반 ViewModel 공유는 괜찮고, navController 사용도 정당해요.
navController.getBackStackEntry(MainTabRoute.Home)으로HomeViewModel을 공유하는 패턴은 탭 구조상Home이 항상 백스택에 있을 거라 문제없어요. 딥링크 같은 극단적 케이스가 없다면 안전합니다.
StatisticsScreen에 전달된navController는savedStateHandle을 통해 화면 간 상태 통신(medsChanged플래그 관찰)에 사용되고 있어서, 콜백 패턴과 충돌하지 않아요.다만,
navigateToAlarm파라미터는 선언만 되고 실제로는 사용되지 않네요. 필요 없다면 제거하는 게 깔끔할 것 같습니다.// 사용되지 않는 파라미터 navigateToAlarm: () -> Unit = {}, // StatisticsScreen 본문과 Layout 둘 다 미사용app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetail.kt (1)
43-79:onBack콜백 기반으로 잘 전환되었습니다.
NavHostController의존성을 제거하고HomeViewModel도 직접hiltViewModel()로 가져오는 방식이 간결합니다. 다만 36번 라인의import com.konkuk.medicarecall.ui.navigation.MainTabRoute는 사용되지 않는 것 같으니 정리하면 좋겠습니다.-import com.konkuk.medicarecall.ui.navigation.MainTabRouteapp/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainTab.kt (1)
39-49: @composable 어노테이션이 불필요해 보입니다.
find()와contains()함수는 단순히 컬렉션 필터링/검색 연산만 수행하고 UI를 방출하지 않는데,@Composable로 마킹되어 있습니다. 이로 인해:
- 호출하는 쪽이 반드시
@Composable컨텍스트여야 함- 불필요한 리컴포지션 추적 오버헤드 발생 가능
- 사용 가능한 위치가 제한됨
일반 함수로 변경하는 것을 고려해보세요.
companion object { - @Composable - fun find(predicate: @Composable (MainTabRoute) -> Boolean): MainTab? { + fun find(predicate: (MainTabRoute) -> Boolean): MainTab? { return MainTab.entries.find { predicate(it.route) } } - @Composable - fun contains(predicate: @Composable (Route) -> Boolean): Boolean { + fun contains(predicate: (Route) -> Boolean): Boolean { return MainTab.entries.map { it.route }.any { predicate(it) } } }app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt (1)
74-74: 빈 람다가 의도된 것인지 확인 필요
onMonthClick에 빈 구현과 주석이 있는데, 이게 향후 구현 예정인 TODO인지 확인해보세요. 만약 추후 구현할 기능이라면 TODO 주석으로 명시하면 더 명확할 것 같습니다.혹시 이 기능 구현을 추적할 이슈를 생성하고 싶으시면 도움드릴 수 있습니다!
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/navigation/SettingNavigation.kt (1)
87-102: 파라미터 개수가 많아 함수 사용성이 떨어질 수 있습니다.14개의 콜백 파라미터는 상당히 많은 편입니다. 이 함수를 호출하는 쪽에서 람다를 일일이 전달하기 번거롭고, 순서를 헷갈릴 수도 있습니다.
파라미터를 묶는 방식을 고려해보세요:
data class SettingNavigationCallbacks( val popBackStack: () -> Unit, val navigateToElderPersonalInfo: () -> Unit, val navigateToElderPersonalDetail: (EldersInfoResponseDto) -> Unit, // ... 나머지 콜백들 ) fun NavGraphBuilder.settingNavGraph( callbacks: SettingNavigationCallbacks, ) { // 내부에서 callbacks.popBackStack(), callbacks.navigateToX() 형태로 사용 }또는 더 나아가서, 이런 콜백들을 제공하는 인터페이스를 만들어 의존성을 주입하는 방식도 고려할 수 있습니다. 지금 당장 급하게 고칠 필요는 없지만, 나중에 유지보수 시 고려해보면 좋을 것 같습니다.
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt (1)
386-415: 콜백 연결이 올바르게 이루어졌습니다.각 컨테이너 컴포넌트에 적절한 네비게이션 콜백이 전달되고 있습니다.
다만, PR 설명에서 언급한 것처럼 리컴포지션 시 람다 객체 생성을 피하기 위해 함수 참조를 직접 전달하는 방식을 고려해볼 수 있습니다:
// 현재 방식 (람다 생성) onClick = { navigateToMealDetail() } // 최적화된 방식 (함수 참조) onClick = navigateToMealDetail파라미터가 없는 콜백이므로 바로 함수 참조로 전달 가능합니다. 성능이 크리티컬한 부분이 아니라면 현재 방식도 괜찮지만, 일관성 있게 최적화를 적용하고 싶다면 변경을 고려해보세요.
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt (1)
85-92: 복잡한 인코딩 로직을 제거하고 직관적인 타입 안전 내비게이션으로 개선이전에는 DTO를 JSON으로 직렬화하고 URL 인코딩하는 복잡한 과정이 필요했으나, 이제는 객체를 직접 전달하여 코드가 훨씬 간결하고 타입 안전해졌습니다.
참고로, 93-94번 줄의 주석 처리된 예제 코드는 제거해도 좋을 것 같습니다.
} -// PersonalInfoCard("김옥자", onClick = {navController.navigate(Route.HealthDetail.route)}) -// PersonalInfoCard("박막례", onClick = {navController.navigate(Route.HealthDetail.route)}) Spacer(modifier = Modifier.height(20.dp))
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (53)
app/src/main/java/com/konkuk/medicarecall/MainActivity.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/data/dto/response/MyInfoResponseDto.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/navigation/BottomNavItem.kt(0 hunks)app/src/main/java/com/konkuk/medicarecall/navigation/NavGraph.kt(0 hunks)app/src/main/java/com/konkuk/medicarecall/navigation/Route.kt(0 hunks)app/src/main/java/com/konkuk/medicarecall/ui/common/component/NameBar.kt(5 hunks)app/src/main/java/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/common/extension/NavBackStackEntryExt.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/navigation/AlarmNavigation.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/screen/AlarmScreen.kt(2 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt(21 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetail.kt(7 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetail.kt(8 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetail.kt(5 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/navigation/HomeDetailNavGraph.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetail.kt(5 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetail.kt(5 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/carecall/screen/SetCallScreen.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt(13 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginPhoneScreen.kt(4 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginStartScreen.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt(7 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/FinishSplashScreen.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/NaverPayScreen.kt(20 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/PaymentScreen.kt(2 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt(6 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt(9 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/navigation/SettingNavigation.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt(4 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt(4 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt(4 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt(7 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt(10 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/viewmodel/MyDataViewModel.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/splash/screen/SplashScreen.kt(2 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/navigation/StatisticsNavigation.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt(15 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavGraph.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavType.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/Route.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainBottomBar.kt(1 hunks)app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainTab.kt(1 hunks)app/src/main/res/drawable/ic_home_selected.xml(1 hunks)app/src/main/res/drawable/ic_home_unselected.xml(1 hunks)app/src/main/res/drawable/ic_settings_selected.xml(1 hunks)app/src/main/res/drawable/ic_settings_unselected.xml(1 hunks)app/src/main/res/drawable/ic_statistics_selected.xml(1 hunks)app/src/main/res/drawable/ic_statistics_unselected.xml(1 hunks)
💤 Files with no reviewable changes (3)
- app/src/main/java/com/konkuk/medicarecall/navigation/BottomNavItem.kt
- app/src/main/java/com/konkuk/medicarecall/navigation/Route.kt
- app/src/main/java/com/konkuk/medicarecall/navigation/NavGraph.kt
🧰 Additional context used
🧬 Code graph analysis (27)
app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/navigation/AlarmNavigation.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/screen/AlarmScreen.kt (1)
AlarmScreen(20-70)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainBottomBar.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/theme/Theme.kt (1)
MediCareCallTheme(38-60)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/component/LoginBackButton.kt (1)
LoginBackButton(17-37)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/component/ElderInputForm.kt (1)
ElderInputForm(37-178)app/src/main/java/com/konkuk/medicarecall/ui/common/component/DefaultSnackBar.kt (1)
DefaultSnackBar(17-37)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt (2)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/component/PersonalInfoCard.kt (1)
PersonalInfoCard(29-72)app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
navigateToHealthDetail(179-181)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/component/PersonalInfoCard.kt (1)
PersonalInfoCard(29-72)
app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/screen/AlarmScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/component/AlarmItem.kt (1)
AlarmItem(16-36)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt (2)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/component/LoginBackButton.kt (1)
LoginBackButton(17-37)app/src/main/java/com/konkuk/medicarecall/ui/common/component/DefaultTextField.kt (1)
DefaultTextField(18-64)
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/common/component/NameBar.kt (1)
NameBar(27-77)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetail.kt (2)
app/src/main/java/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt (1)
TopAppBar(26-76)app/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/DateSelector.kt (1)
DateSelector(24-70)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (2)
navigateToUserInfo(207-209)navigateToHome(138-140)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/component/LoginBackButton.kt (1)
LoginBackButton(17-37)app/src/main/java/com/konkuk/medicarecall/ui/common/component/DefaultSnackBar.kt (1)
DefaultSnackBar(17-37)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/navigation/HomeDetailNavGraph.kt (6)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetail.kt (1)
MealDetail(37-70)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetail.kt (1)
MedicineDetail(43-78)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetail.kt (1)
SleepDetail(41-79)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetail.kt (1)
StateHealthDetail(43-91)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt (1)
StateMentalDetail(39-76)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetail.kt (1)
GlucoseDetail(58-136)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (2)
navigateToUserInfoSetting(211-213)navigateToLoginAfterLogout(215-221)
app/src/main/java/com/konkuk/medicarecall/ui/feature/splash/screen/SplashScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
navigateToHome(138-140)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavGraph.kt (33)
app/src/main/java/com/konkuk/medicarecall/ui/feature/splash/screen/SplashScreen.kt (1)
SplashScreen(24-83)app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt (1)
homeNavGraph(14-32)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetail.kt (1)
MealDetail(37-70)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetail.kt (1)
MedicineDetail(43-78)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetail.kt (1)
SleepDetail(41-79)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetail.kt (1)
StateHealthDetail(43-91)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt (1)
StateMentalDetail(39-76)app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/glucoselevel/screen/GlucoseDetail.kt (1)
GlucoseDetail(58-136)app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt (1)
StatisticsScreen(49-121)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt (1)
SettingsScreen(40-302)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt (1)
PersonalInfoScreen(33-99)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderDetailScreen.kt (1)
PersonalDetailScreen(49-247)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt (1)
HealthInfoScreen(33-99)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthDetailScreen.kt (1)
HealthDetailScreen(40-135)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingAlarmScreen.kt (1)
SettingAlarmScreen(36-182)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt (1)
SettingSubscribeScreen(31-81)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SubscribeDetailScreen.kt (1)
SubscribeDetailScreen(36-147)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt (1)
AnnouncementScreen(26-82)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementDetailScreen.kt (1)
AnnouncementDetailScreen(28-95)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ServiceCenterScreen.kt (1)
ServiceCenterScreen(23-61)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt (1)
MyDataSettingScreen(47-198)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDetailScreen.kt (1)
MyDetailScreen(40-137)app/src/main/java/com/konkuk/medicarecall/ui/feature/alarm/screen/AlarmScreen.kt (1)
AlarmScreen(20-70)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginStartScreen.kt (1)
LoginStartScreen(35-128)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginPhoneScreen.kt (1)
LoginPhoneScreen(38-122)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt (1)
LoginVerificationScreen(41-171)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt (1)
LoginMyInfoScreen(58-315)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt (1)
LoginElderScreen(47-234)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt (1)
LoginElderMedInfoScreen(45-197)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/carecall/screen/SetCallScreen.kt (1)
SetCallScreen(65-398)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/PaymentScreen.kt (1)
PaymentScreen(44-167)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/NaverPayScreen.kt (1)
NaverPayScreen(52-535)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/FinishSplashScreen.kt (1)
FinishSplashScreen(27-69)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
navigateToNoticeDetail(199-201)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/navigation/HomeNavigation.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt (1)
HomeScreen(76-131)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginStartScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
navigateToHome(138-140)
app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/common/component/NameBar.kt (1)
NameBar(27-77)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/component/SettingsTopAppBar.kt (1)
SettingsTopAppBar(22-80)app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (4)
navigateToUserInfo(207-209)navigateToNotice(195-197)navigateToElderPersonalInfo(167-169)navigateToNotificationSetting(183-185)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/navigation/SettingNavigation.kt (1)
navigateToElderHealthInfo(47-49)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt (10)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginStartScreen.kt (1)
LoginStartScreen(35-128)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginPhoneScreen.kt (1)
LoginPhoneScreen(38-122)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt (1)
LoginVerificationScreen(41-171)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt (1)
LoginMyInfoScreen(58-315)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt (1)
LoginElderScreen(47-234)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt (1)
LoginElderMedInfoScreen(45-197)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/carecall/screen/SetCallScreen.kt (1)
SetCallScreen(65-398)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/PaymentScreen.kt (1)
PaymentScreen(44-167)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/NaverPayScreen.kt (1)
NaverPayScreen(52-535)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/FinishSplashScreen.kt (1)
FinishSplashScreen(27-69)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/component/SubscribeCard.kt (1)
SubscribeCard(27-81)
app/src/main/java/com/konkuk/medicarecall/MainActivity.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
rememberMainNavigator(235-240)app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainBottomBar.kt (1)
MainBottomBar(39-81)app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavGraph.kt (1)
NavGraph(67-528)
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/navigation/StatisticsNavigation.kt (1)
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt (1)
StatisticsScreen(49-121)
app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt (1)
TopAppBar(26-76)app/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/DateSelector.kt (1)
DateSelector(24-70)app/src/main/java/com/konkuk/medicarecall/ui/feature/calendar/WeeklyCalendar.kt (1)
WeeklyCalendar(25-94)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginPhoneScreen.kt (2)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/component/LoginBackButton.kt (1)
LoginBackButton(17-37)app/src/main/java/com/konkuk/medicarecall/ui/common/component/DefaultSnackBar.kt (1)
DefaultSnackBar(17-37)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/navigation/SettingNavigation.kt (13)
app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingsScreen.kt (1)
SettingsScreen(40-302)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderInfoScreen.kt (1)
PersonalInfoScreen(33-99)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ElderDetailScreen.kt (1)
PersonalDetailScreen(49-247)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthInfoScreen.kt (1)
HealthInfoScreen(33-99)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/HealthDetailScreen.kt (1)
HealthDetailScreen(40-135)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingAlarmScreen.kt (1)
SettingAlarmScreen(36-182)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SettingSubscribeScreen.kt (1)
SettingSubscribeScreen(31-81)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/SubscribeDetailScreen.kt (1)
SubscribeDetailScreen(36-147)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementScreen.kt (1)
AnnouncementScreen(26-82)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/AnnouncementDetailScreen.kt (1)
AnnouncementDetailScreen(28-95)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/ServiceCenterScreen.kt (1)
ServiceCenterScreen(23-61)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt (1)
MyDataSettingScreen(47-198)app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDetailScreen.kt (1)
MyDetailScreen(40-137)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/component/LoginBackButton.kt (1)
LoginBackButton(17-37)app/src/main/java/com/konkuk/medicarecall/ui/common/component/ChipItem.kt (1)
ChipItem(22-52)app/src/main/java/com/konkuk/medicarecall/ui/common/component/DefaultSnackBar.kt (1)
DefaultSnackBar(17-37)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt
Outdated
Show resolved
Hide resolved
app/src/main/java/com/konkuk/medicarecall/ui/feature/splash/screen/SplashScreen.kt
Show resolved
Hide resolved
| fun NavGraphBuilder.statisticsNavGraph( | ||
| navController: NavHostController, // 나중에 바꿔야함. | ||
| getBackStackHomeViewModel: @Composable (NavBackStackEntry) -> HomeViewModel, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
navController 파라미터를 콜백 기반으로 교체하는 게 좋겠습니다.
TODO 코멘트("나중에 바꿔야함")가 있는 navController 파라미터는 PR의 목표(UDF 준수를 위해 NavController 의존성 제거)와 일치하지 않습니다. 다른 NavGraph 구현들처럼 필요한 네비게이션 동작을 콜백으로 받는 방식으로 변경하는 것을 권장합니다.
예시:
fun NavGraphBuilder.statisticsNavGraph(
- navController: NavHostController, // 나중에 바꿔야함.
+ navigateToAlarm: () -> Unit,
getBackStackHomeViewModel: @Composable (NavBackStackEntry) -> HomeViewModel,
) {Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In app/src/main/.../StatisticsNavigation.kt around lines 18-20, replace the
NavHostController parameter with callback lambdas for the navigation actions the
graph needs (e.g., onNavigateToDetail: (id: String) -> Unit, onNavigateUp: () ->
Unit) instead of passing navController; update the statisticsNavGraph signature
to accept those callbacks, remove direct NavController usages inside the graph
and invoke the callbacks where navigation would occur, and update all callers to
pass appropriate lambdas (or hoisted navController actions) so the file no
longer depends on NavHostController and matches other NavGraph implementations.
| StatisticsScreen( | ||
| navController = navController, | ||
| homeViewModel = homeViewModel, | ||
| ) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
navigateToAlarm 콜백 파라미터를 전달해주세요.
StatisticsScreen이 navigateToAlarm 파라미터를 받도록 시그니처가 변경되었는데(관련 파일 참조), 여기서는 전달하지 않고 있습니다. 기본값이 빈 람다이긴 하지만, PR의 네비게이션 패턴(콜백 기반 네비게이션)을 일관되게 적용하려면 명시적으로 전달하는 게 좋습니다.
StatisticsScreen(
navController = navController,
+ navigateToAlarm = navigateToAlarm,
homeViewModel = homeViewModel,
)참고: 위의 navController 파라미터를 제거하는 리팩토링과 함께 적용하면 더욱 깔끔해집니다.
Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/navigation/StatisticsNavigation.kt
around lines 25-28, the call to StatisticsScreen omits the newly added
navigateToAlarm callback parameter; update the invocation to explicitly pass the
callback (for example navigateToAlarm = { homeViewModel.navigateToAlarm() } or
navigateToAlarm = { navController.navigate("alarm_route") } depending on your
app navigation API) and while here, remove the now-unneeded navController
parameter from StatisticsScreen if you’ve refactored to callback-based
navigation to keep the pattern consistent.
app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt
Show resolved
Hide resolved
app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainBottomBar.kt
Show resolved
Hide resolved
- Rename `navigateTpRegisterUserInfo` to `navigateToRegisterUserInfo` to fix a typo. - Remove unused imports in `MainActivity` and `LoginNavigation`.
|
LGTM! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (2)
app/src/main/java/com/konkuk/medicarecall/MainActivity.kt (1)
70-88:MainTab.entries.toList()중복 할당 줄이기여기서 매 리컴포지션마다 새 리스트를 만들고 있어서 살짝 아깝습니다.
remember로 한 번만 만들어두면 가벼워져요.+import androidx.compose.runtime.remember … - val navigator = rememberMainNavigator() + val navigator = rememberMainNavigator() + val mainTabs = remember { MainTab.entries.toList() } … - tabs = MainTab.entries.toList(), + tabs = mainTabs,app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt (1)
63-79: 함수 시그니처가 다소 길지만, 현재 구조로는 적절합니다.15개의 콜백 파라미터가 다소 많아 보이긴 하지만, 로그인 플로우가 복잡하고 각 화면이
NavController에 의존하지 않도록 하는 좋은 아키텍처 선택입니다. 만약 파라미터가 더 늘어난다면 configuration 객체로 그룹핑하는 것을 고려해볼 수 있지만, 지금은 충분히 관리 가능한 수준입니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
app/src/main/java/com/konkuk/medicarecall/MainActivity.kt(3 hunks)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt(1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
app/src/main/java/com/konkuk/medicarecall/MainActivity.kt (3)
app/src/main/java/com/konkuk/medicarecall/ui/navigation/MainNavigator.kt (1)
rememberMainNavigator(235-240)app/src/main/java/com/konkuk/medicarecall/ui/navigation/component/MainBottomBar.kt (1)
MainBottomBar(39-81)app/src/main/java/com/konkuk/medicarecall/ui/navigation/NavGraph.kt (1)
NavGraph(67-528)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt (10)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginStartScreen.kt (1)
LoginStartScreen(35-128)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginPhoneScreen.kt (1)
LoginPhoneScreen(38-122)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginVerificationScreen.kt (1)
LoginVerificationScreen(41-171)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/info/screen/LoginMyInfoScreen.kt (1)
LoginMyInfoScreen(58-315)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt (1)
LoginElderScreen(47-234)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt (1)
LoginElderMedInfoScreen(45-197)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/carecall/screen/SetCallScreen.kt (1)
SetCallScreen(65-398)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/PaymentScreen.kt (1)
PaymentScreen(44-167)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/NaverPayScreen.kt (1)
NaverPayScreen(52-535)app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/FinishSplashScreen.kt (1)
FinishSplashScreen(27-69)
🔇 Additional comments (2)
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt (2)
23-61: 타입 안전한 네비게이션 확장 함수들이 잘 구현되어 있습니다.
Route객체를 사용한 타입 안전 네비게이션으로 마이그레이션이 깔끔하게 처리되었네요. 일관된 네이밍 패턴과 필요한 곳에만NavOptions를 받는 구조도 좋습니다.
80-157: 로그인 플로우의 라우트 정의가 체계적으로 구성되어 있습니다.각 화면이 콜백 기반 네비게이션을 받도록 리팩토링되어
NavController의존성이 제거된 점이 훌륭합니다. ViewModel 공유 패턴도 올바르게 적용되었고, 126번 라인의navigateToCareCallSettingWithPopUpTo사용도 백스택 관리를 위한 의도적인 선택으로 보입니다.
| import com.konkuk.medicarecall.ui.feature.login.senior.LoginElderViewModel | ||
| import com.konkuk.medicarecall.ui.feature.login.senior.screen.LoginElderMedInfoScreen | ||
| import com.konkuk.medicarecall.ui.feature.login.senior.screen.LoginElderScreen | ||
| import com.konkuk.medicarecall.ui.navigation.Route |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
Route 객체들의 정의를 확인해주세요.
타입 안전 네비게이션을 위해 사용되는 Route.* 객체들이 올바르게 정의되어 있는지 검증이 필요합니다. Serializable 지원이 제대로 구현되어 있는지 확인해주세요.
다음 스크립트로 Route 정의를 확인할 수 있습니다:
🏁 Script executed:
#!/bin/bash
# Route 클래스의 정의를 확인하여 type-safe navigation에 필요한 serializable 객체들이 제대로 선언되어 있는지 검증
# Route 파일 찾기
route_file=$(fd -t f "Route.kt" app/src/main/java)
if [ -z "$route_file" ]; then
echo "Route.kt 파일을 찾을 수 없습니다."
exit 1
fi
echo "=== Route 파일 위치 ==="
echo "$route_file"
echo ""
echo "=== Login 관련 Route 객체 정의 ==="
rg -A 2 "object Login|class Login" "$route_file"Length of output: 714
Serializable 어노테이션 누락 (LoginStart)
Route.kt의 LoginStart 객체에 @Serializable이 빠져 있습니다. 모든 네비게이션 Route 객체에 직렬화 어노테이션을 일관되게 적용해주세요.
🤖 Prompt for AI Agents
In
app/src/main/java/com/konkuk/medicarecall/ui/feature/login/navigation/LoginNavigation.kt
around line 21, the import shows Route usage but Route.LoginStart in Route.kt is
missing the @Serializable annotation; update the Route.kt file to add
@Serializable to the LoginStart object (and ensure
kotlinx.serialization.Serializable is imported), keeping annotations consistent
with other Route objects so the navigation routes are serializable.
# Conflicts: # app/src/main/java/com/konkuk/medicarecall/MainActivity.kt # app/src/main/java/com/konkuk/medicarecall/navigation/NavGraph.kt # app/src/main/java/com/konkuk/medicarecall/ui/common/component/NameBar.kt # app/src/main/java/com/konkuk/medicarecall/ui/common/component/TopAppBar.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/home/screen/HomeScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/meal/screen/MealDetail.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/medicine/screen/MedicineDetail.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/sleep/screen/SleepDetail.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statehealth/screen/StateHealthDetail.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/homedetail/statemental/screen/StateMentalDetail.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/login/carecall/screen/CallTimeScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/login/payment/screen/LoginFinishScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderInfoScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/login/senior/screen/LoginElderMedInfoScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/settings/screen/MyDataSettingScreen.kt # app/src/main/java/com/konkuk/medicarecall/ui/feature/statistics/screen/StatisticsScreen.kt
🔗 관련 이슈
📙 작업 설명
route대신 serial 한data object/data class로 마이그레이션NavHost경로 파라미터 대신 제네릭 타입으로 설정Encode/Decode로직 제거 ->NayType<>으로 변경MainNavigator구현💬 추가 설명 or 리뷰 포인트 (선택)
routeString 대신object/class를 사용해 휴먼에러를 줄일 수 있습니다.navController라는 state 를 주고받았는데, 그 대신navigate이벤트를 주고받도록 변경해서, UDF 를 만족시켰습니다.NavBackStackEntry.sharedViewModel를 통해서 뷰모델을 공유할 수 있는 확장함수를 구현했습니다.MainNavigator를 구현해서 navigate 함수를 파라미터로 넘길 때, 리컴포지션 시 불필요한 객체가 매번 생성되는 것을 방지했습니다.또한
MainNavigator의shouldShowBottomBar()를 통해 원하는 조건에 따라 바텀바가 보일 수 있도록 구현했습니다. (현재는 메인탭에 속하는 경우만 보임)해당 내용 중 궁금한 내용이 있으면 말씀해주세요! 머지는 다음 회의 때 내용 말씀드린 후에 하겠습니다.
Summary by CodeRabbit
릴리스 노트
새로운 기능
UI/UX 개선
리팩토링