Skip to content

[FEAT] 로띠 적용 및 2차 QA 적용 #152

Merged
hyeminililo merged 6 commits intodevelopfrom
feat/#141-loading-lottie
Jan 22, 2026
Merged

[FEAT] 로띠 적용 및 2차 QA 적용 #152
hyeminililo merged 6 commits intodevelopfrom
feat/#141-loading-lottie

Conversation

@hyeminililo
Copy link
Contributor

@hyeminililo hyeminililo commented Jan 22, 2026

Related issue 🛠

Work Description ✏️

  • 로띠를 Loading과 ChallengeLoading에 각각 적용합니다.

Screenshot 📸

Uncompleted Tasks 😅

  • N/A

To Reviewers 📢

다들 수고가 많으십니다. 얼마 안 남았다 파이팅 합시다 !!

image

Summary by CodeRabbit

  • New Features

    • 로딩 화면과 스플래시 화면에 반복 재생되는 Lottie 애니메이션을 적용해 시각적 경험을 향상했습니다. 애니메이션은 중앙에 배치되고 화면 크기에 맞게 조정되며 탭 동작을 지원합니다.
    • 애니메이션 리소스가 추가되어 로딩/스플래시 시 더 풍부한 움직임을 제공합니다.
  • Style

    • 마이페이지의 가로 구분선 색상을 더 진한 회색으로 조정해 시각적 구분을 개선했습니다.

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

@hyeminililo hyeminililo self-assigned this Jan 22, 2026
@hyeminililo hyeminililo requested a review from a team as a code owner January 22, 2026 19:59
@hyeminililo hyeminililo added FEAT✨ 새로운 기능 구현 혜민🍒 혜민 담당 labels Jan 22, 2026
@coderabbitai
Copy link

coderabbitai bot commented Jan 22, 2026

Walkthrough

ChallengeLoadingScreen과 SplashScreen의 정적 이미지를 Lottie 애니메이션으로 교체하고, MyPageScreen의 두 개 구분선 색상을 변경하며 새 Lottie JSON 리소스 파일을 추가합니다.

Changes

Cohort / File(s) 변경 사항
Lottie 애니메이션 적용
app/src/main/java/com/cherrish/android/presentation/challenge/loading/ChallengeLoadingScreen.kt, app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt
정적 Image → LottieAnimation으로 대체; rememberLottieComposition, animateLottieCompositionAsState 도입; 애니메이션 루프 및 자동 재생 설정; 레이아웃 모디파이어(fillMaxWidth, padding, aspectRatio, 정렬 등`) 및 클릭 처리 추가; 관련 런타임(imports) 추가
구분선 색상 변경
app/src/main/java/com/cherrish/android/presentation/mypage/MyPageScreen.kt
HorizontalDivider 2개 인스턴스 색상 gray100gray200로 변경
애니메이션 리소스 추가
app/src/main/res/raw/lt_challenge_loading.json
새로운 Lottie 애니메이션 JSON 파일(다층 레이어, 임베디드 에셋 포함) 추가

Sequence Diagram(s)

(생성 조건 미충족 — 생략)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • nhyeonii
  • sohee6989
🚥 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 제목은 주요 변경사항(로띠 적용 및 2차 QA 적용)을 명확하게 요약하고 있으며, 간결하고 구체적입니다.
Description check ✅ Passed PR 설명은 리포지토리 템플릿의 필수 섹션(Related issue, Work Description, Screenshot, Uncompleted Tasks, To Reviewers)을 모두 포함하고 있습니다.
Linked Issues check ✅ Passed PR의 코드 변경사항(ChallengeLoadingScreen, SplashScreen, MyPageScreen에 Lottie 애니메이션 적용 및 로띠 리소스 추가)이 이슈 #141의 요구사항(로띠 이미지 적용)을 완벽하게 만족합니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 Lottie 애니메이션 적용 및 관련 UI 개선에 집중되어 있으며, 이슈 #141의 범위 내에서 진행되었습니다.

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

✨ Finishing touches
  • 📝 Generate docstrings

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

@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/splash/SplashScreen.kt`:
- Around line 42-48: The current use of LifecycleEventEffect with scope.launch
causes the delay coroutine to run every ON_START and can duplicate calls to
viewModel.isAutoLoginCheck(); replace the LifecycleEventEffect +
rememberCoroutineScope+/scope.launch pattern with a single LaunchedEffect(Unit)
that performs delay(3000) and then calls viewModel.isAutoLoginCheck(), and
remove the now-unused rememberCoroutineScope() to ensure the auto-login check
runs exactly once after composition.
🧹 Nitpick comments (1)
app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt (1)

94-101: 로띠에 접근성 설명(또는 제외) 처리가 필요해요.
LottieAnimation은 기본적으로 TalkBack에 아무 것도 전달하지 않아서 로딩 상태 안내가 어려울 수 있습니다. 로딩 화면이라면 semantics로 설명을 추가하거나, 장식용이면 clearAndSetSemantics {}로 명시적 제외를 권장합니다.

♿️ 접근성 설명 추가 예시
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.semantics.contentDescription
@@
         LottieAnimation(
             composition = composition,
             progress = { progress },
             modifier = Modifier
                 .fillMaxWidth()
                 .padding(horizontal = 105.dp)
                 .aspectRatio(130f / 154f)
                 .align(Alignment.CenterHorizontally)
+                .semantics { contentDescription = "로딩 중" }
         )

Comment on lines +42 to +48
val scope = rememberCoroutineScope()

LifecycleEventEffect(Lifecycle.Event.ON_START) {
scope.launch {
delay(3000)
viewModel.isAutoLoginCheck()
}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

cat -n app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 4725


🏁 Script executed:

# SplashViewModel과 isAutoLoginCheck() 메서드 확인하여 
# 중복 호출 시 부작용 검증
fd -e kt -path "*presentation/splash*" | head -20

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 242


🏁 Script executed:

find . -name "SplashViewModel.kt" -type f

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 153


🏁 Script executed:

cat -n ./app/src/main/java/com/cherrish/android/presentation/splash/SplashViewModel.kt

Repository: TEAM-Cherrish/Cherrish-Android

Length of output: 1412


ON_START 반복 호출로 인한 지연 작업 중복 실행 위험

액티비티가 백그라운드/포그라운드를 전환할 때마다 ON_START 이벤트가 발생하므로, LifecycleEventEffect 블록이 반복 실행됩니다. 이 과정에서 scope.launch로 생성한 지연 코루틴이 누적되어 isAutoLoginCheck()가 중복 호출될 수 있으며, 이는 중복된 side effect 발생 및 반복 네비게이션으로 이어집니다.

단일 실행을 보장하려면 LaunchedEffect(Unit)으로 변경하세요. 컴포지션 생성 시에만 1회 실행되므로 ON_START 반복 호출과 무관하게 3초 후 자동 로그인 확인이 정확히 1회만 실행됩니다.

🔧 수정 예시
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.compose.LifecycleEventEffect
+import androidx.compose.runtime.LaunchedEffect
 
-    val scope = rememberCoroutineScope()
-
-    LifecycleEventEffect(Lifecycle.Event.ON_START) {
-        scope.launch {
-            delay(3000)
-            viewModel.isAutoLoginCheck()
-        }
-    }
+    LaunchedEffect(Unit) {
+        delay(3000)
+        viewModel.isAutoLoginCheck()
+    }
🤖 Prompt for AI Agents
In `@app/src/main/java/com/cherrish/android/presentation/splash/SplashScreen.kt`
around lines 42 - 48, The current use of LifecycleEventEffect with scope.launch
causes the delay coroutine to run every ON_START and can duplicate calls to
viewModel.isAutoLoginCheck(); replace the LifecycleEventEffect +
rememberCoroutineScope+/scope.launch pattern with a single LaunchedEffect(Unit)
that performs delay(3000) and then calls viewModel.isAutoLoginCheck(), and
remove the now-unused rememberCoroutineScope() to ensure the auto-login check
runs exactly once after composition.

@hyeminililo hyeminililo merged commit 46d7396 into develop Jan 22, 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