From d52c6ef2bd9f8cdec74c355e1053707bcde327ef Mon Sep 17 00:00:00 2001 From: juyeon Date: Sat, 24 May 2025 14:45:54 +0900 Subject: [PATCH 01/25] =?UTF-8?q?[ui]:=20view=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.name | 1 + .idea/compiler.xml | 4 +- .idea/misc.xml | 2 +- .../thip/ui/common/view/CountingBar.kt | 56 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 5 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 .idea/.name create mode 100644 app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..01dfec1d --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +Thip \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 4bf0b1b4..b86273d9 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,8 +1,6 @@ - - - + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 2aa690e7..503be042 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt b/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt new file mode 100644 index 00000000..792efd88 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt @@ -0,0 +1,56 @@ +package com.texthip.thip.ui.common.view + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +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.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.texthip.thip.R + +@Composable +fun CountingBar( + text: String, + modifier: Modifier = Modifier +) { + Box( + modifier = modifier + .background(colorResource(id = R.color.black), shape = RoundedCornerShape(20.dp)) + .padding(horizontal = 16.dp, vertical = 8.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = text, + //color = colorResource(id = R.color.teal_200), + color = Color(0xFFAA7FFB4), + fontSize = 14.sp + ) + } + } +} + +@Preview +@Composable +private fun CountingBarPrev() { + CountingBar( + text = stringResource(id = R.string.counting_bar_text), + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) +} \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d96e3164..010fcd3a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ Thip + 🔥210명이 읽기에 참여중이에요!🔥 \ No newline at end of file From 8a019d228244847d9b792844f40e1cd1b1a1403c Mon Sep 17 00:00:00 2001 From: juyeon Date: Sat, 24 May 2025 17:53:37 +0900 Subject: [PATCH 02/25] =?UTF-8?q?[ui]:=20modal/tooltip=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/common/modals/SnackBar.kt | 50 +++++++ .../texthip/thip/ui/common/modals/ToolTip.kt | 131 ++++++++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt new file mode 100644 index 00000000..e8c7e793 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt @@ -0,0 +1,50 @@ +package com.texthip.thip.ui.common.modals + +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.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + + +@Composable +fun SnackBar( + modifier: Modifier = Modifier, + backgroundColor: Color = Color.DarkGray, + messageColor: Color = Color.White, + actionTextColor: Color = Color(0xFFA8F3AC), + message: String, + actionText: String, + onActionClick: () -> Unit +) { + Box( + modifier = modifier + .background(backgroundColor, shape = RoundedCornerShape(16.dp)) + .padding(horizontal = 16.dp, vertical = 12.dp) + ) { + Row( + modifier = Modifier.fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + Text( + text = message, + color = messageColor, + fontSize = 14.sp + ) + Text( + text = actionText, + color = actionTextColor, + fontSize = 14.sp, + modifier = Modifier.clickable { onActionClick() } + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt new file mode 100644 index 00000000..4ecbd92e --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt @@ -0,0 +1,131 @@ +package com.texthip.thip.ui.common.modals + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +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.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material3.DividerDefaults.color +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Path +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.texthip.thip.R + +enum class ArrowPosition { + LEFT, CENTER, RIGHT +} + +@Composable +fun TriangleArrow( + color: Color = Color.DarkGray, + size: Dp = 12.dp, + modifier: Modifier = Modifier +) { + val triangleSizePx = with(androidx.compose.ui.platform.LocalDensity.current) { size.toPx() } + + Canvas(modifier = modifier.size(size)) { + val path = Path().apply { + moveTo(0f, triangleSizePx) + lineTo(triangleSizePx / 2f, 0f) + lineTo(triangleSizePx, triangleSizePx) + close() + } + drawPath(path, color) + } +} + +@Composable +fun PopupModal( + text: String, + modifier: Modifier = Modifier, + backgroundColor: Color = Color.DarkGray, + textColor: Color = Color(0xFFAA7FFB4), + arrowPosition: ArrowPosition = ArrowPosition.CENTER, + onClose: () -> Unit = {} +) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 0.dp) + ) { + val arrowModifier = when (arrowPosition) { + ArrowPosition.LEFT -> Modifier + .align(Alignment.TopStart) + .padding(start = 24.dp) + ArrowPosition.CENTER -> Modifier + .align(Alignment.TopCenter) + ArrowPosition.RIGHT -> Modifier + .align(Alignment.TopEnd) + .padding(end = 24.dp) + } + + TriangleArrow( + color = backgroundColor, + modifier = arrowModifier + ) + } + + Box( + modifier = Modifier + .background(backgroundColor, RoundedCornerShape(10.dp)) + .padding(horizontal = 16.dp, vertical = 12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = text, + color = textColor, + fontSize = 14.sp, + modifier = Modifier.weight(1f) + ) + Spacer(modifier = Modifier.width(8.dp)) + Icon( + imageVector = Icons.Default.Close, + contentDescription = "닫기", + tint = colorResource(id = R.color.white), + modifier = Modifier + .size(20.dp) + .clickable { onClose() } + ) + } + } + } +} + +@Preview(showBackground = true) +@Composable +private fun PopupPrev() { + PopupModal( + //실제 사용 시 stringResource()로 불러오기 + text = "독서진행도 80%부터 총평을 작성할 수 있습니다.", + modifier = Modifier + .width(400.dp) + .padding(16.dp), + arrowPosition=ArrowPosition.LEFT, + onClose = {} + ) +} + From 62ba3c9bd9ed7c5d8422a9d3505fe6426a9ad03e Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 12:17:41 +0900 Subject: [PATCH 03/25] =?UTF-8?q?[ui]:=20modal/snackbar=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../texthip/thip/ui/common/modals/SnackBar.kt | 34 +++++++++++++------ app/src/main/res/values/colors.xml | 4 +++ 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt index e8c7e793..56a90eeb 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt @@ -1,28 +1,29 @@ package com.texthip.thip.ui.common.modals +import com.texthip.thip.R 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.fillMaxWidth -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* 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.graphics.Color +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp - @Composable fun SnackBar( - modifier: Modifier = Modifier, - backgroundColor: Color = Color.DarkGray, - messageColor: Color = Color.White, - actionTextColor: Color = Color(0xFFA8F3AC), message: String, actionText: String, - onActionClick: () -> Unit + onActionClick: () -> Unit, + modifier: Modifier = Modifier, + backgroundColor: Color = colorResource(id = R.color.darkgray2), + messageColor: Color = colorResource(id=R.color.primary_white), + actionTextColor: Color = colorResource(id=R.color.point_green) ) { Box( modifier = modifier @@ -47,4 +48,17 @@ fun SnackBar( ) } } +} + +@Preview(showBackground = true) +@Composable +fun SnackBarPreview() { + SnackBar( + message = "댓글 작성이 완료되었습니다.", + actionText = "보러가기", + onActionClick = {}, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) } \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127d..ec183b8b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,6 +5,10 @@ #FF3700B3 #FF03DAC5 #FF018786 + #FFA7FFB4 #FF000000 + #FF3D3D3D + #FF282828 #FFFFFFFF + #FFFEFEFE \ No newline at end of file From ee54e247b333a3eef10894b28e19ad784c2a6f42 Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 12:18:07 +0900 Subject: [PATCH 04/25] =?UTF-8?q?[ui]:=20modal/tooltip=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=89=EC=83=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deploymentTargetSelector.xml | 3 +++ .../java/com/texthip/thip/ui/common/modals/ToolTip.kt | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index b268ef36..1f4a9b76 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -5,6 +5,9 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt index 4ecbd92e..b4b8c717 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close -import androidx.compose.material3.DividerDefaults.color import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -35,7 +34,7 @@ enum class ArrowPosition { @Composable fun TriangleArrow( - color: Color = Color.DarkGray, + color: Color = colorResource(id = R.color.darkgray), size: Dp = 12.dp, modifier: Modifier = Modifier ) { @@ -56,8 +55,8 @@ fun TriangleArrow( fun PopupModal( text: String, modifier: Modifier = Modifier, - backgroundColor: Color = Color.DarkGray, - textColor: Color = Color(0xFFAA7FFB4), + backgroundColor: Color = colorResource(id = R.color.darkgray), + textColor: Color = colorResource(id = R.color.point_green), arrowPosition: ArrowPosition = ArrowPosition.CENTER, onClose: () -> Unit = {} ) { @@ -105,7 +104,7 @@ fun PopupModal( Icon( imageVector = Icons.Default.Close, contentDescription = "닫기", - tint = colorResource(id = R.color.white), + tint = colorResource(id = R.color.primary_white), modifier = Modifier .size(20.dp) .clickable { onClose() } @@ -119,7 +118,6 @@ fun PopupModal( @Composable private fun PopupPrev() { PopupModal( - //실제 사용 시 stringResource()로 불러오기 text = "독서진행도 80%부터 총평을 작성할 수 있습니다.", modifier = Modifier .width(400.dp) From 3d5c7fb9a8b31be32c5acf3dcabd275f3d52f56e Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 14:07:12 +0900 Subject: [PATCH 05/25] =?UTF-8?q?[ui]:=20modal/InfoPopup,ScrollbarUtil=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/modals/InfoPopup.kt | 130 ++++++++++++++++++ .../thip/ui/common/modals/ScrollbarUtil.kt | 42 ++++++ app/src/main/res/values/colors.xml | 2 + 3 files changed, 174 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/modals/InfoPopup.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/common/modals/ScrollbarUtil.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/InfoPopup.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/InfoPopup.kt new file mode 100644 index 00000000..4181a6a3 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/InfoPopup.kt @@ -0,0 +1,130 @@ +package com.texthip.thip.ui.common.modals + +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.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.texthip.thip.R + +@Composable +fun InfoPopup( + title: String, + content: String, + modifier: Modifier = Modifier, + onDismiss: () -> Unit = {} +) { + val scrollState = rememberScrollState() + + Box( + modifier = modifier + .fillMaxWidth() + .background(colorResource(id = R.color.darkgray), shape = RoundedCornerShape(12.dp)) + .padding(20.dp) + ) { + Column { + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth() + ) { + Text( + text = title, + color = colorResource(id = R.color.primary_white), + fontSize = 16.sp, + fontFamily = FontFamily(Font(R.font.semibold)) + ) + } + + Spacer(modifier = Modifier.height(12.dp)) + + Box( + modifier = Modifier + .fillMaxWidth() + .height(284.dp) + .verticalScroll(scrollState) + .drawVerticalScrollbar(scrollState) + ) { + Text( + text = content, + color = colorResource(id = R.color.secondary_gray), + fontSize = 12.sp, + fontFamily = FontFamily(Font(R.font.regular)), + ) + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewInfoPopup() { + val dummyText = """ + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!!InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + InfoPopup프리뷰입니당!!! + 마지막 + """.trimIndent() + + InfoPopup( + title = "소개", + content = dummyText, + onDismiss = {} + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/ScrollbarUtil.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/ScrollbarUtil.kt new file mode 100644 index 00000000..4add6d6d --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/ScrollbarUtil.kt @@ -0,0 +1,42 @@ +package com.texthip.thip.ui.common.modals + +import androidx.compose.foundation.ScrollState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.CornerRadius +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +fun Modifier.drawVerticalScrollbar( + scrollState: ScrollState, + trackThickness: Dp = 1.dp, + thumbThickness: Dp = 3.dp, + trackColor: Color = Color.White.copy(alpha = 0.2f), + thumbColor: Color = Color.White.copy(alpha = 0.8f), +): Modifier = this.then( + Modifier.drawBehind { + if (scrollState.maxValue == 0) return@drawBehind + + val scrollbarHeight = size.height / 8f + val scrollProgress = scrollState.value.toFloat() / scrollState.maxValue + val scrollbarOffsetY = (size.height - scrollbarHeight) * scrollProgress + + //전체 고정 바 + drawRoundRect( + color = trackColor, + topLeft = Offset(x = size.width - trackThickness.toPx(), y = 0f), + size = Size(trackThickness.toPx(), size.height), + cornerRadius = CornerRadius(trackThickness.toPx() / 2) + ) + //핸들 바 + drawRoundRect( + color = thumbColor, + topLeft = Offset(x = size.width - thumbThickness.toPx(), y = scrollbarOffsetY), + size = Size(thumbThickness.toPx(), scrollbarHeight), + cornerRadius = CornerRadius(thumbThickness.toPx() / 2) + ) + } +) \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ec183b8b..06a2d1a8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -9,6 +9,8 @@ #FF000000 #FF3D3D3D #FF282828 + #FF525252 + #FFDADADA #FFFFFFFF #FFFEFEFE \ No newline at end of file From 84f4d16682df8146ed766ae9a168f31c726ba140 Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 14:11:21 +0900 Subject: [PATCH 06/25] =?UTF-8?q?[ui]:=20modal/SnackBar=20=ED=8F=B0?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/texthip/thip/ui/common/modals/SnackBar.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt index 56a90eeb..3e9828c1 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/SnackBar.kt @@ -11,6 +11,8 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.colorResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @@ -27,8 +29,8 @@ fun SnackBar( ) { Box( modifier = modifier - .background(backgroundColor, shape = RoundedCornerShape(16.dp)) - .padding(horizontal = 16.dp, vertical = 12.dp) + .background(backgroundColor, shape = RoundedCornerShape(12.dp)) + .padding(horizontal = 15.dp, vertical = 15.dp) ) { Row( modifier = Modifier.fillMaxWidth(), @@ -38,12 +40,14 @@ fun SnackBar( Text( text = message, color = messageColor, - fontSize = 14.sp + fontSize = 12.sp, + fontFamily = FontFamily(Font(R.font.medium)) ) Text( text = actionText, color = actionTextColor, - fontSize = 14.sp, + fontSize = 12.sp, + fontFamily = FontFamily(Font(R.font.semibold)), modifier = Modifier.clickable { onActionClick() } ) } @@ -59,6 +63,5 @@ fun SnackBarPreview() { onActionClick = {}, modifier = Modifier .fillMaxWidth() - .padding(16.dp) ) } \ No newline at end of file From 23a6ef39c5de62a86285aa103ea45d0755419644 Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 14:29:09 +0900 Subject: [PATCH 07/25] =?UTF-8?q?[ui]:=20modal/ToolTip,=20view/CountingBar?= =?UTF-8?q?=20=ED=8F=B0=ED=8A=B8=20=EC=88=98=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/texthip/thip/ui/common/modals/ToolTip.kt | 13 +++++++------ .../com/texthip/thip/ui/common/view/CountingBar.kt | 7 ++----- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt index b4b8c717..86ae1090 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/ToolTip.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.clickable 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.padding import androidx.compose.foundation.layout.size @@ -22,6 +21,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Path import androidx.compose.ui.res.colorResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -35,7 +36,7 @@ enum class ArrowPosition { @Composable fun TriangleArrow( color: Color = colorResource(id = R.color.darkgray), - size: Dp = 12.dp, + size: Dp = 13.dp, modifier: Modifier = Modifier ) { val triangleSizePx = with(androidx.compose.ui.platform.LocalDensity.current) { size.toPx() } @@ -88,7 +89,7 @@ fun PopupModal( Box( modifier = Modifier - .background(backgroundColor, RoundedCornerShape(10.dp)) + .background(backgroundColor, RoundedCornerShape(12.dp)) .padding(horizontal = 16.dp, vertical = 12.dp) ) { Row( @@ -97,16 +98,16 @@ fun PopupModal( Text( text = text, color = textColor, - fontSize = 14.sp, + fontSize = 12.sp, + fontFamily = FontFamily(Font(R.font.medium)), modifier = Modifier.weight(1f) ) - Spacer(modifier = Modifier.width(8.dp)) Icon( imageVector = Icons.Default.Close, contentDescription = "닫기", tint = colorResource(id = R.color.primary_white), modifier = Modifier - .size(20.dp) + .size(24.dp) .clickable { onClose() } ) } diff --git a/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt b/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt index 792efd88..32eb64b0 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/view/CountingBar.kt @@ -11,7 +11,6 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview @@ -26,7 +25,7 @@ fun CountingBar( ) { Box( modifier = modifier - .background(colorResource(id = R.color.black), shape = RoundedCornerShape(20.dp)) + .background(colorResource(id = R.color.darkgray2), shape = RoundedCornerShape(16.dp)) .padding(horizontal = 16.dp, vertical = 8.dp) ) { Row( @@ -36,8 +35,7 @@ fun CountingBar( ) { Text( text = text, - //color = colorResource(id = R.color.teal_200), - color = Color(0xFFAA7FFB4), + color = colorResource(id = R.color.point_green), fontSize = 14.sp ) } @@ -51,6 +49,5 @@ private fun CountingBarPrev() { text = stringResource(id = R.string.counting_bar_text), modifier = Modifier .fillMaxWidth() - .padding(16.dp) ) } \ No newline at end of file From 3b0c5db7457b36b3cdd4cd0826deb62b4281dca0 Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 14:45:36 +0900 Subject: [PATCH 08/25] =?UTF-8?q?[ui]:=20modal/DialogPopup=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/modals/DialogPopup.kt | 115 ++++++++++++++++++ app/src/main/res/values/colors.xml | 2 + 2 files changed, 117 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt new file mode 100644 index 00000000..1e306c86 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt @@ -0,0 +1,115 @@ +package com.texthip.thip.ui.common.modals + +import androidx.compose.foundation.background +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.fillMaxSize +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.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.text.font.Font +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.texthip.thip.R + +@Composable +fun DialogPopup( + title: String, + description: String, + onConfirm: () -> Unit, + onCancel: () -> Unit, + modifier: Modifier = Modifier +) { + Box( + modifier = modifier + .width(320.dp) + .height(182.dp) + .background( + color = colorResource(id = R.color.darkgray), + shape = RoundedCornerShape(12.dp) + ) + .padding(20.dp) + ) { + Column( + verticalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxSize() + ) { + Column { + Text( + text = title, + fontSize = 18.sp, + color = colorResource(id = R.color.primary_white), + fontFamily = FontFamily(Font(R.font.medium)) + ) + Spacer(modifier = Modifier.height(12.dp)) + Text( + text = description, + fontSize = 14.sp, + color = colorResource(id = R.color.primary_white), + fontFamily = FontFamily(Font(R.font.regular)) + ) + } + + Row( + horizontalArrangement = Arrangement.spacedBy(20.dp), + modifier = Modifier.fillMaxWidth() + ) { + Button( + onClick = onCancel, + colors = ButtonDefaults.buttonColors( + containerColor = colorResource(id = R.color.secondary_gray02) + ), + shape = RoundedCornerShape(12.dp), + modifier = Modifier.weight(1f) + ) { + Text( + "아니오", + color = colorResource(id = R.color.primary_white), + fontSize = 16.sp, + fontFamily = FontFamily(Font(R.font.semibold)) + ) + } + + Button( + onClick = onConfirm, + colors = ButtonDefaults.buttonColors( + containerColor = colorResource(id = R.color.button_primary) + ), + shape = RoundedCornerShape(12.dp), + modifier = Modifier.weight(1f) + ) { + Text( + "예", + color = colorResource(id = R.color.primary_white), + fontSize = 16.sp, + fontFamily = FontFamily(Font(R.font.semibold)) + ) + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +fun PreviewDialogPopup() { + DialogPopup( + title = "대화창의 폐쇄형 질문입니다?", + description = "대화창의 디스크립션을 입력합니다. 대화창의 디스크립션을 입력합니다.", + onConfirm = {}, + onCancel = {} + ) +} \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 06a2d1a8..afd5b026 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,6 +3,7 @@ #FFBB86FC #FF6200EE #FF3700B3 + #FF6868FF #FF03DAC5 #FF018786 #FFA7FFB4 @@ -11,6 +12,7 @@ #FF282828 #FF525252 #FFDADADA + #FF888888 #FFFFFFFF #FFFEFEFE \ No newline at end of file From 9a1f3116e7a92406f8968841b4e717fa2ce5584f Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 20:03:41 +0900 Subject: [PATCH 09/25] =?UTF-8?q?[ui]:=20appbar/BottomNavigation=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/bookSearch/screen/BookSearchScreen.kt | 19 ++++ .../texthip/thip/ui/feed/screen/FeedScreen.kt | 19 ++++ .../thip/ui/group/screen/GroupScreen.kt | 19 ++++ .../thip/ui/myPage/screen/MyPageScreen.kt | 19 ++++ .../com/texthip/thip/ui/navigator/BarItem.kt | 10 +++ .../thip/ui/navigator/BottomNavigationBar.kt | 86 +++++++++++++++++++ .../texthip/thip/ui/navigator/MainNavHost.kt | 20 +++++ .../texthip/thip/ui/navigator/NavBarItems.kt | 32 +++++++ .../com/texthip/thip/ui/navigator/Routes.kt | 15 ++++ 9 files changed, 239 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/bookSearch/screen/BookSearchScreen.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/myPage/screen/MyPageScreen.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/navigator/BarItem.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt diff --git a/app/src/main/java/com/texthip/thip/ui/bookSearch/screen/BookSearchScreen.kt b/app/src/main/java/com/texthip/thip/ui/bookSearch/screen/BookSearchScreen.kt new file mode 100644 index 00000000..b4e70e78 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/bookSearch/screen/BookSearchScreen.kt @@ -0,0 +1,19 @@ +package com.texthip.thip.ui.bookSearch.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.NavController + +@Composable +fun BookSearchScreen(navController: NavController) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text(text = "Book Search Screen") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt new file mode 100644 index 00000000..51e73f62 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/feed/screen/FeedScreen.kt @@ -0,0 +1,19 @@ +package com.texthip.thip.ui.feed.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.NavController + +@Composable +fun FeedScreen(navController: NavController) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text(text = "Feed Screen") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt new file mode 100644 index 00000000..e33da902 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/group/screen/GroupScreen.kt @@ -0,0 +1,19 @@ +package com.texthip.thip.ui.group.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.NavController + +@Composable +fun GroupScreen(navController: NavController) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text(text = "Group Screen") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/myPage/screen/MyPageScreen.kt b/app/src/main/java/com/texthip/thip/ui/myPage/screen/MyPageScreen.kt new file mode 100644 index 00000000..9195747e --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/myPage/screen/MyPageScreen.kt @@ -0,0 +1,19 @@ +package com.texthip.thip.ui.myPage.screen + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.navigation.NavController + +@Composable +fun MyPageScreen(navController: NavController) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text(text = "MyPage Screen") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/BarItem.kt b/app/src/main/java/com/texthip/thip/ui/navigator/BarItem.kt new file mode 100644 index 00000000..4a7f730b --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/navigator/BarItem.kt @@ -0,0 +1,10 @@ +package com.texthip.thip.ui.navigator + +import androidx.annotation.DrawableRes + +data class BarItem( + val title: String, + val route: String, + @DrawableRes val IconRes: Int, + @DrawableRes val SelectedIconRes: Int +) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt new file mode 100644 index 00000000..12abc4b9 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt @@ -0,0 +1,86 @@ +package com.texthip.thip.ui.navigator + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationBarItemDefaults +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.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.navigation.compose.currentBackStackEntryAsState +import com.texthip.thip.ui.theme.LocalThipColorsProvider + +@Composable +fun BottomNavigationBar(navController: NavController) { + val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route + + Box( + modifier = Modifier + .fillMaxWidth() + .height(73.dp) + .clip(RoundedCornerShape( + topStart = 12.dp, + topEnd = 12.dp, + bottomStart = 0.dp, + bottomEnd = 0.dp + )) + .background(LocalThipColorsProvider.current.Black), + contentAlignment = Alignment.Center + ) { + Row( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 32.dp, vertical = 16.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + NavBarItems.BarItems.forEach { item -> + val isSelected = currentRoute == item.route + + NavigationBarItem( + icon = { + Icon( + painter = painterResource(id = if (isSelected) item.IconRes else item.SelectedIconRes), + contentDescription = item.title, + ) + }, + label = { Text(item.title) }, + selected = isSelected, + onClick = { + if (!isSelected) { + navController.navigate(item.route) { + popUpTo(navController.graph.startDestinationId) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + }, + + colors = NavigationBarItemDefaults.colors( + indicatorColor = Color.Transparent, + selectedIconColor = LocalThipColorsProvider.current.Purple, + unselectedIconColor = Color.Unspecified, + selectedTextColor = LocalThipColorsProvider.current.Purple, + unselectedTextColor = Color.Unspecified + ) + ) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt new file mode 100644 index 00000000..16787c3f --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/navigator/MainNavHost.kt @@ -0,0 +1,20 @@ +package com.texthip.thip.ui.navigator + +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.compose.runtime.Composable +import androidx.navigation.NavHostController +import com.texthip.thip.ui.bookSearch.screen.BookSearchScreen +import com.texthip.thip.ui.feed.screen.FeedScreen +import com.texthip.thip.ui.group.screen.GroupScreen +import com.texthip.thip.ui.myPage.screen.MyPageScreen + +@Composable +fun MainNavHost(navController: NavHostController) { + NavHost(navController = navController, startDestination = Routes.Feed.route) { + composable(Routes.Feed.route) { FeedScreen(navController) } + composable(Routes.Group.route) { GroupScreen(navController) } + composable(Routes.BookSearch.route) { BookSearchScreen(navController) } + composable(Routes.MyPage.route) { MyPageScreen(navController) } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt b/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt new file mode 100644 index 00000000..35874d71 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt @@ -0,0 +1,32 @@ +package com.texthip.thip.ui.navigator + +import com.texthip.thip.R + +object NavBarItems { + val BarItems = listOf( + BarItem( + title = "피드", + route = Routes.Feed.route, + IconRes = R.drawable.ic_feed, + SelectedIconRes = R.drawable.ic_feed + ), + BarItem( + title = "모임", + route = Routes.Group.route, + IconRes = R.drawable.ic_group, + SelectedIconRes = R.drawable.ic_group + ), + BarItem( + title = "검색", + route = Routes.BookSearch.route, + IconRes = R.drawable.ic_booksearch, + SelectedIconRes = R.drawable.ic_booksearch + ), + BarItem( + title = "내 정보", + route = Routes.MyPage.route, + IconRes = R.drawable.ic_mypage, + SelectedIconRes = R.drawable.ic_mypage + ) + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt b/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt new file mode 100644 index 00000000..cb7d6e6e --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt @@ -0,0 +1,15 @@ +package com.texthip.thip.ui.navigator + +/* +sealed class Routes (val route: String, val label: String, @DrawableRes val iconRes:Int, val isRoot: Boolean= true){ + object Feed : Routes("home", "피드", R.drawable.ic_feed) + object Group : Routes("group", "모임", R.drawable.ic_group) + object Search : Routes("search", "검색", R.drawable.ic_booksearch) + object MyPage : Routes("mypage", "내 정보", R.drawable.ic_mypage) +}*/ +sealed class Routes(val route: String) { + object Feed : Routes("Feed") + object Group : Routes("Group") + object BookSearch : Routes("BookSearch") + object MyPage : Routes("MyPage") +} From eb59fe6a778e4b5fd98ffbd44c513ac7be7a553f Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 20:04:50 +0900 Subject: [PATCH 10/25] =?UTF-8?q?[ui]:=20modal/DialogPopup=20color=20?= =?UTF-8?q?=EC=88=98=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt b/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt index 1e306c86..f407e31f 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/modals/DialogPopup.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.texthip.thip.R +import com.texthip.thip.ui.theme.LocalThipColorsProvider @Composable fun DialogPopup( @@ -38,7 +39,7 @@ fun DialogPopup( .width(320.dp) .height(182.dp) .background( - color = colorResource(id = R.color.darkgray), + color = LocalThipColorsProvider.current.Black, shape = RoundedCornerShape(12.dp) ) .padding(20.dp) From 0ae1f1325583719035f9531ec2163810a0a68003 Mon Sep 17 00:00:00 2001 From: juyeon Date: Sun, 25 May 2025 22:46:27 +0900 Subject: [PATCH 11/25] =?UTF-8?q?[ui]:=20header/ProfileBar=5F1,2,3?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=83=9D=EC=84=B1(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 1 - app/build.gradle.kts | 1 + .../thip/ui/common/header/ProfileBar.kt | 122 ++++++++++++++++++ .../ui/common/header/ProfileBarWithDate.kt | 92 +++++++++++++ gradle/libs.versions.toml | 2 + 5 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/header/ProfileBar.kt create mode 100644 app/src/main/java/com/texthip/thip/ui/common/header/ProfileBarWithDate.kt diff --git a/.idea/misc.xml b/.idea/misc.xml index 503be042..1e536c6c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt index 12abc4b9..063c037b 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt @@ -22,7 +22,8 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import androidx.navigation.NavController import androidx.navigation.compose.currentBackStackEntryAsState -import com.texthip.thip.ui.theme.LocalThipColorsProvider +import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography @Composable fun BottomNavigationBar(navController: NavController) { @@ -31,34 +32,40 @@ fun BottomNavigationBar(navController: NavController) { Box( modifier = Modifier .fillMaxWidth() - .height(73.dp) - .clip(RoundedCornerShape( - topStart = 12.dp, - topEnd = 12.dp, - bottomStart = 0.dp, - bottomEnd = 0.dp - )) - .background(LocalThipColorsProvider.current.Black), + .height(90.dp) + .clip( + RoundedCornerShape( + topStart = 12.dp, + topEnd = 12.dp, + bottomStart = 0.dp, + bottomEnd = 0.dp + ) + ) + .background(colors.Black), contentAlignment = Alignment.Center ) { Row( modifier = Modifier .fillMaxSize() - .padding(horizontal = 32.dp, vertical = 16.dp), + .padding(horizontal = 32.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { NavBarItems.BarItems.forEach { item -> val isSelected = currentRoute == item.route - NavigationBarItem( icon = { Icon( - painter = painterResource(id = if (isSelected) item.IconRes else item.SelectedIconRes), + painter = painterResource(id = if (isSelected) item.SelectedIconRes else item.IconRes), contentDescription = item.title, ) }, - label = { Text(item.title) }, + label = { + Text( + text = item.title, + style = typography.navi_m500_s10 + ) + }, selected = isSelected, onClick = { if (!isSelected) { @@ -74,9 +81,9 @@ fun BottomNavigationBar(navController: NavController) { colors = NavigationBarItemDefaults.colors( indicatorColor = Color.Transparent, - selectedIconColor = LocalThipColorsProvider.current.Purple, + selectedIconColor = colors.Purple, unselectedIconColor = Color.Unspecified, - selectedTextColor = LocalThipColorsProvider.current.Purple, + selectedTextColor = colors.Purple, unselectedTextColor = Color.Unspecified ) ) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt b/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt index 35874d71..faf8ce59 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/NavBarItems.kt @@ -8,25 +8,25 @@ object NavBarItems { title = "피드", route = Routes.Feed.route, IconRes = R.drawable.ic_feed, - SelectedIconRes = R.drawable.ic_feed + SelectedIconRes = R.drawable.ic_feed_selected ), BarItem( title = "모임", route = Routes.Group.route, IconRes = R.drawable.ic_group, - SelectedIconRes = R.drawable.ic_group + SelectedIconRes = R.drawable.ic_group_selected ), BarItem( title = "검색", route = Routes.BookSearch.route, IconRes = R.drawable.ic_booksearch, - SelectedIconRes = R.drawable.ic_booksearch + SelectedIconRes = R.drawable.ic_booksearch_selected ), BarItem( title = "내 정보", route = Routes.MyPage.route, IconRes = R.drawable.ic_mypage, - SelectedIconRes = R.drawable.ic_mypage + SelectedIconRes = R.drawable.ic_mypage_selected ) ) } \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt b/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt index cb7d6e6e..d27920da 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/Routes.kt @@ -1,12 +1,6 @@ package com.texthip.thip.ui.navigator -/* -sealed class Routes (val route: String, val label: String, @DrawableRes val iconRes:Int, val isRoot: Boolean= true){ - object Feed : Routes("home", "피드", R.drawable.ic_feed) - object Group : Routes("group", "모임", R.drawable.ic_group) - object Search : Routes("search", "검색", R.drawable.ic_booksearch) - object MyPage : Routes("mypage", "내 정보", R.drawable.ic_mypage) -}*/ + sealed class Routes(val route: String) { object Feed : Routes("Feed") object Group : Routes("Group") diff --git a/app/src/main/res/drawable/ic_booksearch_selected.xml b/app/src/main/res/drawable/ic_booksearch_selected.xml new file mode 100644 index 00000000..19f60e65 --- /dev/null +++ b/app/src/main/res/drawable/ic_booksearch_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_feed_selected.xml b/app/src/main/res/drawable/ic_feed_selected.xml new file mode 100644 index 00000000..e6eadd7d --- /dev/null +++ b/app/src/main/res/drawable/ic_feed_selected.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_group_selected.xml b/app/src/main/res/drawable/ic_group_selected.xml new file mode 100644 index 00000000..128683b4 --- /dev/null +++ b/app/src/main/res/drawable/ic_group_selected.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_mypage_selected.xml b/app/src/main/res/drawable/ic_mypage_selected.xml new file mode 100644 index 00000000..336dc7ec --- /dev/null +++ b/app/src/main/res/drawable/ic_mypage_selected.xml @@ -0,0 +1,12 @@ + + + + From 7679dea3567ff61e4e48ec6c47260e15f719ae6a Mon Sep 17 00:00:00 2001 From: juyeon Date: Sat, 31 May 2025 20:03:15 +0900 Subject: [PATCH 20/25] =?UTF-8?q?[refactor]:=20BottomNavigation=20height?= =?UTF-8?q?=20=EC=88=98=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt index 063c037b..515cef2b 100644 --- a/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/navigator/BottomNavigationBar.kt @@ -32,7 +32,7 @@ fun BottomNavigationBar(navController: NavController) { Box( modifier = Modifier .fillMaxWidth() - .height(90.dp) + .height(73.dp) .clip( RoundedCornerShape( topStart = 12.dp, From b8a06fb12653657a18f3d923847d0f1f319b274b Mon Sep 17 00:00:00 2001 From: juyeon Date: Tue, 3 Jun 2025 17:01:09 +0900 Subject: [PATCH 21/25] =?UTF-8?q?[refactor]:=20=EC=9D=B8=EC=9E=90=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C,=20color,=20import=20=EC=88=98=EC=A0=95(#19)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deploymentTargetSelector.xml | 8 ++++++++ .../com/texthip/thip/ui/common/header/AuthorHeader.kt | 9 +++++---- .../java/com/texthip/thip/ui/common/header/ProfileBar.kt | 8 ++++---- .../texthip/thip/ui/common/header/ProfileBarWithDate.kt | 1 - .../java/com/texthip/thip/ui/common/modal/DialogPopup.kt | 5 +++-- .../java/com/texthip/thip/ui/common/modal/InfoPopup.kt | 2 +- .../java/com/texthip/thip/ui/common/modal/SnackBar.kt | 5 +++-- .../java/com/texthip/thip/ui/common/modal/ToolTip.kt | 9 +++++---- .../java/com/texthip/thip/ui/common/view/CountingBar.kt | 4 ++-- 9 files changed, 31 insertions(+), 20 deletions(-) diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 539d8910..c97774b5 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -15,6 +15,14 @@