diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/card/DateRoadCourseCard.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/card/DateRoadCourseCard.kt index fc1f9c1..53b344b 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/card/DateRoadCourseCard.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/card/DateRoadCourseCard.kt @@ -40,6 +40,7 @@ fun DateRoadCourseCard( Row( modifier = modifier .fillMaxWidth() + .padding(end = 16.dp) .height(130.dp) .background(DateRoadTheme.colors.white) .noRippleClickable(onClick = { onClick(course.courseId) }) diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/view/DateRoadEmptyView.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/view/DateRoadEmptyView.kt index 459f5bc..0f5a818 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/view/DateRoadEmptyView.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/component/view/DateRoadEmptyView.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column 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 @@ -30,7 +31,9 @@ fun DateRoadEmptyView( verticalArrangement = Arrangement.Center ) { Image( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier + .height(383.dp) + .fillMaxWidth(), painter = painterResource(id = emptyViewType.imageRes), contentDescription = null, contentScale = ContentScale.FillWidth diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollContract.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollContract.kt index 28fc395..d7c120b 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollContract.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollContract.kt @@ -50,7 +50,9 @@ class EnrollContract { val timePickers: List = listOf( Picker(items = listOf(TimePicker.AM, TimePicker.PM)), Picker(items = (HOUR_START..HOUR_END).map { it.toString() }), - Picker(items = (MINUTE_START..MINUTE_END).map { it.toString().padStart(2, '0') }) + Picker( + items = (MINUTE_START..MINUTE_END step 5).map { it.toString().padStart(2, '0') } + ) ), val isRegionBottomSheetOpen: Boolean = false, val onRegionBottomSheetRegionSelected: RegionType? = RegionType.SEOUL, diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollThirdScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollThirdScreen.kt index 58415bb..9eb7f35 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollThirdScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/EnrollThirdScreen.kt @@ -17,6 +17,7 @@ import org.sopt.teamdateroad.R import org.sopt.teamdateroad.presentation.ui.component.textfield.DateRoadBasicTextField import org.sopt.teamdateroad.presentation.ui.component.textfield.DateRoadTextArea import org.sopt.teamdateroad.presentation.util.view.LoadState +import org.sopt.teamdateroad.presentation.util.view.NumberCommaTransformation import org.sopt.teamdateroad.ui.theme.DATEROADTheme @Composable @@ -45,7 +46,8 @@ fun EnrollThirdScreen( onValueChange = { newValue -> if (newValue.all { it.isDigit() }) onCostValueChange(newValue) }, - keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number) + keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number), + visualTransformation = NumberCommaTransformation() ) Spacer(modifier = Modifier.height(6.dp)) } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/component/PlaceSearchBottomSheet.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/component/PlaceSearchBottomSheet.kt index 6dcb28a..3bb8fdc 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/component/PlaceSearchBottomSheet.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/enroll/component/PlaceSearchBottomSheet.kt @@ -2,11 +2,10 @@ package org.sopt.teamdateroad.presentation.ui.enroll.component import androidx.compose.foundation.Image import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row 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 @@ -73,13 +72,13 @@ fun PlaceSearchBottomSheet( .clip(RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)) .background(DateRoadTheme.colors.white) ) { - Spacer(modifier = Modifier.height(23.dp)) + Spacer(modifier = Modifier.height(15.dp)) Row( modifier = Modifier .fillMaxWidth() .height(40.dp) - .padding(start = 25.dp, end = 12.dp), + .padding(start = 16.dp, end = 6.dp), verticalAlignment = Alignment.CenterVertically ) { Text( @@ -100,7 +99,7 @@ fun PlaceSearchBottomSheet( ) } - Spacer(modifier = Modifier.height(22.dp)) + Spacer(modifier = Modifier.height(16.dp)) TextField( value = searchKeyword, @@ -108,7 +107,7 @@ fun PlaceSearchBottomSheet( modifier = Modifier .fillMaxWidth() .height(54.dp) - .padding(start = 14.dp, end = 20.dp), + .padding(horizontal = 14.dp), placeholder = { Text( modifier = Modifier, @@ -147,10 +146,11 @@ fun PlaceSearchBottomSheet( ) ) - Spacer(modifier = Modifier.height(10.dp)) - if (searchPlaceInfos.isNotEmpty()) { LazyColumn(modifier = Modifier.weight(1f)) { + item { + Spacer(modifier = Modifier.height(10.dp)) + } itemsIndexed(searchPlaceInfos) { index: Int, placeInfo: PlaceInfo -> EnrollPlaceSearchItem( keyword = searchKeyword, @@ -166,8 +166,10 @@ fun PlaceSearchBottomSheet( ) } } + item { + Spacer(modifier = Modifier.height(12.dp)) + } } - Spacer(modifier = Modifier.height(12.dp)) } else { EmptyPlaceSearchResult() } @@ -178,26 +180,26 @@ fun PlaceSearchBottomSheet( @Composable private fun EmptyPlaceSearchResult() { - Box( + Column( modifier = Modifier - .fillMaxSize() - .padding(bottom = 70.dp) + .height(472.dp) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center ) { - Column(modifier = Modifier.align(Alignment.Center)) { - Image( - modifier = Modifier - .width(167.dp) - .height(191.dp), - painter = painterResource(R.drawable.img_place_search_no_match), - contentDescription = null - ) - Spacer(modifier = Modifier.height(40.dp)) - Text( - text = stringResource(R.string.enroll_place_search_no_match), - color = DateRoadTheme.colors.gray300, - style = DateRoadTheme.typography.titleBold18 - ) - } + Image( + modifier = Modifier + .width(167.dp) + .height(191.dp), + painter = painterResource(R.drawable.img_place_search_no_match), + contentDescription = null + ) + Spacer(modifier = Modifier.height(38.dp)) + Text( + text = stringResource(R.string.enroll_place_search_no_match), + color = DateRoadTheme.colors.gray300, + style = DateRoadTheme.typography.titleBold18 + ) } } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/home/component/HomeTopBar.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/home/component/HomeTopBar.kt index f94162d..9469f02 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/home/component/HomeTopBar.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/home/component/HomeTopBar.kt @@ -1,11 +1,12 @@ package org.sopt.teamdateroad.presentation.ui.home.component import androidx.compose.foundation.background +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.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -24,23 +25,26 @@ fun DateRoadHomeTopBar( profileImage: String? = null, onClick: () -> Unit = {} ) { - Row( + Box( modifier = Modifier .fillMaxWidth() + .height(54.dp) .background(Color.Transparent) - .padding(horizontal = 22.dp, vertical = 10.dp), - verticalAlignment = Alignment.CenterVertically + .padding(start = 11.dp, end = 16.dp) ) { Icon( painter = painterResource(id = R.drawable.ic_dateroad_logo), contentDescription = null, - tint = DateRoadTheme.colors.white + tint = DateRoadTheme.colors.white, + modifier = Modifier + .align(Alignment.CenterStart) + .size(54.dp) ) - Spacer(modifier = Modifier.weight(1f)) DateRoadPointTag( text = title, profileImage = profileImage, - onClick = onClick + onClick = onClick, + modifier = Modifier.align(Alignment.CenterEnd) ) } } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/look/LookScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/look/LookScreen.kt index b29c023..abcf866 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/look/LookScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/look/LookScreen.kt @@ -215,13 +215,16 @@ fun LookScreen( ) } } - Spacer(modifier = Modifier.height(20.dp)) + Spacer(modifier = Modifier.height(10.dp)) if (lookUiState.courses.isEmpty()) { Box( modifier = Modifier - .fillMaxSize() + .fillMaxSize(), + contentAlignment = Alignment.TopCenter ) { - DateRoadEmptyView(emptyViewType = EmptyViewType.LOOK) + DateRoadEmptyView( + emptyViewType = EmptyViewType.LOOK + ) } } LazyVerticalGrid( @@ -231,6 +234,9 @@ fun LookScreen( horizontalArrangement = Arrangement.spacedBy(12.dp), verticalArrangement = Arrangement.spacedBy(16.dp) ) { + item { + Spacer(modifier = Modifier.height(10.dp)) + } items(lookUiState.courses.size) { index -> LookCourseCard(course = lookUiState.courses[index], onClick = { onCourseCardClicked(lookUiState.courses[index].courseId) }) } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/mycourse/MyCourseScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/mycourse/MyCourseScreen.kt index 428fa0b..cddb45e 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/mycourse/MyCourseScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/mycourse/MyCourseScreen.kt @@ -3,6 +3,7 @@ package org.sopt.teamdateroad.presentation.ui.mycourse import androidx.compose.foundation.background import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -116,28 +117,33 @@ fun MyCourseScreen( backGroundColor = DateRoadTheme.colors.white, onLeftIconClick = onIconClick ) - LazyColumn { - if (myCourseUiState.courses.isEmpty()) { - item { - DateRoadEmptyView( - emptyViewType = when (myCourseUiState.myCourseType) { - MyCourseType.ENROLL -> EmptyViewType.MY_COURSE_ENROLL - MyCourseType.READ -> EmptyViewType.MY_COURSE_READ + if (myCourseUiState.courses.isEmpty()) { + Column( + modifier = Modifier.fillMaxSize() + ) { + Spacer(modifier = Modifier.weight(60f)) + DateRoadEmptyView( + emptyViewType = when (myCourseUiState.myCourseType) { + MyCourseType.ENROLL -> EmptyViewType.MY_COURSE_ENROLL + MyCourseType.READ -> EmptyViewType.MY_COURSE_READ + } + ) + Spacer(modifier = Modifier.weight(165f)) + } + } else { + LazyColumn { + items(myCourseUiState.courses) { course -> + DateRoadCourseCard( + course = course, + onClick = { + when (myCourseUiState.myCourseType) { + MyCourseType.ENROLL -> navigateToCourseDetail(course.courseId) + MyCourseType.READ -> navigateToEnroll(course.courseId) + } } ) } } - items(myCourseUiState.courses) { course -> - DateRoadCourseCard( - course = course, - onClick = { - when (myCourseUiState.myCourseType) { - MyCourseType.ENROLL -> navigateToCourseDetail(course.courseId) - MyCourseType.READ -> navigateToEnroll(course.courseId) - } - } - ) - } } } } @@ -150,7 +156,7 @@ fun MyCourseScreenPreview() { padding = PaddingValues(0.dp), myCourseUiState = MyCourseContract.MyCourseUiState( loadState = LoadState.Success, - myCourseType = MyCourseType.READ, + myCourseType = MyCourseType.ENROLL, courses = listOf( Course( courseId = 1, diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/past/PastScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/past/PastScreen.kt index e5c6ff3..f83302c 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/past/PastScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/past/PastScreen.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -93,7 +94,11 @@ fun PastScreen( onLeftIconClick = popBackStack ) if (pastUiState.timelines.isEmpty()) { - DateRoadEmptyView(emptyViewType = EmptyViewType.PAST) + Column(modifier = Modifier.fillMaxSize()) { + Spacer(modifier = Modifier.weight(69f)) + DateRoadEmptyView(emptyViewType = EmptyViewType.PAST) + Spacer(modifier = Modifier.weight(165f)) + } } else { LazyColumn( modifier = Modifier.padding(start = 16.dp, end = 16.dp, top = 6.dp, bottom = 11.dp), diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/pointhistory/PointHistoryScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/pointhistory/PointHistoryScreen.kt index 63aaba2..9fa90ea 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/pointhistory/PointHistoryScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/pointhistory/PointHistoryScreen.kt @@ -1,7 +1,6 @@ package org.sopt.teamdateroad.presentation.ui.pointhistory import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer @@ -29,7 +28,6 @@ import com.google.android.gms.ads.rewarded.RewardedAd import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback import org.sopt.teamdateroad.BuildConfig import org.sopt.teamdateroad.R -import org.sopt.teamdateroad.domain.model.Point import org.sopt.teamdateroad.domain.model.PointHistory import org.sopt.teamdateroad.domain.model.UserPoint import org.sopt.teamdateroad.presentation.type.EmptyViewType @@ -201,32 +199,26 @@ fun PointHistoryScreen( ) } } - LazyColumn { - val pointHistory = when (pointHistoryUiState.pointHistoryTabType) { - PointHistoryTabType.GAINED_HISTORY -> pointHistoryUiState.pointHistory.gained - PointHistoryTabType.USED_HISTORY -> pointHistoryUiState.pointHistory.used - } - if (pointHistory.isEmpty()) { - item { - Box( - modifier = Modifier - .fillParentMaxSize() - ) { - DateRoadEmptyView( - emptyViewType = when (pointHistoryUiState.pointHistoryTabType) { - PointHistoryTabType.USED_HISTORY -> EmptyViewType.POINT_HISTORY_USED_HISTORY - PointHistoryTabType.GAINED_HISTORY -> EmptyViewType.POINT_HISTORY_GAINED_HISTORY - } - ) - } + val pointHistory = when (pointHistoryUiState.pointHistoryTabType) { + PointHistoryTabType.GAINED_HISTORY -> pointHistoryUiState.pointHistory.gained + PointHistoryTabType.USED_HISTORY -> pointHistoryUiState.pointHistory.used + } + if (pointHistory.isEmpty()) { + DateRoadEmptyView( + emptyViewType = when (pointHistoryUiState.pointHistoryTabType) { + PointHistoryTabType.USED_HISTORY -> EmptyViewType.POINT_HISTORY_USED_HISTORY + PointHistoryTabType.GAINED_HISTORY -> EmptyViewType.POINT_HISTORY_GAINED_HISTORY + } + ) + } else { + LazyColumn { + items(pointHistory.size) { index -> + PointHistoryCard(point = pointHistory[index]) + HorizontalDivider( + color = DateRoadTheme.colors.gray100, + thickness = 1.dp + ) } - } - items(pointHistory.size) { index -> - PointHistoryCard(point = pointHistory[index]) - HorizontalDivider( - color = DateRoadTheme.colors.gray100, - thickness = 1.dp - ) } } } @@ -263,9 +255,9 @@ fun PointHistoryPreview() { loadState = LoadState.Success, pointHistory = PointHistory( gained = listOf( - Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31"), - Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31"), - Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31") +// Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31"), +// Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31"), +// Point(point = "+150", description = "서버의 바다여행", createdAt = "2023.12.31") ), used = listOf() ) diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/read/ReadScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/read/ReadScreen.kt index e817e79..a7230e7 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/read/ReadScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/read/ReadScreen.kt @@ -107,6 +107,7 @@ fun ReadScreen( text = stringResource(id = R.string.read_title_empty, readUiState.name), style = DateRoadTheme.typography.titleExtra24 ) + Spacer(modifier = Modifier.height(16.dp)) DateRoadEmptyView(emptyViewType = EmptyViewType.READ) } else { Text( diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/signin/SignInScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/signin/SignInScreen.kt index 3ecca34..04b0a26 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/signin/SignInScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/signin/SignInScreen.kt @@ -3,10 +3,14 @@ package org.sopt.teamdateroad.presentation.ui.signin import android.content.Context import androidx.compose.foundation.Image import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect @@ -109,28 +113,43 @@ fun SignInScreen( if (signInUiState.isWebViewOpened) { DateRoadWebView(url = PRIVACY_POLICY_URL, onClose = webViewClose) } else { - Column( + Box( modifier = Modifier .fillMaxSize() .background(DateRoadTheme.colors.purple600), - horizontalAlignment = Alignment.CenterHorizontally + contentAlignment = Alignment.Center ) { - Spacer(modifier = Modifier.weight(226f)) - Image(painter = painterResource(id = R.drawable.img_splash_logo), contentDescription = null) - Spacer(modifier = Modifier.weight(167f)) - DateRoadKakaoLoginButton( - modifier = Modifier.padding(horizontal = 30.dp), - onClick = onSignInClicked - ) - Spacer(modifier = Modifier.weight(16f)) - Text( - text = "개인정보처리방침", - color = DateRoadTheme.colors.gray200, - style = DateRoadTheme.typography.bodyMed15, - textDecoration = TextDecoration.Underline, - modifier = Modifier.noRippleClickable(onClick = onWebViewClicked) - ) - Spacer(modifier = Modifier.weight(37f)) + Column( + modifier = Modifier + .wrapContentWidth() + .fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.weight(270f)) + Image(painter = painterResource(id = R.drawable.img_splash_logo), contentDescription = null) + Spacer(modifier = Modifier.weight(328f)) + } + Column( + modifier = Modifier + .wrapContentWidth() + .fillMaxHeight(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(modifier = Modifier.weight(591f)) + DateRoadKakaoLoginButton( + modifier = Modifier.padding(horizontal = 30.dp), + onClick = onSignInClicked + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + text = "개인정보처리방침", + color = DateRoadTheme.colors.gray200, + style = DateRoadTheme.typography.bodyMed15, + textDecoration = TextDecoration.Underline, + modifier = Modifier.noRippleClickable(onClick = onWebViewClicked) + ) + Spacer(modifier = Modifier.weight(124f)) + } } } } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/timeline/TimelineScreen.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/timeline/TimelineScreen.kt index a66917b..d5de826 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/ui/timeline/TimelineScreen.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/ui/timeline/TimelineScreen.kt @@ -135,7 +135,6 @@ fun TimelineScreen( ) } ) - Spacer(modifier = Modifier.height(52.dp)) Column( modifier = Modifier @@ -143,11 +142,13 @@ fun TimelineScreen( .align(Alignment.CenterHorizontally) ) { if (uiState.timelines.isEmpty()) { + Spacer(modifier = Modifier.height(29.dp)) DateRoadEmptyView( modifier = Modifier.fillMaxWidth(), emptyViewType = EmptyViewType.TIMELINE ) } else { + Spacer(modifier = Modifier.height(52.dp)) HorizontalPager( count = uiState.timelines.size, state = pagerState, @@ -157,12 +158,13 @@ fun TimelineScreen( ) { page -> val date = uiState.timelines[page] val timelineType = TimelineType.getTimelineTypeByIndex(page) + val paddingEnd = if (uiState.timelines.lastIndex == page) 0.dp else 16.dp TimelineCard( timeline = date, timelineType = timelineType, onClick = { navigateToTimelineDetail(timelineType, date.timelineId) }, modifier = Modifier - .padding(end = 16.dp) + .padding(end = paddingEnd) ) } diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/util/Constraints.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/util/Constraints.kt index 6278e40..aa4ac31 100644 --- a/app/src/main/java/org/sopt/teamdateroad/presentation/util/Constraints.kt +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/util/Constraints.kt @@ -18,7 +18,7 @@ object CourseDetailAmplitude { object DatePicker { const val DATE_PATTERN = "yyyy.MM.dd" const val YEAR_START = 2000 - const val YEAR_END = 2026 + const val YEAR_END = 2050 const val YEAR_START_INDEX = 25 const val MONTH_START = 1 const val MONTH_END = 12 diff --git a/app/src/main/java/org/sopt/teamdateroad/presentation/util/view/NumberCommaTransformation.kt b/app/src/main/java/org/sopt/teamdateroad/presentation/util/view/NumberCommaTransformation.kt new file mode 100644 index 0000000..40a5aff --- /dev/null +++ b/app/src/main/java/org/sopt/teamdateroad/presentation/util/view/NumberCommaTransformation.kt @@ -0,0 +1,32 @@ +package org.sopt.teamdateroad.presentation.util.view + +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.input.OffsetMapping +import androidx.compose.ui.text.input.TransformedText +import androidx.compose.ui.text.input.VisualTransformation +import java.text.NumberFormat +import java.util.Locale + +class NumberCommaTransformation : VisualTransformation { + + private fun Long?.formatWithComma(): String = + NumberFormat.getNumberInstance(Locale.US).format(this ?: 0) + + override fun filter(text: AnnotatedString): TransformedText { + val newText = AnnotatedString( + text = if (text.text.isEmpty()) "" else text.text.toLongOrNull().formatWithComma() + ) + return TransformedText( + text = newText, + offsetMapping = object : OffsetMapping { + override fun originalToTransformed(offset: Int): Int { + return if (offset != newText.length) newText.length else text.length + } + + override fun transformedToOriginal(offset: Int): Int { + return text.length + } + } + ) + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3def010..37c3be3 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -43,7 +43,7 @@ 아직 포인트 사용 내역이 없어요! 다른 커플들의 데이트 코스를 열람해 보세요! 아직 등록된 코스가 없어요! - 아직 연인과의 데이트 일정을 등록하지 않으셨나요? + 아직 연인과의 데이트 일정을 \n등록하지 않으셨나요? 지난 데이트가 없어요! 아직 열람한 코스가 없어요! 아직 등록한 코스가 없어요!