[FEAT] 미션 수행 화면 리팩토링 및 미션 미리보기 화면 구현#238
Conversation
Walkthrough미션 미리보기 기능이 새롭게 추가되고, 미션 수행 화면 및 관련 뷰모델이 리팩토링되었습니다. 미션 모드( Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant AlarmAddEditScreen
participant AlarmAddEditViewModel
participant OrbitNavigator
participant MissionScreen
participant MissionViewModel
User->>AlarmAddEditScreen: 미리보기 버튼 클릭 (missionType, missionCount)
AlarmAddEditScreen->>AlarmAddEditViewModel: Action.NavigateToMissionPreview(missionType, missionCount)
AlarmAddEditViewModel->>AlarmAddEditScreen: SideEffect.NavigateToMissionPreview(missionType, missionCount)
AlarmAddEditScreen->>OrbitNavigator: navigateToMissionPreview(missionType, missionCount)
OrbitNavigator->>MissionScreen: MissionRoute(missionType, missionCount, missionMode=PREVIEW)
MissionScreen->>MissionViewModel: 초기화 (missionType, missionCount, missionMode)
sequenceDiagram
participant User
participant MissionScreen
participant MissionViewModel
User->>MissionScreen: 뒤로가기 (PREVIEW 모드)
MissionScreen->>MissionViewModel: Action.NavigateBack
MissionViewModel->>MissionScreen: SideEffect.NavigateBack
MissionScreen->>User: 화면 종료
Estimated code review effort🎯 4 (Complex) | ⏱️ ~40 minutes Possibly related PRs
Suggested reviewers
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches
🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (3)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)
137-149: 주석 처리된 코드를 제거하세요.더 이상 사용하지 않는 코드는 삭제하는 것이 좋습니다.
다음과 같이 주석 처리된 코드를 제거하세요:
- /*val alarmDismissPendingIntent = if (shouldNavigateToMission) { - createNavigateToMissionPendingIntent( - applicationContext = applicationContext, - notificationId = alarm.id, - missionType = alarm.missionType.value, - missionCount = alarm.missionCount, - ) - } else { - createAlarmDismissPendingIntent( - applicationContext = applicationContext, - pendingIntentId = alarm.id, - ) - }*/core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt (1)
61-74: 타입 안전성을 위해 enum 값 사용을 고려해보세요.함수 구현은 올바르지만, 하드코딩된 "PREVIEW" 문자열 대신
MissionMode.PREVIEW.name을 사용하면 더 안전합니다.fun navigateToMissionPreview( missionType: Int, missionCount: Int, navOptions: NavOptions? = null, ) { navController.navigate( MissionRoute( missionType = "$missionType", missionCount = "$missionCount", - missionMode = "PREVIEW", + missionMode = MissionMode.PREVIEW.name, ), navOptions, ) }이를 위해
MissionModeimport가 필요합니다:+import com.yapp.domain.MissionModefeature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
77-91: 불필요한return@BackHandler제거
return@BackHandler는 여기서 불필요합니다. 조건문 블록이 끝나면 자연스럽게 리턴됩니다.BackHandler { if (state.missionMode == MissionMode.PREVIEW) { navigator.navigateBack() - return@BackHandler } viewModel.processAction( if (state.showExitDialog) { MissionContract.Action.HideExitDialog } else { MissionContract.Action.ShowExitDialog }, ) }
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt(1 hunks)domain/src/main/java/com/yapp/domain/MissionMode.kt(1 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt(5 hunks)feature/mission/src/main/java/com/yapp/mission/MissionContract.kt(2 hunks)feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt(3 hunks)feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt(17 hunks)feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt(5 hunks)feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt(0 hunks)feature/mission/src/main/res/values/strings.xml(1 hunks)
💤 Files with no reviewable changes (1)
- feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt
🧰 Additional context used
🧠 Learnings (9)
📓 Common learnings
Learnt from: DongChyeon
PR: YAPP-Github/Orbit-Android#234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/res/values/strings.xml (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionContract.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
⏰ 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). (1)
- GitHub Check: build
🔇 Additional comments (28)
domain/src/main/java/com/yapp/domain/MissionMode.kt (1)
1-13: 미션 모드 enum 구현이 적절합니다.enum 클래스와 companion object의 구현이 올바르며,
fromRaw함수에서 null-safe 처리와 기본값 반환이 적절히 구현되어 있습니다.core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt (1)
151-156: 알람 해제 로직 변경사항 및 UX 영향 검토 필요이번 PR에서 알람 해제 시 항상 미션 화면으로 이동하도록 분기 로직이 제거되었습니다. 아래 위치를 중심으로 변경 사항이 의도한 대로 동작하는지, UX에 부정적 영향은 없는지 확인해주세요.
- core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt
- startForeground 호출부:
createNotification(alarm, shouldNavigateToMission())- 151–156라인:
alarmDismissPendingIntent를 항상createNavigateToMissionPendingIntent로 설정createNotification함수 내부에 주석 처리된if (shouldNavigateToMission)분기shouldNavigateToMission()함수 정의 및 사용처위 변경으로 사용자는 언제나 미션 화면으로 이동하게 됩니다. 팀 내에서 UX 흐름을 점검하고, 분기 로직 제거에 따른 기대 동작·부작용 여부를 검증해주세요.
feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt (2)
28-31: 네비게이션 파라미터 전달 방식 개선이 적절합니다.명명된 파라미터를 사용하여 코드 가독성이 향상되었습니다.
43-43: popUpTo 대상 수정이 올바릅니다.
MissionRoute가 데이터 클래스로 변경됨에 따라MissionRoute.route를 사용하는 것이 적절합니다.Also applies to: 53-53
feature/mission/src/main/res/values/strings.xml (1)
1-14: 한국어 문자열 리소스가 적절히 구성되었습니다.미션 기능에 필요한 문자열들이 올바르게 정의되어 있으며, 동적 카운트를 위한 플레이스홀더(
%1$d) 사용도 적절합니다.feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt (2)
184-184: 미션 미리보기 액션 처리가 적절히 추가되었습니다.새로운 액션이 기존 패턴과 일관성 있게 처리되고 있습니다.
215-228: 미션 미리보기 네비게이션 로직이 올바르게 구현되었습니다.현재 시간을 초기 시간으로 업데이트한 후 사이드 이펙트를 발생시키는 로직이 적절하며, 기존 아키텍처 패턴과 일관성을 유지하고 있습니다.
feature/mission/src/main/java/com/yapp/mission/MissionContract.kt (2)
3-3: 미션 모드 개념 도입이 적절합니다.
MissionModeimport와missionMode속성 추가가 올바르게 구현되었습니다. 기본값을MissionMode.REAL로 설정한 것은 기존 코드와의 호환성을 보장하는 좋은 선택입니다.Also applies to: 9-9
25-25: 네비게이션 액션 추가가 일관성 있게 구현되었습니다.
NavigateBack액션이 기존 액션들과 동일한 패턴으로 올바르게 정의되었습니다.core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt (1)
3-3: 라우트 파라미터화가 적절하게 구현되었습니다.
data object에서data class로의 변환이 올바르게 수행되었습니다:
- 미션 파라미터들이 String 타입으로 일관성 있게 정의됨
missionMode의 기본값 설정으로 기존 코드와의 호환성 보장- companion object를 통한 route 상수 관리
Also applies to: 7-15
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt (1)
88-88: MVI 패턴에 따른 액션/사이드이펙트 추가가 올바릅니다.
NavigateToMissionPreview액션과 사이드이펙트가 일관된 파라미터 타입으로 정의되었고, 기존 MVI 패턴을 잘 따르고 있습니다. 이전 학습 내용에서 확인된 UX 패턴과도 일치합니다.Also applies to: 107-110
feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt (2)
107-112: 사이드이펙트 처리 구현이 올바릅니다.
NavigateToMissionPreview사이드이펙트 처리가 적절하게 구현되었습니다.MissionType.value속성 사용과 파라미터 전달이 정확합니다.
250-257: 콜백 업데이트가 일관성 있게 구현되었습니다.
onPreviewMission콜백이 새로운 파라미터를 받아 올바른 액션을 디스패치하도록 업데이트되었습니다. 기존 패턴과 일관성을 유지하고 있습니다.feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (8)
152-177: 미리보기 모드 나가기 버튼 구현이 적절합니다NavigationBar 인셋을 고려한 패딩 처리와 버튼 스타일링이 잘 구현되었습니다.
190-204: MissionContent 리팩토링이 적절합니다MissionTopAppBar에 mode 파라미터 전달과 FlipCard의 eventDispatcher 제거가 올바르게 처리되었습니다.
219-258: MissionTopAppBar 모드 분기 처리가 적절합니다미션 모드에 따른 조건부 렌더링과 문자열 리소스 사용이 올바르게 구현되었습니다.
275-295: 미션 지시문 지역화 처리가 적절합니다하드코딩된 문자열을 string resource로 교체하여 지역화를 지원합니다.
350-372: 종료 다이얼로그 지역화 처리가 적절합니다모든 텍스트가 string resource로 교체되어 일관된 지역화를 지원합니다.
397-397: 성공 메시지 지역화 처리가 적절합니다하드코딩된 성공 메시지를 string resource로 교체했습니다.
411-413: 에러 다이얼로그 지역화 처리가 적절합니다에러 다이얼로그의 제목과 확인 버튼 텍스트가 string resource로 교체되었습니다.
431-470: 미션 모드별 프리뷰 함수 추가가 유용합니다REAL과 PREVIEW 모드를 각각 확인할 수 있는 프리뷰 함수들이 추가되어 개발 시 UI 검증이 용이해졌습니다.
feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt (2)
71-71: 미션 미리보기 콜백 시그니처 변경이 적절합니다미션 미리보기 기능에 미션 타입과 횟수를 모두 전달하도록 변경되었습니다.
149-151: 미션 미리보기 호출 구현이 적절합니다선택된 미션 타입과 카운트가 onPreviewMission 콜백으로 올바르게 전달됩니다.
Also applies to: 478-479
feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt (5)
35-49: SavedStateHandle을 통한 미션 정보 로드가 적절합니다navigation 파라미터를 통해 전달된 미션 정보를 올바르게 로드하고 초기화합니다.
51-60: 액션 처리 리팩토링이 적절합니다NavigateBack 액션 추가와 미션 진행 처리 통합이 코드를 간결하게 만들었습니다.
62-79: 미션 정보 파싱 및 기본값 처리가 적절합니다SavedStateHandle에서 가져온 raw 값들을 안전하게 파싱하고 적절한 기본값을 설정합니다.
93-123: 미션 진행 처리 통합이 효과적입니다TAP과 SHAKE 미션의 공통 로직을 통합하여 코드 중복을 제거하고 유지보수성을 향상시켰습니다.
150-158: 미션 완료 처리의 모드별 분기가 적절합니다REAL 모드에서는 포춘을 생성하고, PREVIEW 모드에서는 바로 뒤로가기를 수행하는 로직이 명확합니다.
a214096 to
cc8cf3c
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (14)
core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt(2 hunks)core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt(1 hunks)domain/src/main/java/com/yapp/domain/MissionMode.kt(1 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt(2 hunks)feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt(5 hunks)feature/mission/src/main/java/com/yapp/mission/MissionContract.kt(2 hunks)feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt(3 hunks)feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt(17 hunks)feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt(5 hunks)feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt(0 hunks)feature/mission/src/main/res/values/strings.xml(1 hunks)
💤 Files with no reviewable changes (1)
- feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt
🚧 Files skipped from review as they are similar to previous changes (12)
- core/alarm/src/main/java/com/yapp/alarm/services/AlarmService.kt
- domain/src/main/java/com/yapp/domain/MissionMode.kt
- core/common/src/main/java/com/yapp/common/navigation/route/MissionRoute.kt
- feature/mission/src/main/res/values/strings.xml
- feature/mission/src/main/java/com/yapp/mission/MissionNavGraph.kt
- core/common/src/main/java/com/yapp/common/navigation/OrbitNavigator.kt
- feature/mission/src/main/java/com/yapp/mission/MissionContract.kt
- feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditScreen.kt
- feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditViewModel.kt
- feature/home/src/main/java/com/yapp/home/alarm/addedit/AlarmAddEditContract.kt
- feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt
- feature/mission/src/main/java/com/yapp/mission/MissionViewModel.kt
🧰 Additional context used
🧠 Learnings (2)
📓 Common learnings
Learnt from: DongChyeon
PR: YAPP-Github/Orbit-Android#234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
Learnt from: DongChyeon
PR: #234
File: feature/home/src/main/java/com/yapp/home/alarm/component/bottomsheet/AlarmMissionBottomSheet.kt:73-76
Timestamp: 2025-07-23T10:29:14.146Z
Learning: AlarmMissionBottomSheet에서 missionType/missionCount 파라미터는 현재 저장된 값을 UI에 표시하기 위해 사용되고, selectedMissionType/selectedMissionCount는 사용자가 변경 중인 내부 작업 상태를 관리하기 위해 사용된다. onDone이나 onSave 콜백을 통해 명시적으로 저장할 때만 변경사항이 반영되는 UX 패턴이다.
🧬 Code Graph Analysis (1)
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (1)
feature/mission/src/main/java/com/yapp/mission/component/FlipCard.kt (1)
FlipCard(25-96)
⏰ 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). (1)
- GitHub Check: build
🔇 Additional comments (12)
feature/mission/src/main/java/com/yapp/mission/MissionScreen.kt (12)
13-13: Import 추가사항들이 적절하게 구성되어 있습니다.새로운 기능 구현을 위한 필요한 import들이 올바르게 추가되었습니다. 특히 미션 모드와 네비게이션 관련 import들이 적절히 포함되어 있습니다.
Also applies to: 16-17, 22-22, 25-27, 42-42, 50-50, 52-52, 61-61
64-67: MissionRoute 함수 시그니처 변경이 올바릅니다.
navigator: OrbitNavigator파라미터 추가로 네비게이션 로직을 외부에서 주입받을 수 있게 되어 의존성 역전 원칙을 잘 따르고 있습니다.
77-90: BackHandler 로직 구현이 미션 모드에 따라 적절히 분기됩니다.미리보기 모드에서는 즉시 뒤로가기를 수행하고, 실제 미션 모드에서는 종료 다이얼로그를 표시하는 로직이 명확하게 구현되어 있습니다. 사용자 경험 측면에서 올바른 구현입니다.
133-136: MissionContent 호출 단순화가 적절합니다.매개변수 전달이 명확하고 깔끔하게 정리되었습니다.
152-177: 미리보기 모드 전용 종료 버튼 구현이 우수합니다.미리보기 모드에서만 표시되는 하단 종료 버튼의 구현이 잘 되어 있습니다:
- 네비게이션 바 패딩을 고려한 적절한 위치 설정
- CircleShape과 적절한 색상 구성
- 명확한 조건부 렌더링
190-193: MissionTopAppBar에 미션 모드 전달이 올바릅니다.미션 모드에 따른 UI 분기를 위해 적절히 매개변수가 전달되고 있습니다.
203-203: FlipCard 컴포넌트 호출 단순화가 적절합니다.관련 코드 스니펫에서 확인된 바와 같이 FlipCard 컴포넌트의 시그니처가 변경되어 eventDispatcher 매개변수가 제거되었습니다. 이는 뷰모델에서의 미션 진행 처리 로직 개선과 일치합니다.
219-222: MissionTopAppBar 함수 시그니처 개선이 우수합니다.미션 모드를 매개변수로 받아 조건부 UI 렌더링을 가능하게 하는 설계가 좋습니다. 함수의 책임이 명확해졌습니다.
231-255: 실제 미션 모드에서만 종료 UI 표시 로직이 정확합니다.미리보기 모드에서는 종료 버튼을 숨기고 실제 미션 모드에서만 표시하는 조건부 렌더링이 올바르게 구현되었습니다. 각 모드에 적합한 UX를 제공합니다.
276-282: 하드코딩된 문자열의 리소스화가 완벽합니다.모든 하드코딩된 문자열이 적절한 리소스 ID로 대체되어 국제화와 유지보수성이 크게 향상되었습니다. 특히:
- 미션 안내 문구의 동적 포매팅 (
stringResource(id, missionCount))- 다이얼로그 메시지들의 리소스화
- 일관된 네이밍 컨벤션 적용
Also applies to: 291-291, 351-354, 397-397, 411-411, 413-413
431-449: 새로운 프리뷰 컴포저블 추가가 적절합니다.실제 미션 모드를 위한 별도의 프리뷰 컴포저블이 추가되어 개발 시 두 모드의 UI를 모두 확인할 수 있게 되었습니다.
457-457: 기존 프리뷰 컴포저블의 미션 모드 설정이 정확합니다.미리보기 모드로 명시적으로 설정되어 해당 모드의 UI를 올바르게 미리볼 수 있습니다.
Codecov Report❌ Patch coverage is ❌ Your project status has failed because the head coverage (4.21%) is below the target coverage (60.00%). You can increase the head coverage or adjust the target coverage. Additional details and impacted files@@ Coverage Diff @@
## develop #238 +/- ##
============================================
- Coverage 4.23% 4.21% -0.02%
Complexity 53 53
============================================
Files 50 50
Lines 4462 4480 +18
Branches 659 660 +1
============================================
Hits 189 189
- Misses 4263 4281 +18
Partials 10 10
🚀 New features to boost your workflow:
|
Related issue 🛠
closed #235
어떤 변경사항이 있었나요?
CheckPoint ✅
PR이 다음 요구 사항을 충족하는지 확인하세요.
Work Description ✏️
2025-07-23.9.49.45.mov
Uncompleted Tasks 😅
To Reviewers 📢
Summary by CodeRabbit
신규 기능
UI/UX 개선
버그 수정
기타