diff --git a/common/src/main/java/com/doyoonkim/common/theme/Color.kt b/common/src/main/java/com/doyoonkim/common/theme/Color.kt
index cd9a5ec2..9052e620 100644
--- a/common/src/main/java/com/doyoonkim/common/theme/Color.kt
+++ b/common/src/main/java/com/doyoonkim/common/theme/Color.kt
@@ -32,10 +32,10 @@ val TitleWhite = Color(0xFFFFFFFF)
val SubtitleAny = Color(0xFF787879)
-val ButtonLight = Color(0xFF3C3C3C)
-val ButtonDark = Color(0xFF888888)
+val ButtonDark = Color(0xFF3C3C3C)
+val ButtonLight = Color(0xFFF3F3F3)
-val GradientStartDark = Color(0xFF444444)
+val GradientStartDark = Color(0xFF4F4F4F)
val GradientStartLight = Color(0xFFA1A1A1)
val GradientIntermediateDark = Color(0xFF5C5C5C)
diff --git a/common/src/main/java/com/doyoonkim/common/ui/CircleGoButton.kt b/common/src/main/java/com/doyoonkim/common/ui/CircleGoButton.kt
new file mode 100644
index 00000000..484dce50
--- /dev/null
+++ b/common/src/main/java/com/doyoonkim/common/ui/CircleGoButton.kt
@@ -0,0 +1,37 @@
+package com.doyoonkim.common.ui
+
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.IconButtonDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+
+@Composable
+fun CircleGoButton(
+ modifier: Modifier = Modifier,
+ onClick: () -> Unit,
+ containerColor: Color = Color.Gray,
+ contentColor: Color = Color.LightGray
+) {
+ IconButton(
+ onClick = onClick,
+ modifier = modifier
+ .wrapContentSize()
+ .clip(CircleShape),
+ colors = IconButtonDefaults.iconButtonColors().copy(
+ containerColor = containerColor,
+ contentColor = contentColor
+ )
+ ) {
+ Icon(
+ imageVector = Icons.AutoMirrored.Default.KeyboardArrowRight,
+ contentDescription = "Go"
+ )
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumn.kt b/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumn.kt
new file mode 100644
index 00000000..c029e221
--- /dev/null
+++ b/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumn.kt
@@ -0,0 +1,54 @@
+package com.doyoonkim.common.ui
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Surface
+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.tooling.preview.Preview
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+
+@Composable
+fun RoundedCornerColumn(
+ modifier: Modifier = Modifier,
+ verticalArrangement: Arrangement.Vertical = Arrangement.Top,
+ horizontalAlignment: Alignment.Horizontal = Alignment.Start,
+ cornerRadius: Dp = 15.dp,
+ backgroundColor: Color,
+ content: @Composable (ColumnScope.() -> Unit)
+) {
+
+ Surface(
+ modifier = modifier
+ .wrapContentSize()
+ .background(Color.Transparent)
+ .clip(RoundedCornerShape(cornerRadius)),
+ color = backgroundColor
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 10.dp),
+ verticalArrangement = verticalArrangement,
+ horizontalAlignment = horizontalAlignment,
+ content = content
+ )
+ }
+
+}
+
+@Preview(showBackground = true)
+@Composable
+fun RoundedCornerColumn_Preview() {
+
+}
\ No newline at end of file
diff --git a/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumnItem.kt b/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumnItem.kt
new file mode 100644
index 00000000..32f19d5f
--- /dev/null
+++ b/common/src/main/java/com/doyoonkim/common/ui/RoundedCornerColumnItem.kt
@@ -0,0 +1,135 @@
+package com.doyoonkim.common.ui
+
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ColumnScope
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.material3.HorizontalDivider
+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.text.font.FontWeight
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+enum class TextSize { Large, Medium, Small }
+
+@Composable
+fun RoundedCornerColumnTextItemWithExtraOnRight(
+ modifier: Modifier = Modifier,
+ verticalPadding: Dp = 0.dp,
+ titleText: String,
+ subTitleText: String? = "Subtitle",
+ fontSize: TextSize = TextSize.Medium,
+ primaryColor: Color = Color.Black,
+ secondaryColor: Color = Color.Gray,
+ hasBottomDivider: Boolean = true,
+ extraOnRight: @Composable () -> Unit
+) {
+ Row(
+ modifier = Modifier.fillMaxWidth().wrapContentHeight(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.SpaceEvenly
+ ) {
+ RoundedCornerColumnTextItem(
+ modifier = modifier.weight(4f),
+ verticalPadding = verticalPadding,
+ titleText = titleText,
+ subTitleText = subTitleText,
+ textSize = fontSize,
+ primaryColor = primaryColor,
+ secondaryColor = secondaryColor,
+ hasBottomDivider = hasBottomDivider
+ )
+ extraOnRight()
+ }
+}
+
+@Composable
+fun RoundedCornerColumnTextItem(
+ modifier: Modifier = Modifier,
+ verticalPadding: Dp = 0.dp,
+ titleText: String,
+ subTitleText: String? = "Subtitle",
+ textSize: TextSize = TextSize.Medium,
+ primaryColor: Color = Color.Black,
+ secondaryColor: Color = Color.Gray,
+ hasBottomDivider: Boolean = true
+) {
+ val extra = if (subTitleText == null) 10.dp else 0.dp
+ val fontSize = when (textSize) {
+ TextSize.Large -> Pair(24, 20)
+ TextSize.Medium -> Pair(18, 14)
+ TextSize.Small -> Pair(14, 10)
+ }
+
+ RoundedCornerColumnItem(
+ modifier = modifier,
+ verticalPadding = verticalPadding,
+ extra = extra,
+ hasBottomDivider = hasBottomDivider,
+ dividerColor = secondaryColor
+ ) {
+ Text(
+ text = titleText,
+ color = primaryColor,
+ fontWeight = FontWeight.SemiBold,
+ fontSize = fontSize.first.sp,
+ textAlign = TextAlign.Start,
+ modifier = Modifier.fillMaxWidth().padding(start = 10.dp)
+ )
+
+ subTitleText?.let {
+ Text(
+ text = it,
+ color = secondaryColor,
+ fontWeight = FontWeight.Normal,
+ fontSize = fontSize.second.sp,
+ textAlign = TextAlign.Start,
+ modifier = Modifier.fillMaxWidth().padding(start = 10.dp)
+ )
+ }
+ }
+}
+
+@Composable
+fun RoundedCornerColumnItem(
+ modifier: Modifier = Modifier,
+ verticalPadding: Dp = 0.dp,
+ extra: Dp = 0.dp,
+ hasBottomDivider: Boolean = true,
+ dividerColor: Color = Color.Gray,
+ content: @Composable (ColumnScope.() -> Unit)
+) {
+
+ val columnPadding = if (hasBottomDivider) {
+ PaddingValues(top = verticalPadding + extra)
+ } else {
+ PaddingValues(vertical = verticalPadding + extra)
+ }
+
+ Column(
+ modifier = modifier
+ .padding(columnPadding),
+ verticalArrangement = Arrangement.SpaceEvenly,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+
+ content()
+
+ if (hasBottomDivider) {
+ HorizontalDivider(
+ Modifier.padding(top = verticalPadding + extra),
+ color = dividerColor
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/common/src/main/res/values-ko-rKR/strings.xml b/common/src/main/res/values-ko-rKR/strings.xml
index 17329c24..e242670d 100644
--- a/common/src/main/res/values-ko-rKR/strings.xml
+++ b/common/src/main/res/values-ko-rKR/strings.xml
@@ -8,7 +8,7 @@
더보기
브라우저에서 더보기
서비스 알림
- 새로운 공지사항이 등록되면 푸시 알림으로 알려드려요.
+ 새로운 공지사항이 등록되면 푸시 알림을 받을래요.
더보기
버전정보
오픈소스 라이센스
diff --git a/feature/bookmark/src/main/java/com/doyoonkim/bookmark/edit/EditBookmarkScreen.kt b/feature/bookmark/src/main/java/com/doyoonkim/bookmark/edit/EditBookmarkScreen.kt
index c7b5434d..8bb8fbee 100644
--- a/feature/bookmark/src/main/java/com/doyoonkim/bookmark/edit/EditBookmarkScreen.kt
+++ b/feature/bookmark/src/main/java/com/doyoonkim/bookmark/edit/EditBookmarkScreen.kt
@@ -4,12 +4,9 @@ import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
-import androidx.compose.foundation.background
-import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.WindowInsets
@@ -34,7 +31,6 @@ import androidx.compose.material3.BasicAlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
-import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch
@@ -46,10 +42,8 @@ import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.rememberCoroutineScope
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.stringResource
import androidx.compose.ui.text.font.FontWeight
@@ -63,15 +57,16 @@ import com.doyoonkim.common.navigation.NoticeDetail
import com.doyoonkim.common.R
import com.doyoonkim.common.theme.buttonPurple
import com.doyoonkim.common.theme.containerBackground
-import com.doyoonkim.common.theme.containerGray
import com.doyoonkim.common.theme.subTitle
import com.doyoonkim.common.theme.textPurple
import com.doyoonkim.common.theme.title
import com.doyoonkim.common.ui.DatePickerDialog
import com.doyoonkim.common.ui.NotificationPreviewCard
+import com.doyoonkim.common.ui.RoundedCornerColumn
+import com.doyoonkim.common.ui.RoundedCornerColumnItem
+import com.doyoonkim.common.ui.RoundedCornerColumnTextItemWithExtraOnRight
+import com.doyoonkim.common.ui.TextSize
import com.doyoonkim.common.ui.TimePickerDialog
-import kotlinx.coroutines.delay
-import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -115,36 +110,18 @@ fun EditBookmarkScreen(
Spacer(Modifier.height(30.dp))
- Text(
- text = stringResource(R.string.subtitle_set_reminder),
- fontSize = 16.sp,
- fontWeight = FontWeight.Normal,
- color = MaterialTheme.colorScheme.title
- )
-
- Column(
- modifier = Modifier.fillMaxWidth().wrapContentHeight()
- .background(Color.Transparent)
- .clip(RoundedCornerShape(10.dp))
- .border(2.dp, MaterialTheme.colorScheme.containerBackground)
- .padding(start = 10.dp, end = 10.dp),
- verticalArrangement = Arrangement.SpaceEvenly,
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Row(
- modifier = Modifier.fillMaxWidth().wrapContentHeight(),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Center
+ RoundedCornerColumn(
+ backgroundColor = MaterialTheme.colorScheme.containerBackground
+ ) {
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ verticalPadding = 12.dp,
+ titleText = stringResource(R.string.subtitle_get_reminder),
+ subTitleText = null,
+ fontSize = TextSize.Small,
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = uiState.isReminderRequested
) {
- Text(
- text = stringResource(R.string.subtitle_get_reminder),
- textAlign = TextAlign.Start,
- fontSize = 15.sp,
- fontWeight = FontWeight.SemiBold,
- color = MaterialTheme.colorScheme.title,
- modifier = Modifier.padding(10.dp).weight(5f)
- )
-
Switch(
checked = uiState.isReminderRequested && uiState.alarmPermissionStatus,
enabled = true,
@@ -157,48 +134,42 @@ fun EditBookmarkScreen(
)
}
- if (uiState.isReminderRequested) {
- HorizontalDivider(
- modifier = Modifier
- .fillMaxWidth()
- .padding(PaddingValues(horizontal = 5.dp)),
- color = MaterialTheme.colorScheme.containerGray
- )
- }
-
AnimatedVisibility(
modifier = Modifier.fillMaxWidth().wrapContentHeight(),
visible = uiState.isReminderRequested,
enter = slideInVertically(),
exit = slideOutVertically()
) {
-
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .wrapContentHeight()
- .padding(PaddingValues(vertical = 15.dp)),
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(3.dp)
+ RoundedCornerColumnItem(
+ verticalPadding = 12.dp,
+ hasBottomDivider = false,
) {
- Text(
- text = stringResource(R.string.text_set_reminder_date_time),
- textAlign = TextAlign.Start,
- fontSize = 15.sp,
- fontWeight = FontWeight.SemiBold,
- color = MaterialTheme.colorScheme.title,
- modifier = Modifier.padding(10.dp).weight(2f)
- )
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .wrapContentHeight(),
+ verticalAlignment = Alignment.CenterVertically,
+ horizontalArrangement = Arrangement.spacedBy(3.dp)
+ ) {
+ Text(
+ text = stringResource(R.string.text_set_reminder_date_time),
+ textAlign = TextAlign.Start,
+ fontSize = 14.sp,
+ fontWeight = FontWeight.SemiBold,
+ color = MaterialTheme.colorScheme.title,
+ modifier = Modifier.padding(10.dp).weight(2f)
+ )
- DatePickerDialog(
- initialTime = uiState.timeForRemind
- ) { year, month, day ->
- viewModel.updateDateInfo(year, month, day)
- }
- TimePickerDialog(
- initialTime = uiState.timeForRemind
- ) { hour, min ->
- viewModel.updateTimeInfo(hour, min)
+ DatePickerDialog(
+ initialTime = uiState.timeForRemind
+ ) { year, month, day ->
+ viewModel.updateDateInfo(year, month, day)
+ }
+ TimePickerDialog(
+ initialTime = uiState.timeForRemind
+ ) { hour, min ->
+ viewModel.updateTimeInfo(hour, min)
+ }
}
}
}
@@ -210,7 +181,8 @@ fun EditBookmarkScreen(
text = stringResource(R.string.subtitle_notes),
fontSize = 16.sp,
fontWeight = FontWeight.Normal,
- color = MaterialTheme.colorScheme.title
+ color = MaterialTheme.colorScheme.title,
+ modifier = Modifier.padding(10.dp)
)
Box(
diff --git a/feature/main/src/main/java/com/doyoonkim/main/preference/NotificationPreferencesScreen.kt b/feature/main/src/main/java/com/doyoonkim/main/preference/NotificationPreferencesScreen.kt
index 2ef0d4cb..84e24106 100644
--- a/feature/main/src/main/java/com/doyoonkim/main/preference/NotificationPreferencesScreen.kt
+++ b/feature/main/src/main/java/com/doyoonkim/main/preference/NotificationPreferencesScreen.kt
@@ -8,23 +8,12 @@ import android.content.Intent
import android.content.pm.PackageManager
import androidx.activity.compose.BackHandler
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.WindowInsets
-import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.systemBars
-import androidx.compose.foundation.layout.windowInsetsPadding
-import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.CircularProgressIndicator
-import androidx.compose.material3.Text
-import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Switch
@@ -38,10 +27,7 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
import androidx.core.content.ContextCompat
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleEventEffect
@@ -52,7 +38,8 @@ import com.doyoonkim.common.theme.containerBackground
import com.doyoonkim.common.theme.subTitle
import com.doyoonkim.common.theme.textPurple
import com.doyoonkim.common.theme.title
-import com.doyoonkim.common.ui.LabeledToggleSwitch
+import com.doyoonkim.common.ui.RoundedCornerColumn
+import com.doyoonkim.common.ui.RoundedCornerColumnTextItemWithExtraOnRight
import com.doyoonkim.main.viewmodel.NotificationPreferencesViewModel
@Composable
@@ -85,143 +72,145 @@ fun NotificationPreferencesScreen(
)
}
- Box(
- modifier = Modifier
- .fillMaxSize()
- .windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Bottom))
+ RoundedCornerColumn(
+ modifier = Modifier.fillMaxWidth().padding(10.dp),
+ backgroundColor = MaterialTheme.colorScheme.containerBackground
) {
- Column(
- modifier = modifier.fillMaxSize(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Top
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ verticalPadding = 15.dp,
+ titleText = stringResource(R.string.enable_notification_title),
+ subTitleText = stringResource(R.string.enable_service_notification_sub),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = true
) {
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight(),
- text = stringResource(R.string.pref_notification_title),
- color = MaterialTheme.colorScheme.title,
- fontWeight = FontWeight.SemiBold,
- fontSize = 14.sp,
- textAlign = TextAlign.Start
- )
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Column(
- modifier = Modifier.wrapContentHeight()
- .padding(top = 15.dp, bottom = 15.dp),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Top
- ) {
- Row(
- verticalAlignment = Alignment.CenterVertically
- ) {
- Column(
- modifier = Modifier.wrapContentHeight().weight(5f),
- verticalArrangement = Arrangement.spacedBy(5.dp)
- ) {
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight(),
- text = stringResource(R.string.enable_notification_title),
- color = MaterialTheme.colorScheme.title,
- fontWeight = FontWeight.Medium,
- fontSize = 18.sp,
- textAlign = TextAlign.Start
- )
-
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight(),
- text = stringResource(R.string.enable_service_notification_sub),
- color = MaterialTheme.colorScheme.subTitle,
- fontWeight = FontWeight.Normal,
- fontSize = 12.sp,
- textAlign = TextAlign.Start
+ Switch(
+ checked = uiStatus.isMainNotificationPermissionGranted,
+ colors = SwitchDefaults.colors().copy(
+ checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
+ checkedThumbColor = Color.White
+ ),
+ onCheckedChange = {
+ val settingIntent = Intent(
+ "android.settings.APP_NOTIFICATION_SETTINGS"
+ ).apply {
+ this.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ this.putExtra(
+ "android.provider.extra.APP_PACKAGE",
+ context.packageName
)
}
+ context.startActivity(settingIntent)
+ },
+ enabled = uiStatus.isSyncCompleted
+ )
+ }
- Switch(
- checked = uiStatus.isMainNotificationPermissionGranted,
- colors = SwitchDefaults.colors().copy(
- checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
- checkedThumbColor = Color.White
- ),
- onCheckedChange = {
- val settingIntent = Intent(
- "android.settings.APP_NOTIFICATION_SETTINGS"
- ).apply {
- this.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- this.putExtra(
- "android.provider.extra.APP_PACKAGE",
- context.packageName
- )
- }
- context.startActivity(settingIntent)
- },
- enabled = uiStatus.isSyncCompleted
- )
- }
- }
-
- LabeledToggleSwitch(
- modifier = Modifier.padding(start = 10.dp),
- titleText = stringResource(R.string.general_notificaiton_channel_name),
- subTitleText = stringResource(R.string.general_notification_channel_description),
- isChecked = uiStatus.isEachChannelAllowed[0],
- isEnabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
- ) {
- viewModel.updateChannelPreferenceState(0, it)
- }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ modifier = Modifier.padding(start = 10.dp),
+ verticalPadding = 15.dp,
+ titleText = stringResource(R.string.general_notificaiton_channel_name),
+ subTitleText = stringResource(R.string.general_notification_channel_description),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = true
+ ) {
+ Switch(
+ checked = uiStatus.isEachChannelAllowed[0],
+ colors = SwitchDefaults.colors().copy(
+ checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
+ checkedThumbColor = Color.White
+ ),
+ onCheckedChange = {
+ viewModel.updateChannelPreferenceState(0, it)
+ },
+ enabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
+ )
+ }
- LabeledToggleSwitch(
- modifier = Modifier.padding(start = 10.dp),
- titleText = stringResource(R.string.academic_notification_channel_name),
- subTitleText = stringResource(R.string.academic_notification_channel_description),
- isChecked = uiStatus.isEachChannelAllowed[1],
- isEnabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
- ) {
- viewModel.updateChannelPreferenceState(1, it)
- }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ modifier = Modifier.padding(start = 10.dp),
+ verticalPadding = 15.dp,
+ titleText = stringResource(R.string.academic_notification_channel_name),
+ subTitleText = stringResource(R.string.academic_notification_channel_description),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = true
+ ) {
+ Switch(
+ checked = uiStatus.isEachChannelAllowed[1],
+ colors = SwitchDefaults.colors().copy(
+ checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
+ checkedThumbColor = Color.White
+ ),
+ onCheckedChange = {
+ viewModel.updateChannelPreferenceState(1, it)
+ },
+ enabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
+ )
+ }
- LabeledToggleSwitch(
- modifier = Modifier.padding(start = 10.dp),
- titleText = stringResource(R.string.scholarship_notification_channel_name),
- subTitleText = stringResource(R.string.scholarship_notification_channel_description),
- isChecked = uiStatus.isEachChannelAllowed[2],
- isEnabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
- ) {
- viewModel.updateChannelPreferenceState(2, it)
- }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ modifier = Modifier.padding(start = 10.dp),
+ verticalPadding = 15.dp,
+ titleText = stringResource(R.string.scholarship_notification_channel_name),
+ subTitleText = stringResource(R.string.scholarship_notification_channel_description),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = true
+ ) {
+ Switch(
+ checked = uiStatus.isEachChannelAllowed[2],
+ colors = SwitchDefaults.colors().copy(
+ checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
+ checkedThumbColor = Color.White
+ ),
+ onCheckedChange = {
+ viewModel.updateChannelPreferenceState(2, it)
+ },
+ enabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
+ )
+ }
- LabeledToggleSwitch(
- modifier = Modifier.padding(start = 10.dp),
- titleText = stringResource(R.string.event_notification_channel_name),
- subTitleText = stringResource(R.string.event_notification_channel_description),
- isChecked = uiStatus.isEachChannelAllowed[3],
- isEnabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
- ) {
- viewModel.updateChannelPreferenceState(3, it)
- }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ modifier = Modifier.padding(start = 10.dp),
+ verticalPadding = 15.dp,
+ titleText = stringResource(R.string.event_notification_channel_name),
+ subTitleText = stringResource(R.string.event_notification_channel_description),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = false
+ ) {
+ Switch(
+ checked = uiStatus.isEachChannelAllowed[3],
+ colors = SwitchDefaults.colors().copy(
+ checkedTrackColor = MaterialTheme.colorScheme.buttonPurple,
+ checkedThumbColor = Color.White
+ ),
+ onCheckedChange = {
+ viewModel.updateChannelPreferenceState(3, it)
+ },
+ enabled = uiStatus.isMainNotificationPermissionGranted && uiStatus.isSyncCompleted
+ )
}
+ }
- if (!uiStatus.isSyncCompleted) {
- Box(
- modifier = Modifier.matchParentSize()
+ if (!uiStatus.isSyncCompleted) {
+ Box(
+ modifier = Modifier.fillMaxSize()
+ .background(Color.Transparent)
+ ) {
+ Surface(
+ modifier = Modifier.align(Alignment.Center)
.background(Color.Transparent)
+ .clip(RoundedCornerShape(20.dp)),
+ color = MaterialTheme.colorScheme.containerBackground
) {
- Surface(
+ CircularProgressIndicator(
modifier = Modifier.align(Alignment.Center)
- .background(Color.Transparent)
- .clip(RoundedCornerShape(20.dp)),
- color = MaterialTheme.colorScheme.containerBackground
- ) {
- CircularProgressIndicator(
- modifier = Modifier.align(Alignment.Center)
- .padding(25.dp),
- color = MaterialTheme.colorScheme.textPurple
- )
- }
+ .padding(25.dp),
+ color = MaterialTheme.colorScheme.textPurple
+ )
}
}
}
diff --git a/feature/main/src/main/java/com/doyoonkim/main/preference/UserPreferencesScreen.kt b/feature/main/src/main/java/com/doyoonkim/main/preference/UserPreferencesScreen.kt
index b74e8cce..5b185e31 100644
--- a/feature/main/src/main/java/com/doyoonkim/main/preference/UserPreferencesScreen.kt
+++ b/feature/main/src/main/java/com/doyoonkim/main/preference/UserPreferencesScreen.kt
@@ -1,38 +1,26 @@
package com.doyoonkim.main.preference
import androidx.activity.compose.BackHandler
-import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.systemBars
-import androidx.compose.foundation.layout.windowInsetsPadding
-import androidx.compose.foundation.layout.wrapContentHeight
-import androidx.compose.foundation.layout.wrapContentSize
-import androidx.compose.material3.HorizontalDivider
-import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
-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.ColorFilter
-import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.font.FontWeight
-import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import androidx.compose.ui.unit.sp
import com.doyoonkim.common.R
import com.doyoonkim.common.theme.buttonContainer
+import com.doyoonkim.common.theme.containerBackground
import com.doyoonkim.common.theme.subTitle
import com.doyoonkim.common.theme.title
+import com.doyoonkim.common.ui.CircleGoButton
+import com.doyoonkim.common.ui.RoundedCornerColumn
+import com.doyoonkim.common.ui.RoundedCornerColumnTextItem
+import com.doyoonkim.common.ui.RoundedCornerColumnTextItemWithExtraOnRight
@Composable
fun UserPreferenceScreen(
@@ -45,177 +33,79 @@ fun UserPreferenceScreen(
BackHandler { onBackPressed() }
Column(
- modifier = modifier
- .windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Bottom)),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Top
+ modifier = modifier.fillMaxWidth()
+ .padding(10.dp),
+ verticalArrangement = Arrangement.spacedBy(30.dp),
+ horizontalAlignment = Alignment.CenterHorizontally
) {
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight()
- .padding(bottom = 2.dp),
- text = stringResource(R.string.pref_notification_title),
- fontWeight = FontWeight.SemiBold,
- fontSize = 14.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
- )
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Column(
- modifier = Modifier.fillMaxWidth().wrapContentSize(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = Arrangement.Center
+ RoundedCornerColumn(
+ backgroundColor = MaterialTheme.colorScheme.containerBackground
) {
- Row(
- verticalAlignment = Alignment.CenterVertically
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ verticalPadding = 10.dp,
+ titleText = stringResource(R.string.enable_notification_title),
+ subTitleText = null,
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = false
) {
- Text(
- modifier = Modifier.wrapContentHeight().weight(5f),
- text = stringResource(R.string.enable_notification_title),
- fontWeight = FontWeight.Medium,
- fontSize = 18.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
+ CircleGoButton(
+ modifier = Modifier.weight(1f),
+ containerColor = MaterialTheme.colorScheme.buttonContainer,
+ contentColor = MaterialTheme.colorScheme.subTitle,
+ onClick = onNotificationPreferenceClicked
)
-
- IconButton(
- onClick = { onNotificationPreferenceClicked() }
- ) {
- Image(
- painter = painterResource(R.drawable.baseline_arrow_forward_ios_24),
- contentDescription = "Go to App Notification Preferences page.",
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.buttonContainer)
- )
- }
}
}
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight()
- .padding(top = 20.dp, bottom = 2.dp),
- text = stringResource(R.string.title_support),
- fontWeight = FontWeight.SemiBold,
- fontSize = 14.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
- )
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Row(
- modifier = Modifier.fillMaxWidth().wrapContentSize(),
- verticalAlignment = Alignment.CenterVertically,
+ RoundedCornerColumn(
+ backgroundColor = MaterialTheme.colorScheme.containerBackground
) {
- Text(
- modifier = Modifier.wrapContentHeight().weight(5f),
- text = stringResource(R.string.title_customer_service),
- fontWeight = FontWeight.Medium,
- fontSize = 18.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
- )
-
- IconButton(
- onClick = { onCustomerServiceClicked() }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ verticalPadding = 10.dp,
+ titleText = stringResource(R.string.title_support),
+ subTitleText = null,
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = false
) {
- Image(
- painter = painterResource(R.drawable.baseline_arrow_forward_ios_24),
- contentDescription = "Go to customer service page.",
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.buttonContainer)
+ CircleGoButton(
+ modifier = Modifier.weight(1f),
+ containerColor = MaterialTheme.colorScheme.buttonContainer,
+ contentColor = MaterialTheme.colorScheme.subTitle,
+ onClick = onCustomerServiceClicked
)
}
}
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Text(
- modifier = Modifier.fillMaxWidth().wrapContentHeight()
- .padding(top = 20.dp, bottom = 2.dp),
- text = stringResource(R.string.about_title),
- fontWeight = FontWeight.SemiBold,
- fontSize = 14.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
- )
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Row(
- modifier = Modifier.fillMaxWidth().wrapContentSize()
- .padding(top = 12.5.dp, bottom = 12.5.dp),
- verticalAlignment = Alignment.CenterVertically
- ) {
- Text(
- modifier = Modifier.wrapContentHeight().weight(3f),
- text = stringResource(R.string.about_version),
- fontWeight = FontWeight.Medium,
- fontSize = 18.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
- )
-
- Text(
- modifier = Modifier.wrapContentHeight().weight(3f),
- text = stringResource(R.string.version_code),
- fontWeight = FontWeight.Normal,
- fontSize = 16.sp,
- textAlign = TextAlign.End,
- color = MaterialTheme.colorScheme.title
- )
- }
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
- Row(
- modifier = Modifier.fillMaxWidth().wrapContentSize(),
- verticalAlignment = Alignment.CenterVertically,
+ RoundedCornerColumn(
+ backgroundColor = MaterialTheme.colorScheme.containerBackground
) {
- Text(
- modifier = Modifier.wrapContentHeight().weight(5f),
- text = stringResource(R.string.about_oss),
- fontWeight = FontWeight.Medium,
- fontSize = 18.sp,
- textAlign = TextAlign.Start,
- color = MaterialTheme.colorScheme.title
+ RoundedCornerColumnTextItem(
+ verticalPadding = 12.dp,
+ titleText = stringResource(R.string.about_version),
+ subTitleText = stringResource(R.string.version_code),
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = true
)
- IconButton(
- onClick = { onOssClicked() }
+ RoundedCornerColumnTextItemWithExtraOnRight(
+ verticalPadding = 10.dp,
+ titleText = stringResource(R.string.about_oss),
+ subTitleText = null,
+ primaryColor = MaterialTheme.colorScheme.title,
+ secondaryColor = MaterialTheme.colorScheme.subTitle,
+ hasBottomDivider = false
) {
- Image(
- painter = painterResource(R.drawable.baseline_arrow_forward_ios_24),
- contentDescription = "Button to OSS Notice",
- colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.buttonContainer)
+ CircleGoButton(
+ modifier = Modifier.weight(1f),
+ containerColor = MaterialTheme.colorScheme.buttonContainer,
+ contentColor = MaterialTheme.colorScheme.subTitle,
+ onClick = onOssClicked
)
}
}
-
- HorizontalDivider(
- Modifier.fillMaxWidth(),
- color = MaterialTheme.colorScheme.subTitle
- )
-
}
}