From c7664032476c17570ce1698e36a1c7b4f13f9743 Mon Sep 17 00:00:00 2001 From: dongchyeon Date: Sat, 1 Feb 2025 01:23:12 +0900 Subject: [PATCH] =?UTF-8?q?[UI/#63]=20AlarmListDropDownMenu=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/drawable/ic_edit.xml | 10 ++ feature/home/build.gradle.kts | 1 + .../home/component/AlarmListDropDownMenu.kt | 115 ++++++++++++++++++ feature/home/src/main/res/values/strings.xml | 1 + gradle/libs.versions.toml | 3 + 5 files changed, 130 insertions(+) create mode 100644 core/designsystem/src/main/res/drawable/ic_edit.xml create mode 100644 feature/home/src/main/java/com/yapp/home/component/AlarmListDropDownMenu.kt diff --git a/core/designsystem/src/main/res/drawable/ic_edit.xml b/core/designsystem/src/main/res/drawable/ic_edit.xml new file mode 100644 index 00000000..931738e5 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,10 @@ + + + diff --git a/feature/home/build.gradle.kts b/feature/home/build.gradle.kts index d0d0543e..337dbb24 100644 --- a/feature/home/build.gradle.kts +++ b/feature/home/build.gradle.kts @@ -16,4 +16,5 @@ dependencies { implementation(libs.orbit.compose) implementation(libs.orbit.viewmodel) implementation(libs.androidx.material.android) + implementation(libs.androidx.annotation) } diff --git a/feature/home/src/main/java/com/yapp/home/component/AlarmListDropDownMenu.kt b/feature/home/src/main/java/com/yapp/home/component/AlarmListDropDownMenu.kt new file mode 100644 index 00000000..c4ebb790 --- /dev/null +++ b/feature/home/src/main/java/com/yapp/home/component/AlarmListDropDownMenu.kt @@ -0,0 +1,115 @@ +package com.yapp.home.component + +import android.util.Log +import androidx.annotation.DrawableRes +import androidx.compose.foundation.BorderStroke +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.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.Icon +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.Modifier +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.yapp.designsystem.theme.OrbitTheme +import com.yapp.ui.extensions.customClickable +import feature.home.R + +@Composable +private fun AlarmListDropDownMenu( + modifier: Modifier = Modifier, + expanded: Boolean, + onDismissRequest: () -> Unit, + onClickEdit: () -> Unit, +) { + DropdownMenu( + modifier = modifier.padding(6.dp), + expanded = expanded, + onDismissRequest = onDismissRequest, + containerColor = OrbitTheme.colors.gray_700, + shape = RoundedCornerShape(16.dp), + border = BorderStroke(1.dp, OrbitTheme.colors.gray_600), + ) { + AlarmListDropDownMenuItem( + text = stringResource(id = R.string.alarm_list_bottom_sheet_menu_edit), + iconRes = core.designsystem.R.drawable.ic_edit, + ) { + onClickEdit() + } + } +} + +@Composable +private fun AlarmListDropDownMenuItem( + text: String, + @DrawableRes iconRes: Int, + onClick: () -> Unit, +) { + Row( + modifier = Modifier + .width(120.dp) + .customClickable( + onClick = onClick, + rippleEnabled = false, + ) + .padding( + horizontal = 14.dp, + vertical = 8.dp, + ), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Text( + text = text, + style = OrbitTheme.typography.body1SemiBold, + color = OrbitTheme.colors.white, + ) + + Icon( + modifier = Modifier.size(20.dp), + painter = painterResource(id = iconRes), + contentDescription = "Icon", + tint = OrbitTheme.colors.white, + ) + } +} + +@Preview +@Composable +private fun AlarmListDropDownMenuPreview() { + var expanded by remember { mutableStateOf(false) } + + OrbitTheme { + Box( + modifier = Modifier.fillMaxSize(), + ) { + Box { + Button( + onClick = { expanded = true }, + ) { + Text("Show Menu") + } + AlarmListDropDownMenu( + expanded = expanded, + onDismissRequest = { expanded = false }, + onClickEdit = { + Log.d("AlarmListDropDownMenu", "Edit Clicked") + }, + ) + } + } + } +} diff --git a/feature/home/src/main/res/values/strings.xml b/feature/home/src/main/res/values/strings.xml index 21a90066..e07c68fe 100644 --- a/feature/home/src/main/res/values/strings.xml +++ b/feature/home/src/main/res/values/strings.xml @@ -45,4 +45,5 @@ 삭제 알람 + 편집 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9527680d..4be2bd07 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -33,6 +33,8 @@ androidx-room = "2.6.1" androidx-lifecycle = "2.8.7" +annotation = "1.9.1" + ## Compose compose-bom = "2024.11.00" compose-navigation = "2.8.4" @@ -100,6 +102,7 @@ androidx-room-runtime = { group = "androidx.room", name = "room-runtime", versio androidx-room-ktx = { group = "androidx.room", name = "room-ktx", version.ref = "androidx-room" } androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "androidx-room" } androidx-room-paging = { group = "androidx.room", name = "room-paging", version.ref = "androidx-room" } +androidx-annotation = { group = "androidx.annotation", name = "annotation", version.ref = "annotation" } ## Compose Libraries activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activity-compose" }