Skip to content

Commit d0af08e

Browse files
authored
Merge pull request #26 from gdaegeun539/feature/login-signup-routing
SCRUM-256 SCRUM-257 feature: configure signup flow
2 parents 2a3bd63 + 305d482 commit d0af08e

8 files changed

Lines changed: 953 additions & 17 deletions

File tree

.agent/rules/compose-guidelines.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
2+
trigger: manual
23
description: Jetpack Compose 개발 가이드라인과 모범 사례
34
globs: ["**/presentation/**/*.kt", "**/ui/**/*.kt", "**/*Composable*.kt"]
4-
alwaysApply: false
55
---
66

77
# Jetpack Compose 개발 가이드라인

app/src/main/java/com/lyrics/feelin/navigation/FeelinDestination.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ sealed class FeelinDestination(
1010
object MyPage : FeelinDestination(route = "my_page")
1111

1212
object Login : FeelinDestination(route = "login")
13+
14+
object OnboardingTerms : FeelinDestination(route = "onboarding_terms")
15+
16+
object OnboardingGenderAge : FeelinDestination(route = "onboarding_gender_age")
1317
}

app/src/main/java/com/lyrics/feelin/navigation/FeelinNavHost.kt

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ import com.lyrics.feelin.presentation.view.community.CommunityMainScreen
3333
import com.lyrics.feelin.presentation.view.login.LoginScreen
3434
import com.lyrics.feelin.presentation.view.mypage.MyPageScreen
3535
import com.lyrics.feelin.presentation.view.note.NoteSearchScreen
36+
import com.lyrics.feelin.presentation.view.onboarding.genderage.OnboardingGenderAgeScreen
37+
import com.lyrics.feelin.presentation.view.onboarding.terms.OnboardingTermsScreen
3638

3739
@Composable
3840
fun FeelinNavHost(
@@ -130,7 +132,43 @@ fun FeelinNavHost(
130132

131133
composable(FeelinDestination.Login.route) {
132134
selectedBottomBarIndex = -1
133-
LoginScreen()
135+
LoginScreen(
136+
onSocialLoginClick = {
137+
navController.navigate(FeelinDestination.OnboardingTerms.route)
138+
},
139+
onContinueWithoutLogin = {
140+
navController.navigate(FeelinDestination.Home.route) {
141+
popUpTo(FeelinDestination.Login.route) { inclusive = true }
142+
}
143+
}
144+
)
145+
}
146+
147+
composable(FeelinDestination.OnboardingTerms.route) {
148+
selectedBottomBarIndex = -1
149+
OnboardingTermsScreen(
150+
onBackClick = { navController.popBackStack() },
151+
onStartClick = {
152+
navController.navigate(FeelinDestination.OnboardingGenderAge.route)
153+
}
154+
)
155+
}
156+
157+
composable(FeelinDestination.OnboardingGenderAge.route) {
158+
selectedBottomBarIndex = -1
159+
OnboardingGenderAgeScreen(
160+
onBackClick = { navController.popBackStack() },
161+
onSkipClick = {
162+
navController.navigate(FeelinDestination.Home.route) {
163+
popUpTo(FeelinDestination.Login.route) { inclusive = true }
164+
}
165+
},
166+
onNextClick = {
167+
navController.navigate(FeelinDestination.Home.route) {
168+
popUpTo(FeelinDestination.Login.route) { inclusive = true }
169+
}
170+
}
171+
)
134172
}
135173
}
136174
}

app/src/main/java/com/lyrics/feelin/presentation/view/login/LoginScreen.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ import com.lyrics.feelin.presentation.designsystem.theme.LightGray05
3737
// 로그인 화면은 테마 미 적용입니다. @이대근 2025.09.15.
3838

3939
@Composable
40-
fun LoginScreen(modifier: Modifier = Modifier, loginViewModel: LoginViewModel = viewModel()) {
40+
fun LoginScreen(
41+
onSocialLoginClick: () -> Unit,
42+
onContinueWithoutLogin: () -> Unit,
43+
modifier: Modifier = Modifier,
44+
loginViewModel: LoginViewModel = viewModel(),
45+
) {
4146
val loginErrorCode by loginViewModel.loginErrorCode.collectAsState(initial = null)
4247
val lastOAuthProvider by loginViewModel.lastOauthProvider.collectAsState()
4348

@@ -91,17 +96,17 @@ fun LoginScreen(modifier: Modifier = Modifier, loginViewModel: LoginViewModel =
9196
SocialLoginButton(
9297
config = SocialLoginButtonConfigs.Kakao,
9398
isLastLogin = (lastOAuthProvider == OAuthProvider.KAKAO),
94-
onClick = { loginViewModel.kakaoLogin() }
99+
onClick = onSocialLoginClick
95100
)
96101
Spacer(modifier = Modifier.height(12.dp))
97102
SocialLoginButton(
98103
config = SocialLoginButtonConfigs.Google,
99104
isLastLogin = (lastOAuthProvider == OAuthProvider.GOOGLE),
100-
onClick = { loginViewModel.googleLogin() }
105+
onClick = onSocialLoginClick
101106
)
102107
Spacer(modifier = Modifier.height(12.dp))
103108
SignUpLaterTextButton(
104-
onClick = { loginViewModel.continueWithoutLogin() },
109+
onClick = onContinueWithoutLogin,
105110
)
106111
}
107112
}
@@ -122,7 +127,7 @@ private fun SignUpLaterTextButton(
122127
Text(
123128
text = "회원가입은 나중에! 둘러볼게요",
124129
style = FeelinTypography.active.copy(fontSize = 14.sp, color = LightGray04),
125-
modifier = Modifier.clickable(enabled = false, onClick = onClick),
130+
modifier = Modifier.clickable(onClick = onClick),
126131
)
127132
}
128133
}
@@ -131,6 +136,9 @@ private fun SignUpLaterTextButton(
131136
@Composable
132137
private fun LoginScreenPreview() {
133138
FeelinTheme {
134-
LoginScreen()
139+
LoginScreen(
140+
onSocialLoginClick = {},
141+
onContinueWithoutLogin = {}
142+
)
135143
}
136144
}

app/src/main/java/com/lyrics/feelin/presentation/view/onboarding/genderage/OnboardingGenderAgeScreen.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.lyrics.feelin.presentation.view.onboarding.genderage
22

33
import android.content.res.Configuration.UI_MODE_NIGHT_YES
44
import androidx.compose.foundation.background
5+
import androidx.compose.foundation.clickable
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.Row
78
import androidx.compose.foundation.layout.Spacer
@@ -31,7 +32,12 @@ import com.lyrics.feelin.presentation.designsystem.theme.FeelinTypography
3132
import com.lyrics.feelin.presentation.designsystem.theme.LocalFeelinColors
3233

3334
@Composable
34-
fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
35+
fun OnboardingGenderAgeScreen(
36+
onBackClick: () -> Unit,
37+
onSkipClick: () -> Unit,
38+
onNextClick: () -> Unit,
39+
modifier: Modifier = Modifier,
40+
) {
3541
FeelinTheme(darkTheme = false) {
3642
val feelinColors = LocalFeelinColors.current
3743

@@ -48,13 +54,14 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
4854
) {
4955
FeelinTopAppBarWithBack(
5056
title = "",
51-
onBackClick = {},
57+
onBackClick = onBackClick,
5258
showDivider = false,
5359
actions = {
5460
Text(
5561
text = "건너뛰기",
5662
style = FeelinTypography.body1,
57-
color = feelinColors.gray05
63+
color = feelinColors.gray05,
64+
modifier = Modifier.clickable { onSkipClick() }
5865
)
5966
}
6067
)
@@ -138,7 +145,7 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
138145
Spacer(modifier = Modifier.weight(1f))
139146

140147
Button(
141-
onClick = { /* 다음 */ },
148+
onClick = onNextClick,
142149
enabled = isButtonEnabled,
143150
modifier = Modifier
144151
.fillMaxWidth()
@@ -173,7 +180,11 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
173180
@Composable
174181
private fun OnboardingGenderAgeScreenPreview() {
175182
FeelinTheme {
176-
OnboardingGenderAgeScreen()
183+
OnboardingGenderAgeScreen(
184+
onBackClick = {},
185+
onSkipClick = {},
186+
onNextClick = {}
187+
)
177188
}
178189
}
179190

app/src/main/java/com/lyrics/feelin/presentation/view/onboarding/terms/OnboardingTermsScreen.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,11 @@ import com.lyrics.feelin.presentation.designsystem.theme.FeelinTypography
2828
import com.lyrics.feelin.presentation.designsystem.theme.LocalFeelinColors
2929

3030
@Composable
31-
fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
31+
fun OnboardingTermsScreen(
32+
onBackClick: () -> Unit,
33+
onStartClick: () -> Unit,
34+
modifier: Modifier = Modifier,
35+
) {
3236
FeelinTheme(darkTheme = false) {
3337
val feelinColors = LocalFeelinColors.current
3438

@@ -61,7 +65,7 @@ fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
6165
) {
6266
FeelinTopAppBarWithBack(
6367
title = "",
64-
onBackClick = {},
68+
onBackClick = onBackClick,
6569
showDivider = false
6670
)
6771

@@ -128,7 +132,7 @@ fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
128132
Spacer(modifier = Modifier.weight(1f))
129133

130134
Button(
131-
onClick = { /* 시작하기 */ },
135+
onClick = onStartClick,
132136
enabled = isButtonEnabled,
133137
modifier = Modifier
134138
.fillMaxWidth()
@@ -163,6 +167,9 @@ fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
163167
@Composable
164168
private fun OnboardingTermsScreenPreview() {
165169
FeelinTheme {
166-
OnboardingTermsScreen()
170+
OnboardingTermsScreen(
171+
onBackClick = {},
172+
onStartClick = {}
173+
)
167174
}
168175
}

0 commit comments

Comments
 (0)