diff --git a/core/src/main/java/com/gdg/core/designsystem/theme/Color.kt b/core/src/main/java/com/gdg/core/designsystem/theme/Color.kt index 147aac3..9febed3 100644 --- a/core/src/main/java/com/gdg/core/designsystem/theme/Color.kt +++ b/core/src/main/java/com/gdg/core/designsystem/theme/Color.kt @@ -30,6 +30,7 @@ val Green600 = Color(0xFF04D181) val Green500 = Color(0xFF9AE5DA) // Blue Color +val Blue300 = Color(0xFF049ED1) val Blue200 = Color(0xFF73CAED) val Blue100 = Color(0xFF98D1E8) @@ -51,6 +52,7 @@ class CrowdZeroColors( green700: Color, green600: Color, green500: Color, + blue300: Color, blue200: Color, blue100: Color ) { @@ -86,6 +88,8 @@ class CrowdZeroColors( private set var green500 by mutableStateOf(green500) private set + var blue300 by mutableStateOf(blue300) + private set var blue200 by mutableStateOf(blue200) private set var blue100 by mutableStateOf(blue100) @@ -108,6 +112,7 @@ class CrowdZeroColors( green700 = green700, green600 = green600, green500 = green500, + blue300 = blue300, blue200 = blue200, blue100 = blue100 ) @@ -152,6 +157,7 @@ fun crowdZeroColors( green700: Color = Green700, green600: Color = Green600, green500: Color = Green500, + blue300: Color = Blue300, blue200: Color = Blue200, blue100: Color = Blue100 ) = CrowdZeroColors( @@ -171,6 +177,7 @@ fun crowdZeroColors( green700 = green700, green600 = green600, green500 = green500, + blue300 = blue300, blue200 = blue200, blue100 = blue100 ) diff --git a/core/src/main/java/com/gdg/core/type/DustConditionType.kt b/core/src/main/java/com/gdg/core/type/DustConditionType.kt index ccc170e..95d8bae 100644 --- a/core/src/main/java/com/gdg/core/type/DustConditionType.kt +++ b/core/src/main/java/com/gdg/core/type/DustConditionType.kt @@ -3,6 +3,7 @@ package com.gdg.core.type import androidx.annotation.StringRes import androidx.compose.ui.graphics.Color import com.gdg.core.R +import com.gdg.core.designsystem.theme.Blue300 import com.gdg.core.designsystem.theme.Gray700 import com.gdg.core.designsystem.theme.Green600 import com.gdg.core.designsystem.theme.Orange @@ -14,14 +15,18 @@ enum class DustConditionType( ) { GOOD( title = R.string.dust_condition_good, - color = Green600 + color = Blue300 ), NORMAL( title = R.string.dust_condition_normal, - color = Orange + color = Green600 ), BAD( title = R.string.dust_condition_bad, + color = Orange + ), + VERY_BAD( + title = R.string.dust_condition_very_bad, color = Red ), UNKNOWN( diff --git a/core/src/main/res/values/strings.xml b/core/src/main/res/values/strings.xml index f7fe1a1..0fec91c 100644 --- a/core/src/main/res/values/strings.xml +++ b/core/src/main/res/values/strings.xml @@ -32,5 +32,6 @@ 이전 달 다음 달 모름 + 매우나쁨 \ No newline at end of file diff --git a/feature/src/main/java/com/gdg/feature/calendar/CalendarRoute.kt b/feature/src/main/java/com/gdg/feature/calendar/CalendarRoute.kt index 16c687c..d04da31 100644 --- a/feature/src/main/java/com/gdg/feature/calendar/CalendarRoute.kt +++ b/feature/src/main/java/com/gdg/feature/calendar/CalendarRoute.kt @@ -1,8 +1,6 @@ package com.gdg.feature.calendar import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -17,7 +15,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -29,8 +26,6 @@ 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.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.SpanStyle @@ -47,6 +42,7 @@ import com.gdg.core.state.UiState import com.gdg.core.util.TimeFormatter import com.gdg.domain.entity.ScheduleEntity import com.gdg.feature.R +import com.gdg.feature.calendar.component.CalendarInfoBox import timber.log.Timber import java.time.LocalDate import java.time.YearMonth @@ -212,80 +208,6 @@ fun CalendarScreen( } } -@Composable -fun CalendarInfoBox(data: ScheduleEntity) { - Column( - modifier = Modifier - .fillMaxWidth() - .border(0.5.dp, CrowdZeroTheme.colors.gray500, shape = RoundedCornerShape(15.dp)) - .clip(RoundedCornerShape(15.dp)) - .background(CrowdZeroTheme.colors.white) - .padding(dimensionResource(R.dimen.default_padding)) - ) { - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - modifier = Modifier.padding(end = 8.dp), - text = data.duration, - style = CrowdZeroTheme.typography.c4SemiBold, - color = CrowdZeroTheme.colors.green600 - ) - Text( - text = data.region, - style = CrowdZeroTheme.typography.c4SemiBold, - color = CrowdZeroTheme.colors.white, - modifier = Modifier - .background( - color = CrowdZeroTheme.colors.green600, - shape = RoundedCornerShape(30.dp) - ) - .padding(horizontal = 8.dp, vertical = 3.dp) - ) - } - Text( - text = data.location.replace("\n", " "), - style = CrowdZeroTheme.typography.h5Bold, - color = CrowdZeroTheme.colors.gray900 - ) - Row( - modifier = Modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically - ) { - Text( - modifier = Modifier.padding(end = 4.dp), - text = stringResource(R.string.calendar_people_reporting_title), - style = CrowdZeroTheme.typography.c3Regular, - color = CrowdZeroTheme.colors.gray600 - ) - Text( - modifier = Modifier.padding(end = 8.dp), - text = stringResource(R.string.calendar_people_reporting, data.people), - style = CrowdZeroTheme.typography.c3Regular, - color = CrowdZeroTheme.colors.gray800 - ) - Text( - modifier = Modifier.padding(end = 8.dp), - text = stringResource(R.string.calendar_slash), - style = CrowdZeroTheme.typography.c3Regular, - color = CrowdZeroTheme.colors.gray600 - ) - Text( - modifier = Modifier.padding(end = 4.dp), - text = stringResource(R.string.calendar_jurisdiction), - style = CrowdZeroTheme.typography.c3Regular, - color = CrowdZeroTheme.colors.gray600 - ) - Text( - text = data.jurisdiction.replace("\n", " "), - style = CrowdZeroTheme.typography.c3Regular, - color = CrowdZeroTheme.colors.gray800 - ) - } - } -} - @Preview(showBackground = true) @Composable fun CalendarScreenPreview() { diff --git a/feature/src/main/java/com/gdg/feature/calendar/component/CalendarInfoBox.kt b/feature/src/main/java/com/gdg/feature/calendar/component/CalendarInfoBox.kt new file mode 100644 index 0000000..132d0fe --- /dev/null +++ b/feature/src/main/java/com/gdg/feature/calendar/component/CalendarInfoBox.kt @@ -0,0 +1,117 @@ +package com.gdg.feature.calendar.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.dimensionResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.gdg.core.designsystem.theme.CrowdZeroAndroidTheme +import com.gdg.core.designsystem.theme.CrowdZeroTheme +import com.gdg.core.extension.showIf +import com.gdg.domain.entity.ScheduleEntity +import com.gdg.feature.R + +@Composable +fun CalendarInfoBox(data: ScheduleEntity) { + Column( + modifier = Modifier + .fillMaxWidth() + .border(0.5.dp, CrowdZeroTheme.colors.gray500, shape = RoundedCornerShape(15.dp)) + .clip(RoundedCornerShape(15.dp)) + .background(CrowdZeroTheme.colors.white) + .padding(dimensionResource(R.dimen.default_padding)), + verticalArrangement = Arrangement.spacedBy(2.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + modifier = Modifier.padding(end = 8.dp), + text = data.duration.replace("\n", " "), + style = CrowdZeroTheme.typography.c4SemiBold, + color = CrowdZeroTheme.colors.green600 + ) + Text( + text = data.region, + style = CrowdZeroTheme.typography.c4SemiBold, + color = CrowdZeroTheme.colors.white, + modifier = Modifier + .background( + color = CrowdZeroTheme.colors.green600, + shape = RoundedCornerShape(30.dp) + ) + .padding(horizontal = 8.dp, vertical = 3.dp) + .showIf(data.region != "None") + ) + } + Text( + text = data.location.replace("\n", " "), + style = CrowdZeroTheme.typography.h5Bold, + color = CrowdZeroTheme.colors.gray900 + ) + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + modifier = Modifier.padding(end = 4.dp), + text = stringResource(R.string.calendar_people_reporting_title), + style = CrowdZeroTheme.typography.c3Regular, + color = CrowdZeroTheme.colors.gray600 + ) + Text( + modifier = Modifier.padding(end = 8.dp), + text = stringResource(R.string.calendar_people_reporting, data.people), + style = CrowdZeroTheme.typography.c3Regular, + color = CrowdZeroTheme.colors.gray800 + ) + Text( + modifier = Modifier.padding(end = 8.dp), + text = stringResource(R.string.calendar_slash), + style = CrowdZeroTheme.typography.c3Regular, + color = CrowdZeroTheme.colors.gray600 + ) + Text( + modifier = Modifier.padding(end = 4.dp), + text = stringResource(R.string.calendar_jurisdiction), + style = CrowdZeroTheme.typography.c3Regular, + color = CrowdZeroTheme.colors.gray600 + ) + Text( + text = data.jurisdiction.replace("\n", " "), + style = CrowdZeroTheme.typography.c3Regular, + color = CrowdZeroTheme.colors.gray800 + ) + } + } +} + +@Preview(showBackground = true) +@Composable +fun CalendarInfoBoxPreview() { + CrowdZeroAndroidTheme { + CalendarInfoBox( + ScheduleEntity( + date = "2021-10-01", + duration = "07:30 ~ 24:00", + location = "두터교회 앞 인도 및 2개 차로", + region = "한남동", + people = "3000", + jurisdiction = "용산" + ) + ) + } +} diff --git a/feature/src/main/java/com/gdg/feature/detail/DetailRoute.kt b/feature/src/main/java/com/gdg/feature/detail/DetailRoute.kt index 9ea9423..ce83630 100644 --- a/feature/src/main/java/com/gdg/feature/detail/DetailRoute.kt +++ b/feature/src/main/java/com/gdg/feature/detail/DetailRoute.kt @@ -213,8 +213,8 @@ fun DetailScreen( true -> when (congestionState.data.level) { "여유" -> OverlayImage.fromResource(CongestionType.GOOD.icon) "보통" -> OverlayImage.fromResource(CongestionType.NORMAL.icon) - "약간 혼잡" -> OverlayImage.fromResource(CongestionType.LITTLE_BAD.icon) - "혼잡" -> OverlayImage.fromResource(CongestionType.BAD.icon) + "약간 붐빔" -> OverlayImage.fromResource(CongestionType.LITTLE_BAD.icon) + "붐빔" -> OverlayImage.fromResource(CongestionType.BAD.icon) else -> OverlayImage.fromResource(CongestionType.UNKNOWN.icon) } diff --git a/feature/src/main/java/com/gdg/feature/detail/component/CongestionItem.kt b/feature/src/main/java/com/gdg/feature/detail/component/CongestionItem.kt index 47a767e..740c9de 100644 --- a/feature/src/main/java/com/gdg/feature/detail/component/CongestionItem.kt +++ b/feature/src/main/java/com/gdg/feature/detail/component/CongestionItem.kt @@ -43,8 +43,8 @@ fun CongestionItem( color = when (data.level) { "여유" -> CrowdZeroTheme.colors.green600 "보통" -> CrowdZeroTheme.colors.yellow - "약간 혼잡" -> CrowdZeroTheme.colors.orange - "혼잡" -> CrowdZeroTheme.colors.red + "약간 붐빔" -> CrowdZeroTheme.colors.orange + "붐빔" -> CrowdZeroTheme.colors.red else -> CrowdZeroTheme.colors.gray700 } ) @@ -69,8 +69,8 @@ fun CongestionItem( congestionType = when (data.level) { "여유" -> CongestionType.GOOD "보통" -> CongestionType.NORMAL - "약간 혼잡" -> CongestionType.LITTLE_BAD - "혼잡" -> CongestionType.BAD + "약간 붐빔" -> CongestionType.LITTLE_BAD + "붐빔" -> CongestionType.BAD else -> CongestionType.UNKNOWN } ) diff --git a/feature/src/main/java/com/gdg/feature/detail/component/WeatherItem.kt b/feature/src/main/java/com/gdg/feature/detail/component/WeatherItem.kt index d91a2d5..2728b65 100644 --- a/feature/src/main/java/com/gdg/feature/detail/component/WeatherItem.kt +++ b/feature/src/main/java/com/gdg/feature/detail/component/WeatherItem.kt @@ -79,6 +79,7 @@ fun WeatherItem( "좋음" -> DustConditionType.GOOD "보통" -> DustConditionType.NORMAL "나쁨" -> DustConditionType.BAD + "매우나쁨" -> DustConditionType.VERY_BAD else -> DustConditionType.UNKNOWN } ) @@ -89,6 +90,7 @@ fun WeatherItem( "좋음" -> DustConditionType.GOOD "보통" -> DustConditionType.NORMAL "나쁨" -> DustConditionType.BAD + "매우나쁨" -> DustConditionType.VERY_BAD else -> DustConditionType.UNKNOWN } ) @@ -105,6 +107,8 @@ fun WeatherItem( imageVector = when (data.skyStts) { "맑음" -> ImageVector.vectorResource(R.drawable.ic_sunny) "구름많음" -> ImageVector.vectorResource(R.drawable.ic_cloudy) + "흐림" -> ImageVector.vectorResource(R.drawable.ic_cloudy) + "소나기" -> ImageVector.vectorResource(R.drawable.ic_rainy) "비" -> ImageVector.vectorResource(R.drawable.ic_rainy) "눈" -> ImageVector.vectorResource(R.drawable.ic_snowy) else -> ImageVector.vectorResource(R.drawable.ic_sunny_cloudy) diff --git a/feature/src/main/java/com/gdg/feature/map/component/PlaceInfoCard.kt b/feature/src/main/java/com/gdg/feature/map/component/PlaceInfoCard.kt index 52cb581..de66de9 100644 --- a/feature/src/main/java/com/gdg/feature/map/component/PlaceInfoCard.kt +++ b/feature/src/main/java/com/gdg/feature/map/component/PlaceInfoCard.kt @@ -105,8 +105,8 @@ fun PlaceInfoCard( color = when (place.congestion) { "여유" -> CrowdZeroTheme.colors.green600 "보통" -> CrowdZeroTheme.colors.yellow - "약간 혼잡" -> CrowdZeroTheme.colors.orange - "혼잡" -> CrowdZeroTheme.colors.red + "약간 붐빔" -> CrowdZeroTheme.colors.orange + "붐빔" -> CrowdZeroTheme.colors.red else -> CrowdZeroTheme.colors.gray700 } ) @@ -125,8 +125,8 @@ fun PlaceInfoCard( color = when (place.congestion) { "여유" -> CrowdZeroTheme.colors.green600 "보통" -> CrowdZeroTheme.colors.yellow - "약간 혼잡" -> CrowdZeroTheme.colors.orange - "혼잡" -> CrowdZeroTheme.colors.red + "약간 붐빔" -> CrowdZeroTheme.colors.orange + "붐빔" -> CrowdZeroTheme.colors.red else -> CrowdZeroTheme.colors.gray700 } )