Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agent/rules/compose-guidelines.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
trigger: manual
description: Jetpack Compose 개발 가이드라인과 모범 사례
globs: ["**/presentation/**/*.kt", "**/ui/**/*.kt", "**/*Composable*.kt"]
alwaysApply: false
---

# Jetpack Compose 개발 가이드라인
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ sealed class FeelinDestination(
object MyPage : FeelinDestination(route = "my_page")

object Login : FeelinDestination(route = "login")

object OnboardingTerms : FeelinDestination(route = "onboarding_terms")

object OnboardingGenderAge : FeelinDestination(route = "onboarding_gender_age")
}
40 changes: 39 additions & 1 deletion app/src/main/java/com/lyrics/feelin/navigation/FeelinNavHost.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ import com.lyrics.feelin.presentation.view.community.CommunityMainScreen
import com.lyrics.feelin.presentation.view.login.LoginScreen
import com.lyrics.feelin.presentation.view.mypage.MyPageScreen
import com.lyrics.feelin.presentation.view.note.NoteSearchScreen
import com.lyrics.feelin.presentation.view.onboarding.genderage.OnboardingGenderAgeScreen
import com.lyrics.feelin.presentation.view.onboarding.terms.OnboardingTermsScreen

@Composable
fun FeelinNavHost(
Expand Down Expand Up @@ -130,7 +132,43 @@ fun FeelinNavHost(

composable(FeelinDestination.Login.route) {
selectedBottomBarIndex = -1
LoginScreen()
LoginScreen(
onSocialLoginClick = {
navController.navigate(FeelinDestination.OnboardingTerms.route)
},
onContinueWithoutLogin = {
navController.navigate(FeelinDestination.Home.route) {
popUpTo(FeelinDestination.Login.route) { inclusive = true }
}
}
)
}

composable(FeelinDestination.OnboardingTerms.route) {
selectedBottomBarIndex = -1
OnboardingTermsScreen(
onBackClick = { navController.popBackStack() },
onStartClick = {
navController.navigate(FeelinDestination.OnboardingGenderAge.route)
}
)
}

composable(FeelinDestination.OnboardingGenderAge.route) {
selectedBottomBarIndex = -1
OnboardingGenderAgeScreen(
onBackClick = { navController.popBackStack() },
onSkipClick = {
navController.navigate(FeelinDestination.Home.route) {
popUpTo(FeelinDestination.Login.route) { inclusive = true }
}
},
onNextClick = {
navController.navigate(FeelinDestination.Home.route) {
popUpTo(FeelinDestination.Login.route) { inclusive = true }
}
}
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,12 @@ import com.lyrics.feelin.presentation.designsystem.theme.LightGray05
// 로그인 화면은 테마 미 적용입니다. @이대근 2025.09.15.

@Composable
fun LoginScreen(modifier: Modifier = Modifier, loginViewModel: LoginViewModel = viewModel()) {
fun LoginScreen(
onSocialLoginClick: () -> Unit,
onContinueWithoutLogin: () -> Unit,
modifier: Modifier = Modifier,
loginViewModel: LoginViewModel = viewModel(),
) {
val loginErrorCode by loginViewModel.loginErrorCode.collectAsState(initial = null)
val lastOAuthProvider by loginViewModel.lastOauthProvider.collectAsState()

Expand Down Expand Up @@ -91,17 +96,17 @@ fun LoginScreen(modifier: Modifier = Modifier, loginViewModel: LoginViewModel =
SocialLoginButton(
config = SocialLoginButtonConfigs.Kakao,
isLastLogin = (lastOAuthProvider == OAuthProvider.KAKAO),
onClick = { loginViewModel.kakaoLogin() }
onClick = onSocialLoginClick
)
Spacer(modifier = Modifier.height(12.dp))
SocialLoginButton(
config = SocialLoginButtonConfigs.Google,
isLastLogin = (lastOAuthProvider == OAuthProvider.GOOGLE),
onClick = { loginViewModel.googleLogin() }
onClick = onSocialLoginClick
)
Spacer(modifier = Modifier.height(12.dp))
SignUpLaterTextButton(
onClick = { loginViewModel.continueWithoutLogin() },
onClick = onContinueWithoutLogin,
)
}
}
Expand All @@ -122,7 +127,7 @@ private fun SignUpLaterTextButton(
Text(
text = "회원가입은 나중에! 둘러볼게요",
style = FeelinTypography.active.copy(fontSize = 14.sp, color = LightGray04),
modifier = Modifier.clickable(enabled = false, onClick = onClick),
modifier = Modifier.clickable(onClick = onClick),
)
}
}
Expand All @@ -131,6 +136,9 @@ private fun SignUpLaterTextButton(
@Composable
private fun LoginScreenPreview() {
FeelinTheme {
LoginScreen()
LoginScreen(
onSocialLoginClick = {},
onContinueWithoutLogin = {}
)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.lyrics.feelin.presentation.view.onboarding.genderage

import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
Expand Down Expand Up @@ -31,7 +32,12 @@ import com.lyrics.feelin.presentation.designsystem.theme.FeelinTypography
import com.lyrics.feelin.presentation.designsystem.theme.LocalFeelinColors

@Composable
fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
fun OnboardingGenderAgeScreen(
onBackClick: () -> Unit,
onSkipClick: () -> Unit,
onNextClick: () -> Unit,
modifier: Modifier = Modifier,
) {
FeelinTheme(darkTheme = false) {
val feelinColors = LocalFeelinColors.current

Expand All @@ -48,13 +54,14 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
) {
FeelinTopAppBarWithBack(
title = "",
onBackClick = {},
onBackClick = onBackClick,
showDivider = false,
actions = {
Text(
text = "건너뛰기",
style = FeelinTypography.body1,
color = feelinColors.gray05
color = feelinColors.gray05,
modifier = Modifier.clickable { onSkipClick() }
)
}
)
Expand Down Expand Up @@ -138,7 +145,7 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
Spacer(modifier = Modifier.weight(1f))

Button(
onClick = { /* 다음 */ },
onClick = onNextClick,
enabled = isButtonEnabled,
modifier = Modifier
.fillMaxWidth()
Expand Down Expand Up @@ -173,7 +180,11 @@ fun OnboardingGenderAgeScreen(modifier: Modifier = Modifier) {
@Composable
private fun OnboardingGenderAgeScreenPreview() {
FeelinTheme {
OnboardingGenderAgeScreen()
OnboardingGenderAgeScreen(
onBackClick = {},
onSkipClick = {},
onNextClick = {}
)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,11 @@ import com.lyrics.feelin.presentation.designsystem.theme.FeelinTypography
import com.lyrics.feelin.presentation.designsystem.theme.LocalFeelinColors

@Composable
fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
fun OnboardingTermsScreen(
onBackClick: () -> Unit,
onStartClick: () -> Unit,
modifier: Modifier = Modifier,
) {
FeelinTheme(darkTheme = false) {
val feelinColors = LocalFeelinColors.current

Expand Down Expand Up @@ -61,7 +65,7 @@ fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
) {
FeelinTopAppBarWithBack(
title = "",
onBackClick = {},
onBackClick = onBackClick,
showDivider = false
)

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

Button(
onClick = { /* 시작하기 */ },
onClick = onStartClick,
enabled = isButtonEnabled,
modifier = Modifier
.fillMaxWidth()
Expand Down Expand Up @@ -163,6 +167,9 @@ fun OnboardingTermsScreen(modifier: Modifier = Modifier) {
@Composable
private fun OnboardingTermsScreenPreview() {
FeelinTheme {
OnboardingTermsScreen()
OnboardingTermsScreen(
onBackClick = {},
onStartClick = {}
)
}
}
Loading