diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dad2865..2f44b71 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,9 +18,9 @@ android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" - android:icon="@mipmap/ic_launcher" + android:icon="@mipmap/ic_alddeul_logo_foreground" android:label="@string/app_name" - android:roundIcon="@mipmap/ic_launcher_round" + android:roundIcon="@mipmap/ic_alddeul_logo_round" android:supportsRtl="true" android:theme="@style/Theme.AlddeulBabsang" android:usesCleartextTraffic="true" diff --git a/app/src/main/ic_alddeul_logo-playstore.png b/app/src/main/ic_alddeul_logo-playstore.png new file mode 100644 index 0000000..4f571a0 Binary files /dev/null and b/app/src/main/ic_alddeul_logo-playstore.png differ diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AlddeulButton.kt b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AlddeulButton.kt index c0ee9e0..f221dfa 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AlddeulButton.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AlddeulButton.kt @@ -1,31 +1,49 @@ package com.hackathon.alddeul_babsang.core_ui.component +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.background import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.hackathon.alddeul_babsang.core_ui.theme.Orange900 import com.hackathon.alddeul_babsang.core_ui.theme.White import com.hackathon.alddeul_babsang.core_ui.theme.title4Bold @Composable fun AlddeulButton( text: Int, + textColor: Color = White, + color: Color = Orange900, + stroke: Color = Orange900, onClick: () -> Unit ) { Button( modifier = Modifier - .fillMaxWidth(), + .fillMaxWidth() + .clip(RoundedCornerShape(40.dp)), + border = BorderStroke( + width = 1.dp, + color = stroke + ), + colors = ButtonDefaults.buttonColors( + containerColor = color + ), contentPadding = PaddingValues(vertical = 19.dp), onClick = { onClick() } ) { Text( text = stringResource(id = text), style = title4Bold, - color = White + color = textColor ) } } \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AuthTextField.kt b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AuthTextField.kt index 8141d65..cbf98b7 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AuthTextField.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/component/AuthTextField.kt @@ -1,36 +1,60 @@ package com.hackathon.alddeul_babsang.core_ui.component +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.material3.TextFieldDefaults import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.hackathon.alddeul_babsang.core_ui.theme.Gray300 +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.hackathon.alddeul_babsang.core_ui.theme.Gray200 import com.hackathon.alddeul_babsang.core_ui.theme.Orange900 -import com.hackathon.alddeul_babsang.core_ui.theme.head4Bold +import com.hackathon.alddeul_babsang.core_ui.theme.Regular +import com.hackathon.alddeul_babsang.core_ui.theme.body1Regular @Composable fun AuthTextField( + modifier: Modifier = Modifier, value: String, onValueChange: (String) -> Unit, - placeholderText: String + placeholderText: String, + textAlign: TextAlign = TextAlign.Start ) { TextField( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = 18.dp), value = value, onValueChange = onValueChange, placeholder = { Text( + modifier = Modifier.fillMaxWidth(), text = placeholderText, - style = head4Bold, - color = Gray300, + style = body1Regular, + color = Gray200, + textAlign = textAlign ) }, + textStyle = body1Regular.copy(textAlign = textAlign), colors = TextFieldDefaults.colors( - focusedContainerColor = Color.White, // 포커스된 상태에서 배경색을 흰색으로 설정 - unfocusedContainerColor = Color.White, // 비포커스 상태에서 배경색을 흰색으로 설정 - cursorColor = Color.Black, + focusedContainerColor = Color.Transparent, + unfocusedContainerColor = Color.Transparent, focusedIndicatorColor = Orange900, - unfocusedIndicatorColor = Gray300 + unfocusedIndicatorColor = Regular ) ) } + +@Preview(showBackground = true) +@Composable +fun AuthTextFieldPreview() { + AuthTextField( + value = "", + onValueChange = {}, + placeholderText = "아이디", + ) +} diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Color.kt b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Color.kt index c785a0d..e51008f 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Color.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Color.kt @@ -39,6 +39,9 @@ val Blue = Color(0xFFFF5A82EA) val Yellow = Color(0xFFFAB935) val Red = Color(0xFFFF0400) val Pink = Color(0xFFFF8886) +val Peach200 = Color(0xFFFECC90) +val Peach100 = Color(0xFFFFEFD3) +val Peach50 = Color(0xFFFFFBF6) val White = Color(0xFFFFFFFF) // Font diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Type.kt b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Type.kt index 05cd67b..e5a2dfe 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Type.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/core_ui/theme/Type.kt @@ -23,6 +23,7 @@ val Typography = Typography( val pretendardBold = FontFamily(Font(R.font.pretendard_bold, FontWeight.Bold)) val pretendardSemiBold = FontFamily(Font(R.font.pretendard_semibold, FontWeight.SemiBold)) val pretendardRegular = FontFamily(Font(R.font.pretendard_regular, FontWeight.Normal)) +val bmDohyeon = FontFamily(Font(R.font.bm_dohyeon, FontWeight.Normal)) // Head1 val head1Bold = @@ -345,3 +346,9 @@ val body7Regular = fontSize = 9.sp, lineHeight = 16.sp, ) + +// BmDohyeon +val bmDohyeonRegular = TextStyle( + fontFamily = bmDohyeon, + fontSize = 36.sp, +) \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/gitkeep b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavGraph.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavGraph.kt new file mode 100644 index 0000000..c25751a --- /dev/null +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavGraph.kt @@ -0,0 +1,31 @@ +package com.hackathon.alddeul_babsang.presentation.auth.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.composable +import com.hackathon.alddeul_babsang.presentation.auth.screen.LoginRoute +import com.hackathon.alddeul_babsang.presentation.auth.screen.SignUp1Route +import com.hackathon.alddeul_babsang.presentation.auth.screen.SignUp2Route + +fun NavGraphBuilder.loginNavGraph( + navigator: AuthNavigator +) { + composable(route = "login") { + LoginRoute(navigator) + } +} + +fun NavGraphBuilder.signUp1NavGraph( + navigator: AuthNavigator +) { + composable(route = "signUp1") { + SignUp1Route(navigator) + } +} + +fun NavGraphBuilder.signUp2NavGraph( + navigator: AuthNavigator +) { + composable(route = "signUp2") { + SignUp2Route(navigator) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavigator.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavigator.kt new file mode 100644 index 0000000..28209b6 --- /dev/null +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/navigation/AuthNavigator.kt @@ -0,0 +1,31 @@ +package com.hackathon.alddeul_babsang.presentation.auth.navigation + +import androidx.navigation.NavHostController + +class AuthNavigator( + val navController: NavHostController +) { + fun navigateLogin() { + navController.navigate(route = "login") + } + + fun navigateBack() { + navController.popBackStack() + } + + fun navigateMain() { + navController.navigate(route = "main") { + popUpTo(0) { + inclusive = true + } + } + } + + fun navigateSignUp1() { + navController.navigate(route = "signup1") + } + + fun navigateSignUp2() { + navController.navigate(route = "signup2") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/LoginScreen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/LoginScreen.kt new file mode 100644 index 0000000..1bded55 --- /dev/null +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/LoginScreen.kt @@ -0,0 +1,141 @@ +package com.hackathon.alddeul_babsang.presentation.auth.screen + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.google.accompanist.systemuicontroller.rememberSystemUiController +import com.hackathon.alddeul_babsang.R +import com.hackathon.alddeul_babsang.core_ui.component.AlddeulButton +import com.hackathon.alddeul_babsang.core_ui.component.AuthTextField +import com.hackathon.alddeul_babsang.core_ui.theme.AlddeulBabsangTheme +import com.hackathon.alddeul_babsang.core_ui.theme.Gray100 +import com.hackathon.alddeul_babsang.core_ui.theme.Gray200 +import com.hackathon.alddeul_babsang.core_ui.theme.Orange900 +import com.hackathon.alddeul_babsang.core_ui.theme.Peach100 +import com.hackathon.alddeul_babsang.core_ui.theme.Peach50 +import com.hackathon.alddeul_babsang.core_ui.theme.White +import com.hackathon.alddeul_babsang.core_ui.theme.bmDohyeonRegular +import com.hackathon.alddeul_babsang.presentation.auth.navigation.AuthNavigator +import com.hackathon.alddeul_babsang.util.toast +import kotlin.contracts.contract + +@Composable +fun LoginRoute( + navigator: AuthNavigator +) { + val systemUiController = rememberSystemUiController() + val keyboardController = LocalSoftwareKeyboardController.current + + SideEffect { + systemUiController.setStatusBarColor( + color = Peach100 + ) + } + + LoginScreen( + onLoginClick = { + keyboardController?.hide() + navigator.navigateMain() + }, + onSignUpClick = { navigator.navigateSignUp1() } + ) +} + +@Composable +fun LoginScreen( + onLoginClick: () -> Unit = {}, + onSignUpClick: () -> Unit = {} +) { + val verticalGradient = Brush.verticalGradient( + colors = listOf(Peach50, White), + startY = 0.0f, + endY = 9000f, + ) + var id by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + val context = LocalContext.current + + Column( + modifier = Modifier + .fillMaxSize() + .background(verticalGradient) + ) { + Image( + modifier = Modifier.fillMaxWidth(), + painter = painterResource(id = R.drawable.ic_login_logo), + contentDescription = null + ) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(top = 10.dp), + text = stringResource(R.string.tv_login_title), + style = bmDohyeonRegular, + color = Orange900, + textAlign = TextAlign.Center + ) + Column( + modifier = Modifier + .fillMaxSize() + .padding(16.dp) + ) { + AuthTextField( + value = id, + onValueChange = { id = it }, + placeholderText = stringResource(R.string.tv_login_id_placeholder) + ) + Spacer(modifier = Modifier.height(16.dp)) + AuthTextField( + value = password, + onValueChange = { password = it }, + placeholderText = stringResource(R.string.tv_login_password_placeholder) + ) + Spacer(modifier = Modifier.weight(1f)) + AlddeulButton(text = R.string.btn_login) { + if (id.isNotBlank() && password.isNotBlank()) { + onLoginClick() + } else { + context.toast(context.getString(R.string.toast_login_failure)) + } + } + Spacer(modifier = Modifier.height(10.dp)) + AlddeulButton( + text = R.string.btn_login_signup, + textColor = Gray200, + color = White, + stroke = Gray100 + ) { + onSignUpClick() + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun LoginScreenPreview() { + AlddeulBabsangTheme { + LoginScreen() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/SignUpScreen1.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp1Screen.kt similarity index 53% rename from app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/SignUpScreen1.kt rename to app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp1Screen.kt index dfe0438..4c5908c 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/SignUpScreen1.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp1Screen.kt @@ -1,54 +1,78 @@ -package com.hackathon.alddeul_babsang.presentation.auth +package com.hackathon.alddeul_babsang.presentation.auth.screen -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController +import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.hackathon.alddeul_babsang.R import com.hackathon.alddeul_babsang.core_ui.component.AlddeulButton import com.hackathon.alddeul_babsang.core_ui.component.AuthTextField import com.hackathon.alddeul_babsang.core_ui.theme.AlddeulBabsangTheme +import com.hackathon.alddeul_babsang.core_ui.theme.Gray900 +import com.hackathon.alddeul_babsang.core_ui.theme.White import com.hackathon.alddeul_babsang.core_ui.theme.head4Bold +import com.hackathon.alddeul_babsang.presentation.auth.navigation.AuthNavigator +import com.hackathon.alddeul_babsang.util.toast @Composable -fun SignUpScreen1(navController: NavController) { - var id by remember { mutableStateOf("") } - var password by remember { mutableStateOf("") } +fun SignUp1Route( + navigator: AuthNavigator +) { + val keyboardController = LocalSoftwareKeyboardController.current + val systemUiController = rememberSystemUiController() + + SideEffect { + systemUiController.setStatusBarColor( + color = White + ) + } + + SignUp1Screen( + onNextClick = { + keyboardController?.hide() + navigator.navigateSignUp2() + } + ) +} + +@Composable +fun SignUp1Screen( + onNextClick: () -> Unit = {} +) { + val context = LocalContext.current + var id by rememberSaveable { mutableStateOf("") } + var password by rememberSaveable { mutableStateOf("") } Column( modifier = Modifier .fillMaxSize() - .background(Color.White) - .padding(top = 145.dp) - .imePadding(), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Top + .padding(16.dp), ) { + Spacer(modifier = Modifier.height(110.dp)) Text( - stringResource(R.string.tv_signup_setIdPassword), + modifier = Modifier.fillMaxWidth(), + text = stringResource(R.string.tv_signup_setIdPassword), textAlign = TextAlign.Center, style = head4Bold, - lineHeight = 25.sp + color = Gray900 ) Spacer(modifier = Modifier.height(50.dp)) AuthTextField( @@ -67,7 +91,9 @@ fun SignUpScreen1(navController: NavController) { text = R.string.btn_signup_next, onClick = { if (id.isNotEmpty() && password.isNotEmpty()) { - //navController.navigate("signUp2") + onNextClick() + } else { + context.toast(context.getString(R.string.toast_signup1_failure)) } } ) @@ -75,12 +101,10 @@ fun SignUpScreen1(navController: NavController) { } -@Preview +@Preview(showBackground = true) @Composable fun SignUpScreen1Preview() { AlddeulBabsangTheme { - SignUpScreen1( - navController = rememberNavController() - ) + SignUp1Screen() } } diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp2Screen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp2Screen.kt new file mode 100644 index 0000000..18640ed --- /dev/null +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SignUp2Screen.kt @@ -0,0 +1,202 @@ +package com.hackathon.alddeul_babsang.presentation.auth.screen + +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.res.vectorResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex +import coil.compose.rememberAsyncImagePainter +import com.hackathon.alddeul_babsang.R +import com.hackathon.alddeul_babsang.core_ui.component.AlddeulButton +import com.hackathon.alddeul_babsang.core_ui.component.AuthTextField +import com.hackathon.alddeul_babsang.core_ui.theme.AlddeulBabsangTheme +import com.hackathon.alddeul_babsang.core_ui.theme.Gray200 +import com.hackathon.alddeul_babsang.core_ui.theme.Gray50 +import com.hackathon.alddeul_babsang.core_ui.theme.Gray900 +import com.hackathon.alddeul_babsang.core_ui.theme.Red +import com.hackathon.alddeul_babsang.core_ui.theme.White +import com.hackathon.alddeul_babsang.core_ui.theme.Yellow +import com.hackathon.alddeul_babsang.core_ui.theme.body4Regular +import com.hackathon.alddeul_babsang.core_ui.theme.head4Bold +import com.hackathon.alddeul_babsang.presentation.auth.navigation.AuthNavigator +import com.hackathon.alddeul_babsang.util.toast + +@Composable +fun SignUp2Route( + navigator: AuthNavigator +) { + val keyboardController = LocalSoftwareKeyboardController.current + + SignUp2Screen( + onBackClick = { navigator.navigateBack() }, + onNextClick = { + keyboardController?.hide() + navigator.navigateMain() + } + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SignUp2Screen( + onBackClick: () -> Unit = {}, + onNextClick: () -> Unit = {} +) { + var nickname by remember { mutableStateOf("") } + var imageUri by remember { mutableStateOf(null) } + val galleryLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.GetContent(), + onResult = { + it?.let { imageUri = it } + } + ) + val context = LocalContext.current + + Scaffold( + topBar = { + TopAppBar( + modifier = Modifier.background(White), + title = {}, + navigationIcon = { + IconButton(onClick = { onBackClick() }) { + Icon( + imageVector = ImageVector.vectorResource(id = R.drawable.ic_back), + contentDescription = null + ) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = White + ) + ) + } + ) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .fillMaxSize() + .padding(16.dp) + ) { + Spacer(modifier = Modifier.height(70.dp)) + Text( + modifier = Modifier.fillMaxWidth(), + text = stringResource(R.string.tv_signup_title), + style = head4Bold, + color = Gray900, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(42.dp)) + Box( + modifier = Modifier + .align(Alignment.CenterHorizontally) + .clickable { galleryLauncher.launch("image/*") } + ) { + Box( + modifier = Modifier + .size(110.dp) + .background(color = Gray50, shape = CircleShape) + .border(3.dp, Yellow, CircleShape) + ) { + if (imageUri != null) { + Image( + modifier = Modifier + .size(110.dp) + .clip(CircleShape) + .zIndex(0f), + painter = rememberAsyncImagePainter(model = imageUri), + contentDescription = null, + contentScale = ContentScale.FillBounds + ) + } else { + Image( + modifier = Modifier.align(Alignment.Center), + painter = painterResource(id = R.drawable.ic_signup_profile), + contentDescription = null + ) + } + } + Image( + modifier = Modifier + .align(Alignment.BottomEnd) + .offset(x = 8.dp, y = 8.dp) + .zIndex(1f) + .shadow(10.dp, CircleShape, ambientColor = Gray50), + imageVector = ImageVector.vectorResource(id = R.drawable.ic_signup_camera), + contentDescription = null + ) + } + Spacer(modifier = Modifier.height(28.dp)) + AuthTextField( + value = nickname, + onValueChange = { nickname = it }, + placeholderText = stringResource(R.string.tv_signup_nickname_placeholder), + textAlign = TextAlign.Center + ) + Text( + modifier = Modifier + .padding(top = 5.dp, end = 18.dp) + .align(Alignment.End), + text = stringResource(R.string.tv_signup_nickname_length, nickname.length), + style = body4Regular, + color = if (nickname.length <= 10) Gray200 else Red + ) + Spacer(modifier = Modifier.weight(1f)) + AlddeulButton(text = R.string.btn_signup_complete) { + if (nickname.length > 10) { + context.toast(context.getString(R.string.toast_signup_nickname_failure)) + } else if (nickname.isNotBlank() && imageUri != null) { + onNextClick() + } else { + context.toast(context.getString(R.string.toast_signup_failure)) + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewSignUp2Screen() { + AlddeulBabsangTheme { + SignUp2Screen() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SplashScreen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SplashScreen.kt new file mode 100644 index 0000000..9dba23c --- /dev/null +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/auth/screen/SplashScreen.kt @@ -0,0 +1,95 @@ +package com.hackathon.alddeul_babsang.presentation.auth.screen + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.zIndex +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.google.accompanist.systemuicontroller.rememberSystemUiController +import com.hackathon.alddeul_babsang.R +import com.hackathon.alddeul_babsang.core_ui.theme.AlddeulBabsangTheme +import com.hackathon.alddeul_babsang.core_ui.theme.Orange900 +import com.hackathon.alddeul_babsang.core_ui.theme.Peach200 +import com.hackathon.alddeul_babsang.core_ui.theme.White +import com.hackathon.alddeul_babsang.core_ui.theme.bmDohyeonRegular +import kotlinx.coroutines.delay + +@Composable +fun SplashScreen(navController: NavController, modifier: Modifier = Modifier) { + val systemUiController = rememberSystemUiController() + val verticalGradient = Brush.verticalGradient( + colors = listOf(Orange900, Orange900, Peach200), + startY = 0.0f, + endY = 1500f, + ) + + SideEffect { + systemUiController.setStatusBarColor( + color = Orange900, + ) + } + + LaunchedEffect(Unit) { + delay(2500) + navController.navigate("login") { + popUpTo(navController.graph.startDestinationId) { + inclusive = true + } + } + } + + Box( + modifier = modifier + .fillMaxSize(), + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .fillMaxHeight(0.7f) + .background(verticalGradient) + .zIndex(1f) + ) + Text( + modifier = Modifier + .align(Alignment.Center) + .zIndex(2f), + text = stringResource(R.string.tv_splash_title), + color = White, + style = bmDohyeonRegular, + textAlign = TextAlign.Center + ) + Image( + modifier = Modifier + .fillMaxWidth() + .align(Alignment.BottomCenter) + .zIndex(0f), + painter = painterResource(id = R.drawable.ic_splash_logo), + contentDescription = null, + contentScale = ContentScale.Crop + ) + } +} + +@Preview +@Composable +fun SplashScreenPreview() { + AlddeulBabsangTheme { + SplashScreen(navController = rememberNavController()) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/DetailScreen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/DetailScreen.kt index be9b0c5..2300c93 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/DetailScreen.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/DetailScreen.kt @@ -25,7 +25,6 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -42,7 +41,6 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.LocalLifecycleOwner import coil.compose.AsyncImage import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.hackathon.alddeul_babsang.R @@ -70,7 +68,6 @@ fun DetailRoute( id: Long ) { val systemUiController = rememberSystemUiController() - val lifecycleOwner = LocalLifecycleOwner.current val detailViewModel: DetailViewModel = hiltViewModel() SideEffect { @@ -79,14 +76,6 @@ fun DetailRoute( ) } - DisposableEffect(key1 = lifecycleOwner) { - onDispose { - systemUiController.setStatusBarColor( - color = White - ) - } - } - DetailScreen( data = BabsangDetailEntity( id = 1, diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/ReviewScreen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/ReviewScreen.kt index 8127f2e..fb8b0bb 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/ReviewScreen.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/detail/screen/ReviewScreen.kt @@ -23,6 +23,7 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -39,6 +40,7 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import coil.compose.rememberAsyncImagePainter +import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.hackathon.alddeul_babsang.R import com.hackathon.alddeul_babsang.core_ui.component.AlddeulButton import com.hackathon.alddeul_babsang.core_ui.component.AlddeulHeader @@ -61,6 +63,13 @@ fun ReviewRoute( id: Long, ) { val keyboardController = LocalSoftwareKeyboardController.current + val systemUiController = rememberSystemUiController() + + SideEffect { + systemUiController.setStatusBarColor( + color = White + ) + } ReviewScreen( onBackClick = { navigator.navigateBack() }, diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/main/screen/MainActivity.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/main/screen/MainActivity.kt index ffcf54a..b5b8712 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/main/screen/MainActivity.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/main/screen/MainActivity.kt @@ -5,9 +5,7 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.runtime.DisposableEffect @@ -20,14 +18,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color.Companion.Transparent import androidx.compose.ui.graphics.Color.Companion.White import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen -import androidx.core.view.WindowCompat import androidx.lifecycle.compose.LocalLifecycleOwner import androidx.navigation.compose.rememberNavController import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.hackathon.alddeul_babsang.R import com.hackathon.alddeul_babsang.core_ui.theme.AlddeulBabsangTheme +import com.hackathon.alddeul_babsang.presentation.auth.navigation.AuthNavigator import com.hackathon.alddeul_babsang.presentation.babsang.navigation.BabsangNavigator import com.hackathon.alddeul_babsang.presentation.detail.navigation.DetailNavigator import com.hackathon.alddeul_babsang.presentation.example.navigation.ExampleNavigator @@ -84,6 +81,7 @@ class MainActivity : ComponentActivity() { val reportNavigator = remember(navController) { ReportNavigator(navController) } val profileNavigator = remember(navController) { ProfileNavigator(navController) } val detailNavigator = remember(navController) { DetailNavigator(navController) } + val authNavigator = remember(navController) { AuthNavigator(navController) } Scaffold( containerColor = MaterialTheme.colorScheme.background, @@ -98,7 +96,8 @@ class MainActivity : ComponentActivity() { babsangNavigator = babsangNavigator, reportNavigator = reportNavigator, profileNavigator = profileNavigator, - detailNavigator = detailNavigator + detailNavigator = detailNavigator, + authNavigator = authNavigator ) } ) diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/map/screen/MapScreen.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/map/screen/MapScreen.kt index 5c4a994..7f059c9 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/map/screen/MapScreen.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/map/screen/MapScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -34,6 +35,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel +import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.hackathon.alddeul_babsang.R import com.hackathon.alddeul_babsang.core_ui.theme.Blue import com.hackathon.alddeul_babsang.core_ui.theme.Gray300 @@ -74,6 +76,14 @@ fun MapRoute( navigator: MapNavigator ) { val mapViewModel: MapViewModel = hiltViewModel() + val systemUiController = rememberSystemUiController() + + SideEffect { + systemUiController.setStatusBarColor( + color = White, + ) + } + MapScreen( mapViewModel = mapViewModel, onDetailClick = { id -> navigator.navigateDetail(id) } diff --git a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/navigator/AlddeulNavHost.kt b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/navigator/AlddeulNavHost.kt index 546cf0b..7b7bd24 100644 --- a/app/src/main/java/com/hackathon/alddeul_babsang/presentation/navigator/AlddeulNavHost.kt +++ b/app/src/main/java/com/hackathon/alddeul_babsang/presentation/navigator/AlddeulNavHost.kt @@ -8,6 +8,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import com.hackathon.alddeul_babsang.presentation.auth.screen.SplashScreen +import com.hackathon.alddeul_babsang.presentation.auth.navigation.AuthNavigator +import com.hackathon.alddeul_babsang.presentation.auth.navigation.loginNavGraph +import com.hackathon.alddeul_babsang.presentation.auth.navigation.signUp1NavGraph +import com.hackathon.alddeul_babsang.presentation.auth.navigation.signUp2NavGraph import com.hackathon.alddeul_babsang.presentation.babsang.navigation.BabsangNavigator import com.hackathon.alddeul_babsang.presentation.babsang.navigation.babsangNavGraph import com.hackathon.alddeul_babsang.presentation.detail.navigation.DetailNavigator @@ -35,7 +41,8 @@ fun AlddeulNavHost( mapNavigator: MapNavigator, profileNavigator: ProfileNavigator, reportNavigator: ReportNavigator, - detailNavigator: DetailNavigator + detailNavigator: DetailNavigator, + authNavigator: AuthNavigator ) { Box( modifier = modifier @@ -44,8 +51,9 @@ fun AlddeulNavHost( ) { NavHost( navController = navController, - startDestination = "main", + startDestination = "splash", ) { + composable("splash") { SplashScreen(navController = authNavigator.navController) } exampleNavGraph(exampleNavigator) mainNavGraph( mainNavigator, @@ -61,6 +69,9 @@ fun AlddeulNavHost( detailNavGraph(detailNavigator) reviewNavGraph(detailNavigator) reportWriteNavGraph(reportNavigator) + loginNavGraph(authNavigator) + signUp1NavGraph(authNavigator) + signUp2NavGraph(authNavigator) } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_alddeul_logo_background.xml b/app/src/main/res/drawable/ic_alddeul_logo_background.xml new file mode 100644 index 0000000..ca3826a --- /dev/null +++ b/app/src/main/res/drawable/ic_alddeul_logo_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_login_logo.png b/app/src/main/res/drawable/ic_login_logo.png new file mode 100644 index 0000000..06fb4a0 Binary files /dev/null and b/app/src/main/res/drawable/ic_login_logo.png differ diff --git a/app/src/main/res/drawable/ic_signup_camera.xml b/app/src/main/res/drawable/ic_signup_camera.xml new file mode 100644 index 0000000..c71edb5 --- /dev/null +++ b/app/src/main/res/drawable/ic_signup_camera.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_signup_profile.png b/app/src/main/res/drawable/ic_signup_profile.png new file mode 100644 index 0000000..9918b3f Binary files /dev/null and b/app/src/main/res/drawable/ic_signup_profile.png differ diff --git a/app/src/main/res/drawable/ic_splash_logo.png b/app/src/main/res/drawable/ic_splash_logo.png new file mode 100644 index 0000000..e9f66df Binary files /dev/null and b/app/src/main/res/drawable/ic_splash_logo.png differ diff --git a/app/src/main/res/font/bm_dohyeon.otf b/app/src/main/res/font/bm_dohyeon.otf new file mode 100644 index 0000000..7ef3721 Binary files /dev/null and b/app/src/main/res/font/bm_dohyeon.otf differ diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo.xml b/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo.xml new file mode 100644 index 0000000..849d830 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo_round.xml new file mode 100644 index 0000000..849d830 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_alddeul_logo_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_alddeul_logo.webp b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo.webp new file mode 100644 index 0000000..46e571a Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_foreground.webp new file mode 100644 index 0000000..9226264 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_round.webp b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_round.webp new file mode 100644 index 0000000..18c488f Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_alddeul_logo_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_alddeul_logo.webp b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo.webp new file mode 100644 index 0000000..25eae2a Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_foreground.webp new file mode 100644 index 0000000..cac9062 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_round.webp b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_round.webp new file mode 100644 index 0000000..d800980 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_alddeul_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo.webp b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo.webp new file mode 100644 index 0000000..36d8190 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_foreground.webp new file mode 100644 index 0000000..d2b057c Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_round.webp b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_round.webp new file mode 100644 index 0000000..9689411 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_alddeul_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo.webp b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo.webp new file mode 100644 index 0000000..5676940 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_foreground.webp new file mode 100644 index 0000000..106ed32 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_round.webp new file mode 100644 index 0000000..83882d9 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_alddeul_logo_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo.webp b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo.webp new file mode 100644 index 0000000..a204b97 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_foreground.webp new file mode 100644 index 0000000..33750f8 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_round.webp new file mode 100644 index 0000000..61ba2e5 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_alddeul_logo_round.webp differ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ca32eab..4d18f31 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Alddeul-Babsang + 알뜰 밥상 in 서울 한번 더 누르면 종료돼요 @@ -24,11 +24,12 @@ %1$s/100자 리뷰는 100자 이내로 작성해주세요. - + 다음 아이디와 비밀번호를\n설정해주세요 아이디 입력 비밀번호 입력 + 아이디와 비밀번호를 입력해주세요. 착한 밥상 제보하기 @@ -49,4 +50,23 @@ 완료 모든 항목을 입력해주세요. + + 알뜰 밥상\n in 서울 + + + 로그인 + 알뜰 밥상\n in 서울 + 회원가입 + 아이디 + 비밀번호 + 아이디와 비밀번호를 입력해주세요. + + + 완료 + 사용할 이름과\n프로필을 설정해주세요 + 닉네임을 입력해주세요 + 닉네임과 프로필 사진을 입력해주세요. + %1$s/10자 + 닉네임은 10자 이하로 입력해주세요. + \ No newline at end of file