Skip to content

[Feat] 온보딩 Screen 구현 - #67

Open
oungsi2000 wants to merge 12 commits into
feat/64-onboarding-usecasefrom
feat/65-onboarding-screen
Open

[Feat] 온보딩 Screen 구현#67
oungsi2000 wants to merge 12 commits into
feat/64-onboarding-usecasefrom
feat/65-onboarding-screen

Conversation

@oungsi2000

@oungsi2000 oungsi2000 commented Aug 2, 2026

Copy link
Copy Markdown
Collaborator

관련 이슈

#65

작업 내용

  • 온보딩 관련 UI 및 Screen을 작성하였습니다.

변경사항 / 상세

중점 리뷰사항

  • 중간중간 화면 전환 애니메이션이 없어 뚝뚝 끊기는 느낌이 나는데 이 부분도 추후 디자인 팀에서 피드백을 받아보고자 합니다.
  • 현재는 UiState에 step 프로퍼티를 사용하고 있는데, 이 부분도 Nav3 쓸까 고민입니다 (추후에)

스크린샷 (선택)

Summary by CodeRabbit

  • 새로운 기능
    • 약관 동의, 이름·출생 정보·추가 질문 입력을 포함한 온보딩 화면을 추가했습니다.
    • 온보딩 완료 화면과 단계별 진행 흐름을 제공합니다.
    • Android 13 이상에서 알림 권한을 요청합니다.
    • 알림 권한을 거부해도 온보딩을 완료할 수 있습니다.
  • 개선 사항
    • 온보딩 화면의 뒤로가기, 종료 확인, 선택 시트 동작을 개선했습니다.
    • 진행 완료 화면에서는 불필요한 진행률 표시를 제거했습니다.
    • 뒤로가기 아이콘 클릭 시 불필요한 시각 효과를 제거했습니다.

@oungsi2000
oungsi2000 requested a review from Moony-H August 2, 2026 14:49
@oungsi2000 oungsi2000 self-assigned this Aug 2, 2026
@oungsi2000 oungsi2000 added the feature 새로운 기능 추가 label Aug 2, 2026
@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 898ae3da-0aed-4912-a4b0-273d842c3227

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

온보딩 전체 흐름을 추가했습니다. 단계별 입력 화면, 공통 레이아웃, 출생 정보 시트, 완료 화면을 구현했습니다. 완료 확인 후 Android 13 알림 권한을 요청하고 COMPLETE 단계로 전환합니다.

Changes

온보딩 상태와 완료 흐름

Layer / File(s) Summary
완료 상태와 권한 요청
feature/onboarding/.../model/*, feature/onboarding/.../OnboardingViewModel.kt
완료 다이얼로그를 제거했습니다. 완료 확인 시 PermissionRequest를 게시하고 COMPLETE 상태로 전환합니다.
라우트와 시트 연결
feature/onboarding/.../OnboardingRoute.kt
단계별 화면, 생년월일·출생시간 시트, 종료 확인 다이얼로그, 완료 화면을 연결합니다.
온보딩 화면과 공통 레이아웃
feature/onboarding/.../component/*, feature/onboarding/.../screen/*, feature/onboarding/.../res/*
약관, 이름, 출생 정보, 추가 질문, 완료 화면과 공통 스캐폴드를 추가했습니다. 문자열과 오른쪽 화살표 리소스도 추가했습니다.
권한 선언과 완료 테스트
app/src/main/AndroidManifest.xml, core/designsystem/.../TodakunProgressBar.kt, feature/onboarding/src/test/*
알림 권한을 선언했습니다. 진행률 아이콘의 클릭 indication을 제거했습니다. 완료 단계 전환 테스트와 가짜 저장소를 추가했습니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: moony-h

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.71% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed 온보딩 단계별 UI와 화면 구현이라는 PR의 주요 변경 내용을 간결하게 나타냅니다.
Description check ✅ Passed 관련 이슈, 작업 내용, 중점 리뷰사항을 작성했으며 변경사항 상세는 비어 있지만 전체 설명은 주요 내용을 포함합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch

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.

@oungsi2000 oungsi2000 changed the title [Feat] 온보딩 Screen 생성 [Feat] 온보딩 Screen 구현 Aug 2, 2026
@oungsi2000

oungsi2000 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

@CodeRabbit review

@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@oungsi2000

oungsi2000 commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

온보딩 완료 화면이 변경됨에 따라 추가 커밋 올렸습니다
https://www.figma.com/design/bLZr7Nh53PmRHuEjX7gNco/Yapp-2%EC%A1%B0--%ED%86%A0%EB%8B%A5%EC%9A%B4-?node-id=3047-29677&t=d33GARdzBvnbSL57-4
기존: Dialog
현재: Full Page

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 12

🧹 Nitpick comments (4)
core/designsystem/src/main/java/com/kikidan/designsystem/component/TodakunProgressBar.kt (1)

51-55: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

[P2] 터치 피드백과 터치 영역을 함께 보완하세요.

indication = null로 리플이 사라졌습니다. 클릭 가능한 아이콘의 터치 영역도 8x16dp로, 권장 최소 터치 타깃 48dp보다 작습니다. 두 요소가 겹치면 사용자는 뒤로가기 탭이 인식되었는지 알기 어렵습니다.

클릭 영역을 아이콘 크기와 분리하고, contentDescription도 지정하세요.

♻️ 제안 수정
             Icon(
                 painter = painterResource(id = R.drawable.ic_arrow_back),
-                contentDescription = null,
+                contentDescription = stringResource(id = R.string.designsystem_back),
                 tint = TodakunColor.gray400,
                 modifier =
                     Modifier
-                        .size(width = 8.dp, height = 16.dp)
                         .clickable(
                             indication = null,
                             interactionSource = remember { MutableInteractionSource() },
                             onClick = onBackClick,
-                        ),
+                        )
+                        .padding(16.dp)
+                        .size(width = 8.dp, height = 16.dp),
             )
🤖 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
`@core/designsystem/src/main/java/com/kikidan/designsystem/component/TodakunProgressBar.kt`
around lines 51 - 55, Update the clickable back-button area in
TodakunProgressBar to provide a minimum 48dp touch target independent of the
icon’s 8x16dp size, restore visible touch indication by removing the null
indication, and add an appropriate contentDescription to the clickable icon.
feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt (1)

20-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

[P2] 미사용 import를 제거하세요.

kotlinx.coroutines.delay를 이 파일에서 사용하지 않습니다. ktlint의 미사용 import 규칙에 걸립니다.

-import kotlinx.coroutines.delay
🤖 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/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt`
at line 20, Remove the unused kotlinx.coroutines.delay import from
OnboardingViewModel.kt, leaving the remaining imports and implementation
unchanged.

Source: Path instructions

feature/onboarding/src/main/res/drawable/ic_arrow_right.xml (1)

2-6: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

[P2] RTL 로케일 대응을 위해 autoMirrored를 추가하세요.

방향성 화살표 아이콘에 android:autoMirrored="true"가 없습니다. RTL 로케일을 지원할 계획이라면 이 속성을 추가해 아이콘이 자동으로 반전되도록 하세요.

🌐 제안 수정
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
     android:width="7dp"
     android:height="12dp"
     android:viewportWidth="7"
-    android:viewportHeight="12">
+    android:viewportHeight="12"
+    android:autoMirrored="true">
🤖 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/src/main/res/drawable/ic_arrow_right.xml` around lines 2 -
6, Update the vector drawable declaration in ic_arrow_right.xml to add
android:autoMirrored="true", ensuring the directional arrow automatically flips
in RTL locales while preserving its existing dimensions and viewport settings.
feature/onboarding/src/main/java/com/kikidan/onboarding/screen/CompleteScreen.kt (1)

31-36: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

[P3] 배경색이 디자인 시스템 토큰을 사용하지 않습니다.

Color(0xFF010018)가 하드코딩되어 있습니다. TodakunColor에 대응하는 토큰이 있다면 재사용하고, 없다면 새로 정의해 색상 관리를 일관되게 유지하세요.

🤖 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/src/main/java/com/kikidan/onboarding/screen/CompleteScreen.kt`
around lines 31 - 36, Update the background configuration in CompleteScreen’s
Box to use the corresponding TodakunColor design-system token instead of the
hardcoded Color(0xFF010018); if no matching token exists, define it in
TodakunColor and reuse it here.
🤖 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/onboarding/src/main/java/com/kikidan/onboarding/component/OnboardingScaffold.kt`:
- Around line 104-136: Update TermsHeader’s back-navigation control to use an
IconButton with at least the standard 48dp touch target, and provide a
meaningful back-navigation contentDescription instead of null. Preserve the
existing icon appearance and onBackClick behavior.
- Around line 83-99: OnboardingScaffold의 콘텐츠 Column에
verticalScroll(rememberScrollState())를 추가해 필드가 많은 화면에서도 전체 콘텐츠를 세로로 스크롤할 수 있도록
수정하세요.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingStep.kt`:
- Around line 19-24: Update the COMPLETE-step back-navigation handling so
BackHandler does not fall through to the app-wide back action when
OnboardingStep.previous is null. In the COMPLETE branch, consume the back press
and apply the intended behavior—ignore it or navigate home/show the exit
dialog—while preserving existing previous-step navigation for other onboarding
steps.

In `@feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingRoute.kt`:
- Around line 48-57: OnboardingRoute’s permissionHandled state must survive
configuration changes: replace the remember-backed state with rememberSaveable
while preserving its initial SDK-based value. Update the COMPLETE-stage
rendering condition around the onboarding step logic so the completion screen is
always rendered and can advance regardless of permission state, including when
the activity is recreated during the permission request.
- Around line 59-77: Update the when expression in OnboardingRoute’s
viewModel.collectSideEffect block to handle InvalidInput and Failure as explicit
side-effect branches with the required user feedback, and remove the catch-all
else branch. Keep the expression exhaustive by covering every existing
OnboardingSideEffect subtype explicitly so future additions trigger compiler
checks.
- Around line 3-37: Remove the unused PackageManager, LaunchedEffect,
LocalContext, and ContextCompat imports from OnboardingRoute.kt, while
preserving all imports that are referenced by the onboarding route
implementation and its required import ordering.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt`:
- Around line 73-88: OnboardingViewModel의 완료 처리에서 검증용 즉시 COMPLETE 전환과 주석 처리된 데드
코드를 제거하고, signupSubmission과 onboardingToken을 사용해 signUpUseCase를 실제 호출하세요. 회원가입
성공 시에만 COMPLETE 상태를 갱신하고 PermissionRequest를 게시하며, 실패 시 기존 Failure 사이드 이펙트를
게시하세요. CompleteScreen의 확인 액션에서 OnboardingSideEffect.NavigateToHome을 게시해
OnboardingRoute의 onFinish()가 호출되도록 연결하세요.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/screen/BirthInfoScreen.kt`:
- Around line 71-148: Update the content layout in BirthInfoScreen so the full
Column containing the gender, calendar, birth date, birth time, checkbox, and
hint can scroll vertically on smaller screens. Apply the scrolling behavior to
the content area without changing field interactions or the CTA layout, ensuring
the bottom content is not obscured.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/screen/ExtraQuestionScreen.kt`:
- Around line 51-66: Make the content containing both ChipQuestion sections
scrollable so all Job and RelationshipStatus options remain accessible on small
screens without overlapping the CTA. Update the Column in ExtraQuestionScreen,
or the shared OnboardingScaffold if that is where screen content scrolling is
managed, using the existing layout scrolling approach.
- Around line 114-122: Update the RelationshipStatus.labelRes mapping so the
MARRY and REMARRY enum values use labels matching their actual meanings,
avoiding a “divorced/single-after-marriage” label for remarriage; rename the
enum or adjust the corresponding string resource reference as appropriate while
preserving the other mappings.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/screen/TermsScreen.kt`:
- Around line 84-130: The TermRow call sites and default onMoreDetailClick
currently provide no action for the details icon. Implement the terms-detail
navigation or external-link behavior and pass it from each TermRow caller,
remove the no-op TODO default, assign the icon an explicit size, and provide a
localized accessibility contentDescription describing the details action.

In
`@feature/onboarding/src/test/java/com/kikidan/onboarding/OnboardingViewModelTest.kt`:
- Around line 237-241: Update the test around
OnboardingViewModel.onCompleteConfirmed to consume and assert the emitted
PermissionRequest side effect before calling expectState. Preserve the final
assertion that the state transitions to OnboardingStep.COMPLETE, ensuring the
test follows Orbit’s emission order.

---

Nitpick comments:
In
`@core/designsystem/src/main/java/com/kikidan/designsystem/component/TodakunProgressBar.kt`:
- Around line 51-55: Update the clickable back-button area in TodakunProgressBar
to provide a minimum 48dp touch target independent of the icon’s 8x16dp size,
restore visible touch indication by removing the null indication, and add an
appropriate contentDescription to the clickable icon.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt`:
- Line 20: Remove the unused kotlinx.coroutines.delay import from
OnboardingViewModel.kt, leaving the remaining imports and implementation
unchanged.

In
`@feature/onboarding/src/main/java/com/kikidan/onboarding/screen/CompleteScreen.kt`:
- Around line 31-36: Update the background configuration in CompleteScreen’s Box
to use the corresponding TodakunColor design-system token instead of the
hardcoded Color(0xFF010018); if no matching token exists, define it in
TodakunColor and reuse it here.

In `@feature/onboarding/src/main/res/drawable/ic_arrow_right.xml`:
- Around line 2-6: Update the vector drawable declaration in ic_arrow_right.xml
to add android:autoMirrored="true", ensuring the directional arrow automatically
flips in RTL locales while preserving its existing dimensions and viewport
settings.
🪄 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: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: fa6bbb15-3360-431b-9cd2-be7d18a9927c

📥 Commits

Reviewing files that changed from the base of the PR and between 708a0ad and 22afa76.

⛔ Files ignored due to path filters (1)
  • feature/onboarding/src/main/res/drawable/img_onboarding_complete_character.png is excluded by !**/*.png
📒 Files selected for processing (18)
  • app/src/main/AndroidManifest.xml
  • core/designsystem/src/main/java/com/kikidan/designsystem/component/TodakunProgressBar.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingRoute.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/component/OnboardingScaffold.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingSideEffect.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingState.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingStep.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/screen/BirthInfoScreen.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/screen/CompleteScreen.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/screen/ExtraQuestionScreen.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/screen/NameScreen.kt
  • feature/onboarding/src/main/java/com/kikidan/onboarding/screen/TermsScreen.kt
  • feature/onboarding/src/main/res/drawable/ic_arrow_right.xml
  • feature/onboarding/src/main/res/values/strings.xml
  • feature/onboarding/src/test/java/com/kikidan/onboarding/OnboardingViewModelTest.kt
  • feature/onboarding/src/test/java/com/kikidan/onboarding/fake/FakeAuthRepository.kt
  • feature/onboarding/src/test/java/com/kikidan/onboarding/fake/FakeTokenRepository.kt

Comment thread feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingRoute.kt Outdated
Comment on lines +84 to +130
private fun TermRow(
label: String,
checked: Boolean,
textStyleEmphasized: Boolean,
onCheckedChange: (Boolean) -> Unit,
modifier: Modifier = Modifier,
onMoreDetailClick: () -> Unit = { /* TODO 외부 링크 열기 */ },
) {
Row(
modifier =
modifier
.fillMaxWidth()
.toggleable(
value = checked,
onValueChange = onCheckedChange,
role = Role.Checkbox,
interactionSource = null,
indication = null,
),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(12.dp),
) {
TodakunCheckbox(
checked = checked,
onCheckedChange = onCheckedChange,
)
Text(
modifier = Modifier.weight(1f),
text = label,
style = if (textStyleEmphasized) TodakunTypography.body2SemiBold else TodakunTypography.body3Regular,
color = TodakunColor.black,
)
Icon(
modifier =
Modifier
.padding(horizontal = 7.dp)
.clickable(
onClick = onMoreDetailClick,
indication = null,
interactionSource = remember { MutableInteractionSource() },
),
painter = painterResource(id = R.drawable.ic_arrow_right),
contentDescription = null,
tint = TodakunColor.gray300,
)
}
}

@coderabbitai coderabbitai Bot Aug 3, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

[P1] "더보기" 아이콘이 아직 아무 동작도 하지 않습니다.

onMoreDetailClick 기본값은 TODO 주석뿐입니다(Line 90). 실제 호출부(Line 61-66, 74-79)에서도 override하지 않아, 사용자가 화살표를 눌러도 약관 전문을 볼 방법이 없습니다. 약관 동의 화면에서는 전문 열람 기능이 필요합니다.

또한 아이콘에 크기 지정이 없고(Line 116-128) contentDescription = null이라 스크린 리더 사용자도 이 버튼의 목적을 알 수 없습니다.

외부 링크 열기 기능을 구현할까요, 아니면 이슈로 등록해 드릴까요?

🤖 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/src/main/java/com/kikidan/onboarding/screen/TermsScreen.kt`
around lines 84 - 130, The TermRow call sites and default onMoreDetailClick
currently provide no action for the details icon. Implement the terms-detail
navigation or external-link behavior and pass it from each TermRow caller,
remove the no-op TODO default, assign the icon an explicit size, and provide a
localized accessibility contentDescription describing the details action.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

추후에 노션 링크를 전달받으면 그때 외부 링크로 이동하도록 하겠습니다

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

@oungsi2000, 확인했습니다. 노션 링크를 받은 뒤 약관별 외부 링크 이동을 구현하면 됩니다.

이때 TermRow의 no-op 기본 콜백을 제거하고, 더보기 아이콘의 명시적 크기 및 접근성 contentDescription도 함께 적용해야 합니다. 후속 GitHub 이슈로 등록할까요?

You are interacting with an AI system.

@oungsi2000
oungsi2000 force-pushed the feat/65-onboarding-screen branch from ea945ea to 4e56d2a Compare August 3, 2026 14:46
OnboardingState, OnboardingStep, OnboardingSideEffect 및 TermsAgreementUiModel 등 UI 상태와 관련된 클래스들을 `com.kikidan.onboarding.model` 패키지로 이동하여 모듈 내부 구조를 정리한다. 클래스 위치 변경에 따라 OnboardingViewModel과 관련 테스트 코드의 import 경로를 수정한다.

Co-Authored-By: Claude 3.5 Sonnet <noreply@anthropic.com>

# Conflicts:
#	feature/onboarding/src/test/java/com/kikidan/onboarding/OnboardingViewModelTest.kt
약관 동의부터 이름 입력, 생년월일 및 성별 선택, 추가 질문(직업/연애 상태)으로 구성된 전체 온보딩 흐름을 구현한다.

- `OnboardingRoute`를 추가하여 각 단계별 상태 관리 및 화면 전환 로직을 통합 관리
- 공통 UI 구조를 위한 `OnboardingScaffold`를 정의하고 상단 진행바 및 하단 CTA 버튼 연동
- `TermsScreen`: 전체 동의 및 개별 필수/선택 약관 동의 기능 구현
- `NameScreen`: 이름 유효성 검사(길이, 특수문자 제한) 및 에러 상태 메시지 처리
- `BirthInfoScreen`: 성별/역법 선택 및 휠 피커 시트를 활용한 날짜·시간 입력 연동
- `ExtraQuestionScreen`: 칩(Chip) 컴포넌트를 사용한 직업 및 연애 상태 선택 구현
- `TodakunProgressBar` 및 헤더의 뒤로가기 버튼에서 불필요한 클릭 인디케이션(리플 효과) 제거
OnboardingStep, OnboardingSheet, TermsAgreementUiModel 등 온보딩 화면에서 사용하는 모델들을 model 패키지로 이동하여 패키지 구조를 정리한다.
또한 OnboardingRoute에서 사용되는 생년월일 관련 기본값 및 범위 상수들을 OnboardingRouteDefaults 객체로 캡슐화한다.
TermsAgreementUiModel 초기화 구문의 가독성을 위해 줄바꿈을 조정하고 마지막 요소에 트레일링 콤마를 추가했다.
회원가입 완료 시 기존 다이얼로그 대신 전용 완료 화면(CompleteScreen)을 노출한다.
완료 진입 시 POST_NOTIFICATIONS 권한을 요청하도록 변경하고,
테스트 코드의 Fake 객체들을 별도 파일로 분리하여 정리했다.
onCompleteConfirmed 호출 시 OnboardingStep.COMPLETE 상태 전환과 더불어
OnboardingSideEffect.PermissionRequest 사이드 이펙트가 발생하는지 확인한다.
@oungsi2000
oungsi2000 force-pushed the feat/65-onboarding-screen branch from 4e56d2a to 5ee0cbf Compare August 3, 2026 15:29
회원가입 요청 시 `isSubmitting` 상태를 추가하여 중복 요청을 방지한다.
성공 시 즉시 홈으로 이동하는 대신 `PermissionRequest` 사이드 이펙트를 먼저 발생시키며,
`Failure` 사이드 이펙트에 `Throwable`을 포함하여 실패 원인을 전달하도록 수정한다.
최종 완료 확인(`onSignUpCompleteConfirmed`) 시점에 다이얼로그를 닫고 홈 화면으로 이동한다.

# Conflicts:
#	feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt
#	feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingSideEffect.kt
#	feature/onboarding/src/test/java/com/kikidan/onboarding/OnboardingViewModelTest.kt
회원가입 성공 시 완료 다이얼로그를 띄우는 대신 `OnboardingStep.COMPLETE` 단계로 진입하도록 변경한다.
완료 단계는 진행바 비율을 갖지 않으며, 이전 단계로의 이동을 허용하지 않는다.
테스트 코드 가독성을 위해 `FakeAuthRepository`와 `FakeTokenRepository`를 별도 파일로 분리한다.
회원가입 완료 시 기존 다이얼로그 대신 전용 완료 화면(CompleteScreen)을 노출한다.
완료 진입 시 POST_NOTIFICATIONS 권한을 요청하도록 변경하고,
테스트 코드의 Fake 객체들을 별도 파일로 분리하여 정리했다.

# Conflicts:
#	feature/onboarding/src/main/java/com/kikidan/onboarding/OnboardingViewModel.kt
#	feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingSideEffect.kt
#	feature/onboarding/src/main/java/com/kikidan/onboarding/model/OnboardingStep.kt
#	feature/onboarding/src/test/java/com/kikidan/onboarding/OnboardingViewModelTest.kt
#	feature/onboarding/src/test/java/com/kikidan/onboarding/fake/FakeAuthRepository.kt
마지막 스텝 완료 시의 동작을 '화면 전환' 대신 '완료 단계로 이동'으로 표현하여
테스트의 의도를 더욱 명확하게 반영한다.
OnboardingScaffold 컨텐츠 영역에 `verticalScroll`을 추가하여 화면 크기가 작은 기기에서도 모든 내용이 표시되도록 개선한다.
권한 처리 상태(`permissionHandled`)를 `rememberSaveable`로 변경하여 화면 회전이나 프로세스 재시작 시에도 상태를 유지한다.
뒤로가기 버튼을 `IconButton`으로 교체하여 터치 영역과 접근성을 개선하고, '재혼' 상태 관련 리소스 명칭 및 매핑을 수정한다.
IconButton 대신 Icon에 Modifier.clickable을 사용하여 뒤로가기 동작을 구현한다.
indication을 null로 설정해 클릭 시 발생하는 시각적 피드백(리플 효과)을 제거했다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature 새로운 기능 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant