[Feat] 로그인 UI 구현-대표 화면(#3)#20
Conversation
…ng' into feature/3-login-ui
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (6)
🚧 Files skipped from review as they are similar to previous changes (2)
📝 WalkthroughWalkthrough랜딩·로그인 화면을 실제 Compose UI로 구성하고 카카오 로그인 콜백을 연결했습니다. 약관 동의 상태, 체크박스, 약관 목록, 다음 버튼, 상세 약관 화면과 관련 디자인 토큰을 추가했습니다. Changes로그인 및 약관 UI
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant AgreementScreen
participant AgreementItem
participant CheckBox
participant AgreementViewModel
AgreementScreen->>AgreementItem: 약관 상태와 토글 콜백 전달
AgreementItem->>CheckBox: checked 상태와 변경 콜백 전달
CheckBox->>AgreementScreen: 체크 변경 이벤트 전달
AgreementScreen->>AgreementViewModel: 약관 토글 요청
AgreementViewModel->>AgreementScreen: 갱신된 AgreementUiState 제공
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 4❌ Failed checks (4 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Gemini AI 코드리뷰안녕하세요, 시니어 Android 개발자입니다. 이번 PR의 코드 변경 사항들을 꼼꼼하게 검토했습니다. 전반적으로 Jetpack Compose 컴포넌트들이 잘 분리되어 있고, Preview 기능도 잘 활용하여 개발하신 점이 인상 깊습니다. 몇 가지 개선할 점과 질문 사항이 있어 피드백을 드립니다. 1. Kotlin & Jetpack Compose (공통)
2. Jetpack Compose (상세)
|
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (2)
feature/onboarding/impl/src/main/java/kr/co/call/impl/component/ProgressBar.kt (1)
3-5: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win빈 클래스 블록을 제거하거나 실제 구현을 추가해 주세요.
현재
ProgressBar는 아무 동작도 제공하지 않아 detekt의EmptyClassBlock경고를 발생시킵니다. 자리표시자라면 중괄호를 제거하고, 실제 온보딩 UI 컴포넌트라면 필요한 상태와 렌더링 API를 구현한 뒤 추가하는 편이 좋습니다.권장 수정
-class ProgressBar { - -} +class ProgressBar🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/onboarding/impl/src/main/java/kr/co/call/impl/component/ProgressBar.kt` around lines 3 - 5, ProgressBar의 빈 클래스 블록을 제거하세요. 아직 구현이 필요하지 않은 자리표시자라면 중괄호 없는 클래스 선언으로 변경하고, 실제 UI 동작이 요구되는 경우에만 상태와 렌더링 API를 추가하세요.Source: Linters/SAST tools
feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt (1)
38-41: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win화면 Composable의
ModifierAPI를 경로 규칙에 맞춰 통일해 주세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt#L38-L41:modifier를 콜백보다 앞에 배치하고 기본값을 제거해 주세요.feature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.kt#L31-L33:modifier기본값을 제거해 주세요.feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt#L73-L78:modifier를 콜백보다 앞에 배치하고 기본값을 제거해 주세요.feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.kt#L23-L29:modifier를 콜백보다 앞에 배치하고 기본값을 제거해 주세요.
Modifier 파라미터 위치(파라미터 앞쪽) 및 기본값 없이 전달 여부경로 지침에 따른 의견입니다.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt` around lines 38 - 41, 화면 Composable들의 Modifier API를 경로 규칙에 맞게 통일하세요. feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt 38-41에서는 LoginScreen의 modifier를 콜백보다 앞에 배치하고 기본값을 제거하세요. feature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.kt 31-33에서는 LandingScreen의 modifier 기본값을 제거하세요. feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt 73-78와 feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.kt 23-29에서는 각각 modifier를 콜백보다 앞에 배치하고 기본값을 제거하세요.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@feature/login/impl/src/main/java/kr/co/call/impl/component/CheckBox.kt`:
- Around line 27-46: Update the checkbox composable’s Box interaction to expose
Role.Checkbox and the checked state to accessibility services, while preserving
the existing visual appearance and onCheckedChange behavior. Ensure the
interactive area meets the minimum 48dp touch target, using Material Checkbox or
an equivalent toggleable implementation with the required semantics.
In
`@feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.kt`:
- Around line 30-36: Apply the status-bar inset to the top-level Column or
BackTopBar in AgreementDetailScreen so the back button is offset below the
status bar in edge-to-edge mode. Use the existing Compose inset handling
conventions, ensuring the inset is applied only once and the remaining layout
behavior is preserved.
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt`:
- Around line 74-94: AgreementScreen의 remember 기반 checkedAgreements 상태와
isAllChecked, isRequiredChecked 판정 로직을 ViewModel 또는 Orbit Container로 이동하세요. 화면은
선택된 약관 상태와 전체/필수 동의 결과를 인자로 받고, onAgreementViewClick 및 onNextClick 같은 이벤트 콜백만
호출하도록 AgreementScreen을 stateless에 가깝게 수정하세요.
- Around line 95-104: AgreementScreen의 고정 높이 레이아웃을 수정해 작은 화면·가로 모드·큰 글꼴에서도 전체
콘텐츠에 접근할 수 있게 하세요. 상단 Spacer와 약관 목록 등 고정 간격이 있는 본문을 스크롤 가능한 영역으로 분리하고, 다음 버튼
CTA는 화면 하단에 고정된 별도 영역으로 배치하세요. 관련 Spacer 및 CTA 배치(122-130, 202-230)의 기존 동작은 유지하되
콘텐츠가 CTA 아래로 밀리지 않도록 조정하세요.
- Around line 168-172: Update the text in the AgreementScreen composable to
correct the Korean spacing in the all-agreements consent message, changing
“이용을위한” to the properly spaced form while preserving the rest of the wording and
styling.
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt`:
- Around line 38-40: Remove the empty default callback from LoginScreen’s
onKakaoLoginClick parameter so callers must provide login behavior, then update
LoginEntryBuilder’s LoginScreen invocation to pass the actual Kakao login
action.
---
Nitpick comments:
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt`:
- Around line 38-41: 화면 Composable들의 Modifier API를 경로 규칙에 맞게 통일하세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt 38-41에서는
LoginScreen의 modifier를 콜백보다 앞에 배치하고 기본값을 제거하세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.kt
31-33에서는 LandingScreen의 modifier 기본값을 제거하세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt
73-78와
feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.kt
23-29에서는 각각 modifier를 콜백보다 앞에 배치하고 기본값을 제거하세요.
In
`@feature/onboarding/impl/src/main/java/kr/co/call/impl/component/ProgressBar.kt`:
- Around line 3-5: ProgressBar의 빈 클래스 블록을 제거하세요. 아직 구현이 필요하지 않은 자리표시자라면 중괄호 없는
클래스 선언으로 변경하고, 실제 UI 동작이 요구되는 경우에만 상태와 렌더링 API를 추가하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 8025c11c-ad8a-4a88-ba7d-7454e8ed8fad
⛔ Files ignored due to path filters (4)
feature/login/impl/src/main/res/drawable/ic_arrow_back.pngis excluded by!**/*.pngfeature/login/impl/src/main/res/drawable/kakao.pngis excluded by!**/*.pngfeature/login/impl/src/main/res/drawable/landing.pngis excluded by!**/*.pngfeature/login/impl/src/main/res/drawable/logo.pngis excluded by!**/*.png
📒 Files selected for processing (10)
feature/login/impl/src/main/java/kr/co/call/impl/component/AgreementItem.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/AgreementSection.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/BackTopBar.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/CheckBox.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.ktfeature/login/impl/src/main/res/drawable/ic_check.xmlfeature/onboarding/impl/src/main/java/kr/co/call/impl/component/ProgressBar.kt
| fun LoginScreen( | ||
| modifier: Modifier = Modifier, | ||
| onKakaoLoginClick:()->Unit={}, | ||
| modifier: Modifier=Modifier, |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
빈 기본 콜백 때문에 실제 로그인 버튼이 동작하지 않습니다.
LoginEntryBuilder.kt에서 LoginScreen()을 인자 없이 호출하므로 Line 39의 기본값이 사용되고, 카카오 버튼 클릭이 그대로 소실됩니다. 기본값을 제거하고 엔트리에서 실제 로그인 동작을 연결해 주세요.
수정 예시
fun LoginScreen(
- onKakaoLoginClick: () -> Unit = {},
+ onKakaoLoginClick: () -> Unit,
modifier: Modifier = Modifier,
)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt`
around lines 38 - 40, Remove the empty default callback from LoginScreen’s
onKakaoLoginClick parameter so callers must provide login behavior, then update
LoginEntryBuilder’s LoginScreen invocation to pass the actual Kakao login
action.
| onAgreementViewClick:(AgreementType)->Unit, | ||
| onNextClick:()->Unit, | ||
| modifier: Modifier=Modifier, | ||
| ) { |
There was a problem hiding this comment.
약관동의 API 호출하는 부분이랑 연관되어있어서 컴포저블에 있는것보다는 ViewModel로 빼는게 더 좋을 것 같아요
예시 약간 이런식..?!
private fun toggleAgreement(type: AgreementType) = intent {
reduce {
state.copy(
checkedAgreements = if (type in state.checkedAgreements) {
state.checkedAgreements - type
} else {
state.checkedAgreements + type
},
)
}
}
private fun toggleAll(checked: Boolean) = intent {
reduce {
state.copy(
checkedAgreements = if (checked) AgreementType.entries.toSet() else emptySet(),
)
}
}
| text = buildAnnotatedString { | ||
| append("AI가 먼저 전화하고 관계를 이어가는,\n") | ||
| withStyle( | ||
| style = SpanStyle( | ||
| fontWeight = FontWeight.Bold, | ||
| ), | ||
| ) { | ||
| append("나만의 연애 시뮬레이션") | ||
| } | ||
| append("\uD83D\uDC9E") | ||
| }, | ||
| fontSize = 22.sp, | ||
| color = Gray900, | ||
| fontFamily = Pretendard, | ||
| fontWeight = FontWeight.Normal, |
There was a problem hiding this comment.
요거 디자인 시스템에 정의한 타이포그래피 스타일로 바꾸는 게 좋을 것 같아요! 이미 다 정의해놨습니당 😊
Text(
text = buildAnnotatedString {
withStyle(
style = typography.titleSmall.toSpanStyle(),
) {
append("AI가 먼저 전화하고 관계를 이어가는,\n")
}
withStyle(
style = typography.titleSmallBold.toSpanStyle(),
) {
append("나만의 연애 시뮬레이션")
}
append("💞")
},
textAlign = TextAlign.Center,
)| SecondaryButton( | ||
| text="동의하고 프로필 설정하기", | ||
| onClick=onNextClick, | ||
| modifier=Modifier.fillMaxWidth(), | ||
| containerColor=MainVariant2, | ||
| contentColor=Black, | ||
| ) |
There was a problem hiding this comment.
이거는 버튼 컴포넌트를 따로 만드는 걸 추천드립니다!
| }else{ | ||
| Box( | ||
| modifier= Modifier | ||
| .fillMaxWidth() | ||
| .height(60.dp) | ||
| .background( | ||
| color= MainVariant2, | ||
| shape=RoundedCornerShape(percent=10), | ||
| ), | ||
| contentAlignment=Alignment.Center, | ||
| ){ | ||
| Text( | ||
| text="동의하고 프로필 설정하기", | ||
| color=Black, | ||
| style=typography.bodyLargeBold, | ||
| ) | ||
| } | ||
| } |
There was a problem hiding this comment.
버튼 컴포넌트를 따로 만든담에 isEnabled 같은 파라미터를 만들어서 거기에 isRequiredChecked를 주입시킨 다음에 컴포넌트 함수 본문에서 분기처리를 하는 게 좋을 것 같아.
@Composable
fun AgreementButton(
isEnabled: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier,
) {
if (isEnabled) {
} else {
}
}설계를 이런 식으로?
| painter=painterResource(id=R.drawable.logo), | ||
| contentDescription = "로고", | ||
| modifier=Modifier.size(97.dp), | ||
| contentScale=ContentScale.Fit |
There was a problem hiding this comment.
사진 안 잘리게 하려고 넣었어요
혹시 이렇게 하면 안 되나요...?
There was a problem hiding this comment.
엑 아녀아녀 궁금해성 저원래 궁금하면 코멘트루 질문해어
There was a problem hiding this comment.
넹 그러면 일단 이대로 둘게요
혹시 더 좋은 방법이 있다면 알려주세요!
| Text( | ||
| text="전화왔어", | ||
| style= TextStyle( | ||
| brush = Brush.verticalGradient( | ||
| colors = listOf( | ||
| MainVariant1, | ||
| Main | ||
| ) | ||
| ), | ||
| fontSize = 34.sp, | ||
| fontWeight= FontWeight.Bold, | ||
| ) |
There was a problem hiding this comment.
브러시도 디자인 시스템에 정의해 둬서, 아래처럼 style.copy()로 적용하면 더 짧고 깔끔하게 작성할 수 있을 것 같아요!
Text(
text = "전화왔어",
style = typography.titleLargeBold.copy(
brush = CallTheme.colors.chatGradient,
),
)
Gemini AI 코드리뷰안녕하세요! 새로운 로그인 플로우 및 약관 동의 화면 구현하시느라 고생 많으셨습니다. 전반적으로 Jetpack Compose의 모범 사례들을 잘 적용하셨고, ViewModel에서 UI 상태를 관리하는 방식도 깔끔하게 구현해주셨습니다. 몇 가지 개선점과 제안을 드릴게요. 🔍 PR 코드 리뷰1. Design System 모듈 (
2. Jetpack Compose 코드
3. ViewModel 레이어 (
전반적인 총평 및 제안
이 부분들을 개선하신다면, 훨씬 더 견고하고 유지보수하기 쉬운 코드가 될 것입니다. 수고 많으셨습니다! |
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt (1)
45-77: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win작은 화면에서도 로그인 버튼에 접근할 수 있게 해 주세요.
고정된 223dp 상단 여백과 여러 고정 간격을 비스크롤
Column에 누적해, 가로 모드나 큰 글꼴에서 카카오 로그인 버튼이 화면 밖으로 밀릴 수 있습니다. 가변 여백 또는 스크롤 가능한 레이아웃으로 조정해 주세요.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt` around lines 45 - 77, Update the LoginScreen layout around the non-scrollable Column and KakaoLoginButton so the login button remains reachable on small, landscape, and large-font screens. Replace the fixed vertical spacing, especially the 223.dp top Spacer and accumulated gaps, with responsive or weighted spacing, or make the content vertically scrollable while preserving the existing visual order.
🧹 Nitpick comments (1)
feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt (1)
42-64: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win약관 모델이 화면 계층을 ViewModel로 역참조하게 만들고 있습니다.
AgreementType과isRequired규칙을viewmodel또는 별도 UI 모델 패키지로 이동해 의존 방향을 바로잡아 주세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt#L42-L64:AgreementType을 화면 파일 밖의 모델 계층으로 이동합니다.feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementUiState.kt#L3-L6: 이동한 모델을 참조하도록 import를 변경합니다.feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementViewModel.kt#L9-L15: ViewModel에서screen패키지 의존성을 제거합니다.경로 지침의 “ViewModel/Container에 있어야 할 비즈니스 로직이 Composable에 섞여있지 않은지 확인” 규칙에 따른 의견입니다.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt` around lines 42 - 64, AgreementType과 isRequired 규칙을 화면 계층에서 분리해 ViewModel 또는 별도 UI 모델 패키지로 이동하세요. feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt 42-64에서는 선언을 제거하고, feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementUiState.kt 3-6에서는 이동한 AgreementType을 import하도록 변경하세요. feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementViewModel.kt 9-15에서는 screen 패키지 의존성을 제거하고 새 모델을 참조하세요.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@feature/login/impl/src/main/java/kr/co/call/impl/component/CheckBox.kt`:
- Around line 47-52: In the checked branch of the CheckBox composable, update
the check Icon’s contentDescription from the redundant "check" label to null,
while leaving the toggleable semantics and other icon properties unchanged.
In
`@feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementViewModel.kt`:
- Around line 12-41: AgreementViewModel의 MutableStateFlow 직접 갱신을 제거하고 Orbit MVI의
ContainerHost를 구현하도록 변경하세요. AgreementUiState를 초기 상태로 사용하는 컨테이너를 구성한 뒤,
toggleAgreement와 toggleAllAgreements의 상태 변경을 각각 intent 블록 내부의 reduce {
state.copy(...) }로 수행하고 외부의 mutableUiState 접근은 제거하세요.
---
Outside diff comments:
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.kt`:
- Around line 45-77: Update the LoginScreen layout around the non-scrollable
Column and KakaoLoginButton so the login button remains reachable on small,
landscape, and large-font screens. Replace the fixed vertical spacing,
especially the 223.dp top Spacer and accumulated gaps, with responsive or
weighted spacing, or make the content vertically scrollable while preserving the
existing visual order.
---
Nitpick comments:
In `@feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt`:
- Around line 42-64: AgreementType과 isRequired 규칙을 화면 계층에서 분리해 ViewModel 또는 별도
UI 모델 패키지로 이동하세요.
feature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.kt
42-64에서는 선언을 제거하고,
feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementUiState.kt
3-6에서는 이동한 AgreementType을 import하도록 변경하세요.
feature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementViewModel.kt
9-15에서는 screen 패키지 의존성을 제거하고 새 모델을 참조하세요.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 7f9de1ab-8588-4133-8585-9106d809034e
📒 Files selected for processing (13)
core/designsystem/src/main/java/kr/co/call/designsystem/theme/Color.ktcore/designsystem/src/main/java/kr/co/call/designsystem/theme/Type.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/AgreementItem.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/AgreementSection.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/CheckBox.ktfeature/login/impl/src/main/java/kr/co/call/impl/component/NextButton.ktfeature/login/impl/src/main/java/kr/co/call/impl/entry/LoginEntryBuilder.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementDetailScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/AgreementScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/screen/LoginScreen.ktfeature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementUiState.ktfeature/login/impl/src/main/java/kr/co/call/impl/viewmodel/AgreementViewModel.kt
💤 Files with no reviewable changes (1)
- feature/login/impl/src/main/java/kr/co/call/impl/component/AgreementSection.kt
🚧 Files skipped from review as they are similar to previous changes (2)
- feature/login/impl/src/main/java/kr/co/call/impl/screen/LandingScreen.kt
- feature/login/impl/src/main/java/kr/co/call/impl/component/AgreementItem.kt
codebidoof
left a comment
There was a problem hiding this comment.
고생했서요~~ Color.kt 쪽만 수정해 주세용
| style=typography.titleSmall.toSpanStyle(), | ||
| ) { | ||
| append("AI가 먼저 전화하고 관계를 이어가는,\n") | ||
| } | ||
| withStyle( | ||
| style = typography.titleSmallBold.toSpanStyle(), | ||
| ){ |
| val ChatGradient = Brush.linearGradient( | ||
| listOf( | ||
| Color(0xFFFF789F), | ||
| Color(0xFFFFA3BD) | ||
| ) | ||
| ), | ||
| start=Offset.Zero, | ||
| end=Offset.Infinite | ||
| ) |
There was a problem hiding this comment.
이거는 공통 코드라, 랜딩스크린에 적용할 브러시 그래디언트는 새로 만드는 게 좋을 것 같아요. 얘는 피그마 그대로 뽑은 거라... ChatGradient 의 변경사항은 롤백하고 브러시 변수를 새로 만들어서 랜딩스크린에 적용하는 게 좋을 것 같습니다!!!!
| fun EntryProviderScope<NavKey>.loginEntry() { | ||
| entry<LoginNavKey> { | ||
| LoginScreen() | ||
| LoginScreen( |
There was a problem hiding this comment.
Modifier는 어차피 디폴트로 화면에서 가지고 있어서 지워도 될 것 같아요 다음 화면으로 넘어갈때 필요한 값(id나 콜백)만 넘기면 좋을 것 같아용
Gemini AI 코드리뷰PR 리뷰 요청드립니다. 안녕하세요! 새로운 로그인 및 약관 동의 플로우를 구현하신 PR 잘 봤습니다. 전반적으로 Jetpack Compose의 모범 사례와 Orbit MVI 패턴을 잘 적용하셨고, UI 컴포넌트들이 잘 분리되어 있어 깔끔합니다. 몇 가지 개선사항과 제안을 드립니다. 🔍 코드 리뷰 요약칭찬하는 점:
개선이 필요한 점:
파일별 상세 리뷰
|
📄 작업 내용 요약
-랜딩 화면 구현
-로그인 화면 구현
-약관 동의 화면 구현
-약관 보기 화면 구현
📎 Issue 번호
✅ 작업 목록
📝 기타 참고사항
Summary by CodeRabbit