-
Notifications
You must be signed in to change notification settings - Fork 0
feat: 설정 화면 UI 구현 #42
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
# Conflicts: # feature/library/build.gradle.kts # feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt # feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt # settings.gradle.kts
|
""" Walkthrough새로운 "설정" 기능 모듈이 추가되어 프로젝트에 통합되었습니다. 라이브러리 화면에서 설정 아이콘 버튼을 통해 설정 화면으로 이동할 수 있게 되었으며, 설정 화면 UI, 상태 관리, 이벤트 처리, 다이얼로그 등이 구현되었습니다. 관련 네비게이션, 의존성, 문자열 리소스, 빌드 설정도 반영되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant LibraryScreen
participant LibraryPresenter
participant Navigator
participant SettingsScreen
participant SettingsPresenter
User->>LibraryScreen: 설정 아이콘 클릭
LibraryScreen->>LibraryPresenter: OnSettingsClick 이벤트 발생
LibraryPresenter->>Navigator: SettingsScreen으로 이동 요청
Navigator->>SettingsScreen: SettingsScreen 표시
SettingsScreen->>SettingsPresenter: UI 상태 및 이벤트 처리
User->>SettingsScreen: 각종 설정 항목 클릭/다이얼로그 상호작용
SettingsScreen->>SettingsPresenter: SettingsUiEvent 전달
SettingsPresenter->>SettingsScreen: 상태 갱신
Assessment against linked issues
Assessment against linked issues: Out-of-scope changes
Suggested reviewers
Poem
✨ Finishing Touches
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
CodeRabbit Configuration File (
|
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: 5
🧹 Nitpick comments (4)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt (1)
14-14: 매개변수 목록에서 불필요한 쉼표 제거매개변수 목록 끝에 불필요한 쉼표가 있습니다.
-fun ReedDivider(modifier: Modifier = Modifier,) { +fun ReedDivider(modifier: Modifier = Modifier) {feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt (1)
66-77: 설정 아이콘 버튼 구현 개선 제안설정 아이콘 버튼이 적절하게 구현되었지만, 테마 일관성을 위해 색상 설정을 개선할 수 있습니다.
Icon( imageVector = ImageVector.vectorResource(id = com.ninecraft.booket.core.designsystem.R.drawable.ic_settings), contentDescription = "Settings Icon", - tint = Color.Unspecified, + tint = ReedTheme.colors.onSurface, )이렇게 하면 테마 색상을 사용하여 다크 모드 등에서도 일관된 색상을 유지할 수 있습니다.
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt (2)
39-40: TODO 항목들에 대한 구현이 필요합니다.웹뷰 화면 이동, 로그아웃, 회원탈퇴 기능이 아직 구현되지 않았습니다. 이러한 기능들의 구현을 추적하기 위한 이슈를 생성하시겠습니까?
Also applies to: 61-62, 65-66
84-92: printStackTrace() 대신 로깅 프레임워크 사용을 권장합니다.프로덕션 환경에서는 printStackTrace()보다 적절한 로깅 메커니즘을 사용하는 것이 좋습니다.
private fun getAppVersion(context: Context): String { return try { val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) packageInfo.versionName ?: "" } catch (e: PackageManager.NameNotFoundException) { - e.printStackTrace() + // 로깅 프레임워크 사용 예시: Log.e(TAG, "Failed to get app version", e) "" } }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (13)
app/build.gradle.kts(1 hunks)core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt(1 hunks)feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt(2 hunks)feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt(2 hunks)feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUiState.kt(1 hunks)feature/settings/.gitignore(1 hunks)feature/settings/build.gradle.kts(1 hunks)feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt(1 hunks)feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt(1 hunks)feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt(1 hunks)feature/settings/src/main/res/values/strings.xml(1 hunks)screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt(1 hunks)settings.gradle.kts(1 hunks)
🧰 Additional context used
🧠 Learnings (2)
screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt (1)
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#35
File: feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/TermsAgreementScreen.kt:127-127
Timestamp: 2025-07-09T01:14:29.836Z
Learning: In the Reed-Android project's TermsAgreementScreen.kt, the OnTermDetailClick event is intentionally passed an empty string for the URL parameter because the actual URLs for terms detail pages haven't been decided yet. This is a temporary implementation that will be updated once the URLs are finalized.
feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt (1)
Learnt from: seoyoon513
PR: YAPP-Github/Reed-Android#35
File: feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/TermsAgreementScreen.kt:127-127
Timestamp: 2025-07-09T01:14:29.836Z
Learning: In the Reed-Android project's TermsAgreementScreen.kt, the OnTermDetailClick event is intentionally passed an empty string for the URL parameter because the actual URLs for terms detail pages haven't been decided yet. This is a temporary implementation that will be updated once the URLs are finalized.
🧬 Code Graph Analysis (2)
feature/settings/build.gradle.kts (1)
build-logic/src/main/kotlin/com/ninecraft/booket/convention/Dependencies.kt (1)
ksp(14-16)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt (1)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
ReedTheme(14-21)
⏰ 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: ci-build
🔇 Additional comments (16)
feature/settings/.gitignore (1)
1-1: 표준 Android 모듈 .gitignore 파일이 올바르게 구성되었습니다.빌드 아티팩트를 제외하는 표준 패턴을 따르고 있습니다.
settings.gradle.kts (1)
42-42: 새로운 설정 기능 모듈이 올바르게 포함되었습니다.다른 기능 모듈들과 일관된 네이밍 패턴을 따르고 있습니다.
screens/src/main/kotlin/com/ninecraft/booket/screens/Screens.kt (1)
25-26: 설정 화면 객체가 기존 패턴과 일관되게 구현되었습니다.다른 화면 객체들과 동일한 구조를 따르고 있으며, @parcelize 애노테이션과 ReedScreen 상속이 올바르게 적용되었습니다.
feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUiState.kt (1)
20-20: 설정 클릭 이벤트가 기존 UI 이벤트 패턴과 일관되게 추가되었습니다.다른 UI 이벤트들과 동일한 data object 패턴을 사용하고 있습니다.
app/build.gradle.kts (1)
55-55: 설정 기능 모듈 종속성이 올바르게 추가되었습니다.다른 기능 모듈들과 일관된 패턴을 따르고 있으며, 앱 모듈에서 설정 기능을 사용할 수 있도록 적절히 구성되었습니다.
feature/settings/build.gradle.kts (1)
1-21: 빌드 구성이 올바르게 설정되었습니다.새로운 settings 기능 모듈을 위한 빌드 구성이 적절하게 설정되어 있습니다. 필요한 플러그인들과 의존성이 올바르게 구성되어 있습니다.
feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryPresenter.kt (2)
13-13: 적절한 import 추가SettingsScreen import가 올바르게 추가되었습니다.
80-82: 설정 화면 네비게이션 구현이 올바릅니다.OnSettingsClick 이벤트 처리가 기존 패턴을 따라 정확히 구현되었습니다. navigator.goTo를 사용한 네비게이션 방식이 적절합니다.
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/divider/ReedDivider.kt (2)
15-21: 디바이더 컴포넌트 구현이 적절합니다.Box를 사용한 구현과 테마 색상 사용이 올바르게 되어 있습니다.
23-29: 프리뷰 함수가 올바르게 구현되었습니다.ReedTheme으로 감싸진 프리뷰 함수가 적절하게 구성되어 있습니다.
feature/settings/src/main/res/values/strings.xml (1)
3-6: 문자열 리소스가 적절하게 구성되었습니다.설정 화면에 필요한 한국어 문자열 리소스들이 잘 정의되어 있습니다.
Also applies to: 8-10, 12-15
feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryScreen.kt (1)
12-13: 적절한 import 추가IconButton과 벡터 리소스 사용을 위한 import가 올바르게 추가되었습니다.
Also applies to: 18-21
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt (1)
20-23: Context 처리가 적절하게 구현되었습니다.메모리 누수를 방지하기 위해 ApplicationContext를 사용한 것이 좋습니다.
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUiState.kt (1)
1-23: 상태 및 이벤트 정의가 잘 구성되었습니다.Circuit 아키텍처 패턴을 잘 따르고 있으며, 단방향 데이터 흐름을 위한 구조가 명확합니다.
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt (2)
262-349: 회원탈퇴 확인 바텀시트가 잘 구현되었습니다.체크박스를 통한 확인 절차와 버튼 활성화 로직이 적절하게 구현되었습니다.
71-71: OnTermDetailClick 이벤트의 title 파라미터를 적절히 사용해야 합니다.각 설정 항목에 대한 적절한 title을 전달하거나, 파라미터가 필요없다면 이벤트 구조를 재검토하는 것이 좋습니다.
- state.eventSink(SettingsUiEvent.OnTermDetailClick("")) + state.eventSink(SettingsUiEvent.OnTermDetailClick(stringResource(R.string.settings_privacy_policy)))다른 항목들도 유사하게 수정하시기 바랍니다.
Also applies to: 84-84, 97-97
⛔ Skipped due to learnings
Learnt from: seoyoon513 PR: YAPP-Github/Reed-Android#35 File: feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/TermsAgreementScreen.kt:127-127 Timestamp: 2025-07-09T01:14:29.836Z Learning: In the Reed-Android project's TermsAgreementScreen.kt, the OnTermDetailClick event is intentionally passed an empty string for the URL parameter because the actual URLs for terms detail pages haven't been decided yet. This is a temporary implementation that will be updated once the URLs are finalized.
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
Outdated
Show resolved
Hide resolved
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
Show resolved
Hide resolved
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
Outdated
Show resolved
Hide resolved
상태로 관리할 필요없으면 UI에 두는게? remember 로 감싸서 recomposition 될때마다 version 가져오지 않도록만 막아주면 될 것 같음! UI에 구현하면 Presenter에 context 주입해둔것도 필요 없으니 제거해도 될 것 같음 |
이거는 Known Issue라서, 제가 만든 Bottom NavigationBar 때매 발생한 문제일거라 수정이 필요할듯함다. 이번 PR에서는 넘어가고 이후 bug fix PR을 통해 고쳐볼게요 |
|
오픈소스 라이브러리 화면의 경우, 내용 추가) |
다음 스프린트에 가능하면 Webview 쪽 작업도 임의의 Url(https://m.naver.com) 넣어서 load 하는 방식으로 구현해놔도 좋을거 같아요 다만, 고려해야할 점은 약관동의 화면에서도 개인정보처리방침/이용약관 웹뷰로 이동시켜야 하니까, |
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
Show resolved
Hide resolved
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt
Outdated
Show resolved
Hide resolved
✔️ 상남자식 방법으로 해결 완 ba3de34 |
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: 0
🧹 Nitpick comments (3)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt (3)
41-43: 불필요한 람다 래핑을 제거하세요.
onDismissRequest콜백을 불필요하게 람다로 래핑하고 있습니다.- onDismissRequest = { - onDismissRequest() - }, + onDismissRequest = onDismissRequest,
92-92: 스페이싱 일관성을 위해 디자인 시스템 사용하드코딩된
16.dp대신ReedTheme.spacing을 사용하여 일관성을 유지하세요.- .padding(vertical = 16.dp), + .padding(vertical = ReedTheme.spacing.spacing4),
74-86: 접근성 개선을 위한 의미 있는 텍스트 추가체크박스와 관련 텍스트에 접근성을 위한 추가 설명을 고려해보세요.
SquareCheckBox( checked = isCheckBoxChecked, onCheckedChange = { onCheckBoxCheckedChange() }, + modifier = Modifier.semantics { contentDescription = "회원탈퇴 동의" } )
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt(1 hunks)feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/LogoutConfirmationBottomSheet.kt(1 hunks)feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/LogoutConfirmationBottomSheet.kt
🚧 Files skipped from review as they are similar to previous changes (1)
- feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsScreen.kt
🧰 Additional context used
🧬 Code Graph Analysis (1)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt (4)
core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/bottomsheet/ReedBottomSheet.kt (1)
ReedBottomSheet(21-40)core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/checkbox/SquareCheckBox.kt (1)
SquareCheckBox(26-54)core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/button/ReedButton.kt (1)
ReedButton(32-98)core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/theme/Theme.kt (1)
ReedTheme(14-21)
⏰ 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: ci-build
🔇 Additional comments (3)
feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/WithdrawConfirmationBottomSheet.kt (3)
1-28: imports 구조가 깔끔하게 정리되어 있습니다.패키지 구조와 필요한 컴포넌트들의 import가 잘 정리되어 있습니다.
74-79: 체크박스 콜백 처리 방식 확인
SquareCheckBox의onCheckedChange콜백이 새로운 boolean 값을 전달하지만, 상위 컴포넌트의onCheckBoxCheckedChange콜백은 매개변수가 없습니다. 상태 관리가 외부에서 이루어지고 있다면 현재 방식이 적절하지만, 일관성을 위해 확인해보시기 바랍니다.
120-140: 프리뷰 함수가 잘 구현되어 있습니다.SheetState 설정과 매개변수 제공이 적절하여 개발 시 컴포넌트 확인에 유용합니다.
| skipPartiallyExpanded = true, | ||
| initialValue = SheetValue.Expanded, | ||
| positionalThreshold = { 0f }, | ||
| velocityThreshold = { 0f }, |
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.
오 이런 속성들이 있는지 몰랐네여 ㄷ
easyhooon
left a 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.
LGTM!
🔗 관련 이슈
📙 작업 설명
📸 스크린샷 또는 시연 영상
Reed_.mp4
💬 추가 설명 or 리뷰 포인트
Summary by CodeRabbit
신규 기능
디자인 시스템
문서 및 리소스
기타