From 964d2ddb00a225f09d0facf52e26f1f043bc9550 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 01:39:55 +0900 Subject: [PATCH 1/9] =?UTF-8?q?[UI]:=20book=20top=20app=20bar=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/topappbar/BookTopAppBar.kt | 68 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 +- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt new file mode 100644 index 00000000..93e55ede --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt @@ -0,0 +1,68 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import com.texthip.thip.R +import com.texthip.thip.ui.common.view.CountingBar +import com.texthip.thip.ui.theme.ThipTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun BookTopAppBar( + onLeftClick: () -> Unit, + onRightClick: () -> Unit, + count: Int = 0, +) { + TopAppBar( + navigationIcon = { + IconButton(onClick = { + onLeftClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_arrow_back), + contentDescription = "Back Button", + tint = Color.Unspecified + ) + } + + }, + title = { + CountingBar( + count = count, + ) + }, + actions = { + IconButton(onClick = { + onRightClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_more), + contentDescription = "More Options", + tint = Color.Unspecified + ) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ), + ) +} + +@Preview(showBackground = false) +@Composable +private fun BookTopAppBarPreview() { + ThipTheme { + BookTopAppBar( + onLeftClick = { }, + onRightClick = { }, + count = 210 + ) + } +} \ 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 a85018cb..8cfbc11b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,7 +2,7 @@ Thip - πŸ”₯%dλͺ…이 읽기에 μ°Έμ—¬μ€‘μ΄μ—μš”!πŸ”₯ + πŸ”₯ %dλͺ…이 읽기에 μ°Έμ—¬μ€‘μ΄μ—μš”! πŸ”₯ ꡬ독 From ef5fc445291cafe15704bd010026cb7b7922d30f Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 01:57:19 +0900 Subject: [PATCH 2/9] =?UTF-8?q?[UI]:=20default=20top=20app=20bar=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deploymentTargetSelector.xml | 32 ------- .../thip/ui/common/topappbar/BookTopAppBar.kt | 3 +- .../ui/common/topappbar/DefaultTopAppBar.kt | 86 +++++++++++++++++++ 3 files changed, 87 insertions(+), 34 deletions(-) delete mode 100644 .idea/deploymentTargetSelector.xml create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml deleted file mode 100644 index 75b3c473..00000000 --- a/.idea/deploymentTargetSelector.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt index 93e55ede..31a0c65f 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt @@ -16,9 +16,9 @@ import com.texthip.thip.ui.theme.ThipTheme @OptIn(ExperimentalMaterial3Api::class) @Composable fun BookTopAppBar( + count: Int = 0, onLeftClick: () -> Unit, onRightClick: () -> Unit, - count: Int = 0, ) { TopAppBar( navigationIcon = { @@ -31,7 +31,6 @@ fun BookTopAppBar( tint = Color.Unspecified ) } - }, title = { CountingBar( diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt new file mode 100644 index 00000000..abd37546 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt @@ -0,0 +1,86 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import com.texthip.thip.R +import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DefaultTopAppBar( + title: String = "νŽ˜μ΄μ§€λͺ…", + isTitleVisible: Boolean = true, + isRightIconVisible: Boolean = false, + onLeftClick: () -> Unit, + onRightClick: () -> Unit = {}, +) { + CenterAlignedTopAppBar( + navigationIcon = { + IconButton(onClick = { + onLeftClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_arrow_back), + contentDescription = "Back Button", + tint = Color.Unspecified + ) + } + }, + title = { + if (isTitleVisible) { + Text( + text = title, + color = colors.White, + style = typography.bigtitle_b700_s22_h24 + ) + } + }, + actions = { + if (isRightIconVisible) { + IconButton(onClick = { + onRightClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_more), + contentDescription = "More Options", + tint = Color.Unspecified + ) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ), + ) +} + +@Preview +@Composable +private fun DefaultTopAppBarPreview() { + Column { + DefaultTopAppBar( + onLeftClick = {}, + ) + DefaultTopAppBar( + isRightIconVisible = true, + onLeftClick = {}, + onRightClick = {}, + ) + DefaultTopAppBar( + isRightIconVisible = true, + isTitleVisible = false, + onLeftClick = {}, + onRightClick = {}, + ) + } +} \ No newline at end of file From 128ee8aa48e6c1e3f5f162960bbf8edf14ec4646 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:11:25 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[refactor]:=20header=20button=20=ED=99=9C?= =?UTF-8?q?=EC=84=B1=ED=99=94=EB=90=A0=20=EB=95=8C=20=ED=81=B4=EB=A6=AD=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../thip/ui/common/buttons/HeaderButton.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/buttons/HeaderButton.kt b/app/src/main/java/com/texthip/thip/ui/common/buttons/HeaderButton.kt index cdff5839..a97ad7de 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/buttons/HeaderButton.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/buttons/HeaderButton.kt @@ -10,10 +10,6 @@ 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.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -27,19 +23,17 @@ import com.texthip.thip.ui.theme.ThipTheme.typography fun HeaderButton( modifier: Modifier = Modifier, text: String, + enabled: Boolean = false, onClick: () -> Unit = {}, ) { - var isClicked by remember { mutableStateOf(false) } - Box( modifier = modifier .background( - color = if (isClicked) colors.Purple else colors.Grey02, + color = if (enabled) colors.Purple else colors.Grey02, shape = RoundedCornerShape(20.dp) ) - .clickable { - isClicked = !isClicked - onClick() + .let { + if (enabled) it.clickable(onClick = onClick) else it } .padding(vertical = 4.dp, horizontal = 12.dp), contentAlignment = Alignment.Center, @@ -60,8 +54,17 @@ private fun HeaderButtonPreview() { horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { + // λΉ„ν™œμ„± μƒνƒœ + HeaderButton( + text = stringResource(R.string.finish), + enabled = false + ) + + // ν™œμ„± μƒνƒœ HeaderButton( text = stringResource(R.string.finish), + enabled = true, + onClick = { } ) } } \ No newline at end of file From de8b36720df13ef3dfc383d37eb0d3ba90283346 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:12:00 +0900 Subject: [PATCH 4/9] =?UTF-8?q?[UI]:=20feed=20list=20top=20app=20bar=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/topappbar/FeedListTopAppBar.kt | 92 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 + 2 files changed, 94 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt new file mode 100644 index 00000000..7e8603b2 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt @@ -0,0 +1,92 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.width +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.texthip.thip.R +import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun FeedListTopAppBar( + nickname: String = "ThipUser 01ThipUser 01", + isRightIconVisible: Boolean = false, + onLeftClick: () -> Unit, + onRightClick: () -> Unit = {}, +) { + CenterAlignedTopAppBar( + navigationIcon = { + IconButton(onClick = { + onLeftClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_arrow_back), + contentDescription = "Back Button", + tint = Color.Unspecified + ) + } + }, + title = { + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text( + text = nickname, + color = colors.White, + style = typography.bigtitle_b700_s22_h24, + modifier = Modifier.width(100.dp), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + Text( + text = stringResource(R.string.subscriber), + color = colors.White, + style = typography.bigtitle_b700_s22_h24, + modifier = Modifier.width(100.dp), + maxLines = 1 + ) + } + }, + actions = { + if (isRightIconVisible) { + IconButton(onClick = { + onRightClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_more), + contentDescription = "More Options", + tint = Color.Unspecified + ) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ), + ) +} + +@Preview +@Composable +private fun FeedListTopAppBarPreview() { + FeedListTopAppBar( + isRightIconVisible = true, + onLeftClick = {}, + onRightClick = {} + ) +} \ 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 8cfbc11b..857252c7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -44,4 +44,6 @@ ν•΄λ‹Ή λ„μ„œλŠ” %1$dpκΉŒμ§€λ§Œ μžˆμŠ΅λ‹ˆλ‹€. + + λ‹˜μ˜ κ΅¬λ…μž \ No newline at end of file From 00272a216e5a090c788100e23ea75341ffddda0c Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:16:22 +0900 Subject: [PATCH 5/9] =?UTF-8?q?[UI]:=20input=20top=20app=20bar=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/topappbar/InputTopAppBar.kt | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt new file mode 100644 index 00000000..152daa81 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt @@ -0,0 +1,75 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CenterAlignedTopAppBar +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.texthip.thip.R +import com.texthip.thip.ui.common.buttons.HeaderButton +import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun InputTopAppBar( + title: String = "νŽ˜μ΄μ§€λͺ…", + enabled: Boolean = false, + onLeftClick: () -> Unit, + onRightClick: () -> Unit = {}, +) { + CenterAlignedTopAppBar( + navigationIcon = { + IconButton(onClick = { + onLeftClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_arrow_back), + contentDescription = "Back Button", + tint = Color.Unspecified + ) + } + }, + title = { + Text( + text = title, + color = colors.White, + style = typography.bigtitle_b700_s22_h24 + ) + }, + actions = { + HeaderButton( + text = stringResource(R.string.finish), + enabled = enabled, + onClick = { + onRightClick() + }, + modifier = Modifier.padding( + end = 18.dp + ) + ) + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ), + ) +} + +@Preview +@Composable +private fun InputTopAppBarPreview() { + InputTopAppBar( + enabled = true, + onLeftClick = {}, + onRightClick = {} + ) +} \ No newline at end of file From 59630fef64bf54e5ee6638e25250748b1191ee9b Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:21:03 +0900 Subject: [PATCH 6/9] =?UTF-8?q?[refactor]:=20input=20top=20app=20bar=20cus?= =?UTF-8?q?tom=EB=90=98=EA=B2=8C=20=EC=88=98=EC=A0=95=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/topappbar/InputTopAppBar.kt | 49 ++++++++++++------- app/src/main/res/values/strings.xml | 1 + 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt index 152daa81..bf81ef45 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt @@ -1,5 +1,6 @@ package com.texthip.thip.ui.common.topappbar +import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.padding import androidx.compose.material3.CenterAlignedTopAppBar import androidx.compose.material3.ExperimentalMaterial3Api @@ -23,20 +24,24 @@ import com.texthip.thip.ui.theme.ThipTheme.typography @Composable fun InputTopAppBar( title: String = "νŽ˜μ΄μ§€λͺ…", - enabled: Boolean = false, - onLeftClick: () -> Unit, + isRightButtonEnabled: Boolean = false, + rightButtonName: String = stringResource(R.string.finish), + isLeftIconVisible: Boolean = true, + onLeftClick: () -> Unit = {}, onRightClick: () -> Unit = {}, ) { CenterAlignedTopAppBar( navigationIcon = { - IconButton(onClick = { - onLeftClick() - }) { - Icon( - painter = painterResource(R.drawable.ic_arrow_back), - contentDescription = "Back Button", - tint = Color.Unspecified - ) + if (isLeftIconVisible) { + IconButton(onClick = { + onLeftClick() + }) { + Icon( + painter = painterResource(R.drawable.ic_arrow_back), + contentDescription = "Back Button", + tint = Color.Unspecified + ) + } } }, title = { @@ -48,8 +53,8 @@ fun InputTopAppBar( }, actions = { HeaderButton( - text = stringResource(R.string.finish), - enabled = enabled, + text = rightButtonName, + enabled = isRightButtonEnabled, onClick = { onRightClick() }, @@ -67,9 +72,19 @@ fun InputTopAppBar( @Preview @Composable private fun InputTopAppBarPreview() { - InputTopAppBar( - enabled = true, - onLeftClick = {}, - onRightClick = {} - ) + Column { + InputTopAppBar( + isRightButtonEnabled = true, + onLeftClick = {}, + onRightClick = {} + ) + InputTopAppBar( + title = "μ„€μ • 1/2", + isRightButtonEnabled = false, + rightButtonName = stringResource(R.string.next), + isLeftIconVisible = false, + onLeftClick = {}, + onRightClick = {} + ) + } } \ 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 857252c7..b7a4183c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -46,4 +46,5 @@ λ‹˜μ˜ κ΅¬λ…μž + λ‹€μŒ \ No newline at end of file From e5e34419f26ba55ce75471407a7cb3d24a921022 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 02:22:27 +0900 Subject: [PATCH 7/9] =?UTF-8?q?[chore]:=20default=20top=20app=20bar=20prev?= =?UTF-8?q?iew=20=EC=B6=94=EA=B0=80=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt index abd37546..1da73371 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt @@ -82,5 +82,10 @@ private fun DefaultTopAppBarPreview() { onLeftClick = {}, onRightClick = {}, ) + DefaultTopAppBar( + isRightIconVisible = false, + isTitleVisible = false, + onLeftClick = {}, + ) } } \ No newline at end of file From a57fafe1c21d572d81334130d4b8fffb498f6afc Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 03:07:05 +0900 Subject: [PATCH 8/9] =?UTF-8?q?[UI]:=20logo=20top=20app=20bar=20=EC=A0=9C?= =?UTF-8?q?=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/deploymentTargetSelector.xml | 10 +++ .../thip/ui/common/topappbar/BookTopAppBar.kt | 8 +- .../ui/common/topappbar/DefaultTopAppBar.kt | 8 +- .../ui/common/topappbar/FeedListTopAppBar.kt | 4 +- .../ui/common/topappbar/InputTopAppBar.kt | 4 +- .../thip/ui/common/topappbar/LogoTopAppBar.kt | 79 +++++++++++++++++++ app/src/main/res/drawable/ic_logo.xml | 24 ++++++ 7 files changed, 119 insertions(+), 18 deletions(-) create mode 100644 .idea/deploymentTargetSelector.xml create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt create mode 100644 app/src/main/res/drawable/ic_logo.xml diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 00000000..5a5e615c --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt index 31a0c65f..69e3e31f 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/BookTopAppBar.kt @@ -22,9 +22,7 @@ fun BookTopAppBar( ) { TopAppBar( navigationIcon = { - IconButton(onClick = { - onLeftClick() - }) { + IconButton(onClick = onLeftClick) { Icon( painter = painterResource(R.drawable.ic_arrow_back), contentDescription = "Back Button", @@ -38,9 +36,7 @@ fun BookTopAppBar( ) }, actions = { - IconButton(onClick = { - onRightClick() - }) { + IconButton(onClick = onRightClick) { Icon( painter = painterResource(R.drawable.ic_more), contentDescription = "More Options", diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt index 1da73371..21bd2a50 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt @@ -26,9 +26,7 @@ fun DefaultTopAppBar( ) { CenterAlignedTopAppBar( navigationIcon = { - IconButton(onClick = { - onLeftClick() - }) { + IconButton(onClick = onLeftClick) { Icon( painter = painterResource(R.drawable.ic_arrow_back), contentDescription = "Back Button", @@ -47,9 +45,7 @@ fun DefaultTopAppBar( }, actions = { if (isRightIconVisible) { - IconButton(onClick = { - onRightClick() - }) { + IconButton(onClick = onRightClick) { Icon( painter = painterResource(R.drawable.ic_more), contentDescription = "More Options", diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt index 7e8603b2..aace1689 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/FeedListTopAppBar.kt @@ -31,9 +31,7 @@ fun FeedListTopAppBar( ) { CenterAlignedTopAppBar( navigationIcon = { - IconButton(onClick = { - onLeftClick() - }) { + IconButton(onClick = onLeftClick) { Icon( painter = painterResource(R.drawable.ic_arrow_back), contentDescription = "Back Button", diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt index bf81ef45..4467012b 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt @@ -33,9 +33,7 @@ fun InputTopAppBar( CenterAlignedTopAppBar( navigationIcon = { if (isLeftIconVisible) { - IconButton(onClick = { - onLeftClick() - }) { + IconButton(onClick = onLeftClick) { Icon( painter = painterResource(R.drawable.ic_arrow_back), contentDescription = "Back Button", diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt new file mode 100644 index 00000000..31c5fe2b --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LogoTopAppBar.kt @@ -0,0 +1,79 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.texthip.thip.R + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LogoTopAppBar( + leftIcon: Painter, + hasNotification: Boolean, + onLeftClick: () -> Unit = {}, + onRightClick: () -> Unit = {} +) { + val rightIcon = if (hasNotification) { + painterResource(R.drawable.ic_notice_yes) + } else { + painterResource(R.drawable.ic_notice) + } + + TopAppBar( + navigationIcon = { + Image( + painter = painterResource(R.drawable.ic_logo), + contentDescription = "Logo", + modifier = Modifier + .height(24.dp) + .padding(start = 18.dp), + ) + }, + title = { + Spacer(modifier = Modifier) + }, + actions = { + IconButton(onClick = onLeftClick) { + Icon( + painter = leftIcon, + contentDescription = "Left Icon", + tint = Color.Unspecified + ) + } + IconButton(onClick = onRightClick) { + Icon( + painter = rightIcon, + contentDescription = "Right Icon", + tint = Color.Unspecified + ) + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ) + ) +} + +@Preview +@Composable +private fun LogoTopAppBarPreview() { + LogoTopAppBar( + leftIcon = painterResource(R.drawable.ic_search), + hasNotification = true, + onLeftClick = { }, + onRightClick = { } + ) +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_logo.xml b/app/src/main/res/drawable/ic_logo.xml new file mode 100644 index 00000000..d6a7e2b4 --- /dev/null +++ b/app/src/main/res/drawable/ic_logo.xml @@ -0,0 +1,24 @@ + + + + + + + + From df2b16709949752a8d1dc217069cf28ea14e83d6 Mon Sep 17 00:00:00 2001 From: Naeun Kim <102296721+Nico1eKim@users.noreply.github.com> Date: Fri, 27 Jun 2025 03:14:22 +0900 Subject: [PATCH 9/9] =?UTF-8?q?[UI]:=20left=20name=20top=20app=20bar=20?= =?UTF-8?q?=EC=A0=9C=EC=9E=91=20(#27)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/common/topappbar/DefaultTopAppBar.kt | 3 +- .../ui/common/topappbar/InputTopAppBar.kt | 2 +- .../ui/common/topappbar/LeftNameTopAppBar.kt | 88 +++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/texthip/thip/ui/common/topappbar/LeftNameTopAppBar.kt diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt index 21bd2a50..8d51b534 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/DefaultTopAppBar.kt @@ -10,6 +10,7 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.texthip.thip.R import com.texthip.thip.ui.theme.ThipTheme.colors @@ -18,7 +19,7 @@ import com.texthip.thip.ui.theme.ThipTheme.typography @OptIn(ExperimentalMaterial3Api::class) @Composable fun DefaultTopAppBar( - title: String = "νŽ˜μ΄μ§€λͺ…", + title: String = stringResource(R.string.page_name), isTitleVisible: Boolean = true, isRightIconVisible: Boolean = false, onLeftClick: () -> Unit, diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt index 4467012b..8da648f4 100644 --- a/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/InputTopAppBar.kt @@ -23,7 +23,7 @@ import com.texthip.thip.ui.theme.ThipTheme.typography @OptIn(ExperimentalMaterial3Api::class) @Composable fun InputTopAppBar( - title: String = "νŽ˜μ΄μ§€λͺ…", + title: String = stringResource(R.string.page_name), isRightButtonEnabled: Boolean = false, rightButtonName: String = stringResource(R.string.finish), isLeftIconVisible: Boolean = true, diff --git a/app/src/main/java/com/texthip/thip/ui/common/topappbar/LeftNameTopAppBar.kt b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LeftNameTopAppBar.kt new file mode 100644 index 00000000..fdfb0d63 --- /dev/null +++ b/app/src/main/java/com/texthip/thip/ui/common/topappbar/LeftNameTopAppBar.kt @@ -0,0 +1,88 @@ +package com.texthip.thip.ui.common.topappbar + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.texthip.thip.R +import com.texthip.thip.ui.theme.ThipTheme.colors +import com.texthip.thip.ui.theme.ThipTheme.typography + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LeftNameTopAppBar( + title: String = stringResource(R.string.page_name), + isLeftIconVisible: Boolean = false, + isRightIconVisible: Boolean = false, + leftIcon: Painter, + rightIcon: Painter, + onLeftClick: () -> Unit = {}, + onRightClick: () -> Unit = {} +) { + TopAppBar( + navigationIcon = { + Text( + text = title, + color = colors.White, + style = typography.bigtitle_b700_s22_h24, + modifier = Modifier.padding(start = 18.dp) + ) + }, + title = { + Spacer(modifier = Modifier) + }, + actions = { + if (isLeftIconVisible) { + IconButton(onClick = onLeftClick) { + Icon( + painter = leftIcon, + contentDescription = "Left Icon", + tint = Color.Unspecified + ) + } + } + if (isRightIconVisible) { + IconButton(onClick = onRightClick) { + Icon( + painter = rightIcon, + contentDescription = "Right Icon", + tint = Color.Unspecified + ) + } + } + }, + colors = TopAppBarDefaults.topAppBarColors( + containerColor = Color.Transparent, + ) + ) +} + +@Preview +@Composable +private fun LeftNameTopAppBarPreview() { + Column { + LeftNameTopAppBar( + leftIcon = painterResource(R.drawable.ic_search), + rightIcon = painterResource(R.drawable.ic_plus) + ) + LeftNameTopAppBar( + leftIcon = painterResource(R.drawable.ic_search), + rightIcon = painterResource(R.drawable.ic_plus), + isLeftIconVisible = true, + isRightIconVisible = true + ) + } +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7a4183c..2e461e44 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -47,4 +47,5 @@ λ‹˜μ˜ κ΅¬λ…μž λ‹€μŒ + νŽ˜μ΄μ§€λͺ… \ No newline at end of file