Skip to content

[FEAT/#24] 스플래시 화면 UI 구현#79

Merged
sohee6989 merged 12 commits intodevelopfrom
feat/#24-splash-view
Jan 18, 2026
Merged

[FEAT/#24] 스플래시 화면 UI 구현#79
sohee6989 merged 12 commits intodevelopfrom
feat/#24-splash-view

Conversation

@sohee6989
Copy link
Copy Markdown
Contributor

@sohee6989 sohee6989 commented Jan 18, 2026

Related issue 🛠

Work Description ✏️

  • 스플래시 화면 UI 구현 및 설정해놨습니다!

Screenshot 📸

스크린샷 2026-01-18 오후 6 42 57

Uncompleted Tasks 😅

  • N/A

To Reviewers 📢

Summary by CodeRabbit

릴리스 노트

  • 새 기능

    • 앱 실행 시 로고와 그래디언트 배경이 포함된 새로운 스플래시 화면이 3초 동안 표시됩니다.
  • 스타일

    • 상단 상태 표시줄과 하단 내비게이션 바가 투명하게 변경되어 보다 현대적인 외관을 제공합니다.
    • 디자인 시스템에 새로운 그래디언트 색상이 추가되었습니다.

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

@sohee6989 sohee6989 requested a review from a team as a code owner January 18, 2026 09:45
@sohee6989 sohee6989 linked an issue Jan 18, 2026 that may be closed by this pull request
@sohee6989 sohee6989 self-assigned this Jan 18, 2026
@sohee6989 sohee6989 added FEAT✨ 새로운 기능 구현 소희🍒 소희 담당 labels Jan 18, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Jan 18, 2026

Warning

Rate limit exceeded

@sohee6989 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 19 minutes and 22 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between 3d5d7e0 and cfc679e.

📒 Files selected for processing (3)
  • app/src/main/java/com/cherrish/android/core/designsystem/theme/Color.kt
  • app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt
  • app/src/main/java/com/cherrish/android/presentation/splash/navigation/SplashNavigation.kt

Walkthrough

이 PR은 앱의 스플래시 화면 기능을 구현합니다. 새로운 스플래시 네비게이션 그래프, UI 컴포넌트, 디자인 시스템 색상 추가, 시스템 바 투명성 설정을 포함하여 앱 시작 흐름을 개선합니다.

Changes

Cohort / File(s) 요약
디자인 시스템 색상
app/src/main/java/com/cherrish/android/core/designsystem/theme/Color.kt
gradation, gradation2 색상 상수 및 CherrishColors 데이터 클래스에 새 속성 추가
네비게이션 구조
app/src/main/java/com/cherrish/android/presentation/main/MainAppState.kt, app/src/main/java/com/cherrish/android/presentation/main/MainScreen.kt, app/src/main/java/com/cherrish/android/presentation/splash/navigation/SplashNavigation.kt
초기 목적지를 Splash로 변경, splashNavGraph 추가, Splash 라우트 및 네비게이션 함수 정의
스플래시 화면 UI
app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt, app/src/main/res/drawable/ic_app_logo_title.xml
3초 지연 후 온보딩으로 네비게이트하는 SplashRoute 컴포저블 및 로고 벡터 드로어블 추가
시스템 구성
app/src/main/java/com/cherrish/android/presentation/main/MainActivity.kt, app/src/main/res/values/themes.xml
시스템 바 투명 스타일 설정, 윈도우 투명성 속성 활성화
빌드 설정
gradle/libs.versions.toml
ktlint 플러그인 선언 (기능 변경 없음)

Sequence Diagram(s)

sequenceDiagram
    actor User
    participant MainActivity
    participant NavController
    participant SplashRoute
    participant SplashScreen
    participant Onboarding

    User->>MainActivity: 앱 시작
    MainActivity->>NavController: 네비게이션 초기화 (Splash 시작)
    NavController->>SplashRoute: Splash 라우트 표시
    SplashRoute->>SplashScreen: SplashScreen UI 렌더링
    SplashScreen->>User: 로고 및 배경 그래디언트 표시
    SplashRoute->>SplashRoute: 3초 대기 (LaunchedEffect)
    SplashRoute->>Onboarding: navigateToOnboarding() 호출
    Onboarding->>User: 온보딩 화면 표시
Loading

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

  • [FEAT/#3] 디자인 시스템 구현 #4: CherrishColors 데이터 클래스에 gradation 및 gradation2 속성을 추가하여 이 PR의 색상 시스템 변경을 기초하는 디자인 시스템 개선을 포함합니다.

Suggested labels

FEAT✨

Suggested reviewers

  • usuuhyn
  • nhyeonii
🚥 Pre-merge checks | ✅ 3 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
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.
Out of Scope Changes check ❓ Inconclusive 스플래시 화면 구현과 관련되지 않은 변경사항으로 Color.kt의 gradation 색상 추가가 포함되어 있습니다. 이는 스플래시 UI 그라데이션 배경을 위한 보조 변경으로 보이나, 명시적인 링크가 부족합니다. gradation 색상 추가가 스플래시 그라데이션 배경 구현을 위한 것인지 명확히 하거나, 별도의 이슈/PR로 분리하여 범위를 명확히 하기를 권장합니다.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경 사항의 주요 내용을 명확하게 반영합니다. 스플래시 화면 UI 구현이 이번 PR의 핵심 변경사항입니다.
Description check ✅ Passed PR 설명이 저장소의 템플릿 구조를 따르고 있으며, 관련 이슈, 작업 내용, 스크린샷, 미완료 작업, 리뷰어에게의 메시지 섹션을 포함합니다.
Linked Issues check ✅ Passed PR의 모든 변경사항이 Issue #24의 '스플래시 뷰 구현' 목표를 충족합니다. 스플래시 화면 UI, 내비게이션, 관련 리소스가 모두 구현되었습니다.

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


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.

❤️ Share

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

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a 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

🤖 Fix all issues with AI agents
In `@app/src/main/java/com/cherrish/android/presentation/main/MainScreen.kt`:
- Around line 43-46: The splash navigation is wired to an empty lambda causing
SplashRoute's LaunchedEffect call to navigateToOnboarding() to do nothing;
update the MainScreen call site that invokes splashNavGraph to pass a real
navigation lambda (e.g., a lambda that calls your NavController.navigate(...) or
invokes the host-level navigation function) instead of {} so SplashRoute can
actually transition after its delay; locate the splashNavGraph call in
MainScreen and replace the empty navigateToOnboarding = {} with the appropriate
navigation action referencing your NavController or higher-level
navigateToOnboarding handler.
🧹 Nitpick comments (2)
app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt (2)

27-35: LaunchedEffect 내 콜백 최신값 유지 고려.

recomposition으로 navigateToOnboarding이 변경될 가능성을 대비해 최신 람다를 참조하도록 업데이트하는 편이 안전합니다.

♻️ 제안 변경
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.rememberUpdatedState
@@
 fun SplashRoute(
     navigateToOnboarding: () -> Unit,
     paddingValues: PaddingValues,
 ) {
-    LaunchedEffect(Unit) {
-        delay(3000)
-        navigateToOnboarding()
-    }
+    val latestNavigateToOnboarding by rememberUpdatedState(navigateToOnboarding)
+    LaunchedEffect(Unit) {
+        delay(3000)
+        latestNavigateToOnboarding()
+    }

49-59: paddingValues 적용 순서/배경 분리로 인셋 처리 안정화.

현재는 drawBehind 후에 padding을 적용해 배경이 인셋 영역을 덮지 못하고, 향후 추가 패딩 시 순서 이슈가 생길 수 있습니다. 배경과 컨텐츠를 분리하고 패딩을 컨텐츠에 먼저 적용하는 구성이 안정적입니다.

♻️ 제안 변경
+import androidx.compose.foundation.layout.Box
@@
-    Column(
-        modifier = modifier
-            .fillMaxSize()
-            .drawBehind {
-                val brush = Brush.linearGradient(
-                    colors = gradationColors,
-                    start = Offset(size.width / 2f, size.height / 2f),
-                )
-                drawRect(brush)
-            }
-            .padding(paddingValues),
-        horizontalAlignment = Alignment.CenterHorizontally
-    ) {
-        Spacer(modifier = Modifier.weight(283f))
-        Image(
-            painter = painterResource(id = R.drawable.ic_app_logo),
-            contentDescription = null,
-            modifier = Modifier.size(width = 114.dp, height = 100.dp),
-        )
-        Spacer(modifier = Modifier.height(14.dp))
-        Image(
-            imageVector = ImageVector.vectorResource(id = R.drawable.ic_app_logo_title),
-            contentDescription = null
-        )
-        Spacer(modifier = Modifier.weight(298f))
-    }
+    Box(
+        modifier = modifier
+            .fillMaxSize()
+            .drawBehind {
+                val brush = Brush.linearGradient(
+                    colors = gradationColors,
+                    start = Offset(size.width / 2f, size.height / 2f),
+                )
+                drawRect(brush)
+            }
+    ) {
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .padding(paddingValues),
+            horizontalAlignment = Alignment.CenterHorizontally
+        ) {
+            Spacer(modifier = Modifier.weight(283f))
+            Image(
+                painter = painterResource(id = R.drawable.ic_app_logo),
+                contentDescription = null,
+                modifier = Modifier.size(width = 114.dp, height = 100.dp),
+            )
+            Spacer(modifier = Modifier.height(14.dp))
+            Image(
+                imageVector = ImageVector.vectorResource(id = R.drawable.ic_app_logo_title),
+                contentDescription = null
+            )
+            Spacer(modifier = Modifier.weight(298f))
+        }
+    }
Based on learnings, ...

Comment on lines +43 to +46
splashNavGraph(
navigateToOnboarding = {}, // TODO: 로직 넣어서 바꿀 예정
paddingValues = innerPadding
)
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

# SplashRoute가 navigateToOnboarding을 호출하는지 확인
rg -n --type=kt 'navigateToOnboarding' -A 3 -B 3

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 100


🏁 Script executed:

# splashNavGraph 함수 정의 찾기
rg -n --type=kt 'fun splashNavGraph' -A 10

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 100


🏁 Script executed:

# MainScreen.kt의 전체 코드 구조 확인
fd 'MainScreen.kt' --exec cat -n {} \;

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 2649


🏁 Script executed:

# splashNavGraph 함수 정의 찾기
rg 'fun splashNavGraph' -A 15

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 56


🏁 Script executed:

# SplashRoute 또는 SplashScreen 찾기
fd 'Splash' --type f -name '*.kt' | head -20

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 304


🏁 Script executed:

# startDestination이 어디서 설정되는지 확인
rg 'startDestination' -A 2 -B 2

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 1153


🏁 Script executed:

# splashNavGraph 함수 정의 찾기
rg 'fun splashNavGraph'

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 56


🏁 Script executed:

# Splash 관련 파일 찾기
fd 'Splash' -type f -name '*.kt'

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 244


🏁 Script executed:

# navigateToOnboarding 사용 전체 검색
rg 'navigateToOnboarding'

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 703


🏁 Script executed:

# SplashScreen.kt 전체 읽기
cat app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 2760


🏁 Script executed:

# SplashNavigation.kt 전체 읽기
cat app/src/main/java/com/cherrish/android/presentation/splash/navigation/SplashNavigation.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 960


splash 이후 전환이 막힐 수 있습니다.

SplashRoute는 3초 후 LaunchedEffect에서 navigateToOnboarding()을 호출하는데, MainScreen.kt에서 빈 람다 {}를 전달하면 전환이 일어나지 않습니다. 이로 인해 스플래시 화면에서 앱이 멈출 가능성이 높습니다. 준비되기 전에 실제 전환 로직을 연결해 주세요.

🤖 Prompt for AI Agents
In `@app/src/main/java/com/cherrish/android/presentation/main/MainScreen.kt`
around lines 43 - 46, The splash navigation is wired to an empty lambda causing
SplashRoute's LaunchedEffect call to navigateToOnboarding() to do nothing;
update the MainScreen call site that invokes splashNavGraph to pass a real
navigation lambda (e.g., a lambda that calls your NavController.navigate(...) or
invokes the host-level navigation function) instead of {} so SplashRoute can
actually transition after its delay; locate the splashNavGraph call in
MainScreen and replace the empty navigateToOnboarding = {} with the appropriate
navigation action referencing your NavController or higher-level
navigateToOnboarding handler.

Copy link
Copy Markdown
Contributor

@nhyeonii nhyeonii left a comment

Choose a reason for hiding this comment

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

굿굿냥 ~~ 수고하셧숩니다

@sohee6989 sohee6989 merged commit 7c8039c into develop Jan 18, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

FEAT✨ 새로운 기능 구현 소희🍒 소희 담당

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 스플래시 뷰 구현

2 participants