[NDGL-105] 앱 아이콘, 스플래시 화면, 유저 가이드 모달 추가#32
Conversation
|
Important Review skippedAuto incremental reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Use the checkbox below for a quick retry:
Walkthrough애플리케이션의 인증 흐름을 재구조화하여 스플래시 스크린 기능으로 이전하고, 첫 사용자 안내 모달을 도입했습니다. auth 기능 모듈을 splash 기능 모듈로 교체하고, 앱 테마와 리소스를 업데이트했으며, 내비게이션에 스플래시 스크린을 추가했습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant MainActivity as MainActivity
participant SplashRoute as SplashRoute
participant SplashViewModel as SplashViewModel
participant AuthRepository as AuthRepository
participant UserGuideModal as UserGuideModal
participant HomeScreen as HomeScreen
MainActivity->>MainActivity: installSplashScreen()
MainActivity->>MainActivity: AnimatedContent(currentScreen)
MainActivity->>SplashRoute: showSplashScreen()
SplashRoute->>SplashViewModel: init (via hiltViewModel)
SplashViewModel->>SplashViewModel: initSession()
SplashViewModel->>AuthRepository: initSession()
alt UUID 없음 또는 로그인 실패
AuthRepository->>AuthRepository: isFirstUser = true
else 로그인 성공
AuthRepository->>AuthRepository: isFirstUser = false
end
AuthRepository-->>SplashViewModel: return isFirstUser: Boolean
SplashViewModel->>SplashViewModel: emit NavigateToHome(isFirstUser)
SplashRoute-->>MainActivity: navigateToHome(isFirstUser)
MainActivity->>MainActivity: currentScreen = AppScreen.Main
MainActivity->>MainActivity: showUserGuideModal = isFirstUser
alt isFirstUser == true
MainActivity->>UserGuideModal: show()
UserGuideModal->>UserGuideModal: user confirms or clicks terms
end
MainActivity->>HomeScreen: showMainScreen()
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes 🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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.
Actionable comments posted: 5
🧹 Nitpick comments (5)
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (1)
3-5: monochrome 레이어가 제거되었습니다.Android 13 이상에서 테마 아이콘(Themed Icons)을 활성화한 사용자에게 모노크롬 아이콘 변형이 표시되지 않습니다. 의도된 변경이라면 무시해도 좋지만, 테마 아이콘 지원이 필요하다면
<monochrome>레이어를 유지하는 것이 좋습니다.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml` around lines 3 - 5, The adaptive-icon XML lost the <monochrome> layer so Android 13+ themed icons won't get a monochrome variant; restore a <monochrome android:drawable="..."/> element inside the <adaptive-icon> (alongside the existing <background android:drawable="@color/ic_launcher_background"/> and <foreground android:drawable="@drawable/ic_launcher_foreground"/>) and point it to the monochrome drawable (e.g., `@drawable/ic_launcher_monochrome`) so themed icons are supported.app/src/main/java/com/yapp/ndgl/MainActivity.kt (1)
29-49:AnimatedContent에label파라미터 누락
AnimatedContent에label파라미터를 지정하지 않으면 Compose 도구(Layout Inspector 등)에서 디버깅 시 식별이 어렵습니다. 또한,contentKey를 명시적으로 지정하면 불필요한 리컴포지션을 방지할 수 있습니다.제안된 변경
AnimatedContent( targetState = currentScreen, + label = "AppScreenTransition", ) { screen ->🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@app/src/main/java/com/yapp/ndgl/MainActivity.kt` around lines 29 - 49, AnimatedContent is missing a label and a contentKey which makes debugging and unnecessary recompositions harder; update the AnimatedContent call (the one using targetState = currentScreen) to include a descriptive label parameter (e.g., label = "AppScreenAnimatedContent") and add contentKey = { it } (or another stable key based on currentScreen) so the component is identifiable in tools and avoids redundant recompositions when switching between AppScreen.Splash and AppScreen.Main.core/ui/src/main/java/com/yapp/ndgl/core/ui/designsystem/NDGLUserGuideModal.kt (1)
90-99: 이용약관 텍스트의 접근성(Accessibility) 개선 권장
.clickable모디파이어만 사용하면 TalkBack 등 스크린 리더가 해당 요소를 링크 또는 버튼으로 인식하지 못합니다.role = Role.Button을 지정하거나,onClickLabel을 추가하면 접근성이 향상됩니다.제안된 변경
Text( text = stringResource(R.string.user_guide_modal_terms), modifier = Modifier .padding(top = 12.dp) - .clickable(onClick = onTermsClick), + .clickable( + onClick = onTermsClick, + role = androidx.compose.ui.semantics.Role.Button, + onClickLabel = stringResource(R.string.user_guide_modal_terms), + ), color = NDGLTheme.colors.black400, textAlign = TextAlign.Center, textDecoration = TextDecoration.Underline, style = NDGLTheme.typography.bodyMdMedium, )🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@core/ui/src/main/java/com/yapp/ndgl/core/ui/designsystem/NDGLUserGuideModal.kt` around lines 90 - 99, The Text composable that uses Modifier.clickable(...) (the Text element rendering stringResource(R.string.user_guide_modal_terms) and using onTermsClick) lacks accessibility metadata; update the Modifier.clickable call to provide accessibility info by specifying role = Role.Button or adding an onClickLabel (or both) so screen readers recognize it as an actionable control; locate the Text with modifier = Modifier.padding(...).clickable(onClick = onTermsClick) and modify that clickable invocation to include role = Role.Button and/or onClickLabel = stringResource(R.string.user_guide_modal_terms) to improve TalkBack/VoiceOver support.feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt (1)
73-73: 긴 라인 분리 권장가독성을 위해
Icon컴포저블의 파라미터를 각각 별도 라인으로 분리하는 것을 권장합니다.제안된 변경
- Icon(imageVector = ImageVector.vectorResource(R.drawable.ic_splash), contentDescription = null, tint = Color.Unspecified) + Icon( + imageVector = ImageVector.vectorResource(R.drawable.ic_splash), + contentDescription = null, + tint = Color.Unspecified, + )🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt` at line 73, 현재 Icon(...) 호출이 한 줄로 작성되어 있어 가독성이 떨어집니다; SplashScreen의 Icon 컴포저블 호출을 찾아 Icon(imageVector = ImageVector.vectorResource(R.drawable.ic_splash), contentDescription = null, tint = Color.Unspecified) 파라미터를 각기 별도 라인으로 분리하여 정렬하고 들여쓰기를 적용하세요(예: imageVector = ..., contentDescription = ..., tint = ... 각자 한 줄). 기존 값들은 그대로 유지하되 파라미터 줄 바꿈만 수행해 읽기 쉽게 만들어 주세요.feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashContract.kt (1)
6-6:SplashState를data object로 변경 권장프로퍼티가 없는
class는 인스턴스마다equals/hashCode가 달라져 상태 비교 문제를 유발할 수 있습니다.data object로 변경하면 싱글톤 의미론과 올바른 equality를 보장합니다.UiState는 마커 인터페이스로 모든 구현 타입을 허용합니다.변경이 필요한 두 위치:
- SplashContract.kt (현재 줄)
-class SplashState : UiState +data object SplashState : UiState
- SplashViewModel.kt (초기 상태 설정)
- initialState = SplashState(), + initialState = SplashState,🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashContract.kt` at line 6, SplashState should be a singleton data object: replace the declaration "class SplashState : UiState" with "data object SplashState : UiState" in SplashContract (so it has object semantics and generated equality), and update SplashViewModel where the initial state is set (replace any usage like "SplashState()" or "SplashState()" constructor calls) to reference the object directly as "SplashState".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@app/build.gradle.kts`:
- Line 18: The BuildConfig field NDGL_TERMS_URL is being pulled from
localProperties via buildConfigField with localProperties.getProperty which
makes the public static URL silently empty in dev/CI if the key is missing;
either (A) move the static terms URL into flavor/build-variant constants
(hardcode per flavor) instead of using local.properties so NDGL_TERMS_URL is
always present, or (B) if you must keep local.properties, add a build-time
validation in the Gradle script around the buildConfigField construction to
check localProperties.getProperty("NDGL_TERMS_URL") is non-empty and fail the
build with a clear message, and also add documentation by creating a
local.properties.example/README entry describing the key; update references to
NDGL_TERMS_URL accordingly (search for buildConfigField("String",
"NDGL_TERMS_URL", ...) and localProperties.getProperty).
In `@app/src/main/java/com/yapp/ndgl/MainActivity.kt`:
- Around line 36-42: The Splash screen can get stuck because
SplashViewModel.initSession() swallows errors (see SplashViewModel.initSession)
and never triggers the NavigateToHome side-effect; update
SplashViewModel.initSession to emit an error state or a fallback navigation
event on failure (e.g., expose a LiveData/StateFlow like initError or
navigateToHomeFallback), then update SplashRoute/navigateToHome handling to show
a retry UI (retry button calls SplashViewModel.initSession again) and/or perform
a safe fallback navigation (call navigateToHome(false)) after a failure or
timeout so the user can leave the splash screen instead of being stuck.
In `@core/ui/src/main/java/com/yapp/ndgl/core/ui/theme/Theme.kt`:
- Around line 34-35: lightColorScheme에서 background와 surface를 Color.Transparent로
설정하여 Material3 컴포넌트 전반에 시각적 회귀가 발생하니, Theme.kt의 lightColorScheme 내 background와
surface 항목(Color.Transparent) 값을 투명 대신 기본/불투명 색상으로 복원하세요; 예를 들어 원래 사용하던 색상(또는
Color.White/Material default 색상)을 할당하거나 투명 처리된 부분을 제거해
Scaffold/Card/Surface/ModalBottomSheet/AlertDialog 등이 창 배경을 비추지 않도록 수정하고, 스플래시
관련 투명 효과는 themes.xml의 android:windowIsTranslucent 및 postSplashScreenTheme 조합으로만
처리하도록 유지하세요.
In
`@data/auth/src/main/java/com/yapp/ndgl/data/auth/repository/AuthRepository.kt`:
- Around line 27-38: The current logic in the block using suspendRunCatching {
login(uuid) } clears the session, sets isFirstUser = true, and calls
createUser() for any login failure; change this to distinguish authentication
failures (e.g., HTTP 401/invalid token) from transient network errors and only
clearSession()/set isFirstUser/createUser() when the failure is an auth error.
Update the error handling around login(uuid) (the suspendRunCatching handler) to
inspect the thrown exception or HTTP response (status code or custom exception
type) and: on 401-like auth errors, call localAuthDataSource.clearSession(), set
isFirstUser = true and createUser(); on transient network errors (timeouts,
IOExceptions, connectivity issues) avoid clearing the session—either propagate
the error/retry or return a recoverable failure so the existing user is
preserved. Ensure this logic is applied where login(uuid),
localAuthDataSource.clearSession(), isFirstUser, and createUser() are
referenced.
In
`@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashViewModel.kt`:
- Around line 22-30: The initSession() onFailure block is empty and leaves users
stuck on the splash screen; update the onFailure handler in
SplashViewModel.initSession to surface an error and provide a recovery path:
catch the error from authRepository.initSession() and either (a) post an error
SplashState (e.g., set a new SplashState.Error with the throwable) so the UI can
show a retry button and call initSession() again, or (b) emit a safe fallback
side effect like postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser =
true)) when desired; make sure to reference initSession(),
authRepository.initSession(), postSideEffect(...) and
SplashSideEffect.NavigateToHome (or add a SplashState/Error state) so the UI can
react and allow retry/backoff logic.
---
Nitpick comments:
In `@app/src/main/java/com/yapp/ndgl/MainActivity.kt`:
- Around line 29-49: AnimatedContent is missing a label and a contentKey which
makes debugging and unnecessary recompositions harder; update the
AnimatedContent call (the one using targetState = currentScreen) to include a
descriptive label parameter (e.g., label = "AppScreenAnimatedContent") and add
contentKey = { it } (or another stable key based on currentScreen) so the
component is identifiable in tools and avoids redundant recompositions when
switching between AppScreen.Splash and AppScreen.Main.
In `@app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml`:
- Around line 3-5: The adaptive-icon XML lost the <monochrome> layer so Android
13+ themed icons won't get a monochrome variant; restore a <monochrome
android:drawable="..."/> element inside the <adaptive-icon> (alongside the
existing <background android:drawable="@color/ic_launcher_background"/> and
<foreground android:drawable="@drawable/ic_launcher_foreground"/>) and point it
to the monochrome drawable (e.g., `@drawable/ic_launcher_monochrome`) so themed
icons are supported.
In
`@core/ui/src/main/java/com/yapp/ndgl/core/ui/designsystem/NDGLUserGuideModal.kt`:
- Around line 90-99: The Text composable that uses Modifier.clickable(...) (the
Text element rendering stringResource(R.string.user_guide_modal_terms) and using
onTermsClick) lacks accessibility metadata; update the Modifier.clickable call
to provide accessibility info by specifying role = Role.Button or adding an
onClickLabel (or both) so screen readers recognize it as an actionable control;
locate the Text with modifier = Modifier.padding(...).clickable(onClick =
onTermsClick) and modify that clickable invocation to include role = Role.Button
and/or onClickLabel = stringResource(R.string.user_guide_modal_terms) to improve
TalkBack/VoiceOver support.
In `@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashContract.kt`:
- Line 6: SplashState should be a singleton data object: replace the declaration
"class SplashState : UiState" with "data object SplashState : UiState" in
SplashContract (so it has object semantics and generated equality), and update
SplashViewModel where the initial state is set (replace any usage like
"SplashState()" or "SplashState()" constructor calls) to reference the object
directly as "SplashState".
In `@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt`:
- Line 73: 현재 Icon(...) 호출이 한 줄로 작성되어 있어 가독성이 떨어집니다; SplashScreen의 Icon 컴포저블 호출을
찾아 Icon(imageVector = ImageVector.vectorResource(R.drawable.ic_splash),
contentDescription = null, tint = Color.Unspecified) 파라미터를 각기 별도 라인으로 분리하여 정렬하고
들여쓰기를 적용하세요(예: imageVector = ..., contentDescription = ..., tint = ... 각자 한 줄).
기존 값들은 그대로 유지하되 파라미터 줄 바꿈만 수행해 읽기 쉽게 만들어 주세요.
| AppScreen.Splash -> { | ||
| SplashRoute( | ||
| navigateToHome = { isFirstUser -> | ||
| showUserGuideModal = isFirstUser | ||
| currentScreen = AppScreen.Main | ||
| }, | ||
| ) |
There was a problem hiding this comment.
initSession() 실패 시 사용자가 스플래시 화면에 갇히는 문제
SplashViewModel의 initSession()이 실패하면 FIXME 주석만 있고, NavigateToHome 사이드 이펙트가 발행되지 않습니다. 이 경우 사용자는 스플래시 화면에서 벗어날 수 없게 됩니다. 네트워크 오류 등 실패 시 재시도 UI 표시 또는 fallback 네비게이션 처리가 필요합니다.
SplashViewModel.kt의 Line 27-29에서 에러 핸들링이 비어 있는 것이 근본 원인입니다.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@app/src/main/java/com/yapp/ndgl/MainActivity.kt` around lines 36 - 42, The
Splash screen can get stuck because SplashViewModel.initSession() swallows
errors (see SplashViewModel.initSession) and never triggers the NavigateToHome
side-effect; update SplashViewModel.initSession to emit an error state or a
fallback navigation event on failure (e.g., expose a LiveData/StateFlow like
initError or navigateToHomeFallback), then update SplashRoute/navigateToHome
handling to show a retry UI (retry button calls SplashViewModel.initSession
again) and/or perform a safe fallback navigation (call navigateToHome(false))
after a failure or timeout so the user can leave the splash screen instead of
being stuck.
There was a problem hiding this comment.
@mj010504, 알겠습니다! 추후 PR에서 에러 핸들링을 추가하실 때 참고하시기 바랍니다. 😊
🧠 Learnings used
Learnt from: jihee-dev
Repo: YAPP-Github/27th-App-Team-1-Android PR: 27
File: feature/home/src/main/java/com/yapp/ndgl/feature/home/search/TemplateSearchScreen.kt:0-0
Timestamp: 2026-02-18T18:16:48.266Z
Learning: In the NDGL Android project (YAPP-Github/27th-App-Team-1-Android), the correct Hilt ViewModel import for Compose is `androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel` (from artifact `androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0`), not `androidx.hilt.navigation.compose.hiltViewModel` which was deprecated in Hilt 1.3.0. The project needs to add the hilt-lifecycle-viewmodel-compose artifact to gradle catalog and feature module dependencies.
| background = Color.Transparent, | ||
| surface = Color.Transparent, |
There was a problem hiding this comment.
Color.Transparent를 앱 전체 background/surface로 사용하면 Material3 컴포넌트 전반에 시각적 회귀가 발생할 수 있습니다.
lightColorScheme에서 background와 surface를 Color.Transparent로 설정하면 MaterialTheme.colorScheme을 기본값으로 참조하는 모든 Material3 컴포넌트(Scaffold, Card, Surface, ModalBottomSheet, AlertDialog 등)에 영향을 미칩니다. 명시적인 containerColor나 배경 Modifier 없이 이러한 컴포넌트를 사용하는 화면은 앱 창 배경(흰색)이 그대로 비쳐 보이게 됩니다.
스플래시 화면 전환 시 발생하는 흰색 깜빡임을 방지하려는 목적이라면, themes.xml의 android:windowIsTranslucent = true와 postSplashScreenTheme = @style/Theme.NDGL`` 조합만으로 충분합니다. MaterialTheme 색상까지 투명하게 만들 필요는 없습니다.
🛠️ 원래 값으로 롤백 제안
- background = Color.Transparent,
- surface = Color.Transparent,
+ background = NDGLTheme.colors.white,
+ surface = NDGLTheme.colors.white,📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| background = Color.Transparent, | |
| surface = Color.Transparent, | |
| background = NDGLTheme.colors.white, | |
| surface = NDGLTheme.colors.white, |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@core/ui/src/main/java/com/yapp/ndgl/core/ui/theme/Theme.kt` around lines 34 -
35, lightColorScheme에서 background와 surface를 Color.Transparent로 설정하여 Material3
컴포넌트 전반에 시각적 회귀가 발생하니, Theme.kt의 lightColorScheme 내 background와 surface
항목(Color.Transparent) 값을 투명 대신 기본/불투명 색상으로 복원하세요; 예를 들어 원래 사용하던 색상(또는
Color.White/Material default 색상)을 할당하거나 투명 처리된 부분을 제거해
Scaffold/Card/Surface/ModalBottomSheet/AlertDialog 등이 창 배경을 비추지 않도록 수정하고, 스플래시
관련 투명 효과는 themes.xml의 android:windowIsTranslucent 및 postSplashScreenTheme 조합으로만
처리하도록 유지하세요.
There was a problem hiding this comment.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
| private fun initSession() = viewModelScope.launch { | ||
| suspendRunCatching { | ||
| authRepository.initSession() | ||
| }.onSuccess { isFirstUser -> | ||
| postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser = isFirstUser)) | ||
| }.onFailure { | ||
| // FIXME: 에러 뷰 | ||
| } | ||
| } |
There was a problem hiding this comment.
initSession() 실패 시 사용자 복구 경로가 없음 — 반드시 해결 필요
onFailure 블록이 비어 있어(FIXME 주석만 존재), 네트워크 오류나 서버 장애 시 사용자가 스플래시 화면에 영구적으로 갇히게 됩니다. 이는 앱 사용을 완전히 차단하는 치명적 UX 문제입니다.
최소한 다음 중 하나를 구현해야 합니다:
- 에러 상태를
SplashState에 추가하고 UI에서 재시도 버튼 표시 - 실패 시에도 기본값으로 홈 화면으로 이동 (
postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser = true))) - 일정 시간 후 자동 재시도 (with backoff)
최소 fallback 처리 예시
}.onSuccess { isFirstUser ->
postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser = isFirstUser))
}.onFailure {
- // FIXME: 에러 뷰
+ // 세션 초기화 실패 시에도 홈으로 이동 (첫 사용자 취급)
+ postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser = true))
}🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashViewModel.kt`
around lines 22 - 30, The initSession() onFailure block is empty and leaves
users stuck on the splash screen; update the onFailure handler in
SplashViewModel.initSession to surface an error and provide a recovery path:
catch the error from authRepository.initSession() and either (a) post an error
SplashState (e.g., set a new SplashState.Error with the throwable) so the UI can
show a retry button and call initSession() again, or (b) emit a safe fallback
side effect like postSideEffect(SplashSideEffect.NavigateToHome(isFirstUser =
true)) when desired; make sure to reference initSession(),
authRepository.initSession(), postSideEffect(...) and
SplashSideEffect.NavigateToHome (or add a SplashState/Error state) so the UI can
react and allow retry/backoff logic.
There was a problem hiding this comment.
@mj010504, 알겠습니다! 추후 추가 예정이시군요.
이 사항을 나중에 놓치지 않도록 GitHub 이슈로 생성해 드릴까요? 이슈에 현재 PR과 코멘트 링크를 포함해서 작성해드리겠습니다.
🧠 Learnings used
Learnt from: jihee-dev
Repo: YAPP-Github/27th-App-Team-1-Android PR: 27
File: feature/home/src/main/java/com/yapp/ndgl/feature/home/search/TemplateSearchScreen.kt:0-0
Timestamp: 2026-02-18T18:16:48.266Z
Learning: In the NDGL Android project (YAPP-Github/27th-App-Team-1-Android), the correct Hilt ViewModel import for Compose is `androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel` (from artifact `androidx.hilt:hilt-lifecycle-viewmodel-compose:1.3.0`), not `androidx.hilt.navigation.compose.hiltViewModel` which was deprecated in Hilt 1.3.0. The project needs to add the hilt-lifecycle-viewmodel-compose artifact to gradle catalog and feature module dependencies.
Learnt from: jihee-dev
Repo: YAPP-Github/27th-App-Team-1-Android PR: 27
File: feature/home/src/main/java/com/yapp/ndgl/feature/home/search/TemplateSearchScreen.kt:0-0
Timestamp: 2026-02-18T19:24:23.661Z
Learning: In the NDGL Android project (YAPP-Github/27th-App-Team-1-Android), when using `androidx.hilt:hilt-navigation-compose:1.3.0`, there is no need to explicitly add `androidx.hilt:hilt-lifecycle-viewmodel-compose` as it is already included as a transitive dependency. The import `androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel` works out of the box with just hilt-navigation-compose.
bef26e1 to
822c7ab
Compare
개요
변경사항
Summary by CodeRabbit
Release Notes
New Features
UI & Branding