diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 84b342488..48648d951 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -69,4 +69,5 @@ dependencies { //ThirdPartyDependencies implementation(libs.compose.coil) + implementation(libs.okhttp) } \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt b/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt new file mode 100644 index 000000000..ded84d07e --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/button/FilteringButton.kt @@ -0,0 +1,82 @@ +package com.terning.core.designsystem.component.button + +import androidx.annotation.StringRes +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsPressedAsState +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ripple.LocalRippleTheme +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey400 +import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.TerningSub1 +import com.terning.core.designsystem.theme.TerningSub3 +import com.terning.core.designsystem.theme.TerningSub4 +import com.terning.core.designsystem.theme.TerningSub5 +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.core.designsystem.theme.White +import com.terning.core.util.NoRippleTheme + +@Composable +fun FilteringButton( + isSelected: Boolean, + @StringRes text: Int, + cornerRadius: Dp, + paddingVertical: Dp, + onButtonClick: () -> Unit, + modifier: Modifier = Modifier, +) { + val interactionSource = remember { MutableInteractionSource() } + val isPressed by interactionSource.collectIsPressedAsState() + val backgroundColor = when { + !isSelected && !isPressed -> White + !isSelected && isPressed -> TerningSub5 + isSelected && !isPressed -> TerningSub4 + else -> TerningSub3 + } + val textColor = when { + !isSelected -> Grey400 + else -> TerningMain + } + val borderColor = when { + !isSelected -> TerningMain + else -> TerningSub1 + } + + CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) { + Button( + contentPadding = PaddingValues(paddingVertical), + modifier = modifier.fillMaxWidth(), + interactionSource = interactionSource, + colors = ButtonDefaults.buttonColors( + containerColor = backgroundColor, + contentColor = textColor, + ), + border = BorderStroke( + width = 1.dp, + color = borderColor + ), + shape = RoundedCornerShape(cornerRadius), + onClick = { onButtonClick() } + ) { + Text( + text = stringResource(id = text), + style = TerningTheme.typography.button3_a, + textAlign = TextAlign.Center + ) + } + } +} diff --git a/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt b/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt new file mode 100644 index 000000000..3d572d9a8 --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/datepicker/DatePicker.kt @@ -0,0 +1,151 @@ +package com.terning.core.designsystem.component.datepicker + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.theme.Grey300 +import com.terning.core.designsystem.theme.Grey500 +import com.terning.core.designsystem.theme.TerningMain +import com.terning.core.designsystem.theme.TerningTheme +import okhttp3.internal.toImmutableList + +private const val START_YEAR = 2023 +private const val END_YEAR = 2025 +private const val START_MONTH = 1 +private const val END_MONTH = 12 +private val years = + (listOf("") + (START_YEAR..END_YEAR).map { it.toString() } + listOf("") + listOf("")).toImmutableList() +private val monthsNumber = + (listOf("") + (START_MONTH..END_MONTH).map { it.toString() } + listOf("") + listOf("")).toImmutableList() + +@Composable +fun DatePickerUI( + chosenYear: Int, + chosenMonth: Int, + onYearChosen: (Int) -> Unit = {}, + onMonthChosen: (Int) -> Unit = {}, +) { + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.fillMaxWidth() + ) { + DateSelectionSection( + chosenYear = chosenYear, + chosenMonth = chosenMonth, + onYearChosen = { onYearChosen(it.toInt()) }, + onMonthChosen = { onMonthChosen(it.toInt()) }, + ) + } +} + +@Composable +fun DateSelectionSection( + chosenYear: Int, + chosenMonth: Int, + onYearChosen: (String) -> Unit, + onMonthChosen: (String) -> Unit, +) { + Row( + horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth() + ) { + DateItemsPicker( + items = years.toImmutableList(), + firstIndex = (chosenYear - START_YEAR), + onItemSelected = onYearChosen, + isYear = true + ) + Spacer(modifier = Modifier.width(25.dp)) + DateItemsPicker( + items = monthsNumber.toImmutableList(), + firstIndex = chosenMonth, + onItemSelected = onMonthChosen, + isYear = false + ) + } +} + +@Composable +fun DateItemsPicker( + items: List, + firstIndex: Int, + onItemSelected: (String) -> Unit, + modifier: Modifier = Modifier, + isYear: Boolean +) { + val listState = rememberLazyListState(firstIndex) + val currentValue = remember { mutableStateOf("") } + + LaunchedEffect(!listState.isScrollInProgress) { + onItemSelected(currentValue.value) + listState.animateScrollToItem(index = listState.firstVisibleItemIndex) + } + + Box( + modifier = Modifier.height(108.dp), + contentAlignment = Alignment.Center + ) { + Column( + modifier = modifier.fillMaxHeight(), + verticalArrangement = Arrangement.SpaceEvenly + ) { + HorizontalDivider( + modifier = Modifier.size(height = 1.dp, width = 71.dp), + color = TerningMain + ) + HorizontalDivider( + modifier = Modifier.size(height = 1.dp, width = 71.dp), + color = TerningMain + ) + } + LazyColumn( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + state = listState, + ) { + items(items.size) { + val index = it % items.size + val firstVisibleItemIndex by remember { + derivedStateOf { listState.firstVisibleItemIndex } + } + if (it == firstVisibleItemIndex + 1) { + currentValue.value = items[index] + } + Spacer(modifier = Modifier.height(6.dp)) + Text( + text = + when (isYear) { + true -> if (items[index].isNotEmpty()) "${items[index]}년" else "" + false -> if (items[index].isNotEmpty()) "${items[index]}월" else "" + }, + style = TerningTheme.typography.title3, + color = if (it == firstVisibleItemIndex + 1) Grey500 else Grey300, + textAlign = TextAlign.Center + ) + Spacer(modifier = Modifier.height(6.dp)) + } + } + } +} diff --git a/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt b/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt new file mode 100644 index 000000000..776291ac7 --- /dev/null +++ b/core/src/main/java/com/terning/core/designsystem/component/image/TerningImage.kt @@ -0,0 +1,32 @@ +package com.terning.core.designsystem.component.image + +import androidx.compose.foundation.Image +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import com.terning.core.R +import com.terning.core.designsystem.theme.TerningPointTheme + +@Composable +fun TerningImage( + painter: Int, + modifier: Modifier = Modifier +) { + Image( + painter = painterResource(id = painter), + contentDescription = stringResource(id = R.string.image_content_descriptin), + modifier = modifier + ) +} + +@Preview(showBackground = true) +@Composable +fun TerningBasicImagePreview() { + TerningPointTheme { + TerningImage( + painter = R.drawable.ic_back + ) + } +} \ No newline at end of file diff --git a/core/src/main/java/com/terning/core/designsystem/component/topappbar/BackButtonTopAppBar.kt b/core/src/main/java/com/terning/core/designsystem/component/topappbar/BackButtonTopAppBar.kt index 57c02f5fd..c6004d841 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/topappbar/BackButtonTopAppBar.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/topappbar/BackButtonTopAppBar.kt @@ -5,8 +5,8 @@ import androidx.compose.ui.Modifier @Composable fun BackButtonTopAppBar( - title: String, - modifier: Modifier, + modifier: Modifier = Modifier, + title: String = "", onBackButtonClick: (() -> Unit), actions: List<@Composable () -> Unit> = emptyList(), ) { diff --git a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt index 81a8eac25..f8abee4ce 100644 --- a/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt +++ b/core/src/main/java/com/terning/core/designsystem/component/topappbar/TerningBasicTopAppBar.kt @@ -30,15 +30,12 @@ fun TerningBasicTopAppBar( ) { CenterAlignedTopAppBar( title = { - Text( text = title, textAlign = TextAlign.Center, style = TerningTheme.typography.title2 ) - }, - modifier = modifier, navigationIcon = { if (showBackButton) { IconButton( diff --git a/core/src/main/java/com/terning/core/designsystem/theme/Type.kt b/core/src/main/java/com/terning/core/designsystem/theme/Type.kt index fd067ced8..a650fd23e 100644 --- a/core/src/main/java/com/terning/core/designsystem/theme/Type.kt +++ b/core/src/main/java/com/terning/core/designsystem/theme/Type.kt @@ -39,6 +39,7 @@ class TerningTypography internal constructor( button1: TextStyle, button2: TextStyle, button3: TextStyle, + button3_a: TextStyle, button4: TextStyle, button5: TextStyle, button6: TextStyle, @@ -88,6 +89,8 @@ class TerningTypography internal constructor( private set var button3: TextStyle by mutableStateOf(button3) private set + var button3_a: TextStyle by mutableStateOf(button3_a) + private set var button4: TextStyle by mutableStateOf(button4) private set var button5: TextStyle by mutableStateOf(button5) @@ -129,6 +132,7 @@ class TerningTypography internal constructor( button1: TextStyle = this.button1, button2: TextStyle = this.button2, button3: TextStyle = this.button3, + button3_a: TextStyle = this.button3_a, button4: TextStyle = this.button4, button5: TextStyle = this.button5, button6: TextStyle = this.button6, @@ -159,6 +163,7 @@ class TerningTypography internal constructor( button1, button2, button3, + button3_a, button4, button5, button6, @@ -191,6 +196,7 @@ class TerningTypography internal constructor( button1 = other.button1 button2 = other.button2 button3 = other.button3 + button3_a = other.button3_a button4 = other.button4 button5 = other.button5 button6 = other.button6 @@ -340,6 +346,13 @@ fun TerningTypography(): TerningTypography { letterSpacing = (0.002).em, lineHeight = (15.6).sp, ), + button3_a = TextStyle( + fontFamily = PretendardMedium, + fontWeight = FontWeight.Medium, + fontSize = 13.sp, + letterSpacing = (0.002).em, + lineHeight = (19.6).sp, + ), button4 = TextStyle( fontFamily = PretendardMedium, fontWeight = FontWeight.Medium, diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index dd2adcd9c..b6c4348f9 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -45,4 +45,8 @@ 서류 마감 근무 기간 근무 시작 + + + TerningBasicImage + \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/intern/InternRoute.kt b/feature/src/main/java/com/terning/feature/intern/InternRoute.kt index 683a71389..5f8bcba53 100644 --- a/feature/src/main/java/com/terning/feature/intern/InternRoute.kt +++ b/feature/src/main/java/com/terning/feature/intern/InternRoute.kt @@ -61,7 +61,7 @@ fun InternScreen( offsetY = 2.dp ), onBackButtonClick = {}, - listOf( + actions = listOf( {}, { IconButton(onClick = {}) { diff --git a/feature/src/main/java/com/terning/feature/main/MainScreen.kt b/feature/src/main/java/com/terning/feature/main/MainScreen.kt index 9895e3d13..49c481a29 100644 --- a/feature/src/main/java/com/terning/feature/main/MainScreen.kt +++ b/feature/src/main/java/com/terning/feature/main/MainScreen.kt @@ -24,9 +24,13 @@ import com.terning.feature.calendar.navigation.calendarNavGraph import com.terning.feature.home.home.navigation.homeNavGraph import com.terning.feature.intern.navigation.internNavGraph import com.terning.feature.mypage.navigation.myPageNavGraph -import com.terning.feature.onboarding.filtering.navigation.filteringNavGraph +import com.terning.feature.onboarding.filtering.navigation.filteringOneNavGraph +import com.terning.feature.onboarding.filtering.navigation.filteringThreeNavGraph +import com.terning.feature.onboarding.filtering.navigation.filteringTwoNavGraph import com.terning.feature.onboarding.signin.navigation.signInNavGraph import com.terning.feature.onboarding.signup.navigation.signUpNavGraph +import com.terning.feature.onboarding.startfiltering.navigation.startFilteringNavGraph +import com.terning.feature.onboarding.starthome.navigation.startHomeNavGraph import com.terning.feature.search.search.navigation.searchNavGraph import com.terning.feature.search.searchprocess.navigation.searchProcessNavGraph @@ -59,8 +63,12 @@ fun MainScreen( myPageNavGraph() signInNavGraph(navHostController = navigator.navController) signUpNavGraph(navHostController = navigator.navController) - filteringNavGraph(navHostController = navigator.navController) + filteringOneNavGraph(navHostController = navigator.navController) + filteringTwoNavGraph(navHostController = navigator.navController) + filteringThreeNavGraph(navHostController = navigator.navController) searchProcessNavGraph(navHostController = navigator.navController) + startFilteringNavGraph(navHostController = navigator.navController) + startHomeNavGraph(navHostController = navigator.navController) internNavGraph(navHostController = navigator.navController) } } diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringOneScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringOneScreen.kt new file mode 100644 index 000000000..33c76066f --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringOneScreen.kt @@ -0,0 +1,99 @@ +package com.terning.feature.onboarding.filtering + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.component.image.TerningImage +import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.onboarding.filtering.component.StatusOneRadioGroup +import com.terning.feature.onboarding.filtering.navigation.navigateFilteringTwo + +@Composable +fun FilteringOneScreen( + navController: NavController, + modifier: Modifier = Modifier, + filteringViewModel: FilteringViewModel = hiltViewModel(), + onButtonClick: () -> Unit = {}, +) { + val isButtonValid = remember { mutableStateOf(false) } + + Scaffold( + modifier = modifier, + topBar = { + BackButtonTopAppBar( + onBackButtonClick = { navController.navigateUp() } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + TerningImage( + painter = R.drawable.ic_filtering_status1, + modifier = modifier.padding( + top = 20.dp, + start = 24.dp + ) + ) + Text( + text = stringResource( + id = R.string.filtering_status1_title, + filteringViewModel.name + ), + style = TerningTheme.typography.title3, + modifier = modifier.padding( + top = 19.dp, + start = 24.dp + ) + ) + Text( + text = stringResource(id = R.string.filtering_status1_sub, filteringViewModel.name), + style = TerningTheme.typography.body5, + modifier = modifier.padding( + top = 3.dp, + start = 24.dp, + bottom = 25.dp + ) + ) + StatusOneRadioGroup( + onButtonClick = { + onButtonClick() + isButtonValid.value = true + } + ) + Text( + text = stringResource(id = R.string.filtering_status1_warning), + style = TerningTheme.typography.detail3, + modifier = modifier.padding( + start = 24.dp, + top = 9.dp + ) + ) + Spacer(modifier = modifier.weight(1f)) + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 20.dp, + text = R.string.filtering_button, + onButtonClick = { navController.navigateFilteringTwo() }, + modifier = modifier.padding(bottom = 12.dp), + isEnabled = isButtonValid.value + ) + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringRoute.kt deleted file mode 100644 index f4c413bba..000000000 --- a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringRoute.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.terning.feature.onboarding.filtering - -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.navigation.NavController - -@Composable -fun FilteringRoute( - navController: NavController -) { - FilteringScreen() -} - -@Composable -fun FilteringScreen() { - Text(text = "filtering") -} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringThreeScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringThreeScreen.kt new file mode 100644 index 000000000..7d1680909 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringThreeScreen.kt @@ -0,0 +1,94 @@ +package com.terning.feature.onboarding.filtering + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +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.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.component.datepicker.DatePickerUI +import com.terning.core.designsystem.component.image.TerningImage +import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.onboarding.starthome.navigation.navigateStartHome +import java.util.Calendar + +@Composable +fun FilteringThreeScreen( + navController: NavController, + modifier: Modifier = Modifier, + filteringViewModel: FilteringViewModel = hiltViewModel(), +) { + val currentYear = Calendar.getInstance().get(Calendar.YEAR) + val currentMonth = Calendar.getInstance().get(Calendar.MONTH) + + var chosenYear by remember { mutableStateOf(currentYear) } + var chosenMonth by remember { mutableStateOf(currentMonth) } + + Scaffold( + modifier = modifier, + topBar = { + BackButtonTopAppBar( + onBackButtonClick = { navController.navigateUp() } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + TerningImage( + painter = R.drawable.ic_filtering_status3, + modifier = modifier.padding( + top = 20.dp, + start = 24.dp + ) + ) + Text( + text = stringResource(id = R.string.filtering_status3_title), + style = TerningTheme.typography.title3, + modifier = modifier.padding( + top = 19.dp, + start = 24.dp + ) + ) + Text( + text = stringResource(id = R.string.filtering_status3_sub), + style = TerningTheme.typography.body5, + modifier = modifier.padding( + top = 3.dp, + start = 24.dp, + bottom = 25.dp + ) + ) + Spacer(modifier = modifier.weight(1f)) + DatePickerUI( + chosenYear = chosenYear, + chosenMonth = chosenMonth, + onYearChosen = { chosenYear = it }, + onMonthChosen = { chosenMonth = it }, + ) + Spacer(modifier = modifier.weight(3f)) + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 25.dp, + text = R.string.filtering_button, + onButtonClick = { navController.navigateStartHome() }, + modifier = modifier.padding(bottom = 12.dp), + ) + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringTwoScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringTwoScreen.kt new file mode 100644 index 000000000..d7f7d534c --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringTwoScreen.kt @@ -0,0 +1,97 @@ +package com.terning.feature.onboarding.filtering + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.component.image.TerningImage +import com.terning.core.designsystem.component.topappbar.BackButtonTopAppBar +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.onboarding.filtering.component.StatusTwoRadioGroup +import com.terning.feature.onboarding.filtering.navigation.navigateFilteringThree + +@Composable +fun FilteringTwoScreen( + navController: NavController, + modifier: Modifier = Modifier, + filteringViewModel: FilteringViewModel = hiltViewModel(), + onButtonClick: () -> Unit = {}, +) { + + val isButtonValid = remember { mutableStateOf(false) } + + Scaffold( + modifier = modifier, + topBar = { + BackButtonTopAppBar( + onBackButtonClick = { navController.navigateUp() } + ) + } + ) { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + ) { + TerningImage( + painter = R.drawable.ic_filtering_status2, + modifier = modifier.padding( + top = 20.dp, + start = 24.dp + ) + ) + Text( + text = stringResource(id = R.string.filtering_status2_title), + style = TerningTheme.typography.title3, + modifier = modifier.padding( + top = 19.dp, + start = 24.dp + ) + ) + Text( + text = stringResource(id = R.string.filtering_status2_sub), + style = TerningTheme.typography.body5, + modifier = modifier.padding( + top = 3.dp, + start = 24.dp, + bottom = 25.dp + ) + ) + StatusTwoRadioGroup( + onButtonClick = { + onButtonClick() + isButtonValid.value = true + } + ) + Text( + text = stringResource(id = R.string.filtering_status1_warning), + style = TerningTheme.typography.detail3, + modifier = modifier.padding( + start = 24.dp, + top = 9.dp + ) + ) + Spacer(modifier = modifier.weight(1f)) + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 25.dp, + text = R.string.filtering_button, + onButtonClick = { navController.navigateFilteringThree() }, + modifier = modifier.padding(bottom = 12.dp), + isEnabled = isButtonValid.value + ) + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringViewModel.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringViewModel.kt new file mode 100644 index 000000000..b05c6266f --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/FilteringViewModel.kt @@ -0,0 +1,12 @@ +package com.terning.feature.onboarding.filtering + +import androidx.lifecycle.ViewModel +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class FilteringViewModel @Inject constructor() : ViewModel() { + + val name = "남지우" + +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusOneRadioGroup.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusOneRadioGroup.kt new file mode 100644 index 000000000..def61d2b4 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusOneRadioGroup.kt @@ -0,0 +1,62 @@ +package com.terning.feature.onboarding.filtering.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.itemsIndexed +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.component.button.FilteringButton +import com.terning.feature.R + +@Composable +fun StatusOneRadioGroup( + onButtonClick: (Int) -> Unit, + modifier: Modifier = Modifier +) { + val options = listOf( + R.string.filtering_status1_button1, + R.string.filtering_status1_button2, + R.string.filtering_status1_button3, + R.string.filtering_status1_button4 + ) + + val selectedOptions = listOf( + R.string.filtering_status1_description1, + R.string.filtering_status1_description2, + R.string.filtering_status1_description3, + R.string.filtering_status1_description4 + ) + + val selectedIndex = remember { mutableIntStateOf(options[0]) } + val selectedButton = remember { mutableStateListOf(false, false, false, false) } + + LazyVerticalGrid( + columns = GridCells.Fixed(1), + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = modifier.padding(horizontal = 24.dp) + ) { + itemsIndexed(options) { index, option -> + + FilteringButton( + isSelected = selectedButton[index], + modifier = modifier.fillMaxWidth(), + text = if (selectedButton[index]) selectedOptions[index] else option, + onButtonClick = { + selectedIndex.intValue = option + selectedButton.indices.forEach { i -> selectedButton[i] = false } + selectedButton[index] = true + onButtonClick(index) + }, + cornerRadius = 15.dp, + paddingVertical = 15.dp + ) + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusTwoRadioGroup.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusTwoRadioGroup.kt new file mode 100644 index 000000000..163334fcb --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/component/StatusTwoRadioGroup.kt @@ -0,0 +1,61 @@ +package com.terning.feature.onboarding.filtering.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.grid.GridCells +import androidx.compose.foundation.lazy.grid.LazyVerticalGrid +import androidx.compose.foundation.lazy.grid.itemsIndexed +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.terning.core.designsystem.component.button.FilteringButton +import com.terning.feature.R + +@Composable +fun StatusTwoRadioGroup( + onButtonClick: (Int) -> Unit, + modifier: Modifier = Modifier +) { + val options = listOf( + R.string.filtering_status2_button1, + R.string.filtering_status2_button2, + R.string.filtering_status2_button3, + ) + + val selectedOptions = listOf( + R.string.filtering_status2_description1, + R.string.filtering_status2_description2, + R.string.filtering_status2_description3, + ) + + val selectedIndex = remember { mutableIntStateOf(options[0]) } + val selectedButton = remember { mutableStateListOf(false, false, false) } + + LazyVerticalGrid( + columns = GridCells.Fixed(1), + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = modifier.padding(horizontal = 24.dp) + ) { + itemsIndexed(options) { index, option -> + + FilteringButton( + isSelected = selectedButton[index], + modifier = modifier.fillMaxWidth(), + text = if (selectedButton[index]) selectedOptions[index] else option, + onButtonClick = { + selectedIndex.intValue = option + selectedButton.indices.forEach { i -> selectedButton[i] = false } + selectedButton[index] = true + onButtonClick(index) + }, + cornerRadius = 15.dp, + paddingVertical = if (selectedButton[index]) 15.dp else 26.dp + ) + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringOneNavigation.kt similarity index 63% rename from feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringNavigation.kt rename to feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringOneNavigation.kt index e69874fbd..55be952bb 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringNavigation.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringOneNavigation.kt @@ -6,25 +6,25 @@ import androidx.navigation.NavHostController import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.terning.core.navigation.Route -import com.terning.feature.onboarding.filtering.FilteringRoute +import com.terning.feature.onboarding.filtering.FilteringOneScreen import kotlinx.serialization.Serializable -fun NavController.navigateFiltering(navOptions: NavOptions? = null) { +fun NavController.navigateFilteringOne(navOptions: NavOptions? = null) { navigate( - route = Filtering, + route = FilteringOne, navOptions = navOptions ) } -fun NavGraphBuilder.filteringNavGraph( +fun NavGraphBuilder.filteringOneNavGraph( navHostController: NavHostController ) { - composable { - FilteringRoute( + composable { + FilteringOneScreen( navController = navHostController ) } } @Serializable -data object Filtering : Route \ No newline at end of file +data object FilteringOne : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringTwoNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringTwoNavigation.kt new file mode 100644 index 000000000..d7faf0d22 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/FilteringTwoNavigation.kt @@ -0,0 +1,30 @@ +package com.terning.feature.onboarding.filtering.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.terning.core.navigation.Route +import com.terning.feature.onboarding.filtering.FilteringTwoScreen +import kotlinx.serialization.Serializable + +fun NavController.navigateFilteringTwo(navOptions: NavOptions? = null) { + navigate( + route = FilteringTwo, + navOptions = navOptions + ) +} + +fun NavGraphBuilder.filteringTwoNavGraph( + navHostController: NavHostController +) { + composable { + FilteringTwoScreen( + navController = navHostController + ) + } +} + +@Serializable +data object FilteringTwo : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/ThreeNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/ThreeNavigation.kt new file mode 100644 index 000000000..8c98afbae --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/filtering/navigation/ThreeNavigation.kt @@ -0,0 +1,30 @@ +package com.terning.feature.onboarding.filtering.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.terning.core.navigation.Route +import com.terning.feature.onboarding.filtering.FilteringThreeScreen +import kotlinx.serialization.Serializable + +fun NavController.navigateFilteringThree(navOptions: NavOptions? = null) { + navigate( + route = FilteringThree, + navOptions = navOptions + ) +} + +fun NavGraphBuilder.filteringThreeNavGraph( + navHostController: NavHostController +) { + composable { + FilteringThreeScreen( + navController = navHostController + ) + } +} + +@Serializable +data object FilteringThree : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt index a85d688f2..87eaa2db0 100644 --- a/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt +++ b/feature/src/main/java/com/terning/feature/onboarding/signup/SignUpRoute.kt @@ -18,14 +18,14 @@ import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.navigation.NavController +import com.terning.core.designsystem.component.bottomsheet.SignUpBottomSheet import com.terning.core.designsystem.component.button.RectangleButton import com.terning.core.designsystem.component.textfield.NameTextField import com.terning.core.designsystem.theme.TerningTheme import com.terning.core.extension.addFocusCleaner import com.terning.core.extension.noRippleClickable import com.terning.feature.R -import com.terning.feature.onboarding.filtering.navigation.navigateFiltering -import com.terning.core.designsystem.component.bottomsheet.SignUpBottomSheet +import com.terning.feature.onboarding.filtering.navigation.navigateFilteringOne import com.terning.feature.onboarding.signup.component.SignUpProfile @Composable @@ -38,7 +38,7 @@ fun SignUpRoute( SignUpScreen( signUpViewModel = signUpViewModel, signUpState = signUpState, - onButtonClick = { navController.navigateFiltering() } + onButtonClick = { navController.navigateFilteringOne() } ) } diff --git a/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt new file mode 100644 index 000000000..e966d29c6 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/splash/SplashScreen.kt @@ -0,0 +1,8 @@ +package com.terning.feature.onboarding.splash + +import androidx.compose.runtime.Composable + +@Composable +fun SplashScreen(){ + +} \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/startfiltering/StartFilteringScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/startfiltering/StartFilteringScreen.kt new file mode 100644 index 000000000..6c083aa5f --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/startfiltering/StartFilteringScreen.kt @@ -0,0 +1,81 @@ +package com.terning.feature.onboarding.startfiltering + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.foundation.Image +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.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +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.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.onboarding.filtering.navigation.navigateFilteringOne +import kotlinx.coroutines.delay + +@Composable +fun StartFilteringScreen( + modifier: Modifier = Modifier, + navController: NavController +) { + var isVisible by remember { mutableStateOf(false) } + + LaunchedEffect(key1 = true) { + delay(1000) + isVisible = true + } + + Box( + modifier = modifier.fillMaxSize() + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.weight(1f)) + Text( + text = stringResource(id = R.string.start_filtering_title), + style = TerningTheme.typography.title1, + modifier = Modifier.padding(bottom = 35.dp), + textAlign = TextAlign.Center + ) + Image( + painter = painterResource(id = R.drawable.img_start), + contentDescription = stringResource(id = R.string.start_filtering_main_image), + ) + Spacer(modifier = Modifier.weight(2f)) + } + Box( + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 12.dp) + ) { + AnimatedVisibility( + visible = isVisible, + enter = fadeIn(initialAlpha = 0.3f), + ) { + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 20.dp, + text = R.string.start_filtering_button, + onButtonClick = { navController.navigateFilteringOne() }, + ) + } + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/startfiltering/navigation/StartFilteringNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/startfiltering/navigation/StartFilteringNavigation.kt new file mode 100644 index 000000000..2bcf37a82 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/startfiltering/navigation/StartFilteringNavigation.kt @@ -0,0 +1,28 @@ +package com.terning.feature.onboarding.startfiltering.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.terning.core.navigation.Route +import com.terning.feature.onboarding.startfiltering.StartFilteringScreen +import kotlinx.serialization.Serializable + +fun NavController.navigateStartFiltering(navOptions: NavOptions? = null) { + navigate( + route = StartFiltering, + navOptions = navOptions + ) +} + +fun NavGraphBuilder.startFilteringNavGraph( + navHostController: NavHostController +) { + composable { + StartFilteringScreen(navController = navHostController) + } +} + +@Serializable +data object StartFiltering : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/onboarding/starthome/StartHomeScreen.kt b/feature/src/main/java/com/terning/feature/onboarding/starthome/StartHomeScreen.kt new file mode 100644 index 000000000..86bd93a73 --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/starthome/StartHomeScreen.kt @@ -0,0 +1,81 @@ +package com.terning.feature.onboarding.starthome + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.foundation.Image +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.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +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.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.terning.core.designsystem.component.button.RectangleButton +import com.terning.core.designsystem.theme.TerningTheme +import com.terning.feature.R +import com.terning.feature.home.home.navigation.navigateHome +import kotlinx.coroutines.delay + +@Composable +fun StartHomeScreen( + modifier: Modifier = Modifier, + navController: NavController +) { + var isVisible by remember { mutableStateOf(false) } + + LaunchedEffect(key1 = true) { + delay(1000) + isVisible = true + } + + Box( + modifier = modifier.fillMaxSize() + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.weight(1f)) + Text( + text = stringResource(id = R.string.start_home_title), + style = TerningTheme.typography.title1, + modifier = Modifier.padding(bottom = 35.dp), + textAlign = TextAlign.Center + ) + Image( + painter = painterResource(id = R.drawable.img_start), + contentDescription = stringResource(id = R.string.start_filtering_main_image), + ) + Spacer(modifier = Modifier.weight(2f)) + } + Box( + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 12.dp) + ) { + AnimatedVisibility( + visible = isVisible, + enter = fadeIn(initialAlpha = 0.3f), + ) { + RectangleButton( + style = TerningTheme.typography.button0, + paddingVertical = 20.dp, + text = R.string.start_home_next_button, + onButtonClick = { navController.navigateHome() }, + ) + } + } + } +} diff --git a/feature/src/main/java/com/terning/feature/onboarding/starthome/navigation/StartHomeNavigation.kt b/feature/src/main/java/com/terning/feature/onboarding/starthome/navigation/StartHomeNavigation.kt new file mode 100644 index 000000000..7cd5a3d3a --- /dev/null +++ b/feature/src/main/java/com/terning/feature/onboarding/starthome/navigation/StartHomeNavigation.kt @@ -0,0 +1,28 @@ +package com.terning.feature.onboarding.starthome.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import com.terning.core.navigation.Route +import com.terning.feature.onboarding.starthome.StartHomeScreen +import kotlinx.serialization.Serializable + +fun NavController.navigateStartHome(navOptions: NavOptions? = null) { + navigate( + route = StartHome, + navOptions = navOptions + ) +} + +fun NavGraphBuilder.startHomeNavGraph( + navHostController: NavHostController +) { + composable { + StartHomeScreen(navController = navHostController) + } +} + +@Serializable +data object StartHome : Route \ No newline at end of file diff --git a/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessRoute.kt b/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessRoute.kt index 3736f0516..4cc94b38f 100644 --- a/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessRoute.kt +++ b/feature/src/main/java/com/terning/feature/search/searchprocess/SearchProcessRoute.kt @@ -66,7 +66,7 @@ fun SearchProcessScreen( if (state.showSearchResults) R.string.search_process_result_top_bar_title else R.string.search_process_top_bar_title ), - onBackButtonClick = { navController.popBackStack() }, + onBackButtonClick = { navController.navigateUp() }, modifier = Modifier ) } diff --git a/feature/src/main/res/drawable/ic_filtering_status1.xml b/feature/src/main/res/drawable/ic_filtering_status1.xml new file mode 100644 index 000000000..e88d9c279 --- /dev/null +++ b/feature/src/main/res/drawable/ic_filtering_status1.xml @@ -0,0 +1,44 @@ + + + + + + + + + + diff --git a/feature/src/main/res/drawable/ic_filtering_status2.xml b/feature/src/main/res/drawable/ic_filtering_status2.xml new file mode 100644 index 000000000..3ee9d62dd --- /dev/null +++ b/feature/src/main/res/drawable/ic_filtering_status2.xml @@ -0,0 +1,42 @@ + + + + + + + + + + diff --git a/feature/src/main/res/drawable/ic_filtering_status3.xml b/feature/src/main/res/drawable/ic_filtering_status3.xml new file mode 100644 index 000000000..410bbeb99 --- /dev/null +++ b/feature/src/main/res/drawable/ic_filtering_status3.xml @@ -0,0 +1,40 @@ + + + + + + + + + + diff --git a/feature/src/main/res/drawable/img_start.png b/feature/src/main/res/drawable/img_start.png new file mode 100644 index 000000000..ec996a47d Binary files /dev/null and b/feature/src/main/res/drawable/img_start.png differ diff --git a/feature/src/main/res/values/strings.xml b/feature/src/main/res/values/strings.xml index ab9e0fc09..3dad158b1 100644 --- a/feature/src/main/res/values/strings.xml +++ b/feature/src/main/res/values/strings.xml @@ -39,7 +39,6 @@ 검색 결과 없을 때 아이콘 와 일치하는 검색 결과가 없어요 - @@ -56,12 +55,8 @@ 오늘 마감되는 %s님의 관심 공고 - - 아직 스크랩된 인턴 공고가 없어요!\n관심 공고를 스크랩하면 마감 당일에 알려드릴게요 - - - 오늘 마감인 공고가 없어요\n캘린더에서 가까운 공고 일정을 확인해보세요 - + 아직 스크랩된 인턴 공고가 없어요!\n관심 공고를 스크랩하면 마감 당일에 알려드릴게요 + 오늘 마감인 공고가 없어요\n캘린더에서 가까운 공고 일정을 확인해보세요 공고 마감 일정 확인하기 @@ -76,15 +71,46 @@ 7개월 이상 - - 필터링 설정에 일치하는 인턴 공고가 없어요!\n딱 맞는 인턴 공고가 올라오면 바로 알려드릴게요 - + 필터링 설정에 일치하는 인턴 공고가 없어요!\n딱 맞는 인턴 공고가 올라오면 바로 알려드릴게요 인턴 공고가 없어요! 지금 공고 필터링을 설정하고\n내 계획에 딱 맞는 대학생 인턴 공고를 추천받아보세요! - + + 터치 3번으로\n원하는 대학생 인턴 공고를 띄워드릴게요 + 시작화면 이미지 + 시작하기 + + + 이제 딱 맞는 공고와 함께\n터닝을 시작해 볼까요? + 내 맞춤 공고 바로 보러가기 + + + %s님의 재학 상태를 선택해주세요 + *5년제 혹은 초과학기생인 경우 4학년으로 선택해주세요 + 휴학중이라면, 휴학 전 마지막 수료 학년을 선택해주세요 + 1학년 + 2학년 + 3학년 + 4학년 + 대학생의 꽃 인턴, 어린 나이에 미리 도전해볼래요! + 미리 대학생 인턴 경험하고, 사회 생활을 해 보고 싶어요 + 4학년이 되기 전, 인턴으로 유의미한 스펙을 쌓고 싶어요 + 사회인으로의 첫 발걸음, 인턴으로 채우고 싶어요 + 희망하는 인턴 근무 기간을 선택해 주세요 + 선택한 기간동안 근무할 수 있는 인턴 공고를 찾아드릴게요 + 1개월 ~ 3개월 + 4개월 ~ 6개월 + 7개월 이상 + 짧은 기간 안에 스펙을 쌓고 싶은\n\인턴 초년생\에게 추천해요! + 좀 더 오랜 시간동안의 회사 경험을 원하는\n\성숙 인턴러\에게 추천해요! + 산업에 오랜 기간 딥다이브 하고 싶은\n\예비 사회인\에게 추천해요! + 입사를 계획중인 달을 선택해주세요 + 선택한 달부터 근무를 시작할 수 있는 공고를 찾아드릴게요 + 다음으로 + 재학 상태를 선택해주세요 희망하는 인턴 근무 기간을 선택해주세요