Skip to content

Conversation

@chanubc
Copy link
Member

@chanubc chanubc commented Oct 23, 2025

โœ… ๐—–๐—ต๐—ฒ๐—ฐ๐—ธ-๐—Ÿ๐—ถ๐˜€๐˜

  • mergeํ•  ๋ธŒ๋žœ์น˜์˜ ์œ„์น˜๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”(mainโŒ/developโญ•)
  • ๋ฆฌ๋ทฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฆฌ๋ทฐ์–ด๋ฅผ ์ง€์ •ํ•ด ์ฃผ์„ธ์š”
  • P1 ๋‹จ๊ณ„์˜ ๋ฆฌ๋ทฐ๋Š” ํ•„์ˆ˜๋กœ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • Approve๋œ PR์€ assigner๊ฐ€ ๋จธ์ง€ํ•˜๊ณ , ์ˆ˜์ • ์š”์ฒญ์ด ์˜จ ๊ฒฝ์šฐ ์ˆ˜์ • ํ›„ ๋‹ค์‹œ push๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“Œ ๐—œ๐˜€๐˜€๐˜‚๐—ฒ๐˜€

๐Ÿ“Ž๐—ช๐—ผ๐—ฟ๐—ธ ๐——๐—ฒ๐˜€๐—ฐ๐—ฟ๐—ถ๐—ฝ๐˜๐—ถ๐—ผ๐—ป

  • ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„

๐Ÿ“ท ๐—ฆ๐—ฐ๐—ฟ๐—ฒ๐—ฒ๐—ป๐˜€๐—ต๐—ผ๐˜

image1 image2 image3

๐Ÿ’ฌ ๐—ง๐—ผ ๐—ฅ๐—ฒ๐˜ƒ๐—ถ๐—ฒ๐˜„๐—ฒ๐—ฟ๐˜€

Summary by CodeRabbit

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ

  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

    • ํ€ด์ฆˆ ๊ธฐ๋Šฅ ๊ฐœ์„ : ์ƒˆ๋กœ์šด ์‹œ์ž‘ ํ™”๋ฉด๊ณผ ๊ฒฐ๊ณผ ํ™”๋ฉด ์ถ”๊ฐ€, ํ†ต๊ณ„(๊ฒฝํ—˜์น˜, ์ˆœ์œ„, ์†๋„) ํ‘œ์‹œ
    • ์ด๋ฏธ์ง€ ๋กœ๋”ฉ ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
    • ์นด๋“œ ์ปดํฌ๋„ŒํŠธ์— ํด๋ฆญ ์ฒ˜๋ฆฌ ๋ฐ ๋ฐฐ๊ฒฝ์ƒ‰ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ง€์›
    • ์ƒˆ๋กœ์šด ์ƒ‰์ƒ ํŒ”๋ ˆํŠธ ์ถ”๊ฐ€ (ํŒŒ๋ž€์ƒ‰, ๋นจ๊ฐ„์ƒ‰ ๋ณ€ํ˜•)
    • ์ƒˆ๋กœ์šด ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ์Šคํƒ€์ผ ์ถ”๊ฐ€
  • ์Šคํƒ€์ผ

    • UI ๊ทธ๋ž˜๋””์–ธํŠธ ํšจ๊ณผ ๊ฐœ์„ 
    • ๋””์ž์ธ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ ํ™•์žฅ

โ€ฆons and customizable background, stroke color
@chanubc chanubc requested a review from sohyun127 October 23, 2025 20:11
@chanubc chanubc self-assigned this Oct 23, 2025
@coderabbitai
Copy link

coderabbitai bot commented Oct 23, 2025

Walkthrough

๋””์ž์ธ ์‹œ์Šคํ…œ์— ์ƒˆ๋กœ์šด ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ, ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ€ด์ฆˆ ํ™”๋ฉด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ€ด์ฆˆ ๋ฉ”์ธ, ์‹œ์ž‘, ๊ฒฐ๊ณผ ํŽ˜์ด์ง€๋ฅผ ์กฐ์„ฑํ•˜๊ณ  ๊ด€๋ จ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ํ™•์žฅํ•˜์˜€์œผ๋ฉฐ, ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ์œ ์—ฐ์„ฑ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

Changes

์ฝ˜ํ…์ธ  ๋ณ€๊ฒฝ ์š”์•ฝ
๋””์ž์ธ ์‹œ์Šคํ…œ ๊ธฐ์ดˆ
core/designsystem/build.gradle.kts, core/ui/src/main/res/values/colors.xml
Landscapist Glide ์˜์กด์„ฑ ์ถ”๊ฐ€, ์•ฑ ๋ฐ” ์ƒ‰์ƒ(app_bar_purple) ์ถ”๊ฐ€
์ƒ‰์ƒ ๋ฐ ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ
core/designsystem/src/main/java/com/teamwable/designsystem/theme/Color.kt, core/designsystem/src/main/java/com/teamwable/designsystem/theme/Type.kt
Blue10, Blue50, Red10 ์ƒ‰์ƒ ์ƒ์ˆ˜ ๋ฐ WableColors ์†์„ฑ ์ถ”๊ฐ€, PriceDownBlack ํฐํŠธ ํŽ˜๋ฐ€๋ฆฌ ๋ฐ priceDown ํ…์ŠคํŠธ ์Šคํƒ€์ผ ์ถ”๊ฐ€
์นด๋“œ ๋ฐ ๋ฐ•์Šค ์ปดํฌ๋„ŒํŠธ
core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableCustomCardWithStroke.kt, core/designsystem/src/main/java/com/teamwable/designsystem/component/card/WableShapeBox.kt
WableCustomCardWithStroke์— ๋ชจ๋””ํŒŒ์ด์–ด, onClick, ๋ฐฐ๊ฒฝ์ƒ‰, ๋™์  strokeColor ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€, radius16Style() ํ•จ์ˆ˜ ์ถ”๊ฐ€
์ด๋ฏธ์ง€ ์ปดํฌ๋„ŒํŠธ ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ
core/designsystem/src/main/java/com/teamwable/designsystem/component/image/WableImage.kt, core/designsystem/src/main/java/com/teamwable/designsystem/extension/modifier/ModifierExt.kt, core/designsystem/src/main/java/com/teamwable/designsystem/extension/preview/DevicePreviews.kt
WableGlideImage ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€, wableVerticalGradientBackground ๋ชจ๋””ํŒŒ์ด์–ด ์ถ”๊ฐ€, DevicePreviews ์• ๋„ˆํ…Œ์ด์…˜ ์ถ”๊ฐ€
ํ€ด์ฆˆ ์Šคํฌ๋ฆฐ ๋ฐ ๋ผ์šฐํŒ…
feature/quiz/src/main/java/com/teamwable/quiz/QuizMainFragment.kt, feature/quiz/src/main/java/com/teamwable/quiz/QuizMainScreen.kt, feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartFragment.kt, feature/quiz/src/main/java/com/teamwable/quiz/start/QuizStartScreen.kt, feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultFragment.kt, feature/quiz/src/main/java/com/teamwable/quiz/result/QuizResultScreen.kt
QuizFragment๋ฅผ QuizMainFragment๋กœ ๋ฆฌ๋„ค์ด๋ฐ, QuizMainScreen ๋ ˆ์ด์•„์›ƒ ์žฌ๊ตฌ์„ฑ, QuizStartFragment/Screen ์ถ”๊ฐ€(O/X ์„ ํƒ ํ™”๋ฉด), QuizResultFragment/Screen ์ถ”๊ฐ€(๊ฒฐ๊ณผ ํ‘œ์‹œ ํ™”๋ฉด)
ํ€ด์ฆˆ ์ปดํฌ๋„ŒํŠธ ๋ฐ ํƒ€์ž…
feature/quiz/src/main/java/com/teamwable/quiz/component/QuizButton.kt, feature/quiz/src/main/java/com/teamwable/quiz/component/QuizComponent.kt, feature/quiz/src/main/java/com/teamwable/quiz/component/QuizStatType.kt, feature/quiz/src/main/java/com/teamwable/quiz/component/QuizResultType.kt
QuizOXButton ๋ฐ OXType ์—ด๊ฑฐํ˜• ์ถ”๊ฐ€, QuizStatBox ํ™•์žฅ ํ•จ์ˆ˜ ์ถ”๊ฐ€, QuizStatType ์—ด๊ฑฐํ˜• ์ถ”๊ฐ€, QuizResultType ์—ด๊ฑฐํ˜• ์ถ”๊ฐ€
ํ€ด์ฆˆ ๋ฆฌ์†Œ์Šค
feature/quiz/src/main/res/drawable/ic_quiz_o.xml, feature/quiz/src/main/res/drawable/ic_quiz_x.xml, feature/quiz/src/main/res/layout/fragment_quiz_start.xml, feature/quiz/src/main/res/layout/fragment_quiz_result.xml, feature/quiz/src/main/res/navigation/graph_quiz.xml, feature/quiz/src/main/res/values/strings.xml
O/X ์•„์ด์ฝ˜ ๋ฒกํ„ฐ ๋“œ๋กœ์–ด๋ธ” ์ถ”๊ฐ€, ํ€ด์ฆˆ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ ์ถ”๊ฐ€, ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ทธ๋ž˜ํ”„์— 3๊ฐœ ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ฐ ์•ก์…˜ ์ถ”๊ฐ€, ํ€ด์ฆˆ ๊ด€๋ จ ๋ฌธ์ž์—ด ๋ฆฌ์†Œ์Šค ์ถ”๊ฐ€
๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ ๋ฉ”์ธ
feature/main/src/main/java/com/teamwable/main/MainActivity.kt
ํ€ด์ฆˆ ๋„ค๋น„๊ฒŒ์ด์…˜ ์—…๋ฐ์ดํŠธ(navigation_quiz โ†’ navigation_quiz_main), ์ƒˆ๋กœ์šด ๊ฒฐ๊ณผ ํ™”๋ฉด ๋Œ€์ƒ ์ถ”๊ฐ€, ์ƒํƒœ ๋ฐ” ์ƒ‰์ƒ ์ฒ˜๋ฆฌ ๊ฐœ์„ 
์ธ์ฆ
feature/auth/src/main/java/com/teamwable/auth/LoginScreen.kt
wableVerticalGradientBackground ๋ชจ๋””ํŒŒ์ด์–ด๋กœ ์ˆ˜์ง ๊ทธ๋ž˜๋””์–ธํŠธ ๋ฆฌํŒฉํ† ๋ง
์˜จ๋ณด๋”ฉ
feature/onboarding/src/main/java/com/teamwable/onboarding/selectlckteam/component/LckTeamItem.kt
lckTeamType ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€, ํด๋ฆญ ์ฒ˜๋ฆฌ๋ฅผ WableCustomCardWithStroke์˜ onClick์œผ๋กœ ์ด๋™

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
Loading

Estimated code review effort

๐ŸŽฏ 3 (Moderate) | โฑ๏ธ ~25 minutes

๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋‹ค์–‘ํ•œ ํŒŒ์ผ์— ๊ฑธ์ณ ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€(ํ€ด์ฆˆ ํ™”๋ฉด, ์ปดํฌ๋„ŒํŠธ, ์—ด๊ฑฐํ˜•)์ด๋ฉฐ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํ™•์žฅ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ๋””์ž์ธ ์‹œ์Šคํ…œ ๊ฐœ์„ ๋„ ์ผ๊ด€๋œ ํŒจํ„ด์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋กœ์ง ๋ฐ€๋„๋Š” ๋‚ฎ์ง€๋งŒ, ํŒŒ์ผ ์ˆ˜์™€ ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค ํƒ€์ž…(๋ ˆ์ด์•„์›ƒ, ๋“œ๋กœ์–ด๋ธ”, ๋ฌธ์ž์—ด, ๋„ค๋น„๊ฒŒ์ด์…˜)์œผ๋กœ ์ธํ•ด ์ค‘๊ฐ„ ์ •๋„์˜ ๊ฒ€ํ† ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Possibly related PRs

Suggested labels

โญ [FEAT], ๐Ÿป ์ฐฌ์šฐ, ๐Ÿ’Ÿ [UI], โ˜• [COMPOSE]

Suggested reviewers

  • sohyun127

Poem

๐Ÿฐ ํ€ด์ฆˆ์˜ ๊ธธ์„ ๋‹ฆ์œผ๋ฉฐ,
ํƒ€์ด๋จธ ์šธ๋ ค ์‹œ๊ฐ„์„ ์žฌ๊ณ ,
O์™€ X๊ฐ€ ๊ฒฝ์Ÿํ•˜๋‹ˆ,
๊ฒฐ๊ณผ ํ™”๋ฉด์€ ์˜๊ด‘์„ ๋น„์ถ”๋„ค!
๋””์ž์ธ์€ ๋”์šฑ ์•„๋ฆ„๋‹ต๊ณ ,
์ปดํฌ๋„ŒํŠธ๋Š” ์ถค์„ ์ถ˜๋‹ค! ๐ŸŽจโœจ

Pre-merge checks and finishing touches

โŒ Failed checks (2 warnings)
Check name Status Explanation Resolution
Out of Scope Changes Check โš ๏ธ Warning PR ๋ถ„์„ ๊ฒฐ๊ณผ, feature/auth/src/main/java/com/teamwable/auth/LoginScreen.kt์˜ ์ˆ˜์ •์€ ์ด์Šˆ #188 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๋ณ€๊ฒฝ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. LoginScreen์—์„œ ์ˆ˜๋™ ์ž‘์„ฑ๋œ ๊ทธ๋ž˜๋””์–ธํŠธ ๋ธŒ๋Ÿฌ์‹œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ wableVerticalGradientBackground modifier๋กœ ๋ฆฌํŒฉํ† ๋งํ•œ ๊ฒƒ์€ ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„๊ณผ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†๋Š” ๊ธฐ์กด ํ™”๋ฉด์˜ ๊ฐœ์„ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ด์Šˆ #188์—์„œ ๋ช…์‹œ๋œ "ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„" ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค. LoginScreen ๋ฆฌํŒฉํ† ๋ง ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ณ„๋„์˜ PR๋กœ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ด ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ์ด์œ ๋ฅผ PR ์„ค๋ช…์˜ "To Reviewers" ์„น์…˜์— ๋ช…ํ™•ํžˆ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๋ณ€๊ฒฝ์ด ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„์˜ ํ•„์ˆ˜ ์„ ํ–‰ ์ž‘์—…์ด๋ผ๋ฉด, PR ์„ค๋ช…์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์„ค๋ช…ํ•˜์—ฌ ๋ฒ”์œ„ ๋‚ด๋กœ ์žฌ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Docstring Coverage โš ๏ธ Warning Docstring coverage is 7.69% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
โœ… Passed checks (2 passed)
Check name Status Explanation
Title Check โœ… Passed PR ์ œ๋ชฉ "[Feature/#188] quiz UI"๋Š” changeset์˜ ์ฃผ์š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์š”์•ฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. raw summary๋ฅผ ํ†ตํ•ด ๋ณด๋ฉด ์—ฌ๋Ÿฌ ํ€ด์ฆˆ ๊ด€๋ จ UI ์ปดํฌ๋„ŒํŠธ(QuizOXButton, QuizStatBox, QuizMainScreen ๋“ฑ)์™€ ํ™”๋ฉด(QuizStartScreen, QuizResultScreen, QuizMainFragment ๋“ฑ)์ด ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฉฐ, ์ด๋Š” ์ œ๋ชฉ์—์„œ ๊ฐ•์กฐ๋œ "quiz UI" ๊ตฌํ˜„๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ œ๋ชฉ์€ ๊ฐ„๊ฒฐํ•˜๋ฉด์„œ๋„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋น ๋ฅด๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
Description Check โœ… Passed PR ์„ค๋ช…์ด ์ œ๊ณต๋œ ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ๋ฅผ ์ถฉ์‹คํžˆ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒดํฌ๋ฆฌ์ŠคํŠธ ํ•ญ๋ชฉ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ด์Šˆ #188์ด ๋ช…์‹œ๋˜๊ณ , "ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„"์ด๋ผ๋Š” ์ž‘์—… ์„ค๋ช…๊ณผ ํ•จ๊ป˜ ์Šคํฌ๋ฆฐ์ƒท 3๊ฐœ๊ฐ€ ์ฒจ๋ถ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์˜ ์ฃผ์š” ํ•„์ˆ˜ ์„น์…˜๋“ค์ด ๋ชจ๋‘ ์ฑ„์›Œ์ ธ ์žˆ์–ด PR์˜ ์˜๋„์™€ ์ž‘์—… ๋ฒ”์œ„๊ฐ€ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.
โœจ Finishing touches
  • ๐Ÿ“ Generate docstrings
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/#188-quiz-ui

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: 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 DevicePreviews
feature/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

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 0011c97 and 2d3e2ea.

โ›” Files ignored due to path filters (3)
  • core/designsystem/src/main/res/font/price_down_black.otf is excluded by !**/*.otf
  • feature/quiz/src/main/res/drawable/img_quiz_fail.png is excluded by !**/*.png
  • feature/quiz/src/main/res/drawable/img_quiz_success.png is 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)๊ฐ€ ์ •์ƒ ์ปดํŒŒ์ผ๋˜๋Š”์ง€๋งŒ ์ตœ์ข… ํ™•์ธ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ ์•ฑ๋ฐ” ์ƒ‰์ƒ์€ XML app_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๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”. ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ํ€ด์ฆˆ ๊ฒฐ๊ณผ ํ™”๋ฉด์—์„œ ๋’ค๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ์•ฑ์ด ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Comment on lines +17 to 26
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,
Copy link

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.

Comment on lines +37 to 38
modifier = modifier.noRippleClickable(onClick = onClick),
) {
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

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.

Comment on lines +23 to +31
GlideImage(
imageModel = { imageUrl },
imageOptions = ImageOptions(
contentScale = contentScale,
alignment = alignment,
),
previewPlaceholder = painterResource(id = com.teamwable.common.R.drawable.img_empty),
modifier = modifier.noRippleThrottleClickable(onClick = onClick),
)
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

์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ 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).

Comment on lines +81 to +95
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",
)
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

ํ•˜๋“œ์ฝ”๋”ฉ๋œ ํ†ต๊ณ„ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋ฐ›๋„๋ก ์ˆ˜์ • ํ•„์š”

ํ˜„์žฌ 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.

Comment on lines +79 to +86
text = "์ด ๋ฃฌ์€ ์นผ๋‚ ๋น„๋ผ๋Š” ๋ฃฌ์œผ๋กœ\n" +
"์ ์—๊ฒŒ ๊ธฐ๋ณธ ๊ณต๊ฒฉ์„ 3๋ฒˆ ๊ฐ€ํ•˜๋ฉด\n" +
"์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๊ณต๊ฒฉ ์†๋„๊ฐ€\n" +
"ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š” ๋ฃฌ์ด๋‹ค.",
style = WableTheme.typography.head01,
textAlign = TextAlign.Center,
color = WableTheme.colors.gray800,
maxLines = 4,
Copy link

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.

Copy link
Collaborator

@sohyun127 sohyun127 left a comment

Choose a reason for hiding this comment

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

๊ณ ์ƒํ•˜์…จ์Šต๋‹ˆ๋‹ค!! ๐Ÿ‘

@chanubc
Copy link
Member Author

chanubc commented Oct 24, 2025

๋‹ค์Œ pr์—์„œ ์ˆ˜์ • ์‚ฌํ•ญ ์ ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค!

@chanubc chanubc merged commit 132dde1 into develop Oct 24, 2025
2 checks passed
@chanubc chanubc deleted the feature/#188-quiz-ui branch October 24, 2025 11:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] : ํ€ด์ฆˆ ํ™”๋ฉด ๊ตฌํ˜„

3 participants