diff --git a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailItem.kt b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailItem.kt index 4604ebd9..0bb5f7b9 100644 --- a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailItem.kt +++ b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailItem.kt @@ -8,6 +8,7 @@ import ac.dnd.mour.android.presentation.common.theme.Caption2 import ac.dnd.mour.android.presentation.common.theme.Gray000 import ac.dnd.mour.android.presentation.common.theme.Gray200 import ac.dnd.mour.android.presentation.common.theme.Gray600 +import ac.dnd.mour.android.presentation.common.theme.Gray700 import ac.dnd.mour.android.presentation.common.theme.Gray800 import ac.dnd.mour.android.presentation.common.theme.Headline3 import ac.dnd.mour.android.presentation.common.theme.Primary1 @@ -28,11 +29,11 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width -import androidx.compose.material.Card import androidx.compose.material.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.graphics.Color import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.res.painterResource @@ -40,8 +41,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import java.text.DecimalFormat import kotlinx.datetime.LocalDate +import java.text.DecimalFormat @Composable fun HistoryDetailItem( @@ -50,12 +51,13 @@ fun HistoryDetailItem( ) { val currentViewWidth = LocalConfiguration.current.screenWidthDp.dp - Card( - shape = Shapes.medium, - backgroundColor = Gray000, - modifier = Modifier.clickable { - onClick(relatedHeart) - } + Box( + modifier = Modifier + .clip(Shapes.medium) + .background(Gray000) + .clickable { + onClick(relatedHeart) + } ) { Box( modifier = Modifier @@ -109,16 +111,18 @@ fun HistoryDetailItem( fontWeight = FontWeight.Normal ) if (measureTextWidth(relatedHeart.memo, memeStyle) <= currentViewWidth - 80.dp) { - Row(verticalAlignment = Alignment.CenterVertically) { - Image( - painter = painterResource(R.drawable.ic_board), - contentDescription = null - ) - Spacer(modifier = Modifier.width(6.dp)) - Text( - text = relatedHeart.memo, - style = memeStyle - ) + if (relatedHeart.memo.isNotEmpty()) { + Row(verticalAlignment = Alignment.CenterVertically) { + Image( + painter = painterResource(R.drawable.ic_board), + contentDescription = null + ) + Spacer(modifier = Modifier.width(6.dp)) + Text( + text = relatedHeart.memo, + style = memeStyle + ) + } } } Spacer(modifier = Modifier.height(6.dp)) @@ -138,7 +142,7 @@ fun HistoryDetailItem( Text( text = tag, style = Caption2.merge( - color = Gray600, + color = Gray700, fontWeight = FontWeight.Medium ), lineHeight = 18.sp diff --git a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailPageScreen.kt b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailPageScreen.kt index 455aa190..9a9bd4c9 100644 --- a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailPageScreen.kt +++ b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/HistoryDetailPageScreen.kt @@ -8,6 +8,7 @@ import ac.dnd.mour.android.presentation.common.theme.Gray400 import ac.dnd.mour.android.presentation.common.theme.Gray500 import ac.dnd.mour.android.presentation.common.theme.Gray600 import ac.dnd.mour.android.presentation.common.theme.Gray700 +import ac.dnd.mour.android.presentation.common.theme.Gray800 import ac.dnd.mour.android.presentation.common.theme.Primary4 import ac.dnd.mour.android.presentation.common.theme.Shapes import ac.dnd.mour.android.presentation.common.theme.Space24 @@ -119,13 +120,13 @@ fun HistoryDetailPageScreen( Text( text = viewSortType.typeName, style = Body1.merge( - color = Gray700, + color = Gray800, fontWeight = FontWeight.Medium ) ) Spacer(modifier = Modifier.width(2.dp)) Image( - painter = painterResource(R.drawable.ic_chevron_down), + painter = painterResource(R.drawable.ic_chevron_down_history), contentDescription = null, modifier = Modifier.size(16.dp) ) diff --git a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/growth/HistoryDetailGrowthScreen.kt b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/growth/HistoryDetailGrowthScreen.kt index fb3c2769..ba4a1b01 100644 --- a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/growth/HistoryDetailGrowthScreen.kt +++ b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/growth/HistoryDetailGrowthScreen.kt @@ -8,6 +8,7 @@ import ac.dnd.mour.android.presentation.common.theme.Gray200 import ac.dnd.mour.android.presentation.common.theme.Gray600 import ac.dnd.mour.android.presentation.common.theme.Gray700 import ac.dnd.mour.android.presentation.common.theme.Gray800 +import ac.dnd.mour.android.presentation.common.theme.Gray900 import ac.dnd.mour.android.presentation.common.theme.Headline1 import ac.dnd.mour.android.presentation.common.theme.Headline3 import ac.dnd.mour.android.presentation.common.theme.Shapes @@ -21,7 +22,6 @@ import ac.dnd.mour.android.presentation.ui.main.rememberApplicationState import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -32,9 +32,9 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.rememberCoroutineScope @@ -57,12 +57,13 @@ fun HistoryDetailGrowthScreen( handler: CoroutineExceptionHandler ) { val scope = rememberCoroutineScope() - + val scrollState = rememberScrollState() Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier .background(Gray200) .padding(horizontal = 20.dp) + .verticalScroll(scrollState) ) { Box( modifier = Modifier @@ -84,7 +85,7 @@ fun HistoryDetailGrowthScreen( Text( text = "성장 단계", style = Headline1.merge( - color = Gray800, + color = Gray900, fontWeight = FontWeight.SemiBold ) ) @@ -92,105 +93,101 @@ fun HistoryDetailGrowthScreen( Text( text = "총 6단계", style = Body1.merge( - color = Gray600, + color = Gray700, fontWeight = FontWeight.Normal ) ) Spacer(modifier = Modifier.height(33.dp)) - LazyColumn( - verticalArrangement = Arrangement.spacedBy(5.dp) - ) { - items(HistoryDetailGrowthType.entries) { type -> - Box( + HistoryDetailGrowthType.entries.forEach { type -> + Box( + modifier = Modifier + .background(Color.Transparent) + .height(102.dp) + ) { + Row( modifier = Modifier - .background(Color.Transparent) - .height(102.dp) + .padding(vertical = 7.dp) + .align(Alignment.Center) + .background( + color = Gray000, + shape = Shapes.large + ) + .padding(20.dp) + .wrapContentHeight() + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically ) { - Row( + Box( modifier = Modifier - .padding(vertical = 7.dp) - .align(Alignment.Center) .background( - color = Gray000, - shape = Shapes.large + color = Gray200, + shape = RoundedCornerShape(6.dp) ) - .padding(20.dp) - .wrapContentHeight() - .fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically ) { - Box( - modifier = Modifier - .background( - color = Gray200, - shape = RoundedCornerShape(6.dp) - ) - ) { - Image( - painter = painterResource(type.iconImageResource), - contentDescription = null, - contentScale = ContentScale.Crop - ) - } - Spacer(modifier = Modifier.width(12.dp)) - Column { - Text( - text = type.typeName, - style = Headline3.merge( - color = Gray800, - fontWeight = FontWeight.SemiBold - ) + Image( + painter = painterResource(type.iconImageResource), + contentDescription = null, + contentScale = ContentScale.Crop + ) + } + Spacer(modifier = Modifier.width(12.dp)) + Column { + Text( + text = type.typeName, + style = Headline3.merge( + color = Gray800, + fontWeight = FontWeight.SemiBold ) - Spacer(modifier = Modifier.height(2.dp)) - Text( - text = HistoryDetailGrowthType.getTypeString(type), - style = Body1.merge( - color = Gray600, - fontWeight = FontWeight.Normal - ) + ) + Spacer(modifier = Modifier.height(2.dp)) + Text( + text = HistoryDetailGrowthType.getTypeString(type), + style = Body1.merge( + color = Gray600, + fontWeight = FontWeight.Normal ) - } - Box( - modifier = Modifier.fillMaxSize() - ) { - Text( - text = "Lv.${type.level}", - modifier = Modifier.align(Alignment.BottomEnd), - style = Body2.merge( - color = Gray600, - fontWeight = FontWeight.Normal - ) + ) + } + Box( + modifier = Modifier.fillMaxSize() + ) { + Text( + text = "Lv.${type.level}", + modifier = Modifier.align(Alignment.BottomEnd), + style = Body2.merge( + color = Gray600, + fontWeight = FontWeight.Normal ) - } + ) } + } - if (model.currentType == type) { - Box( - modifier = Modifier - .padding(end = 20.dp) - .align(Alignment.TopEnd) - .background( - color = Gray700, - shape = RoundedCornerShape(100.dp) - ) - .padding( - horizontal = 12.dp, - vertical = 5.dp - ) - ) { - Text( - text = "현재 달성", - style = Body2.merge( - color = Gray000, - fontWeight = FontWeight.SemiBold - ) + if (model.currentType == type) { + Box( + modifier = Modifier + .padding(end = 20.dp) + .align(Alignment.TopEnd) + .background( + color = Gray700, + shape = RoundedCornerShape(100.dp) + ) + .padding( + horizontal = 12.dp, + vertical = 5.dp + ) + ) { + Text( + text = "현재 달성", + style = Body2.merge( + color = Gray000, + fontWeight = FontWeight.SemiBold ) - } + ) } } } } - Spacer(modifier = Modifier.height(31.dp)) + Spacer(modifier = Modifier.height(61.dp)) } LaunchedEffectWithLifecycle(event, handler) { diff --git a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/information/HistoryDetailInformationScreen.kt b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/information/HistoryDetailInformationScreen.kt index dbe3f198..af775e25 100644 --- a/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/information/HistoryDetailInformationScreen.kt +++ b/presentation/src/main/kotlin/ac/dnd/mour/android/presentation/ui/main/home/history/detail/information/HistoryDetailInformationScreen.kt @@ -7,8 +7,8 @@ import ac.dnd.mour.android.presentation.common.theme.Body1 import ac.dnd.mour.android.presentation.common.theme.Caption2 import ac.dnd.mour.android.presentation.common.theme.Gray000 import ac.dnd.mour.android.presentation.common.theme.Gray200 -import ac.dnd.mour.android.presentation.common.theme.Gray300 -import ac.dnd.mour.android.presentation.common.theme.Gray500 +import ac.dnd.mour.android.presentation.common.theme.Gray400 +import ac.dnd.mour.android.presentation.common.theme.Gray600 import ac.dnd.mour.android.presentation.common.theme.Gray700 import ac.dnd.mour.android.presentation.common.theme.Gray800 import ac.dnd.mour.android.presentation.common.theme.Headline3 @@ -49,6 +49,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil.compose.AsyncImage @@ -118,7 +119,7 @@ private fun HistoryDetailInformationScreen( .padding(Space8) ) { Image( - painter = painterResource(R.drawable.ic_close), + painter = painterResource(R.drawable.ic_close_rounded), contentDescription = null, modifier = Modifier .align(Alignment.CenterEnd) @@ -155,7 +156,7 @@ private fun HistoryDetailInformationScreen( Text( text = model.relationDetail.name, style = Headline3.merge( - color = Gray700, + color = Gray800, fontWeight = FontWeight.SemiBold ) ) @@ -163,7 +164,7 @@ private fun HistoryDetailInformationScreen( Text( text = "•", style = Headline3.merge( - color = Gray700, + color = Gray800, fontWeight = FontWeight.SemiBold ) ) @@ -171,7 +172,7 @@ private fun HistoryDetailInformationScreen( Text( text = model.relationDetail.group.name, style = Headline3.merge( - color = Gray700, + color = Gray800, fontWeight = FontWeight.SemiBold ) ) @@ -183,7 +184,7 @@ private fun HistoryDetailInformationScreen( .border( shape = Shapes.medium, width = 1.dp, - color = Gray300 + color = Gray400 ) .clickable { onResult() @@ -194,40 +195,45 @@ private fun HistoryDetailInformationScreen( ) ) { Image( - painter = painterResource(R.drawable.ic_edit), + painter = painterResource(R.drawable.ic_history_edit), contentDescription = null ) - Spacer(modifier = Modifier.height(2.dp)) + Spacer(modifier = Modifier.width(2.dp)) Text( text = "편집", + fontSize = 14.sp, style = Caption2.merge( - color = Gray500, + color = Gray600, fontWeight = FontWeight.Medium ) ) } Spacer(modifier = Modifier.height(24.dp)) - Box( - modifier = Modifier - .fillMaxWidth() - .wrapContentHeight() - .background( - color = Gray200, - shape = Shapes.large - ) - ) { - Text( + if (model.relationDetail.memo.isEmpty()) { + Spacer(modifier = Modifier.height(103.dp)) + } else { + Box( modifier = Modifier - .padding(20.dp) .fillMaxWidth() - .wrapContentHeight(), - text = model.relationDetail.memo, - minLines = 3, - style = Body1.merge( - color = Gray800, - fontWeight = FontWeight.Normal + .wrapContentHeight() + .background( + color = Gray200, + shape = Shapes.large + ) + ) { + Text( + modifier = Modifier + .padding(20.dp) + .fillMaxWidth() + .wrapContentHeight(), + text = model.relationDetail.memo, + minLines = 3, + style = Body1.merge( + color = Gray800, + fontWeight = FontWeight.Normal + ) ) - ) + } } Spacer(modifier = Modifier.height(30.dp)) } @@ -251,7 +257,7 @@ private fun HistoryDetailInformationScreenPreview() { id = 0L, name = "김진우", imageUrl = "", - memo = "무르는 경사비 관리앱으로 사용자가 다양한 개인적인 축하 상황에 대해 금전적 기여를 쉽게 할 수 있게 돕는 모바일 애플리케이션입니다", + memo = "", group = RelationDetailGroup( id = 0, name = "친척" diff --git a/presentation/src/main/res/drawable/ic_chevron_down_history.xml b/presentation/src/main/res/drawable/ic_chevron_down_history.xml new file mode 100644 index 00000000..29cf21f1 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_chevron_down_history.xml @@ -0,0 +1,13 @@ + + + diff --git a/presentation/src/main/res/drawable/ic_property_lv_4.xml b/presentation/src/main/res/drawable/ic_property_lv_4.xml index 3b1bb8c6..81cc3a55 100644 --- a/presentation/src/main/res/drawable/ic_property_lv_4.xml +++ b/presentation/src/main/res/drawable/ic_property_lv_4.xml @@ -7,100 +7,164 @@ - + + android:color="#FFFC60C1" + android:offset="0.01" /> + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + android:color="#FFFC60C1" + android:offset="0.01" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/presentation/src/main/res/drawable/ic_property_lv_5.xml b/presentation/src/main/res/drawable/ic_property_lv_5.xml index 81cc3a55..3b1bb8c6 100644 --- a/presentation/src/main/res/drawable/ic_property_lv_5.xml +++ b/presentation/src/main/res/drawable/ic_property_lv_5.xml @@ -7,164 +7,100 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:color="#FFB3B3B3" + android:offset="1" /> - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - + android:color="#FFE1E1E1" + android:offset="1" />