-
Notifications
You must be signed in to change notification settings - Fork 1
[Feature/#188] quiz UI #191
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
โฆons and customizable background, stroke color
Walkthrough๋์์ธ ์์คํ ์ ์๋ก์ด ์์, ํ์ดํฌ๊ทธ๋ํผ, ์ปดํฌ๋ํธ๋ฅผ ์ถ๊ฐํ๊ณ , ํด์ฆ ํ๋ฉด ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ํด์ฆ ๋ฉ์ธ, ์์, ๊ฒฐ๊ณผ ํ์ด์ง๋ฅผ ์กฐ์ฑํ๊ณ ๊ด๋ จ ๋ค๋น๊ฒ์ด์ ์ ํ์ฅํ์์ผ๋ฉฐ, ๊ธฐ์กด ์ปดํฌ๋ํธ์ ์ ์ฐ์ฑ์ ๊ฐํํ์ต๋๋ค. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant MainActivity
participant QuizMainFragment
participant QuizStartFragment
participant QuizResultFragment
User->>MainActivity: ํด์ฆ ์ ํ
activate MainActivity
MainActivity->>QuizMainFragment: ๋ค๋น๊ฒ์ด์
deactivate MainActivity
activate QuizMainFragment
Note over QuizMainFragment: ํ์ด๋จธ ์นด์ดํธ๋ค์ด ํ์
QuizMainFragment->>QuizStartFragment: ์์ ๋ฒํผ ํด๋ฆญ
deactivate QuizMainFragment
activate QuizStartFragment
Note over QuizStartFragment: O/X ์ ํ์ง ํ์
User->>QuizStartFragment: O ๋๋ X ์ ํ
QuizStartFragment->>QuizResultFragment: ์ ์ถ ํ ๋ค๋น๊ฒ์ด์
deactivate QuizStartFragment
activate QuizResultFragment
Note over QuizResultFragment: ์ฑ๊ณต/์คํจ ๊ฒฐ๊ณผ ํ์<br/>XP, RANK, SPEED ํต๊ณ
User->>QuizResultFragment: ํ์ธ ๋ฒํผ ํด๋ฆญ
QuizResultFragment->>QuizMainFragment: ๋ฉ์ธ์ผ๋ก ์ด๋
deactivate QuizResultFragment
Estimated code review effort๐ฏ 3 (Moderate) | โฑ๏ธ ~25 minutes ๋ณ๊ฒฝ ์ฌํญ์ด ๋ค์ํ ํ์ผ์ ๊ฑธ์ณ ์์ง๋ง, ๋๋ถ๋ถ ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ(ํด์ฆ ํ๋ฉด, ์ปดํฌ๋ํธ, ์ด๊ฑฐํ)์ด๋ฉฐ ๊ธฐ์กด ์ปดํฌ๋ํธ์ ํ๋ผ๋ฏธํฐ ํ์ฅ ํํ์ ๋๋ค. ๋์์ธ ์์คํ ๊ฐ์ ๋ ์ผ๊ด๋ ํจํด์ ๋ฐ๋ฆ ๋๋ค. ๋ณต์กํ ๋ก์ง ๋ฐ๋๋ ๋ฎ์ง๋ง, ํ์ผ ์์ ๋ค์ํ ๋ฆฌ์์ค ํ์ (๋ ์ด์์, ๋๋ก์ด๋ธ, ๋ฌธ์์ด, ๋ค๋น๊ฒ์ด์ )์ผ๋ก ์ธํด ์ค๊ฐ ์ ๋์ ๊ฒํ ๊ฐ ํ์ํฉ๋๋ค. Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touchesโ Failed checks (2 warnings)
โ Passed checks (2 passed)
โจ 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.
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 (12)
core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt (2)
23-31: ์ด๋ฏธ์ง ๋ก๋ฉ ์ํ ๋ฐ ์๋ฌ ์ฒ๋ฆฌ ์ถ๊ฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.ํ์ฌ ๊ตฌํ์ ์ด๋ฏธ์ง ๋ก๋ฉ ์ค์ด๊ฑฐ๋ ์คํจํ์ ๋ ์ฌ์ฉ์์๊ฒ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
GlideImage๋loading,failureํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๋ก๋ฉ ์ํ์ ์๋ฌ ์ํ๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.๋ค์๊ณผ ๊ฐ์ด ๋ก๋ฉ ๋ฐ ์๋ฌ ์ํ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์:
GlideImage( imageModel = { imageUrl }, imageOptions = ImageOptions( contentScale = contentScale, alignment = alignment, ), + loading = { + // ๋ก๋ฉ ์ค ํ์ํ ์ปดํฌ์ ๋ธ (์: CircularProgressIndicator) + }, + failure = { + // ์๋ฌ ์ ํ์ํ ์ปดํฌ์ ๋ธ (์: ๊ธฐ๋ณธ ์ด๋ฏธ์ง) + }, previewPlaceholder = painterResource(id = com.teamwable.common.R.drawable.img_empty), modifier = modifier.noRippleThrottleClickable(onClick = onClick), )
34-43: ํ๋ฆฌ๋ทฐ์ imageUrl์ ๋ ์๋ฏธ์๋ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.ํ์ฌ ๋น ๋ฌธ์์ด์ ์ฌ์ฉํ๊ณ ์์ด ํ๋ฆฌ๋ทฐ๊ฐ ์ค์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ๋ฐ์ํ์ง ๋ชปํ ์ ์์ต๋๋ค.
previewPlaceholder๊ฐ ํ์๋๊ฒ ์ง๋ง, ์ค์ URL์ ์๋ฎฌ๋ ์ด์ ํ๋ ์ํ URL์ ์ฌ์ฉํ๋ฉด ๋ ๋ช ํํ ํ๋ฆฌ๋ทฐ๊ฐ ๋ ๊ฒ์ ๋๋ค.@Preview(showBackground = true) @Composable private fun WableGlideImagePreview() { WableGlideImage( modifier = Modifier.size(100.dp), - imageUrl = "", + imageUrl = "https://example.com/sample-image.jpg", contentScale = ContentScale.Crop, onClick = {}, ) }core/ui/src/main/res/values/colors.xml (1)
29-30: ์ฑ๋ฐ ์์ ์์ค ์ผ์ํ ์ ์ (XML vs Compose ์์ ์ค๋ณต).
app_bar_purple(#FFEBE2FD) ์ถ๊ฐ๊ฐ ์ข์ต๋๋ค. ๋ค๋งcore/designsystem/theme/Color.kt์SystemLoginSystemAppBar = Color(0xFFEBE2FD)์ ๊ฐยท์๋ฏธ๊ฐ ์ค๋ณต๋ฉ๋๋ค. ์ ์ง๋ณด์ ๊ด์ ์์ ํ์ชฝ๋ง โ๋จ์ผ ์ถ์ฒโ๋ก์ ๋ฆฌ(์ด๋ฆ ํต์ผ ํฌํจ)ํด ๋๋ฆฌํํธ๋ฅผ ๋ฐฉ์งํด ์ฃผ์ธ์. ์: XML๋ง ์ฌ์ฉํ๊ฑฐ๋, Compose ํ ๋ง์์๋ง ๋ ธ์ถํ๊ณ XML์ ์ฌ์ฉ์ฒ์์ ํ ๋ง ๋ฐ์.feature/quiz/src/main/res/drawable/ic_quiz_o.xml (1)
1-11: ํ๋์ฝ๋ ์์ ๋์ ๋ฆฌ์์ค ์ฐธ์กฐ ์ฌ์ฉ ๊ถ์ฅ.
android:strokeColor="#4699FF"๋ฅผ ๊ณต์ฉ ํ๋ ํธ ๋ฆฌ์์ค๋ก ์นํํ๋ฉด ํ ๋ง ๋ณ๊ฒฝ ์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํฉ๋๋ค. (์:@color/blue_50). ๋ชจ๋ ์ข ์์ฑ์ ์ฐธ์กฐ ๊ฐ๋ฅ ์ฌ๋ถ๋ง ํ์ธํด ์ฃผ์ธ์.๊ฐ๋ฅ ์ ์๋์ฒ๋ผ ๋ณ๊ฒฝ:
- android:strokeColor="#4699FF"/> + android:strokeColor="@color/blue_50"/>core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableShapeBox.kt (1)
62-69: ๊ณ ์ ๊ฐ API ๋์ ๋ฒ์ฉ ๋ฐ๊ฒฝ API ์ ๊ณต ์ ์.
radius16Style()๋ ์ ์ฉํ์ง๋ง ๊ฐ๋ณ ํจ์๊ฐ ๋์ด๋๋ ํจํด์ ๋๋ค. ๋ฒ์ฉ ํจ์๋ก ์ถ์ถํ๊ณ 16dp๋ ๋ณ์นญ์ผ๋ก ์ ์งํ๋ฉด ํ์ฅ์ฑ์ด ์ข์์ง๋๋ค.์๋์ฒ๋ผ ๋ฆฌํฉํฐ๋ง ์ ์:
+@Composable +@ReadOnlyComposable +fun radiusStyle(radius: Dp) = defaultShapeStyle().copy( + topStart = radius, + topEnd = radius, + bottomStart = radius, + bottomEnd = radius, +) + @Composable @ReadOnlyComposable -fun radius16Style() = defaultShapeStyle().copy( - topStart = 16.dp, - topEnd = 16.dp, - bottomStart = 16.dp, - bottomEnd = 16.dp, -) +fun radius16Style() = radiusStyle(16.dp)core/designsystem/src/main/java/com/teamwable/designsystem/extension/preview/DevicePreviews.kt (1)
5-17: ํ๋ฆฌ๋ทฐ ์ ๋ ธํ ์ด์ ์ Target/Retention ์ง์ ๊ถ์ฅ.ํจ์์๋ง ์ ์ฉ๋๋๋ก
@Target(AnnotationTarget.FUNCTION)์ IDE ์ ์ฉ์ผ๋ก@Retention(AnnotationRetention.SOURCE)๋ฅผ ๋ช ์ํ๋ฉด ์ค์ฉ์ ์ค์ผ ์ ์์ต๋๋ค.์์:
@Preview( /* ... */ ) @Preview( /* ... */ ) -annotation class DevicePreviews +@Target(AnnotationTarget.FUNCTION) +@Retention(AnnotationRetention.SOURCE) +annotation class DevicePreviewsfeature/quiz/src/main/java/com/teamwable/quiz/component/QuizStatType.kt (1)
23-29: Composable ํ๋กํผํฐ ๋์ ํจ์ ํํ ๊ถ์ฅ.
val titleColor: Color์@Composable๊ฒํฐ๋ฅผ ๋ถ์ด๋ฉด ์ฌ์ฉ์๊ฐ ๋น-Composable ๋ฌธ๋งฅ์์ ์คํดํ ์ ์์ต๋๋ค.@Composable fun titleColor(): Color๋ก ๋ฐ๊พธ๋ฉด ์ฌ์ฉ ๋งฅ๋ฝ์ด ๋ช ํํฉ๋๋ค. (ํธ์ถ๋ถ ์ํฅ์ ์์ผ๋ ์ ์ง๋ณด์ ์ด์ ํผ)์ ์:
- val titleColor: Color - @Composable - get() = when (this) { + @Composable + fun titleColor(): Color = when (this) { XP -> WableTheme.colors.sky50 RANK -> WableTheme.colors.blue50 SPEED -> WableTheme.colors.purple50 - } + }core/designsystem/src/main/java/com/teamwable/designsystem/extension/modifier/ModifierExt.kt (1)
158-177: TileMode.Decal ์ฌ์ฉ์ ํ์ธํด์ฃผ์ธ์.
TileMode.Decal์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ผ๋์ธํธ๊ฐgradientEndY๋ฅผ ๋์ด๊ฐ๋ ์์ญ์ ํ์ผ๋ง๋์ง ์๊ณ ๋ง์ง๋ง ์์์ผ๋ก ์ฑ์์ง๋๋ค. ๋ทฐ์ ๋์ด๊ฐscreenHeight * ratio๋ณด๋ค ํด ๊ฒฝ์ฐ ์๋ํ ๋์์ธ์ง ํ์ธ์ด ํ์ํฉ๋๋ค.์ถ๊ฐ๋ก, ๊ธฐ๋ณธ
ratio๊ฐ 0.514f์ ์๋ฏธ๋ฅผ ๋ฌธ์ํํ๋ ๊ฒ์ ๊ณ ๋ คํด๋ณด์ธ์.// ์์: ๋ฌธ์ํ ์ถ๊ฐ /** * Wable ๋์์ธ ์์คํ ์ ์ธ๋ก ๊ทธ๋ผ๋์ธํธ ๋ฐฐ๊ฒฝ์ ์ ์ฉํฉ๋๋ค. * * @param ratio ํ๋ฉด ๋์ด ๋๋น ๊ทธ๋ผ๋์ธํธ๊ฐ ๋๋๋ ์ง์ ์ ๋น์จ (๊ธฐ๋ณธ๊ฐ: 0.514f๋ ํ๋ฉด ์ ๋ฐ ์ ๋) * @param colorStops ๊ทธ๋ผ๋์ธํธ ์์ ์ ์ */ @Composable fun Modifier.wableVerticalGradientBackground( ratio: Float = 0.514f, colorStops: Array<Pair<Float, Color>> = WableGradientColorStops, ): Modifier {feature/quiz/src/main/java/com/teamwable/quiz/QuizMainFragment.kt (1)
13-33: ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋์ ๋ฏธ์ฌ์ฉ ๋ฉ์๋ ์ฒ๋ฆฌ ํ์
checkQuizStatus()์navigateToStart()๋ฉ์๋๊ฐ ์ ์๋์ด ์์ง๋ง ์ฃผ์ ์ฒ๋ฆฌ๋์ด ์ฌ์ฉ๋์ง ์๊ณ ์์ต๋๋ค. ํด์ฆ ์์ ์ ์ํ ํ์ธ ๋ก์ง์ ๊ตฌํํ ๊ณํ์ด๋ผ๋ฉด TODO ์ฃผ์์ ์ถ๊ฐํ๊ฑฐ๋, ๋น์ฅ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.์ด ๋ถ๋ถ์ ๊ตฌํ์ ๋์๋๋ฆด๊น์? ๋๋ ํฅํ ๊ตฌํ์ ์ํ ์ด์๋ฅผ ์์ฑํด ๋๋ฆด๊น์?
feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt (1)
63-63: ํ์ด๋จธ ๊ฐ์ ๋์ ์ผ๋ก ์ฒ๋ฆฌํ๋๋ก ๊ตฌํ ํ์ํ์ฌ "99:99"๋ก ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ํฅํ ์ค์ ํ์ด๋จธ ๊ธฐ๋ฅ ๊ตฌํ ์ ์ํ ๊ด๋ฆฌ๋ฅผ ํตํด ๋์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋๋ก ํด์ผ ํฉ๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt (1)
71-74: ๋น ์ด๋ฏธ์ง URL ์ฒ๋ฆฌ ํ์
imageUrl์ด ๋น ๋ฌธ์์ด๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ค์ ํด์ฆ ์ด๋ฏธ์ง๋ฅผ ํ์ํ ๊ณํ์ด๋ผ๋ฉด ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๋๋ก ์์ ํ๊ณ , ๋น์ฅ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด placeholder ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํด์ฃผ์ธ์.feature/quiz/src/main/res/navigation/graph_quiz.xml (1)
14-16: tools:layout ์์ฑ ์ถ๊ฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.QuizStartFragment(14-16์ค)์ QuizResultFragment(23-26์ค)์
tools:layout์์ฑ์ด ์์ด์ Android Studio์ ๋ ์ด์์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ๋ ์ผ๊ด์ฑ๊ณผ ๊ฐ๋ฐ ํธ์์ฑ์ ์ํด QuizMainFragment์ฒ๋ผtools:layout์์ฑ์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.<fragment android:id="@+id/navigation_quiz_start" android:name="com.teamwable.quiz.start.QuizStartFragment" - android:label="QuizStartFragment"> + android:label="QuizStartFragment" + tools:layout="@layout/fragment_quiz_start"><fragment android:id="@+id/navigation_quiz_result" android:name="com.teamwable.quiz.result.QuizResultFragment" - android:label="QuizResultFragment"> + android:label="QuizResultFragment" + tools:layout="@layout/fragment_quiz_result">Also applies to: 23-26
๐ Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
โ Files ignored due to path filters (3)
core/designsystem/src/main/res/font/price_down_black.otfis excluded by!**/*.otffeature/quiz/src/main/res/drawable/img_quiz_fail.pngis excluded by!**/*.pngfeature/quiz/src/main/res/drawable/img_quiz_success.pngis excluded by!**/*.png
๐ Files selected for processing (28)
core/designsystem/build.gradle.kts(1 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableCustomCardWithStroke.kt(1 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableShapeBox.kt(1 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt(1 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/extension/modifier/ModifierExt.kt(3 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/extension/preview/DevicePreviews.kt(1 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Color.kt(7 hunks)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Type.kt(7 hunks)core/ui/src/main/res/values/colors.xml(1 hunks)feature/auth/src/main/java/com/teamwable/auth/LoginScreen.kt(2 hunks)feature/main/src/main/java/com/teamwable/main/MainActivity.kt(4 hunks)feature/onboarding/src/main/java/com/teamwable/onboarding/selectlckteam/component/LckTeamItem.kt(2 hunks)feature/quiz/src/main/java/com/teamwable/quiz/QuizMainFragment.kt(2 hunks)feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt(3 hunks)feature/quiz/src/main/java/com/teamwable/quiz/component/QuizButton.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/component/QuizComponent.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/component/QuizResultType.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/component/QuizStatType.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultFragment.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartFragment.kt(1 hunks)feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt(1 hunks)feature/quiz/src/main/res/drawable/ic_quiz_o.xml(1 hunks)feature/quiz/src/main/res/drawable/ic_quiz_x.xml(1 hunks)feature/quiz/src/main/res/layout/fragment_quiz_result.xml(1 hunks)feature/quiz/src/main/res/layout/fragment_quiz_start.xml(1 hunks)feature/quiz/src/main/res/navigation/graph_quiz.xml(1 hunks)feature/quiz/src/main/res/values/strings.xml(1 hunks)
๐งฐ Additional context used
๐งฌ Code graph analysis (8)
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizComponent.kt (1)
core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableShapeBox.kt (2)
WableShapeBox(19-39)radius16Style(62-69)
feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultFragment.kt (3)
feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartFragment.kt (1)
initComposeView(17-29)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Theme.kt (1)
WableTheme(54-65)feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt (1)
QuizResultRoute(29-36)
feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt (3)
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizComponent.kt (1)
QuizStatBox(21-53)core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableButton.kt (1)
WableButton(45-65)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Theme.kt (1)
WableTheme(54-65)
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizButton.kt (3)
core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableCustomCardWithStroke.kt (1)
WableCustomCardWithStroke(15-41)core/designsystem/src/main/java/com/teamwable/designsystem/extension/composable/ImageExt.kt (1)
toImageVector(8-9)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Theme.kt (1)
WableTheme(54-65)
feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt (5)
core/designsystem/src/main/java/com/teamwable/designsystem/component/topbar/WableTopBar.kt (1)
WableAppBar(22-89)core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt (1)
WableGlideImage(15-32)feature/quiz/src/main/java/com/teamwable/quiz/component/QuizButton.kt (1)
QuizOXButton(27-50)core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableButton.kt (1)
WableButton(45-65)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Theme.kt (1)
WableTheme(54-65)
feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt (2)
core/designsystem/src/main/java/com/teamwable/designsystem/component/dot/WableDot.kt (1)
WableDot(16-27)core/designsystem/src/main/java/com/teamwable/designsystem/component/button/WableBoardRequestButton.kt (1)
BoardRequestButton(13-24)
feature/main/src/main/java/com/teamwable/main/MainActivity.kt (2)
core/ui/src/main/java/com/teamwable/ui/extensions/ContextExt.kt (1)
statusBarModeOf(101-107)core/ui/src/main/java/com/teamwable/ui/extensions/FragmentExt.kt (1)
statusBarModeOf(56-58)
feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartFragment.kt (3)
feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultFragment.kt (1)
initComposeView(17-28)core/designsystem/src/main/java/com/teamwable/designsystem/theme/Theme.kt (1)
WableTheme(54-65)feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt (1)
QuizStartRoute(32-41)
โฐ 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: PR Checker
๐ Additional comments (27)
core/designsystem/src/main/java/com/teamwable/designsystem/theme/Type.kt (2)
204-210: ๋งค์ฐ ํฐ ํฐํธ ํฌ๊ธฐ๊ฐ ์๋๋ ๊ฒ์ธ์ง ํ์ธํด์ฃผ์ธ์.
priceDown์คํ์ผ์ ํฐํธ ํฌ๊ธฐ๊ฐ 88.sp๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด๋ ๊ธฐ์กด ์คํ์ผ ์ค ๊ฐ์ฅ ํฐhead00(24.sp)์ ์ฝ 3.7๋ฐฐ์ ํด๋นํ๋ ๋งค์ฐ ํฐ ํฌ๊ธฐ์ ๋๋ค. ํด์ฆ ํ๋ฉด์ ๋์์ธ ์คํ๊ณผ ์ผ์นํ๋์ง ํ์ธ์ด ํ์ํฉ๋๋ค.
20-20: ํฐํธ ๋ฆฌ์์ค ํ์ธ ์๋ฃ - ๋ฌธ์ ์์
price_down_black.otfํ์ผ์ดcore/designsystem/src/main/res/font/๋๋ ํ ๋ฆฌ์ ์ ์์ ์ผ๋ก ์ถ๊ฐ๋์ด ์์ต๋๋ค. ์ฝ๋์R.font.price_down_black์ฐธ์กฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํด์๋ ๊ฒ์ ๋๋ค.core/designsystem/build.gradle.kts (1)
12-12: LGTM! Glide ์ด๋ฏธ์ง ๋ก๋ฉ ์์กด์ฑ ์ถ๊ฐ๊ฐ ์ ์ ํฉ๋๋ค.์๋ก์ด
WableGlideImage์ปดํฌ๋ํธ๋ฅผ ์ง์ํ๊ธฐ ์ํ Landscapist Glide ๋ฒ๋ค ์ถ๊ฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์์ต๋๋ค.core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt (1)
1-14: LGTM! ํ์ํ import๊ฐ ๋ชจ๋ ์ ์ ํ๊ฒ ๊ตฌ์ฑ๋์์ต๋๋ค.feature/quiz/src/main/res/values/strings.xml (1)
3-18: ๋ฌธ์์ด ์ถ๊ฐ ์ ์ ํฉ๋๋ค.UI ๋งฅ๋ฝ์ ๋ง๋ ํค์ ๋ณต์ ํ๋ฉด์์์ ์ฌ์ฌ์ฉ์ฑ์ด ์ข์ ๋ณด์ ๋๋ค. ์ค๋ฐ๊ฟ(
\n) ์๋์น ์์ ์ค๋ฐ๊ฟ ์ฌ๋ถ๋ง ํ๋ฉด์์ ํ๋ฒ ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค.core/designsystem/src/main/java/com/teamwable/designsystem/theme/Color.kt (1)
17-19: ํ๋ ํธ/ํ ๋ง ํ์ฅ ๊ตฌ์ฑ ์ ์ ํฉ๋๋ค.
Blue10/Blue50/Red10์ถ๊ฐ ๋ฐWableColors(์์ฑ์/ํ๋กํผํฐ/copy/update/factory) ๋ฐ์์ด ๋๋ฝ ์์ด ์ ํฉ์ ์ ๋๋ค. ๋น๋ ์ ์ปฌ๋ฌ ์ ๊ทผ๋ถ(์:WableTheme.colors.blue50)๊ฐ ์ ์ ์ปดํ์ผ๋๋์ง๋ง ์ต์ข ํ์ธ ๋ถํ๋๋ฆฝ๋๋ค. ๋ํ ์ฑ๋ฐ ์์์ XMLapp_bar_purple์์ ์ค๋ณต(๊ฐ ๋์ผ) ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ คํด ์ฃผ์ธ์.Also applies to: 107-109, 193-198, 242-245, 289-292, 337-340
feature/onboarding/src/main/java/com/teamwable/onboarding/selectlckteam/component/LckTeamItem.kt (1)
17-17: ๋ฆฌํฉํ ๋ง์ด ์ ๋์์ต๋๋ค!onClick ํธ๋ค๋ง์ modifier ๋ ๋ฒจ์์ Card ์ปดํฌ๋ํธ ๋ ๋ฒจ๋ก ์ด๋ํ ๊ฒ์ ๋ ๋ช ํํ๊ณ ์๋ฏธ์ ์ผ๋ก ์ ์ ํฉ๋๋ค.
Also applies to: 31-31, 39-39
feature/quiz/src/main/res/drawable/ic_quiz_x.xml (1)
1-18: ๋ฒกํฐ ๋๋ก์ด๋ธ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.X ์์ด์ฝ์ด ํด์ฆ UI์์ O ์์ด์ฝ๊ณผ ์์ ์ด๋ฃจ์ด ์ฌ์ฉ๋ ์ ์๋๋ก ์ ์ ์๋์ด ์์ต๋๋ค.
feature/quiz/src/main/res/layout/fragment_quiz_result.xml (1)
1-15: ํ์ค ๋ ์ด์์ ํจํด์ด ์ ์ ์ฉ๋์์ต๋๋ค.ComposeView๋ฅผ ํธ์คํ ํ๋ ํ์ค์ ์ธ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์์ผ๋ฉฐ, ๋ค๋ฅธ ํด์ฆ ๋ ์ด์์๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ณ ์์ต๋๋ค.
feature/auth/src/main/java/com/teamwable/auth/LoginScreen.kt (1)
36-36: ๋์์ธ ์์คํ ํตํฉ์ด ์ ๋์์ต๋๋ค!์๋ ๊ทธ๋ผ๋์ธํธ ์ค์ ์ ๊ณตํต modifier๋ก ๋์ฒดํ์ฌ ์ฝ๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ณ ์ ์ง๋ณด์์ฑ์ ํฅ์์์ผฐ์ต๋๋ค.
Also applies to: 90-90
feature/quiz/src/main/res/layout/fragment_quiz_start.xml (1)
1-15: ์ผ๊ด๋ ๋ ์ด์์ ํจํด์ ์ ์งํ๊ณ ์์ต๋๋ค.๋ค๋ฅธ ํด์ฆ ํ๋ฉด๋ค๊ณผ ๋์ผํ ๊ตฌ์กฐ๋ก ๊ตฌํ๋์ด ์ฝ๋ ์ผ๊ด์ฑ์ด ์ข์ต๋๋ค.
core/designsystem/src/main/java/com/teamwable/designsystem/extension/modifier/ModifierExt.kt (2)
4-4: ํ์ํ ์ํฌํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ถ๊ฐ๋์์ต๋๋ค.๊ทธ๋ผ๋์ธํธ ๊ตฌํ์ ํ์ํ ๋ชจ๋ ์์กด์ฑ์ด ์ ์ ํ๊ฒ ์ํฌํธ๋์์ต๋๋ค.
Also applies to: 18-18, 22-22, 26-27
151-156: ๊ทธ๋ผ๋์ธํธ ์ปฌ๋ฌ ์ ์๊ฐ ์ ๋์ด ์์ต๋๋ค.์์ ๋ถํฌ๊ฐ ์ ์ ํ๋ฉฐ ๋ถ๋๋ฌ์ด ๊ทธ๋ผ๋์ธํธ๋ฅผ ํ์ฑํฉ๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizComponent.kt (1)
21-53: ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๊ฐ ์ ๊ตฌํ๋์์ต๋๋ค!RowScope ํ์ฅ ํจ์๋ก ๊ตฌํํ์ฌ Row ๋ด์์ ๋์ผํ ๋๋น๋ฅผ ๊ฐ์ง stat box๋ค์ ์ฝ๊ฒ ๋ฐฐ์นํ ์ ์๋๋ก ํ์ต๋๋ค. aspectRatio์ weight์ ์ ์ ํ ์ฌ์ฉํ์ฌ ์ ์ฌ๊ฐํ ํํ์ ๊ท ๋ฑ ๋ถํ ์ด ๊ฐ๋ฅํฉ๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartFragment.kt (2)
10-15: Fragment ๊ตฌ์กฐ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.Hilt ์์กด์ฑ ์ฃผ์ ๊ณผ BindingFragment ํจํด์ ์ ์ ํ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
17-34: Compose ํตํฉ๊ณผ ๋ด๋น๊ฒ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํ๋์์ต๋๋ค.
ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed๋ฅผ ์ฌ์ฉํ์ฌ Fragment ์๋ช ์ฃผ๊ธฐ์ ๋ง๊ฒ Compose๋ฅผ ๊ด๋ฆฌํ๊ณ ์์ผ๋ฉฐ, Safe Args๋ฅผ ํตํ ํ์ ์์ ํ ๋ด๋น๊ฒ์ด์ ์ ๊ตฌํํ์ต๋๋ค.feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultFragment.kt (1)
1-34: LGTM! ์ ๊ตฌํ๋์์ต๋๋ค.ํ๋๊ทธ๋จผํธ ๊ตฌ์กฐ์ ๋ค๋น๊ฒ์ด์ ํจํด์ด ํ๋ก์ ํธ์ ๋ค๋ฅธ ํด์ฆ ํ๋ฉด๋ค(QuizStartFragment)๊ณผ ์ผ๊ด์ฑ ์๊ฒ ๊ตฌํ๋์ด ์์ต๋๋ค.
feature/main/src/main/java/com/teamwable/main/MainActivity.kt (2)
149-150: LGTM! ํด์ฆ ํ๋ฉด์์ ํ๋จ ๋ค๋น๊ฒ์ด์ ์จ๊น ์ฒ๋ฆฌ๊ฐ ์ฌ๋ฐ๋ฆ ๋๋ค.ํด์ฆ ์์ ๋ฐ ๊ฒฐ๊ณผ ํ๋ฉด์์ ํ๋จ ๋ค๋น๊ฒ์ด์ ์ ์จ๊ธฐ๋ ๊ฒ์ด UX ๊ด์ ์์ ์ ์ ํฉ๋๋ค.
218-241: LGTM! ํด์ฆ ํ๋ฉด๋ณ ์ํ ๋ฐ ์์ ์ฒ๋ฆฌ๊ฐ ์ ๊ตฌํ๋์์ต๋๋ค.๊ฐ ํด์ฆ ํ๋ฉด(๋ฉ์ธ, ๊ฒฐ๊ณผ)์ ๋ง๋ ์ํ ๋ฐ ์์๊ณผ ๋ชจ๋๊ฐ ์ ์ ํ๊ฒ ์ค์ ๋์ด ์์ต๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt (1)
29-36: LGTM! Route ํจํด์ด ์ฌ๋ฐ๋ฆ ๋๋ค.๋ค๋น๊ฒ์ด์ ์ฝ๋ฐฑ์ ํ๋ฉด์ผ๋ก ์ ๋ฌํ๋ ๊ตฌ์กฐ๊ฐ ๊น๋ํ๊ฒ ๊ตฌํ๋์์ต๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizResultType.kt (1)
1-32: LGTM! ๊น๋ํ enum ๊ตฌํ์ ๋๋ค.๋ฆฌ์์ค ํ์ ์์ ์ฑ์ ์ํ ์ด๋ ธํ ์ด์ ์ฌ์ฉ๊ณผ when ํํ์์ ํตํ ํ์ ๋ณ ๋ฆฌ์์ค ๋งคํ์ด ์ ๊ตฌํ๋์์ต๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt (1)
30-69: LGTM! ๋ ์ด์์ ๋ฆฌํฉํ ๋ง์ด ์ ๋์์ต๋๋ค.
SpaceBetween์ ์ฌ์ฉํ ์์ง ๋ฐฐ์น์ Box๋ฅผ ์ด์ฉํ ํ์ด๋จธ ์ค๋ฒ๋ ์ด ๊ตฌํ์ด ๊น๋ํฉ๋๋ค.feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt (1)
32-41: LGTM! Route ๊ตฌํ์ด ์ฌ๋ฐ๋ฆ ๋๋ค.๋ค๋น๊ฒ์ด์ ์ฝ๋ฐฑ ์ ๋ฌ์ด ๋ช ํํ๊ฒ ๊ตฌํ๋์์ต๋๋ค.
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizButton.kt (2)
27-50: LGTM! ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ ๊ตฌํ์ด ์ฐ์ํฉ๋๋ค.์ ํ ์ํ์ ๋ฐ๋ฅธ ๋์ ์คํ์ผ๋ง์ด ์ ๊ตฌํ๋์์ผ๋ฉฐ, ํ์ ์์ ์ฑ์ ์ํ enum ํ์ฉ์ด ์ข์ต๋๋ค.
52-83: LGTM! enum ์ค๊ณ๊ฐ ํ๋ฅญํฉ๋๋ค.ํ ๋ง ์์์ ์ํ
@Composable์์ฑ ์ฌ์ฉ๊ณผ ํ์ ๋ณ ์ปค์คํ ํจ๋ฉ ์ค์ ์ด ์ ๊ตฌํ๋์์ต๋๋ค.feature/quiz/src/main/res/navigation/graph_quiz.xml (2)
6-6: ํด์ฆ ๋ฉ์ธ ํ๋ฉด์ ์์ ๋ชฉ์ ์ง๋ก ์ค์ ํ ๊ฒ์ด ์ ์ ํฉ๋๋ค.QuizMainFragment๋ฅผ ์์ ๋ชฉ์ ์ง๋ก ์ค์ ํ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ํด์ฆ ๊ธฐ๋ฅ์ ์ง์ ํ ๋ ๋ฉ์ธ ํ๋ฉด๋ถํฐ ์์ํ๋๋ก ํ๋ ์ง๊ด์ ์ธ ํ๋ฆ์ ๋๋ค.
27-31: ๊ฒฐ๊ณผ ํ๋ฉด์์ ์ ์ฒด ๊ทธ๋ํ๋ฅผ ํ์ ํ๋ ๋์์ ๊ฒ์ฆํด์ฃผ์ธ์.28-31์ค์์ QuizResultFragment์์ QuizMainFragment๋ก ์ด๋ํ ๋
app:popUpTo="@id/graph_quiz"๋ฐapp:popUpToInclusive="true"๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ์ ์ฒด ๋ค๋น๊ฒ์ด์ ๋ฐฑ์คํ์ ์ ๊ฑฐํ๋ ๋์์ ๋๋ค. ์ด๊ฒ์ด ์๋์ ์ธ ์ค๊ณ์ธ์ง, ์๋๋ฉด@id/navigation_quiz_start๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ๋์ง ํ์ธํด์ฃผ์ธ์. ๋ง์ฝ ์ฌ์ฉ์๊ฐ ํด์ฆ ๊ฒฐ๊ณผ ํ๋ฉด์์ ๋ค๋ก ๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์ฑ์ด ์ข ๋ฃ๋ ์ ์์ต๋๋ค.
| modifier: Modifier = Modifier, | ||
| connerRadius: Dp = 8.dp, | ||
| strokeWidth: Dp = 1.dp, | ||
| strokeColor: Color = WableTheme.colors.gray300, | ||
| strokeColor: @Composable (Boolean) -> Color = { enabled -> | ||
| if (enabled) WableTheme.colors.purple50 else WableTheme.colors.gray300 | ||
| }, | ||
| backGroundColor: Color = WableTheme.colors.white, | ||
| enabled: Boolean = false, | ||
| onClick: () -> Unit = {}, | ||
| content: @Composable () -> Unit, |
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.
๐ ๏ธ Refactor suggestion | ๐ Major
๊ณต๊ฐ API ํ๋ผ๋ฏธํฐ ์คํ ์์ ๊ถ์ฅ: corner/background.
connerRadius โ cornerRadius, backGroundColor โ backgroundColor. ๊ณต๊ฐ API์ด๋ฏ๋ก ์ง๊ธ ์ ์ ํ๋ ํธ์ด ์ฅ๊ธฐ์ ์ผ๋ก ์ด๋์
๋๋ค. (ํ์ ์ @deprecated ๋์ฒด์ ์ ๊ณต)
์ ์ diff:
- connerRadius: Dp = 8.dp,
+ cornerRadius: Dp = 8.dp,
@@
- backGroundColor: Color = WableTheme.colors.white,
+ backgroundColor: Color = WableTheme.colors.white,์ฌ์ฉ๋ถ:
- shape = RoundedCornerShape(connerRadius),
+ shape = RoundedCornerShape(cornerRadius),
@@
- containerColor = backGroundColor,
+ containerColor = backgroundColor,Committable suggestion skipped: line range outside the PR's diff.
๐ค Prompt for AI Agents
In
core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableCustomCardWithStroke.kt
around lines 17 to 26, the public API parameter names have typos: "connerRadius"
should be renamed to "cornerRadius" and "backGroundColor" to "backgroundColor";
update the function signature and all internal usages to the corrected names,
and add short @Deprecated aliases with the old names (pointing to the new names)
to preserve binary/source compatibility for callers while encouraging migration.
| modifier = modifier.noRippleClickable(onClick = onClick), | ||
| ) { |
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.
enabled=false์ธ๋ฐ๋ ํด๋ฆญ ๊ฐ๋ฅํ ๋ฌธ์ .
modifier.noRippleClickable(onClick = onClick)๊ฐ enabled์ ์ฐ๋๋์ง ์์ ๋นํ์ฑ ์ํ์์๋ ํด๋ฆญ๋ฉ๋๋ค. ํด๋ฆญ ๊ฐ๋๊ฐ ํ์ํฉ๋๋ค.
๋ค์ ๋ ์ค ํ๋๋ฅผ ์ ์ฉํด ์ฃผ์ธ์(์ฌ์ฉ์ค์ธ ํ์ฅ ํจ์ ์๊ทธ๋์ฒ์ ๋ง์ถฐ ์ ํ):
- modifier = modifier.noRippleClickable(onClick = onClick),
+ modifier = if (enabled) modifier.noRippleClickable(onClick = onClick) else modifier,๋๋(์๊ทธ๋์ฒ๊ฐ ์ง์ํ๋ค๋ฉด):
- modifier = modifier.noRippleClickable(onClick = onClick),
+ modifier = modifier.noRippleClickable(enabled = enabled, onClick = onClick),Committable suggestion skipped: line range outside the PR's diff.
๐ค Prompt for AI Agents
In
core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableCustomCardWithStroke.kt
around lines 37-38, the current modifier uses modifier.noRippleClickable(onClick
= onClick) which ignores the component's enabled state and allows clicks when
disabled; update it so clicks are blocked when enabled==false. Fix by either
using the extension that accepts an enabled flag (e.g.,
modifier.noRippleClickable(enabled = enabled, onClick = onClick)) if that
signature exists, or wrap the clickable application to only add the
noRippleClickable when enabled is true and otherwise leave the modifier
unmodified (or add a non-clickable fallback) so disabled cards cannot be
clicked.
| GlideImage( | ||
| imageModel = { imageUrl }, | ||
| imageOptions = ImageOptions( | ||
| contentScale = contentScale, | ||
| alignment = alignment, | ||
| ), | ||
| previewPlaceholder = painterResource(id = com.teamwable.common.R.drawable.img_empty), | ||
| modifier = modifier.noRippleThrottleClickable(onClick = onClick), | ||
| ) |
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.
์ ๊ทผ์ฑ์ ์ํ contentDescription ์ถ๊ฐ๊ฐ ํ์ํฉ๋๋ค.
์ด๋ฏธ์ง ์ปดํฌ๋ํธ์ contentDescription์ด ์์ด ์คํฌ๋ฆฐ ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง์ ๋ด์ฉ์ ์ ์ ์์ต๋๋ค. ์ ๊ทผ์ฑ ์ง์์ ์ํด contentDescription ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค:
@Composable
fun WableGlideImage(
modifier: Modifier = Modifier,
imageUrl: String,
+ contentDescription: String?,
contentScale: ContentScale = ContentScale.Crop,
alignment: Alignment = Alignment.Center,
onClick: () -> Unit = {},
) {
GlideImage(
imageModel = { imageUrl },
imageOptions = ImageOptions(
contentScale = contentScale,
alignment = alignment,
+ contentDescription = contentDescription,
),
previewPlaceholder = painterResource(id = com.teamwable.common.R.drawable.img_empty),
modifier = modifier.noRippleThrottleClickable(onClick = onClick),
)
}Committable suggestion skipped: line range outside the PR's diff.
๐ค Prompt for AI Agents
In
core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt
around lines 23-31, the GlideImage call is missing a contentDescription which
breaks accessibility; add a contentDescription parameter to the WableImage
composable (e.g., contentDescription: String? = null), update all WableImage
callers as needed (or keep default null for backwards compatibility), and pass
that value into GlideImageโs contentDescription parameter so screen readers
receive the descriptive text (use null for purely decorative images).
| QuizStatBox( | ||
| title = stringResource(id = QuizStatType.XP.title), | ||
| titleColor = QuizStatType.XP.titleColor, | ||
| value = "8", | ||
| ) | ||
| QuizStatBox( | ||
| title = stringResource(id = QuizStatType.RANK.title), | ||
| titleColor = QuizStatType.RANK.titleColor, | ||
| value = "16", | ||
| ) | ||
| QuizStatBox( | ||
| title = stringResource(id = QuizStatType.SPEED.title), | ||
| titleColor = QuizStatType.SPEED.titleColor, | ||
| value = "20", | ||
| ) |
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.
ํ๋์ฝ๋ฉ๋ ํต๊ณ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋ฐ๋๋ก ์์ ํ์
ํ์ฌ XP, RANK, SPEED ๊ฐ์ด ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ์ค์ ํด์ฆ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ํ๋๋ก QuizResultScreen์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ViewModel์ ํตํด ์ํ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค:
@Composable
fun QuizResultScreen(
type: QuizResultType = QuizResultType.FAIL,
+ xpValue: String,
+ rankValue: String,
+ speedValue: String,
onXpClick: () -> Unit = {},
) {๊ทธ๋ฆฌ๊ณ ๊ฐ์ ์ ๋ฌ:
QuizStatBox(
title = stringResource(id = QuizStatType.XP.title),
titleColor = QuizStatType.XP.titleColor,
- value = "8",
+ value = xpValue,
)๋ฐฑ์๋ ์ฐ๋ ์ ์ด ๋ถ๋ถ์ ๊ตฌํํ์๊ฒ ์ต๋๊น?
Committable suggestion skipped: line range outside the PR's diff.
๐ค Prompt for AI Agents
In feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt
around lines 81 to 95, the XP/RANK/SPEED values are hardcoded ("8","16","20");
change QuizResultScreen to accept these stats (either as parameters to the
composable or by exposing them from a ViewModel/state holder) and replace the
literal strings with the passed values (convert types as needed and format for
display). Ensure callers supply the real data (or ViewModel is observed) so the
QuizStatBox invocations use the dynamic values instead of constants.
| text = "์ด ๋ฃฌ์ ์นผ๋ ๋น๋ผ๋ ๋ฃฌ์ผ๋ก\n" + | ||
| "์ ์๊ฒ ๊ธฐ๋ณธ ๊ณต๊ฒฉ์ 3๋ฒ ๊ฐํ๋ฉด\n" + | ||
| "์ผ์ ์๊ฐ ๋์ ๊ณต๊ฒฉ ์๋๊ฐ\n" + | ||
| "ํฌ๊ฒ ์ฆ๊ฐํ๋ ๋ฃฌ์ด๋ค.", | ||
| style = WableTheme.typography.head01, | ||
| textAlign = TextAlign.Center, | ||
| color = WableTheme.colors.gray800, | ||
| maxLines = 4, |
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.
๐ ๏ธ Refactor suggestion | ๐ Major
ํ๋์ฝ๋ฉ๋ ํ ์คํธ๋ฅผ strings.xml๋ก ์ด๋ ํ์
ํด์ฆ ์ค๋ช
ํ
์คํธ๊ฐ ์ฝ๋์ ์ง์ ํ๋์ฝ๋ฉ๋์ด ์์ต๋๋ค. ๋ค๋ฅธ UI ํ
์คํธ๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก strings.xml๋ก ์ด๋ํ์ฌ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
feature/quiz/src/main/res/values/strings.xml์ ์ถ๊ฐ:
<string name="str_quiz_start_description">์ด ๋ฃฌ์ ์นผ๋ ๋น๋ผ๋ ๋ฃฌ์ผ๋ก\n์ ์๊ฒ ๊ธฐ๋ณธ ๊ณต๊ฒฉ์ 3๋ฒ ๊ฐํ๋ฉด\n์ผ์ ์๊ฐ ๋์ ๊ณต๊ฒฉ ์๋๊ฐ\nํฌ๊ฒ ์ฆ๊ฐํ๋ ๋ฃฌ์ด๋ค.</string>๊ทธ๋ฆฌ๊ณ ์ฝ๋์์:
Text(
- text = "์ด ๋ฃฌ์ ์นผ๋ ๋น๋ผ๋ ๋ฃฌ์ผ๋ก\n" +
- "์ ์๊ฒ ๊ธฐ๋ณธ ๊ณต๊ฒฉ์ 3๋ฒ ๊ฐํ๋ฉด\n" +
- "์ผ์ ์๊ฐ ๋์ ๊ณต๊ฒฉ ์๋๊ฐ\n" +
- "ํฌ๊ฒ ์ฆ๊ฐํ๋ ๋ฃฌ์ด๋ค.",
+ text = stringResource(R.string.str_quiz_start_description),
style = WableTheme.typography.head01,๐ค Prompt for AI Agents
In feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt around
lines 79 to 86 the quiz description is hardcoded in the Composable; move this
text into feature/quiz/src/main/res/values/strings.xml as a new string resource
(e.g., name="str_quiz_start_description") preserving the line breaks, then
replace the hardcoded literal with a call to
stringResource(R.string.str_quiz_start_description) (or the appropriate
generated ID) so the UI reads the text from resources instead of embedding it in
code.
sohyun127
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.
๊ณ ์ํ์ จ์ต๋๋ค!! ๐
|
๋ค์ pr์์ ์์ ์ฌํญ ์ ์ฉํ๊ฒ ์ต๋๋ค! |
โ ๐๐ต๐ฒ๐ฐ๐ธ-๐๐ถ๐๐
๐ ๐๐๐๐๐ฒ๐
๐๐ช๐ผ๐ฟ๐ธ ๐๐ฒ๐๐ฐ๐ฟ๐ถ๐ฝ๐๐ถ๐ผ๐ป
๐ท ๐ฆ๐ฐ๐ฟ๐ฒ๐ฒ๐ป๐๐ต๐ผ๐
๐ฌ ๐ง๐ผ ๐ฅ๐ฒ๐๐ถ๐ฒ๐๐ฒ๐ฟ๐
Summary by CodeRabbit
๋ฆด๋ฆฌ์ค ๋ ธํธ
์๋ก์ด ๊ธฐ๋ฅ
์คํ์ผ