Skip to content

Conversation

@uson1004
Copy link
Member

@uson1004 uson1004 commented Dec 17, 2025

๊ฐœ์š”

๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ

์ž‘์—…์‚ฌํ•ญ

image

์ถ”๊ฐ€ ๋กœ ํ•  ๋ง

Summary by CodeRabbit

Release Notes

  • New Features

    • Implemented sign-in screen with account validation and error messaging
    • Added snackbar notifications for user feedback
    • Enhanced navigation flow with onboarding, sign-in, and main app screens
    • Added new icon set and visual design components
    • Implemented edge-to-edge display mode for immersive UI
  • UI & Design Updates

    • Updated app theming with Material3 design system integration
    • Added dark mode support
    • Refreshed typography and color palette
    • Enhanced button styling and text input components
  • Architecture Improvements

    • Refactored app state management
    • Updated theme system structure
    • Reorganized navigation architecture

โœ๏ธ Tip: You can customize this high-level summary in your review settings.

@uson1004 uson1004 requested a review from a team December 17, 2025 12:44
@uson1004 uson1004 self-assigned this Dec 17, 2025
@uson1004 uson1004 added the feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ๊ฒฝ์šฐ label Dec 17, 2025
@uson1004 uson1004 linked an issue Dec 17, 2025 that may be closed by this pull request
@coderabbitai
Copy link

coderabbitai bot commented Dec 17, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Restructures app navigation architecture, migrates design system (colors, typography, icons), introduces snackbar infrastructure with state management, removes legacy main feature screens (home, application, announcement, mypage), adds new SignIn flow with device token integration, and refactors build flavors with manifest and resource updates.

Changes

Cohort / File(s) Summary
App Initialization & Navigation
app/src/dev/AndroidManifest.xml, app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt, app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt, app/src/dev/kotlin/team/aliens/dms/android/app/EdgeToEdgeConfig.kt, app/src/dev/kotlin/team/aliens/dms/android/app/MainActivity.kt
Added activity-level UI attributes to manifest; introduced DmsAppState composable state holder with snackbar integration; refactored DmsApp signature to accept appState parameter; configured transparent edge-to-edge system bars; called edge-to-edge config in MainActivity.
Design System Theme & Colors
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Colors.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt
Replaced Colors class and helper functions with staticCompositionLocalOf-based LocalColors; updated color scheme definitions and surface tokens for Material3; replaced notoSansFontFamily with pretendardFontFamily across typography.
Design System Components
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/DmsIconButton.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt
Added ButtonColor.Gray enum; refactored button sizing logic with ButtonType parameter; introduced DmsIconButton and DmsTextField composables with rich customization options.
Design System Snackbar
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/DmsSnackBarVisuals.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/SnackBar.kt
Added DmsSnackBarVisuals data class implementing SnackbarVisuals; introduced DmsSnackBar composable with DmsSnackBarType enum (SUCCESS, ERROR).
Design System Foundations
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsSymbol.kt, core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/modifier/DmsDropShadow.kt
Introduced DmsIcon object with 42+ drawable resource aliases; added DmsSymbol composable for theme-aware logo; added dmsDropShadow modifier extension.
Design System Drawable Resources (Dev)
core/design-system/src/dev/res/drawable/ic_*.xml
Added vector drawable resources: ic_cancel, ic_error, ic_success, ic_symbol_dark, ic_symbol_light, ic_profile_default, ic_wrong.
Design System Drawable Resources (Prod)
core/design-system/src/prod/res/drawable/ic_*.xml
Added 40+ vector drawable resources including icons (applicate, back, bell, camera, home, person, etc.) and logos (logo_dark, logo_light).
Design System Resources (Prod)
core/design-system/src/prod/res/values/themes.xml, core/design-system/src/prod/res/values-night/themes.xml, core/design-system/src/prod/res/values/strings.xml
Added Theme.DMS style with transparent system bars; added string resources for app_name and default_notification_channel_id.
Removed Main Navigation & Screens
feature/src/dev/kotlin/team/aliens/dms/android/feature/main/Main.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt
Deleted main navigation composable with bottom app bar, and removed all four main feature screens (home, application, announcement, mypage) including their view models and UI components.
Removed Navigation Interfaces
feature/src/dev/kotlin/team/aliens/dms/android/feature/main/navigation/MainNavigator.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeNavigator.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/navigation/ApplicationNavigator.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/navigation/AnnouncementNavigator.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/navigation/MyPageNavigator.kt
Deleted navigation interface contracts for main, home, application, announcement, and mypage features.
SignIn Feature
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/navigation/SignInRoute.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt
Updated SignInRoute to accept navigateToMain, navigateToSignUp, and onShowSnackBar callbacks; refactored SigninScreen with modular components; introduced SignInViewModel with device token fetching and sign-in error handling with snackbar integration.
Onboarding Components
feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/CompleteScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/IntroScreen.kt, feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/viewmodel/OnboardingViewModel.kt
Updated color theming from backgroundVariant to onTertiaryContainer; refactored OnboardingState to remove UiState inheritance.
Core UI & Utilities
core/ui/src/dev/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt, core/ui/src/dev/java/team/aliens/dms/android/core/ui/viewmodel/BaseStateViewModel.kt, core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt, core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/TextFields.kt
Introduced PaddingDefaults object with predefined padding values and modifier extensions; cleaned up unused imports in BaseStateViewModel; updated DmsIcon import path to foundation package.
ViewModel & ViewManager Updates
app/src/dev/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt, app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt, core/notification/src/main/java/team/aliens/dms/android/core/notification/NotificationManager.kt, core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealType.kt
Changed MainActivityViewModel superclass from BaseViewModel to ViewModel; updated DmsIcon import paths to foundation package in notification and widget modules.
Build Flavor Configurations
app/src/main/AndroidManifest.xml, app/src/prod/AndroidManifest.xml, app/src/main/res/values/themes.xml, app/src/main/res/values-night/themes.xml
Cleared main manifest (made empty); expanded prod manifest with camera permission, runtime permissions, MainActivity, DmsMessagingService, MealWidgetReceiver, and InitializationProvider; updated theme XML namespace order and whitespace.
Removed Widget Color Scheme
core/widget/src/prod/designsystem/DmsWidgetGlanceColorScheme.kt
Deleted entire widget color scheme file providing Glance light/dark color configurations.

Estimated code review effort

๐ŸŽฏ 4 (Complex) | โฑ๏ธ ~60 minutes

Areas requiring extra attention:

  • DmsAppState & snackbar integration: New state management pattern and coroutine-scoped lifecycle; verify proper lifecycle handling and snackbar state persistence across recomposition.
  • Design system refactoring (Theme/Colors): Major shift from Colors class to LocalColors composition local; ensure all color usages have been migrated and no stale references remain.
  • Typography font family migration: pretendardFontFamily replaces notoSansFontFamily; verify font resources are present in all build flavors and rendering is correct.
  • Removed main navigation: Large-scale deletion of feature screens and navigators; verify all navigation call-sites have been updated or redirected in DmsApp routing.
  • SignInViewModel device token handling: New device token integration in sign-in flow; confirm token retrieval, storage, and error handling follow app security patterns.
  • Build flavor manifest split: Significant divergence between dev (empty main manifest) and prod manifests; verify all components and permissions are correctly scoped to production flavor.
  • DmsIcon package migration: Multiple files updated to import from new foundation package; verify all import paths are consistent across codebase.

Possibly related PRs

Suggested reviewers

  • JunJaBoy
  • parkuiery

๐Ÿฐ hops excitedly

A grand refactoring, bold and true,
New snackbars sparkle, navigation shines through,
Old screens fade softly into the night,
While SignIn emerges, polished and bright! โœจ

munches carrot thoughtfully ๐Ÿฅ•

Pre-merge checks and finishing touches

โŒ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage โš ๏ธ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
โœ… Passed checks (2 passed)
Check name Status Explanation
Description Check โœ… Passed Check skipped - CodeRabbitโ€™s high-level summary is enabled.
Title check โœ… Passed The PR title references issue #808 and describes 'login screen development' (๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ), which aligns with the SignIn feature work shown in the changeset including new SignInViewModel, SignInScreen redesign, and related UI components.
โœจ 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/808-๋กœ๊ทธ์ธ-ํ™”๋ฉด-๊ฐœ๋ฐœ

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.

@gemini-code-assist
Copy link

Summary of Changes

Hello @uson1004, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

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

Highlights

  • ๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ: ์ƒˆ๋กœ์šด ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•œ UI ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ฆฌํŒฉํ† ๋ง: ๋ฒ„ํŠผ, ํ…์ŠคํŠธ ํ•„๋“œ, ์ƒ‰์ƒ, ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ ๋“ฑ ํ•ต์‹ฌ ๋””์ž์ธ ์‹œ์Šคํ…œ ์ปดํฌ๋„ŒํŠธ๋“ค์ด ๋Œ€๋Œ€์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง๋˜์—ˆ์Šต๋‹ˆ๋‹ค. DmsAppState๋ฅผ ํ†ตํ•œ ์Šค๋‚ต๋ฐ” ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๋„ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋นŒ๋“œ ๋ณ€ํ˜•๋ณ„ AndroidManifest ๋ถ„๋ฆฌ ๋ฐ ์„ค์ •: ๊ฐœ๋ฐœ(dev) ๋ฐ ์ œํ’ˆ(prod) ๋นŒ๋“œ์— ๋”ฐ๋ผ AndroidManifest ํŒŒ์ผ์ด ๋ถ„๋ฆฌ๋˜์—ˆ์œผ๋ฉฐ, ์—ฃ์ง€ ํˆฌ ์—ฃ์ง€(edge-to-edge) ํ™”๋ฉด ์„ค์ •์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ ˆ๊ฑฐ์‹œ MVI ๋ฐ UI ์ปดํฌ๋„ŒํŠธ ์ œ๊ฑฐ: ๊ธฐ์กด MVI(Model-View-Intent) ๊ด€๋ จ ๊ธฐ๋ณธ ํด๋ž˜์Šค์™€ ์—ฌ๋Ÿฌ ํ”ผ์ฒ˜ ํ™”๋ฉด(๋ฉ”์ธ, ๊ณต์ง€์‚ฌํ•ญ, ์‹ ์ฒญ, ํ™ˆ, ๋งˆ์ดํŽ˜์ด์ง€)์ด ์ œ๊ฑฐ๋˜์–ด ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ๊ฐ„์†Œํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with ๐Ÿ‘ and ๐Ÿ‘Ž on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. โ†ฉ

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: 20

๐Ÿงน Nitpick comments (27)
core/design-system/src/prod/res/drawable/ic_warning.xml (1)

6-12: Icon implementation looks good.

The warning icon is properly structured with correct path data and a standard black fill color (appropriate for a design system base icon where tinting is applied at usage).

Optional optimization: The clip-path at lines 7-8 defines the full 24ร—24 viewport and is typically redundant (paths are already clipped to the viewport by default). This is often auto-generated by design tools and can be safely removed to simplify the XML:

  <group>
-    <clip-path
-        android:pathData="M0,0h24v24h-24z"/>
    <path
        android:pathData="M12.866,3L22.392,19.5C22.48,19.652 22.526,19.824 22.526,20C22.526,20.176 22.48,20.348 22.392,20.5C22.304,20.652 22.178,20.778 22.026,20.866C21.874,20.954 21.702,21 21.526,21H2.474C2.299,21 2.126,20.954 1.974,20.866C1.822,20.778 1.696,20.652 1.608,20.5C1.52,20.348 1.474,20.176 1.474,20C1.474,19.824 1.52,19.652 1.608,19.5L11.134,3C11.222,2.848 11.348,2.722 11.5,2.634C11.652,2.546 11.825,2.5 12,2.5C12.176,2.5 12.348,2.546 12.5,2.634C12.652,2.722 12.778,2.848 12.866,3ZM4.206,19H19.794L12,5.5L4.206,19ZM11,16H13V18H11V16ZM11,9H13V14H11V9Z"
        android:fillColor="#000000"/>
  </group>

This applies to the other icon drawables being added in this PR as well (ic_error.xml, ic_success.xml, etc.) if they follow the same pattern.

core/ui/src/prod/kotlin/PaddingDefaults.kt (2)

9-9: Track the screen direction TODO.

The TODO for screen direction handling highlights the need for RTL/LTR support. The current implementation uses start/end instead of left/right, which is already RTL-friendly, but additional logic may be required for complete bidirectional text support.

Do you want me to open an issue to track this TODO or help draft a solution for screen direction handling?


56-98: LGTM with a minor note on default values.

The Modifier extension functions are well-structured and follow a consistent pattern. One observation: verticalPadding uses Small (8.dp) as the default, while most other vertical padding defaults use Medium (12.dp). This may be intentional for specific UI scenarios but could be worth documenting if there's a deliberate design rationale.

core/design-system/src/prod/res/drawable/ic_backward.xml (2)

8-8: Consider using theme color attributes for better theming support.

The hardcoded fill color #555555 limits the icon's adaptability to different themes (e.g., light/dark mode). Consider referencing a theme color attribute instead, or rely on runtime tinting in Compose where this icon is used.

For example, if using this drawable with Icon in Compose, you can apply tint dynamically:

Icon(
    painter = painterResource(R.drawable.ic_backward),
    contentDescription = "Navigate back",
    tint = MaterialTheme.colorScheme.onSurface
)

Alternatively, define the icon without fillColor and always apply tint at the usage site for maximum flexibility.


1-9: These are distinct icons serving different purposesโ€”not duplicates.

The ic_backward icon (chevron shape) and ic_back icon (arrow shape) have different geometries and use cases. ic_backward is used as a media control in navigation flows, while ic_back follows the standard Android back navigation pattern. Both are correctly registered in DmsIcon.kt as separate icons.

Consider using theme attributes instead of hardcoded colors to support multiple app themes or different build variants, such as ?attr/colorControlNormal for better dark mode and theming flexibility.

core/design-system/src/prod/res/drawable/ic_home.xml (1)

1-9: Use semantic colors for consistency with the design system.

The icon uses a hard-coded fill color #1C1C1E instead of referencing the semantic color palette defined in colors.xml (e.g., @color/gray_800 or @color/gray_900). This pattern affects multiple icons in the set. For better maintainability and theming support, reference colors from the design system or apply tinting via android:tint="?attr/colorControlNormal" at the consumption point.

core/ui/src/prod/kotlin/mvi/Intent.kt (2)

3-3: Add KDoc to document the Intent base type.

This base class serves as the foundation for MVI intent handling but lacks documentation explaining its purpose, usage patterns, and relationship to the MVI architecture.

Apply this diff to add documentation:

+/**
+ * Base type for all MVI intents in the application.
+ * Intents represent user actions or events that trigger state changes.
+ */
 abstract class Intent

3-3: Consider using sealed interface for exhaustive type checking.

For MVI patterns, sealed interface (or sealed class) often provides better type safety than abstract class, enabling exhaustive when expressions and preventing unintended subclasses outside the module.

If your architecture would benefit from exhaustive type checking, consider:

-abstract class Intent
+sealed interface Intent
core/ui/src/prod/kotlin/navigation/Destination.kt (1)

1-4: Consider removing deprecated unused code.

The Destination class is marked as deprecated with "No usage". Since it's not being used, consider removing it entirely to reduce technical debt and simplify the codebase.

If there are no references to this class, apply this removal:

-package ui.navigation
-
-@Deprecated("No usage")
-abstract class Destination(val route: String)
core/design-system/src/prod/res/drawable/ic_edit.xml (1)

1-13: Consider using theme colors instead of hardcoded values.

The icon uses a hardcoded fill color #999999. For better theming support and consistency across light/dark modes, consider using a theme color reference or using android:tint at the usage site instead of android:fillColor.

Example approach:

     <path
         android:pathData="M9.175,5.65L8.35,4.825L2.917,10.259V11.083H3.741L9.175,5.65ZM10,4.825L10.824,4.001L10,3.176L9.175,4.001L10,4.825ZM4.225,12.25H1.75V9.775L9.587,1.938C9.696,1.829 9.845,1.767 10,1.767C10.154,1.767 10.302,1.829 10.412,1.938L12.062,3.588C12.172,3.698 12.233,3.846 12.233,4.001C12.233,4.155 12.172,4.304 12.062,4.413L4.225,12.25H4.225Z"
-        android:fillColor="#999999"/>
+        android:fillColor="@android:color/black"/>

Then apply tint at the usage site for theme-aware coloring.

core/design-system/src/prod/res/drawable/ic_check.xml (1)

1-13: Consider using theme colors for consistency.

The icon uses a hardcoded fill color #000000. For better theming support across light/dark modes, consider using black as the fill and applying tint at the usage site, or use a theme color reference.

The current approach works but may require duplicate icon files for different themes. Using tint in Compose (e.g., Icon(tint = DmsTheme.colorScheme.onSurface, ...)) provides better flexibility.

core/design-system/src/prod/res/drawable/ic_back.xml (1)

1-9: Consider using theme colors for consistency.

Similar to other new icons in this PR, this icon uses a hardcoded fill color #000000. Consider using black as the base and applying theme-aware tint at the usage site for better dark mode support.

This approach allows a single icon file to adapt to different color schemes through runtime tinting.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/modifier/DmsDropShadow.kt (1)

15-22: Consider adding input validation and documentation.

The function accepts Dp parameters but doesn't validate for negative values, which could produce unexpected rendering results. Additionally, the spread parameter affects layout size but this behavior isn't documented.

Consider adding:

  1. KDoc explaining the shadow behavior, especially how spread affects the shadow size
  2. Parameter validation or constraints for negative values
+/**
+ * Applies a drop shadow effect to the composable.
+ *
+ * @param shape The shape of the shadow outline
+ * @param color Shadow color with alpha
+ * @param blur Blur radius (software rendering, impacts performance)
+ * @param offsetY Vertical shadow offset
+ * @param offsetX Horizontal shadow offset  
+ * @param spread Expands shadow size beyond the composable bounds
+ */
 fun Modifier.dmsDropShadow(
     shape: Shape,
     color: Color = Color.Black.copy(0.25f),
     blur: Dp = 4.dp,
     offsetY: Dp = 4.dp,
     offsetX: Dp = 0.dp,
     spread: Dp = 0.dp,
 ) = this.drawBehind {
+    require(blur >= 0.dp) { "Blur must be non-negative" }
     val shadowSize = Size(size.width + spread.toPx(), size.height + spread.toPx())
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsSymbol.kt (1)

17-21: Consider localizing the content description for accessibility.

The contentDescription is hardcoded as "symbol", which won't be localized for international users relying on screen readers.

Apply this diff to use a string resource:

+import androidx.compose.ui.res.stringResource
+
 @Composable
 fun DmsSymbol(modifier: Modifier = Modifier) {
     val symbol = if (isSystemInDarkTheme()) {
         DmsIcon.SymbolDark
     } else {
         DmsIcon.SymbolLight
     }

     Image(
         modifier = modifier,
         painter = painterResource(symbol),
-        contentDescription = "symbol",
+        contentDescription = stringResource(R.string.content_description_symbol),
     )
 }

Then add the string resource to your strings.xml files for each supported locale.

core/design-system/src/prod/res/drawable/ic_blue_breakfast.xml (1)

2-3: Consider standardizing icon dimensions across the design system.

This icon uses 26dp ร— 26dp dimensions, while other icons like ic_applicate.xml and ic_close.xml use 24dp ร— 24dp. The design system currently has multiple dimension groups (24dp for most utility icons, 26dp for blue meal icons, 28dp for regular meal icons), and mixing these sizes in the same UI can cause visual misalignment.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/DmsIconButton.kt (1)

28-32: Consider modifier ordering for size.

Applying .size(size) after the modifier parameter will override any size modifiers passed by the caller. If the size parameter should always take precedence, this is correct. Otherwise, consider allowing the caller's modifier to take precedence or document this behavior explicitly.

If flexible sizing is desired, apply this diff:

-    IconButton(
-        modifier = modifier.size(size),
+    IconButton(
+        modifier = modifier,
         enabled = enabled,
         onClick = onClick,
     ) {
         Icon(
-            modifier = Modifier.padding(contentPaddingValues),
+            modifier = Modifier
+                .size(size)
+                .padding(contentPaddingValues),
             painter = painterResource(resource),
             tint = tint,
             contentDescription = contentDescription,
         )
     }
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt (1)

162-174: Fix variable name typo in hashCode().

The variable name Rult appears to be a typo and should be result for consistency and readability.

Apply this diff:

     override fun hashCode(): Int {
-        var Rult = headline1.hashCode()
-        Rult = 31 * Rult + headline2.hashCode()
-        Rult = 31 * Rult + headline3.hashCode()
-        Rult = 31 * Rult + title1.hashCode()
-        Rult = 31 * Rult + title2.hashCode()
-        Rult = 31 * Rult + title3.hashCode()
-        Rult = 31 * Rult + body1.hashCode()
-        Rult = 31 * Rult + body2.hashCode()
-        Rult = 31 * Rult + body3.hashCode()
-        Rult = 31 * Rult + caption.hashCode()
-        Rult = 31 * Rult + overline.hashCode()
-        Rult = 31 * Rult + button.hashCode()
-        return Rult
+        var result = headline1.hashCode()
+        result = 31 * result + headline2.hashCode()
+        result = 31 * result + headline3.hashCode()
+        result = 31 * result + title1.hashCode()
+        result = 31 * result + title2.hashCode()
+        result = 31 * result + title3.hashCode()
+        result = 31 * result + body1.hashCode()
+        result = 31 * result + body2.hashCode()
+        result = 31 * result + body3.hashCode()
+        result = 31 * result + caption.hashCode()
+        result = 31 * result + overline.hashCode()
+        result = 31 * result + button.hashCode()
+        return result
     }
app/src/dev/AndroidManifest.xml (1)

19-21: Clarify the purpose of empty lib_name meta-data.

The android.app.lib_name meta-data with an empty value is typically used to specify a native library to load. If no native library is needed, this meta-data entry can be removed entirely. If it's intentionally empty to override a parent manifest, please add a comment for clarity.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/SnackBar.kt (2)

48-51: Add accessibility support for the snackbar icon.

The icon Image has contentDescription = null, which means screen readers won't announce the snackbar type (success/error). Consider providing a meaningful content description based on the snackbar type.

-        Image(
-            painter = painterResource(snackBarType.iconRes),
-            contentDescription = null,
-        )
+        Image(
+            painter = painterResource(snackBarType.iconRes),
+            contentDescription = snackBarType.name.lowercase(),
+        )

69-70: TODO: Yellow variant not implemented.

The TODO indicates a yellow snackbar variant is pending. When ready to implement, you'll need to add a new enum value (e.g., WARNING) with an appropriate icon resource.

Would you like me to help implement the yellow/warning variant or open an issue to track this task?

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (3)

146-148: Unreachable else branch.

All ButtonColor enum values (Primary, Gray, Error) are handled in the when expression. The else branch is unreachable and will cause a compile-time warning in Kotlin when exhaustive when is used. Remove the else branch to leverage exhaustive when checking, which will catch missing cases if new enum values are added.

     ButtonColor.Error -> ButtonState(
         enabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.inversePrimary,
         ),
         pressed = ButtonTheme(
             textColor = DmsTheme.colorScheme.primaryContainer,
         ),
         disabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.onPrimary,
         ),
     )
-
-    else -> throw IllegalArgumentException("Unhandled ButtonColor: $this")
 }

186-189: Unreachable else branch (same issue).

Same as aboveโ€”remove this else branch to enable exhaustive when checking.

     ButtonColor.Error -> ButtonState(
         enabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.outline,
         ),
         pressed = ButtonTheme(
             textColor = DmsTheme.colorScheme.errorContainer,
         ),
         disabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.onError,
         ),
     )
-
-    else -> throw IllegalArgumentException("Unhandled ButtonColor: $this")
 }

198-198: Unused parameter buttonType.

The buttonType parameter is passed to BasicButton but never used within the function body. Either remove it or add a TODO if it's planned for future use.

core/design-system/src/prod/res/drawable/ic_visible.xml (1)

1-9: Consider theme-aware fill color.

The hardcoded fillColor="#1C1C1E" won't adapt to dark theme. If this icon should support theming, consider using android:tint at the usage site or defining the color as a theme attribute.

If you want the icon to be theme-aware:

-      android:fillColor="#1C1C1E"/>
+      android:fillColor="?attr/colorOnSurface"/>

Alternatively, apply tint when using the icon in composables via colorFilter or tint modifier.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1)

28-31: Clarify the distinction between Notification and Notice.

Both Notification (line 28) and Notice (line 31) map to the same drawable resource R.drawable.ic_notice. If these represent the same concept, consider removing the duplicate. If they serve different purposes, use distinct drawable resources.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt (1)

152-158: Consider simplifying the maxLength enforcement.

The maxLength is enforced in two places: value.take(maxLength) on line 153 and the conditional check on lines 155-157. While this is safe, the inner check is redundant since take() already limits the string length.

You could simplify to:

 BasicTextField(
-    value = value.take(maxLength),
+    value = value,
     onValueChange = { newValue ->
-        if (newValue.length <= maxLength) {
-            onValueChange(newValue)
-        }
+        onValueChange(newValue.take(maxLength))
     },
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (1)

92-94: Track the TODO comments for future implementation.

Two features are marked as TODO: shape implementation and ToastLayout. Ensure these are tracked in your backlog.

Would you like me to create GitHub issues to track these pending implementations?

๐Ÿ“œ Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 7e039f8 and 3ae1221.

โ›” Files ignored due to path filters (19)
  • app/src/prod/ic_launcher-playstore.png is excluded by !**/*.png
  • core/design-system/src/dev/res/drawable/ic_logo.png is excluded by !**/*.png
  • core/design-system/src/dev/res/font/pretendard_bold.otf is excluded by !**/*.otf
  • core/design-system/src/dev/res/font/pretendard_medium.otf is excluded by !**/*.otf
  • core/design-system/src/dev/res/font/pretendard_regular.otf is excluded by !**/*.otf
  • core/design-system/src/dev/res/font/pretendard_semi_bold.otf is excluded by !**/*.otf
  • core/design-system/src/prod/res/drawable-hdpi/ic_notification.png is excluded by !**/*.png
  • core/design-system/src/prod/res/drawable-mdpi/ic_notification.png is excluded by !**/*.png
  • core/design-system/src/prod/res/drawable-xhdpi/ic_notification.png is excluded by !**/*.png
  • core/design-system/src/prod/res/drawable-xxhdpi/ic_notification.png is excluded by !**/*.png
  • core/design-system/src/prod/res/drawable-xxxhdpi/ic_notification.png is excluded by !**/*.png
  • core/design-system/src/prod/res/drawable/ic_logo.png is excluded by !**/*.png
  • core/design-system/src/prod/res/font/noto_sans_kr_black.ttf is excluded by !**/*.ttf
  • core/design-system/src/prod/res/font/noto_sans_kr_bold.ttf is excluded by !**/*.ttf
  • core/design-system/src/prod/res/font/noto_sans_kr_light.ttf is excluded by !**/*.ttf
  • core/design-system/src/prod/res/font/noto_sans_kr_medium.ttf is excluded by !**/*.ttf
  • core/design-system/src/prod/res/font/noto_sans_kr_regular.ttf is excluded by !**/*.ttf
  • core/design-system/src/prod/res/font/noto_sans_kr_thin.ttf is excluded by !**/*.ttf
  • feature/src/prod/ic_launcher-playstore.png is excluded by !**/*.png
๐Ÿ“’ Files selected for processing (107)
  • app/src/dev/AndroidManifest.xml (1 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (3 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt (1 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/EdgeToEdgeConfig.kt (1 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/MainActivity.kt (1 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt (1 hunks)
  • app/src/main/AndroidManifest.xml (1 hunks)
  • app/src/main/res/values-night/themes.xml (1 hunks)
  • app/src/main/res/values/themes.xml (2 hunks)
  • app/src/prod/AndroidManifest.xml (1 hunks)
  • app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt (1 hunks)
  • app/src/prod/res/values-night/themes.xml (1 hunks)
  • app/src/prod/res/values/strings.xml (1 hunks)
  • app/src/prod/res/values/themes.xml (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Colors.kt (0 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (2 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt (4 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (14 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/DmsIconButton.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsSymbol.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/modifier/DmsDropShadow.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/DmsSnackBarVisuals.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/SnackBar.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_cancel.xml (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_error.xml (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_success.xml (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_symbol_dark.xml (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_symbol_light.xml (1 hunks)
  • core/design-system/src/prod/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_applicate.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_back.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_backward.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_bell.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_blue_bell.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_blue_breakfast.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_blue_dinner.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_blue_lunch.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_blue_notice.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_calender.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_camera.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_check.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_circle_outline.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_close.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_down.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_edit.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_forward.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_home.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_information.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_logo_dark.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_logo_light.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_notice.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_palette.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_person.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_photo.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_photo_close.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_plus.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_profile_default.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_sort.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_up.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_visible.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_warning.xml (1 hunks)
  • core/design-system/src/prod/res/drawable/ic_wrong.xml (1 hunks)
  • core/notification/src/main/java/team/aliens/dms/android/core/notification/NotificationManager.kt (1 hunks)
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/Intent.kt (0 hunks)
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/SideEffect.kt (0 hunks)
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/UiState.kt (0 hunks)
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/util/Utils.kt (0 hunks)
  • core/ui/src/prod/kotlin/Banner.kt (2 hunks)
  • core/ui/src/prod/kotlin/CollectInLaunchedEffectWithLifecycle.kt (1 hunks)
  • core/ui/src/prod/kotlin/PaddingDefaults.kt (1 hunks)
  • core/ui/src/prod/kotlin/activity/BaseActivity.kt (1 hunks)
  • core/ui/src/prod/kotlin/composable/AppLogo.kt (1 hunks)
  • core/ui/src/prod/kotlin/composable/FloatingNotice.kt (3 hunks)
  • core/ui/src/prod/kotlin/composable/TextFields.kt (2 hunks)
  • core/ui/src/prod/kotlin/mvi/BaseMviViewModel.kt (2 hunks)
  • core/ui/src/prod/kotlin/mvi/Intent.kt (1 hunks)
  • core/ui/src/prod/kotlin/mvi/SideEffect.kt (1 hunks)
  • core/ui/src/prod/kotlin/mvi/UiState.kt (1 hunks)
  • core/ui/src/prod/kotlin/navigation/Destination.kt (1 hunks)
  • core/ui/src/prod/kotlin/util/Brushes.kt (1 hunks)
  • core/ui/src/prod/kotlin/util/Utils.kt (1 hunks)
  • core/ui/src/prod/kotlin/viewmodel/BaseViewModel.kt (1 hunks)
  • core/ui/src/prod/kotlin/viewmodel/Extensions.kt (1 hunks)
  • core/widget/src/prod/designsystem/DmsWidgetGlanceColorScheme.kt (0 hunks)
  • core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealType.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/Main.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/navigation/AnnouncementNavigator.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/navigation/ApplicationNavigator.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeNavigator.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/navigation/MyPageNavigator.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/navigation/MainNavigator.kt (0 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/CompleteScreen.kt (4 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/IntroScreen.kt (4 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/viewmodel/OnboardingViewModel.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/navigation/SignInRoute.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt (1 hunks)
โ›” Files not processed due to max files limit (49)
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/ConfirmPasswordScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/EditPasswordViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/editpassword/SetPasswordScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/editprofile/EditProfileImageViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/findid/FindIdViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/Main.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notice/NoticeDetailsViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/box/NotificationBoxViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/notification/settings/NotificationSettingsViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingApplicationScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingStatusScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/outing/OutingViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/point/PointHistoryViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/remains/RemainsApplicationViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/AccountVerificationScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordEnterEmailVerificationCodeScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/ResetPasswordViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/resetpassword/SetPasswordScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signin/SignInViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterEmailVerificationCodeScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationCodeScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/EnterSchoolVerificationQuestionScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetIdScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetPasswordScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SetProfileImageScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/SignUpViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/signup/TermsScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/Common.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/details/StudyRoomDetailsViewModel.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListScreen.kt
  • feature/src/prod/kotlin/team/aliens/dms/android/feature/studyroom/list/StudyRoomListViewModel.kt
๐Ÿ’ค Files with no reviewable changes (20)
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/util/Utils.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/navigation/MyPageNavigator.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/Main.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/navigation/AnnouncementNavigator.kt
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/Intent.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/UiState.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationViewModel.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/ApplicationScreen.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageViewModel.kt
  • core/widget/src/prod/designsystem/DmsWidgetGlanceColorScheme.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/application/navigation/ApplicationNavigator.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/navigation/HomeNavigator.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/navigation/MainNavigator.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListViewModel.kt
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Colors.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/announcement/AnnouncementListScreen.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/mypage/MyPageScreen.kt
  • core/ui/src/main/java/team/aliens/dms/android/core/ui/mvi/SideEffect.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/main/home/HomeViewModel.kt
๐Ÿงฐ Additional context used
๐Ÿงฌ Code graph analysis (4)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt (1)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/DmsIconButton.kt (1)
  • DmsIconButton (17-40)
app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (4)
app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt (1)
  • rememberDmsAppState (18-35)
feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/navigation/OnboardingRoute.kt (1)
  • OnboardingRoute (6-13)
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/navigation/SignInRoute.kt (1)
  • SignInRoute (7-20)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/SnackBar.kt (1)
  • DmsSnackBar (22-58)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (1)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/indecator/DmsDotsLoadingIndicator.kt (1)
  • DmsDotsLoadingIndicator (27-68)
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt (3)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsSymbol.kt (1)
  • DmsSymbol (9-22)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (1)
  • DmsButton (255-353)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt (1)
  • DmsTextField (39-107)
โฐ 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 (64)
core/ui/src/prod/kotlin/util/Utils.kt (1)

1-1: Clarify the purpose of this empty utility file.

The file contains only a package declaration with no utility functions, extensions, or other definitions. Please clarify whether this is:

  • An intentional placeholder for future production-specific utilities
  • A file that should have initial utility content

If this file is not needed yet, consider removing it or adding an initial skeleton of utilities planned for the login screen flow.

core/design-system/src/prod/res/drawable/ic_palette.xml (1)

1-21: Verify color strategy aligns with design system theming approach.

The drawable uses a hardcoded fill color (#000000) across all paths. Given that the PR overhauls the design system with new theming support (as mentioned in the summary), ensure this approach is intentional and consistent with how other new drawable assets handle colorsโ€”particularly if the app supports dark mode or dynamic theming.

If dynamic color application is required, consider whether colors should be:

  • Applied at the component level (e.g., via setTint() or android:tint attributes)
  • Defined as theme attributes and referenced indirectly
  • Hardcoded as is, with tinting applied elsewhere in the UI layer
core/design-system/src/prod/res/drawable/ic_blue_bell.xml (1)

1-9: LGTM!

The vector drawable is well-formed with consistent dimensions, valid path data, and follows Android naming conventions.

core/design-system/src/prod/res/drawable/ic_person.xml (1)

1-9: LGTM! Standard vector drawable icon.

The XML is well-formed and follows Android vector drawable conventions. The 24ร—24 dp dimensions are standard for material icons, and the path data correctly defines a person silhouette.

core/design-system/src/prod/res/drawable/ic_warning.xml (1)

1-5: LGTM: Standard vector drawable declaration.

The dimensions (24dp) and viewport (24x24) are consistent and follow Android best practices for icon resources.

core/ui/src/prod/kotlin/CollectInLaunchedEffectWithLifecycle.kt (1)

19-36: LGTM! Implementation follows Compose best practices.

The function correctly handles lifecycle-aware Flow collection using repeatOnLifecycle and properly manages Composable state updates via rememberUpdatedState. The @SuppressLint annotation is justified given the intentional deviation from Composable naming conventions for this extension utility.

core/design-system/src/prod/res/drawable/ic_forward.xml (1)

1-9: LGTM!

The vector drawable is correctly structured with standard dimensions and proper XML syntax. The forward-arrow icon is a clean addition to the design system.

feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/viewmodel/OnboardingViewModel.kt (1)

36-38: Architectural simplification is sound and compatible.

The removal of UiState inheritance from OnboardingState is valid because BaseStateViewModel<S, E> (line 25 of BaseStateViewModel.kt) has no type constraints requiring S to extend UiState. The data class works correctly with the generic type parameter, and OnboardingViewModel successfully extends BaseStateViewModel<OnboardingState, Unit> with the provided initialState() function.

core/ui/src/prod/kotlin/PaddingDefaults.kt (1)

1-7: LGTM!

Package declaration and imports are clean and appropriate for padding utilities.

core/design-system/src/dev/res/drawable/ic_symbol_dark.xml (2)

7-77: LGTM!

The vector drawable implementation is well-structured:

  • Proper use of aapt:attr for gradient definitions
  • Clean separation of white text elements and blue-gradient symbol components
  • Linear gradients with appropriate color stops for visual depth
  • Hardcoded brand colors ensure visual consistency across themes

The complexity is typical and acceptable for a logo asset.


1-6: Verify the file location and naming approach for theme assets.

The file is located in src/dev/res/drawable/ with "dark" in the filename. For theme-specific assets, Android typically uses resource qualifier directories (e.g., drawable-night/ic_symbol.xml for dark theme, drawable/ic_symbol.xml for light theme) rather than suffix-based naming. The "dev" source set suggests this might be build-variant specific rather than theme-specific.

Please confirm whether:

  • This approach aligns with your project's theming strategy
  • The "dev" source set is the intended location for variant-specific branding
  • Runtime theme switching (light/dark mode) will properly resolve to the correct asset
#!/bin/bash
# Description: Check the project's drawable organization and theme handling strategy

# Find all symbol drawable variants
echo "=== Symbol drawable files ==="
fd -e xml "ic_symbol" core/design-system/src

# Check if there are resource qualifier directories for night mode
echo -e "\n=== Night mode drawable directories ==="
fd -t d "drawable-night" core/design-system/src

# Look for theme configuration or documentation
echo -e "\n=== Theme-related configuration ==="
rg -l "ic_symbol|Theme|AppTheme" --type=xml core/design-system/src -g "!ic_symbol*.xml" | head -20
core/design-system/src/prod/res/drawable/ic_notice.xml (1)

1-9: Consider aligning icon dimensions with the design system standard.

The icon uses 23dp dimensions, which differs from the standard 24dp used by most icons in the design system (including the related ic_blue_notice.xml). Verify whether this dimension is intentional for this particular icon or should be standardized to 24dp for consistency.

Likely an incorrect or invalid review comment.

core/design-system/src/prod/res/drawable/ic_down.xml (1)

1-5: LGTM!

The vector drawable dimensions and viewport are properly configured.

app/src/main/res/values-night/themes.xml (1)

1-11: LGTM!

This is a formatting-only change that removes an empty line. No functional impact.

core/ui/src/prod/kotlin/composable/FloatingNotice.kt (2)

42-42: The ic_notice drawable resource has been properly added to the design system in both dev and prod configurations. No action needed.


1-1: Package refactoring to ui.composable is complete.

Verification confirms no stale references to the old package path team.aliens.dms.android.core.ui.composable remain in the codebase. The new package declaration ui.composable and updated imports for padding utilities (PaddingDefaults, horizontalPadding, verticalPadding) are correctly applied across all files.

core/ui/src/prod/kotlin/activity/BaseActivity.kt (1)

1-1: Package refactoring is complete.

All references to BaseActivity have been successfully migrated to the new package path ui.activity. No stale imports of the old package path team.aliens.dms.android.core.ui.activity remain in the codebase.

app/src/dev/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt (1)

3-3: No changes neededโ€”BaseViewModel is an empty abstract class with no functionality. Both the prod and dev versions of MainActivityViewModel are functionally identical and will operate the same way regardless of whether they extend BaseViewModel or ViewModel directly, as BaseViewModel provides no error handling, event management, lifecycle hooks, or other critical functionality.

Likely an incorrect or invalid review comment.

core/design-system/src/prod/res/drawable/ic_blue_dinner.xml (1)

1-9: LGTM! New blue dinner icon added.

The drawable resource is properly structured. The 26dp size is consistent with other meal icons (ic_blue_breakfast, ic_blue_lunch) and the #3D8AFF color aligns with the blue icon family in the design system.

core/design-system/src/prod/res/drawable/ic_blue_notice.xml (1)

1-9: LGTM! New blue notice icon added.

The vector drawable is correctly defined with appropriate dimensions (24dp) for a notice icon and uses the consistent blue color (#3D8AFF) from the design system's blue icon family.

core/design-system/src/prod/res/drawable/ic_information.xml (1)

1-13: LGTM! Information icon properly structured.

The vector drawable is well-formed with appropriate use of clipping path and standard 24dp dimensions. The black fill color suggests this icon will be tinted at runtime according to the theme.

core/design-system/src/prod/res/drawable/ic_blue_lunch.xml (1)

1-9: LGTM! Blue lunch icon added.

The drawable is properly defined with consistent sizing (26dp) matching other meal icons and uses the standard blue color (#3D8AFF) from the design system.

feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/CompleteScreen.kt (3)

31-33: LGTM! Button imports updated to subpackage.

The imports have been correctly updated to reference the button subpackage, aligning with the design system reorganization.


114-114: Good UX improvement with full-width button.

Adding Modifier.fillMaxWidth() to the primary action button follows modern design patterns and improves the user experience.


97-97: Color token change is consistent with design system.

The change to onTertiaryContainer is used consistently across the codebase for headline and title text elements (IntroScreen, SigninScreen, and now CompleteScreen). The token is semantically appropriate and maps to gray700 in both light and dark themes, providing adequate contrast for readability.

core/design-system/src/prod/res/drawable/ic_plus.xml (1)

1-9: LGTM! Plus icon added with appropriate sizing.

The vector drawable is properly structured. The 30dp size provides an adequate touch target for an action button, and the white fill color indicates it's designed for use on colored backgrounds or with runtime tinting.

core/ui/src/prod/kotlin/composable/AppLogo.kt (1)

1-1: Package namespace update for AppLogo is complete and correct.

All imports of AppLogo reference the new package path ui.composable.AppLogo. Verified:

  • feature/src/prod/kotlin/team/aliens/dms/android/feature/main/home/HomeScreen.kt (line 87)
  • core/ui/src/prod/kotlin/Banner.kt (line 20)

No references to the old package path remain in the codebase.

core/ui/src/prod/kotlin/util/Brushes.kt (1)

1-1: Verify that all imports reference the new package.

The package has been updated from team.aliens.dms.android.core.ui.util to ui.util. Ensure all files that import verticalFadeOutBrush or verticalFadeInBrush have been updated to the new import path.

#!/bin/bash
# Description: Find all imports from the util package and verify they use the new path.
# Expected: All imports should reference ui.util, not the old path.

echo "=== Searching for brush imports ==="
rg -n "import.*(verticalFadeOutBrush|verticalFadeInBrush)" --type kotlin

echo -e "\n=== Checking for old package path references ==="
rg -n "team\.aliens\.dms\.android\.core\.ui\.util" --type kotlin
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/modifier/DmsDropShadow.kt (1)

30-34: Be aware of BlurMaskFilter performance implications.

Using BlurMaskFilter triggers software rendering for the shadow layer, which can impact performance on complex layouts or when many shadows are rendered simultaneously. Consider documenting this behavior and testing performance on lower-end devices.

Based on learnings, if performance becomes an issue, consider using Compose's built-in graphicsLayer { shadowElevation = ... } for simpler cases, or document when to use this custom shadow vs. elevation-based shadows.

app/src/prod/res/values-night/themes.xml (1)

4-11: LGTM!

The night theme configuration is correct. Transparent system bars with dark status/navigation bar icons (windowLightStatusBar and windowLightNavigationBar set to false) are appropriate for dark mode.

app/src/main/res/values/themes.xml (1)

2-2: LGTM!

Formatting change only - namespace attribute order has no functional impact.

core/design-system/src/dev/res/drawable/ic_error.xml (1)

1-9: LGTM!

The error icon is properly defined with a square aspect ratio (18x18dp) and an appropriate red color (#FE0F0F) for error states.

core/ui/src/prod/kotlin/mvi/BaseMviViewModel.kt (1)

1-1: Verify all subclasses and imports have been updated.

The package namespace has changed from team.aliens.dms.android.core.ui.mvi to ui.mvi, and the BaseViewModel import path has been updated. Ensure all ViewModels extending BaseMviViewModel have updated their imports.

core/ui/src/prod/kotlin/Banner.kt (1)

1-1: Verify all usages of Banner and related imports have been updated.

The package namespace has changed from team.aliens.dms.android.core.ui to ui. Ensure all files importing or using the Banner composable have updated their import statements to reflect this change.

core/ui/src/prod/kotlin/viewmodel/Extensions.kt (1)

1-1: Verify all imports across the codebase have been updated.

The package namespace has changed from team.aliens.dms.android.core.ui.viewmodel to ui.viewmodel. Ensure that all files importing these extension functions have updated their import statements to avoid compilation failures.

core/notification/src/main/java/team/aliens/dms/android/core/notification/NotificationManager.kt (1)

11-11: LGTM!

The import path update aligns with the design system refactoring that moves DmsIcon to the foundation package.

core/design-system/src/dev/res/drawable/ic_success.xml (1)

1-9: LGTM!

The success icon drawable is well-formed and follows standard Android vector drawable conventions. The resource will be used by the new snackbar component.

core/widget/src/prod/kotlin/team/aliens/dms/android/core/widget/MealType.kt (1)

3-3: LGTM!

The import path update is consistent with the design system refactoring moving DmsIcon to the foundation package.

core/design-system/src/prod/res/drawable/ic_sort.xml (1)

1-9: LGTM!

The sort icon drawable is well-formed and will be exposed through the DmsIcon API surface.

core/design-system/src/prod/res/drawable/ic_bell.xml (1)

1-9: LGTM!

The bell icon drawable is well-formed and follows standard Android vector drawable conventions.

feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/component/IntroScreen.kt (2)

38-44: LGTM!

The color theming updates align with the design system refactoring, using Material 3 color roles (onPrimaryContainer and onTertiaryContainer) from the new DmsTheme.colorScheme.


83-83: LGTM!

The text color updates consistently use onTertiaryContainer from the new theme system, ensuring visual consistency across the intro screens.

Also applies to: 104-104, 117-117

app/src/prod/kotlin/team/aliens/dms/android/app/MainActivityViewModel.kt (1)

8-8: Verify the import path for BaseViewModel.

The import ui.viewmodel.BaseViewModel needs verification against the actual package location of the BaseViewModel class definition. Confirm whether this is a complete package path, an aliased import, or if it's configured via a package structure setting that would make this import valid.

app/src/dev/kotlin/team/aliens/dms/android/app/MainActivity.kt (1)

48-48: LGTM!

The setEdgeToEdgeConfig() call is correctly placed before setDecorFitsSystemWindows, ensuring proper edge-to-edge UI configuration with transparent system bars.

app/src/prod/res/values/strings.xml (1)

3-4: LGTM!

The string resources are properly defined. The app_name is correctly marked as non-translatable, and the default_notification_channel_id follows Android naming conventions.

core/design-system/src/prod/res/drawable/ic_applicate.xml (1)

1-9: LGTM!

The vector drawable follows standard Android conventions with appropriate dimensions and viewport settings.

core/design-system/src/prod/res/drawable/ic_close.xml (1)

1-9: LGTM!

The vector drawable is well-formed and uses consistent dimensions (24dp ร— 24dp) with other icons in the design system.

app/src/dev/kotlin/team/aliens/dms/android/app/EdgeToEdgeConfig.kt (1)

10-13: LGTM!

The explicit SystemBarStyle.auto configuration with transparent colors properly configures edge-to-edge rendering for both status and navigation bars. The implementation follows Android edge-to-edge best practices.

app/src/prod/res/values/themes.xml (1)

4-4: Remove inconsistent android:fitsSystemWindows="true" from theme style.

The theme sets android:fitsSystemWindows="true" in prod themes but not in night themes, creating an inconsistency. While the codebase properly overrides this via WindowCompat.setDecorFitsSystemWindows(window, false) in MainActivity and uses Material3 Compose components (which auto-handle insets), the redundant theme attribute should be removed for clarity:

-    <style name="Theme.DMS" parent="Theme.Material3.DayNight.NoActionBar" android:fitsSystemWindows="true">
+    <style name="Theme.DMS" parent="Theme.Material3.DayNight.NoActionBar">

Apply this change to both app/src/main/res/values/themes.xml and app/src/prod/res/values/themes.xml to match the night theme variants.

app/src/main/AndroidManifest.xml (1)

1-2: The empty main manifest is a valid multi-variant configuration pattern.

The variant-specific manifests (dev/prod) override the main manifest through Gradle's established priority order, allowing each build variant to define different components while reusing common configuration. The dev and prod manifests contain all necessary attributes (namespaces, application definitions, permissions), and the build.gradle.kts properly configures product flavors with corresponding sourceSets. The package namespace is set in the build configuration (namespace = "team.aliens.dms" in build.gradle.kts line 17), so the missing package attribute in the main manifest is not a concern. This pattern is correct and requires no changes.

core/design-system/src/prod/res/drawable/ic_circle_outline.xml (1)

1-11: LGTM!

The vector drawable is correctly structured with valid dimensions, stroke, and path definition.

core/design-system/src/dev/res/drawable/ic_symbol_light.xml (1)

1-77: LGTM!

The vector drawable correctly uses aapt:attr for inline gradient definitions, and all gradient configurations are properly specified.

core/design-system/src/prod/res/drawable/ic_logo_light.xml (1)

1-79: LGTM!

The logo vector drawable is correctly structured with proper gradient definitions using aapt:attr.

core/design-system/src/prod/res/drawable/ic_logo_dark.xml (1)

1-86: LGTM!

The dark logo vector drawable is correctly structured with proper gradient definitions.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/DmsSnackBarVisuals.kt (1)

6-12: LGTM!

The data class correctly implements SnackbarVisuals with appropriate defaults and adds the custom snackBarType property for typed snackbar rendering.

core/ui/src/prod/kotlin/composable/TextFields.kt (2)

1-1: All imports have been successfully updated.

Verification confirms no remaining imports use the old package path team.aliens.dms.android.core.ui.composable. All five files importing PasswordTextField (SetPasswordScreen.kt in editpassword, signup, and resetpassword features; ConfirmPasswordScreen.kt; and SignInScreen.kt) correctly use the new package path ui.composable.PasswordTextField.


35-35: DmsIcon relocation verified as consistent across the codebase.

The import path change to include the foundation subpackage is fully applied across all 18 files in the repository. No lingering old imports remain, and all instances uniformly use import team.aliens.dms.android.core.designsystem.foundation.DmsIcon. The relocation is complete and consistent.

feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/navigation/SignInRoute.kt (1)

16-17: Empty navigation handlers for find ID/password flows.

navigateToFindId and navigateToFindPassword are hardcoded as empty lambdas. If these features are planned, consider either:

  1. Exposing them as parameters in SignInRoute for proper wiring
  2. Adding a TODO comment to track the incomplete implementation
app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (1)

67-115: LGTM! Well-structured app-level snackbar integration.

The Box wrapper with SnackbarHost positioned at the top center is cleanly implemented. The safe cast on line 108 with early return is a good defensive pattern.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/textfield/DmsTextField.kt (1)

39-107: LGTM! Well-designed text field component.

The implementation provides comprehensive functionality including animated labels, error states, password visibility toggle, and clear button. The focus management and state-driven styling are well executed.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (1)

16-97: LGTM! Theme restructuring is well-implemented.

The migration to staticCompositionLocalOf and Material3's ColorScheme is correctly done. The color token mappings for light and dark themes are comprehensive.

app/src/prod/AndroidManifest.xml (1)

1-81: LGTM! Production manifest is properly configured.

The manifest correctly declares:

  • Runtime permissions with appropriate uses-feature for camera (non-required)
  • MainActivity with portrait orientation lock
  • Firebase messaging service with proper intent filter
  • Widget receiver and initialization provider

All configurations follow Android best practices.

feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt (1)

52-142: Well-structured sign-in screen implementation.

The composable hierarchy is clean with good separation of concerns:

  • SignIn handles ViewModel wiring and side effects
  • SignInScreen manages UI layout
  • Private composables (UserInformationInputs, SignupActions) encapsulate reusable sections

The focus management with tap-to-dismiss is a nice UX touch.

feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt (1)

67-94: Good error handling with user-friendly messages.

The sign-in flow correctly:

  • Manages loading state and button enabled state
  • Maps specific exceptions to localized error messages
  • Emits appropriate side effects for navigation and error display

The TODO on line 83 suggests future refactoring to centralize error message mapping, which would be a good improvement.

Comment on lines +57 to +65
private fun getDeviceToken() {
viewModelScope.launch(Dispatchers.IO) {
runCatching {
notificationRepository.getDeviceToken()
}.onSuccess { deviceToken ->
setState { it.copy(deviceToken = deviceToken) }
}
}
}
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸ  Major

๐Ÿงฉ Analysis chain

๐Ÿ Script executed:

#!/bin/bash
# First, find the SignInViewModel file to understand its structure
find . -name "SignInViewModel.kt" -type f

Repository: team-aliens/DMS-Android

Length of output: 243


๐Ÿ Script executed:

#!/bin/bash
# Search for NotificationRepository implementation
find . -name "*NotificationRepository*" -type f

Repository: team-aliens/DMS-Android

Length of output: 270


๐Ÿ Script executed:

#!/bin/bash
# Search for calls to getDeviceToken() to see where it's invoked
rg "getDeviceToken\(\)" --type kotlin -B 3 -A 3

Repository: team-aliens/DMS-Android

Length of output: 7380


๐Ÿ Script executed:

#!/bin/bash
# Read NotificationRepository interface
cat -n ./data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepository.kt

Repository: team-aliens/DMS-Android

Length of output: 1595


๐Ÿ Script executed:

#!/bin/bash
# Read NotificationRepositoryImpl implementation
cat -n ./data/src/main/java/team/aliens/dms/android/data/notification/repository/NotificationRepositoryImpl.kt

Repository: team-aliens/DMS-Android

Length of output: 3416


๐Ÿ Script executed:

#!/bin/bash
# Search for deviceDataStoreDataSource.loadDeviceToken implementation
rg "loadDeviceToken" --type kotlin -B 2 -A 5

Repository: team-aliens/DMS-Android

Length of output: 4659


๐Ÿ Script executed:

#!/bin/bash
# Search for notification permission handling
rg "permission\|Permission" --type kotlin | grep -i notif

Repository: team-aliens/DMS-Android

Length of output: 49


๐Ÿ Script executed:

#!/bin/bash
# Find DeviceTokenNotFoundException
rg "DeviceTokenNotFoundException" --type kotlin -B 2 -A 2

Repository: team-aliens/DMS-Android

Length of output: 2056


๐Ÿ Script executed:

#!/bin/bash
# Check the full dev SignInViewModel to see if deviceToken is required
cat -n ./feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt

Repository: team-aliens/DMS-Android

Length of output: 5443


๐Ÿ Script executed:

#!/bin/bash
# Search for SignInState to understand what deviceToken is used for
rg "SignInState" --type kotlin -A 5 | head -50

Repository: team-aliens/DMS-Android

Length of output: 3661


Add error handling for device token retrieval failure.

The getDeviceToken() call in init {} lacks an onFailure handler. If loadDeviceToken() throws DeviceTokenNotFoundException, the error is silently caught and deviceToken remains an empty string. Sign-in then proceeds with an empty token, causing it to fail at the server level without explicit user feedback. Add .onFailure { } to either display an error message, retry, or set a sensible default.

Additionally, verify that notification permissions are checked before attempting token retrieval, or confirm the repository handles missing permissions gracefully.

๐Ÿค– Prompt for AI Agents
In
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt
around lines 57 to 65, the runCatching call that fetches the device token has no
onFailure handler so a thrown DeviceTokenNotFoundException is swallowed and the
app proceeds with an empty token; add .onFailure { } to handle errors by
detecting DeviceTokenNotFoundException (or other exceptions) and then either
update state with a sensible default or error flag, show a user-facing
error/notification, or trigger a retry flow; also ensure you check notification
permission before calling notificationRepository.getDeviceToken() (or confirm
the repository already handles missing permissions) and log the error for
debugging.

sendEffect(SignInSideEffect.NavigateToMain)
}.onFailure {
setState { this.copy(isLoading = false, buttonEnabled = true) }
Log.d("TEST", it.toString())
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸก Minor

Remove debug logging before production.

The Log.d("TEST", ...) statement should be removed or replaced with proper error tracking (e.g., Firebase Crashlytics, Sentry).

-                    Log.d("TEST", it.toString())
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Log.d("TEST", it.toString())
๐Ÿค– Prompt for AI Agents
In
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt
around line 82, remove the temporary debug log statement Log.d("TEST",
it.toString()); replace it either by deleting the line entirely or by reporting
the error via the project's production error-tracking mechanism (e.g., send to
Crashlytics/Sentry) with a clear message and relevant context, ensuring no
debug-only tags remain in production code.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ๊ณผ ํ•จ๊ป˜ ์ „๋ฐ˜์ ์ธ ๋””์ž์ธ ์‹œ์Šคํ…œ ๋ฆฌํŒฉํ† ๋ง์ด ์ด๋ฃจ์–ด์ง„ PR๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋กœ๊ทธ์ธ UI, ์Šค๋‚ต๋ฐ” ์‹œ์Šคํ…œ, Edge-to-Edge ์ ์šฉ ๋“ฑ ๋งŽ์€ ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ณ€๊ฒฝ์ ๋“ค์„ ๊ฒ€ํ† ํ•œ ๊ฒฐ๊ณผ, ๋ช‡ ๊ฐ€์ง€ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ DmsTheme์—์„œ MaterialTheme์ด ์ œ๊ฑฐ๋œ ์ ์€ ์•ฑ์˜ UI ๋ Œ๋”๋ง์— ์น˜๋ช…์ ์ธ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ์–ด ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฒ„ํŠผ์˜ ํ…Œ๋‘๋ฆฌ๊ฐ€ ์ ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ์™€ ์ปฌ๋Ÿฌ, ํฐํŠธ ๊ด€๋ จ ์‚ฌ์†Œํ•œ ๋ฒ„๊ทธ๋“ค์ด ํ™•์ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐ ํŒŒ์ผ์— ๋‚จ๊ธด ๋ฆฌ๋ทฐ ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

Comment on lines +162 to +174
var Rult = headline1.hashCode()
Rult = 31 * Rult + headline2.hashCode()
Rult = 31 * Rult + headline3.hashCode()
Rult = 31 * Rult + title1.hashCode()
Rult = 31 * Rult + title2.hashCode()
Rult = 31 * Rult + title3.hashCode()
Rult = 31 * Rult + body1.hashCode()
Rult = 31 * Rult + body2.hashCode()
Rult = 31 * Rult + body3.hashCode()
Rult = 31 * Rult + caption.hashCode()
Rult = 31 * Rult + overline.hashCode()
Rult = 31 * Rult + button.hashCode()
return Rult

Choose a reason for hiding this comment

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

medium

๋ณ€์ˆ˜๋ช…์— ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Rult๋ฅผ result๋กœ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

Suggested change
var Rult = headline1.hashCode()
Rult = 31 * Rult + headline2.hashCode()
Rult = 31 * Rult + headline3.hashCode()
Rult = 31 * Rult + title1.hashCode()
Rult = 31 * Rult + title2.hashCode()
Rult = 31 * Rult + title3.hashCode()
Rult = 31 * Rult + body1.hashCode()
Rult = 31 * Rult + body2.hashCode()
Rult = 31 * Rult + body3.hashCode()
Rult = 31 * Rult + caption.hashCode()
Rult = 31 * Rult + overline.hashCode()
Rult = 31 * Rult + button.hashCode()
return Rult
var result = headline1.hashCode()
result = 31 * result + headline2.hashCode()
result = 31 * result + headline3.hashCode()
result = 31 * result + title1.hashCode()
result = 31 * result + title2.hashCode()
result = 31 * result + title3.hashCode()
result = 31 * result + body1.hashCode()
result = 31 * result + body2.hashCode()
result = 31 * result + body3.hashCode()
result = 31 * result + caption.hashCode()
result = 31 * result + overline.hashCode()
result = 31 * result + button.hashCode()
return result

Comment on lines +83 to +89
val errorMessage = when (it) { // TODO :: onFailure ์ž์ฒด์—์„œ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์กฐ ๋ณ€๊ฒฝ
is BadRequestException -> "์ž˜๋ชป๋œ ํ˜•์‹์ด์—์š”"
is UnprocessableEntityException -> "๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„์š”"
is NotFoundException -> "๋กœ๊ทธ์ธ ์ •๋ณด๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด์ฃผ์„ธ์š”"
is InternalServerErrorException -> "์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”"
else -> "์ผ์‹œ์ ์ธ ์˜ค๋ฅ˜๋กœ ๋กœ๊ทธ์ธ์„ ํ•  ์ˆ˜ ์—†์–ด์š”"
}

Choose a reason for hiding this comment

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

medium

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜๋Š” ๋Œ€์‹  ๋ฌธ์ž์—ด ๋ฆฌ์†Œ์Šค๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค๊ตญ์–ด ์ง€์› ๋ฐ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง‘๋‹ˆ๋‹ค.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

โ™ป๏ธ Duplicate comments (1)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt (1)

162-174: Typo in variable name: Rult should be result.

This was flagged in a previous review. The local variable should follow Kotlin naming conventions.

๐Ÿ”Ž Suggested fix
     override fun hashCode(): Int {
-        var Rult = headline1.hashCode()
-        Rult = 31 * Rult + headline2.hashCode()
-        Rult = 31 * Rult + headline3.hashCode()
-        Rult = 31 * Rult + title1.hashCode()
-        Rult = 31 * Rult + title2.hashCode()
-        Rult = 31 * Rult + title3.hashCode()
-        Rult = 31 * Rult + body1.hashCode()
-        Rult = 31 * Rult + body2.hashCode()
-        Rult = 31 * Rult + body3.hashCode()
-        Rult = 31 * Rult + caption.hashCode()
-        Rult = 31 * Rult + overline.hashCode()
-        Rult = 31 * Rult + button.hashCode()
-        return Rult
+        var result = headline1.hashCode()
+        result = 31 * result + headline2.hashCode()
+        result = 31 * result + headline3.hashCode()
+        result = 31 * result + title1.hashCode()
+        result = 31 * result + title2.hashCode()
+        result = 31 * result + title3.hashCode()
+        result = 31 * result + body1.hashCode()
+        result = 31 * result + body2.hashCode()
+        result = 31 * result + body3.hashCode()
+        result = 31 * result + caption.hashCode()
+        result = 31 * result + overline.hashCode()
+        result = 31 * result + button.hashCode()
+        return result
     }
๐Ÿงน Nitpick comments (6)
core/ui/src/dev/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt (1)

9-9: Offer to implement screen orientation support.

The TODO indicates that screen orientation support is planned but not yet implemented.

Would you like me to open a new issue to track this enhancement, or generate an implementation that dynamically adjusts padding based on screen orientation (portrait/landscape)?

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1)

28-28: Consolidate duplicate icon references.

Both Notification (line 28) and Notice (line 31) map to the same drawable resource R.drawable.ic_notice. This duplication creates ambiguity about which property should be used. Consider keeping only one canonical property name.

๐Ÿ”Ž Suggested approach:

If "Notice" is the preferred term, remove the Notification property:

-    val Notification = R.drawable.ic_notice
     val Lunch = R.drawable.ic_lunch
     val Person = R.drawable.ic_person
     val Notice = R.drawable.ic_notice

Or if "Notification" is preferred, remove the Notice property:

     val Notification = R.drawable.ic_notice
     val Lunch = R.drawable.ic_lunch
     val Person = R.drawable.ic_person
-    val Notice = R.drawable.ic_notice

Also applies to: 31-31

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (2)

144-146: Unreachable else branch in exhaustive when expression.

The when already covers all ButtonColor enum values (Primary, Gray, Error). The else branch is dead code and can be removed. The same applies to underlinecolorScheme() at line 186.

๐Ÿ”Ž Suggested fix
     ButtonColor.Error -> ButtonState(
         enabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.inversePrimary,
         ),
         pressed = ButtonTheme(
             textColor = DmsTheme.colorScheme.primaryContainer,
         ),
         disabled = ButtonTheme(
             textColor = DmsTheme.colorScheme.onPrimary,
         ),
     )
-
-    else -> throw IllegalArgumentException("Unhandled ButtonColor: $this")
 }

189-201: Unused buttonType parameter in BasicButton.

The buttonType parameter is accepted but never referenced within the function body. Either remove the parameter or implement the intended logic that uses it.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (1)

15-75: Consider documenting the custom color slot mappings.

The mapping between DmsColor tokens and Material3 color slots diverges from standard Material3 semantics (e.g., surfaceTint โ†’ container, scrim โ†’ button). Adding inline comments or a design-system ADR would help future maintainers understand the rationale.

app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (1)

65-67: Consider using fillMaxSize() for clarity.

The Box currently uses fillMaxWidth(), which works because the content (NavDisplay) will take the available height. However, explicitly using fillMaxSize() would make the intent clearer and ensure the container properly sizes to fill the entire screen.

๐Ÿ”Ž Apply this diff for more explicit sizing:
     Box(
-        modifier = Modifier.fillMaxWidth(),
+        modifier = Modifier.fillMaxSize(),
     ) {
๐Ÿ“œ Review details

Configuration used: defaults

Review profile: CHILL

Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 3ae1221 and 4b02c3c.

๐Ÿ“’ Files selected for processing (14)
  • app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (3 hunks)
  • app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (1 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt (4 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (13 hunks)
  • core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_profile_default.xml (1 hunks)
  • core/design-system/src/dev/res/drawable/ic_wrong.xml (1 hunks)
  • core/ui/src/dev/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt (1 hunks)
  • core/ui/src/dev/java/team/aliens/dms/android/core/ui/viewmodel/BaseStateViewModel.kt (0 hunks)
  • core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt (2 hunks)
  • core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/TextFields.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt (1 hunks)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt (1 hunks)
๐Ÿ’ค Files with no reviewable changes (1)
  • core/ui/src/dev/java/team/aliens/dms/android/core/ui/viewmodel/BaseStateViewModel.kt
โœ… Files skipped from review due to trivial changes (1)
  • core/design-system/src/dev/res/drawable/ic_profile_default.xml
๐Ÿšง Files skipped from review as they are similar to previous changes (2)
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/viewmodel/SignInViewModel.kt
  • feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/ui/SigninScreen.kt
๐Ÿงฐ Additional context used
๐Ÿงฌ Code graph analysis (2)
core/ui/src/dev/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt (1)
core/ui/src/main/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt (1)
  • None (10-54)
app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (4)
app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt (1)
  • rememberDmsAppState (19-33)
feature/src/dev/kotlin/team/aliens/dms/android/feature/onboarding/navigation/OnboardingRoute.kt (1)
  • OnboardingRoute (6-13)
feature/src/dev/kotlin/team/aliens/dms/android/feature/signin/navigation/SignInRoute.kt (1)
  • SignInRoute (7-20)
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/snackbar/SnackBar.kt (1)
  • DmsSnackBar (22-58)
โฐ 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 (21)
core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/TextFields.kt (1)

35-35: LGTM! Clean import path update.

The import path update to reference DmsIcon from the foundation package is correct and aligns with the design system restructuring. The usage of DmsIcon properties remains unchanged throughout the file.

core/ui/src/prod/kotlin/team/aliens/dms/android/core/ui/composable/FloatingNotice.kt (1)

17-17: LGTM! Clean refactor for design system integration.

The import addition and simplified resource reference improve code readability while maintaining the same functionality. This aligns well with the design system migration described in the PR summary.

Also applies to: 42-42

core/design-system/src/dev/res/drawable/ic_wrong.xml (1)

1-9: LGTM! Well-formed vector drawable resource.

The vector drawable is correctly structured with appropriate dimensions (96x96 dp) and uses a suitable red color (#FF4646) for an error/wrong indicator icon. The path data properly defines the X-shaped mark.

core/ui/src/dev/java/team/aliens/dms/android/core/ui/PaddingDefaults.kt (3)

12-31: LGTM! Well-structured padding tokens.

The padding constants follow a clear progression and the predefined Horizontal and Vertical PaddingValues use sensible defaults that align with typical screen layout patterns.


45-53: LGTM! Correctly fixes bug from main source set.

This implementation correctly uses bottom = vertical on line 52. The corresponding function in the main source set has a bug where it uses bottom = horizontal, which would incorrectly apply horizontal padding to the bottom edge.


80-82: Verify the verticalPadding default value.

The verticalPadding function uses Small (4.dp) as its default, while other vertical padding utilities use Medium (12.dp):

  • PaddingDefaults.Vertical uses Medium for top/bottom
  • screen() functions default to Medium for vertical
  • topPadding() and bottomPadding() default to Medium

Please confirm whether this smaller default is intentional for specific use cases, or if it should be aligned with the other vertical padding defaults.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt (1)

13-13: Typo fix confirmed.

The previously flagged typo (BlueLaunch) has been corrected to BlueLunch.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/button/Button.kt (2)

330-334: Height calculation may produce inconsistent button content sizing.

Using textStyle.fontSize.toDp() * 1.2f results in heights of ~14.4dp for labelM (12sp) and ~19.2dp for bodyM (16sp) at 1x density. Verify this produces the intended visual appearance, especially for the loading indicator which may not scale proportionally.


59-105: LGTM - Gray color scheme addition.

The new ButtonColor.Gray case is properly implemented with enabled, pressed, and disabled states for the contained color scheme. The exhaustive when handling is correct.

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Typography.kt (2)

194-215: LGTM - Font weight mapping corrected.

pretendard_regular is now correctly mapped to FontWeight.Normal (400), aligning with standard font weight conventions. This resolves the critical issue from the previous review where it was incorrectly mapped to FontWeight.Thin.


99-110: LGTM - Font family migration.

All typography styles are consistently updated to use pretendardFontFamily via withDefaultFontFamily().

core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/Theme.kt (3)

88-112: LGTM - MaterialTheme wrapper restored.

The content() is now properly wrapped with MaterialTheme, providing colorScheme and typography to Material components. This resolves the critical issue from the previous review.


77-77: LGTM - LocalColors default value corrected.

LocalColors now uses the custom lightColorScheme defined at line 15, rather than the default Material3 lightColorScheme() function. This addresses the previous review feedback.


36-43: Unusual color token mappings - verify intentionality.

The outline and outlineVariant slots use red colors (DmsColor.Light.red400, red500), which is atypical since outlines are usually neutral. Additionally, semantic tokens like black, container, button, hover, pressed are mapped to Material slots (onBackground, surfaceTint, scrim, tertiary, onTertiary).

Confirm these mappings align with the design system specification, as components accessing DmsTheme.colorScheme.outline will receive a red color.

app/src/dev/kotlin/team/aliens/dms/android/app/DmsApp.kt (3)

45-45: Good state management pattern with testable defaults.

Adding the appState parameter with a default value follows best practices for Compose state management, allowing easy injection for testing while providing a sensible default for production use.


73-96: LGTM: Navigation flow and snackbar integration well-structured.

The navigation entries are properly wired with clear flow (Onboarding โ†’ SignIn โ†’ Main), and the snackbar callback correctly delegates to appState.showSnackBar(). The backstack management (clearing on transition from Onboarding to SignIn, adding on SignIn to Main) follows expected patterns.


98-112: LGTM: SnackbarHost properly configured with defensive casting.

The SnackbarHost is correctly positioned at the top with appropriate padding and z-indexing. The safe cast on Line 106 with early return is good defensive programming that prevents crashes if unexpected visuals types are passed.

app/src/dev/kotlin/team/aliens/dms/android/app/DmsAppState.kt (4)

19-33: LGTM: Well-structured state factory following Compose best practices.

The rememberDmsAppState factory correctly uses remember with appropriate dependencies and provides sensible defaults for both coroutineScope and snackBarHostState. This follows the standard Compose state holder pattern and enables both ease of use and testability.


35-39: LGTM: Appropriate use of @stable annotation and clean state structure.

The @Stable annotation correctly marks this state holder, enabling Compose's smart recomposition optimizations. The public properties provide necessary access to the underlying state for consumers.


40-49: Implementation addresses previous review concerns.

The current implementation using withTimeoutOrNull effectively addresses the manual job cancellation issues flagged in previous reviews. This approach properly cancels the coroutine and dismisses the snackbar after the specified duration, ensuring predictable snackbar behavior.

Note: If multiple snackbars are triggered rapidly, the timeout begins when each coroutine launches (not when the snackbar actually appears). In typical usage patterns where snackbars are shown occasionally, this won't be an issue.


51-61: LGTM: Clean public API with good encapsulation.

The public showSnackBar method provides a convenient API by accepting simple parameters and encapsulating the creation of DmsSnackBarVisuals. The delegation to the private method keeps the implementation clean and maintains a clear separation of concerns.

val BlueDinner = R.drawable.ic_blue_dinner
val BlueLunch = R.drawable.ic_blue_lunch
val Breakfast = R.drawable.ic_breakfast
val Calender = R.drawable.ic_calender
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue | ๐ŸŸก Minor

Fix the spelling: "Calender" should be "Calendar".

The property name contains a typo. The correct spelling is "Calendar" (not "Calender"). If the underlying drawable resource is also misspelled, consider renaming it as well to maintain consistency.

๐Ÿ”Ž Apply this diff to fix the property name:
-    val Calender = R.drawable.ic_calender
+    val Calendar = R.drawable.ic_calendar

Note: If the drawable resource file is named ic_calender.xml, rename it to ic_calendar.xml as well.

๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
val Calender = R.drawable.ic_calender
val Calendar = R.drawable.ic_calendar
๐Ÿค– Prompt for AI Agents
In
core/design-system/src/dev/java/team/aliens/dms/android/core/designsystem/foundation/DmsIcon.kt
around line 15, the property name "Calender" is misspelled; change the property
to "Calendar = R.drawable.ic_calendar" and update all usages to
DmsIcon.Calendar. If the drawable resource file is named ic_calender.xml, rename
it to ic_calendar.xml and update any references (R.drawable.ic_calender ->
R.drawable.ic_calendar). After renaming, run a Gradle sync/clean to update
generated R references and fix any remaining compilation errors.

@uson1004 uson1004 merged commit 4925831 into develop Dec 18, 2025
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•  ๊ฒฝ์šฐ

Projects

None yet

Development

Successfully merging this pull request may close these issues.

๋กœ๊ทธ์ธ ํ™”๋ฉด ๊ฐœ๋ฐœ

2 participants