diff --git a/Near/app/src/main/java/com/alarmy/near/data/mapper/FriendSummaryMapper.kt b/Near/app/src/main/java/com/alarmy/near/data/mapper/FriendSummaryMapper.kt index c1811712..4dcffd3d 100644 --- a/Near/app/src/main/java/com/alarmy/near/data/mapper/FriendSummaryMapper.kt +++ b/Near/app/src/main/java/com/alarmy/near/data/mapper/FriendSummaryMapper.kt @@ -13,7 +13,7 @@ fun FriendSummaryEntity.toModel(): FriendSummary = id = friendId, name = name, profileImageUrl = imageUrl, - lastContactedAt = lastContactAt, + lastContactedAt = lastContactAt?.replace("-", "."), isContacted = true, contactFrequencyLevel = when (checkRate) { diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt index ddff2c75..699d3029 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/FriendProfileEditorScreen.kt @@ -45,17 +45,18 @@ import com.alarmy.near.model.Friend import com.alarmy.near.model.Relation import com.alarmy.near.model.ReminderInterval import com.alarmy.near.presentation.feature.friendprofileedittor.component.NearDatePicker -import com.alarmy.near.presentation.ui.component.bottomsheet.CycleSettingBottomSheet import com.alarmy.near.presentation.feature.friendprofileedittor.dialog.EditorExitDialog import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendProfileEditorUIEvent import com.alarmy.near.presentation.feature.friendprofileedittor.uistate.FriendProfileEditorUIState import com.alarmy.near.presentation.ui.component.NearFrame import com.alarmy.near.presentation.ui.component.appbar.NearTopAppbar +import com.alarmy.near.presentation.ui.component.bottomsheet.CycleSettingBottomSheet import com.alarmy.near.presentation.ui.component.radiobutton.NearSmallRadioButton import com.alarmy.near.presentation.ui.component.textfield.NearLimitedTextField import com.alarmy.near.presentation.ui.component.textfield.NearTextField import com.alarmy.near.presentation.ui.extension.onNoRippleClick import com.alarmy.near.presentation.ui.theme.NearTheme +import com.alarmy.near.utils.extensions.DateExtension import kotlinx.coroutines.launch @Composable @@ -333,12 +334,7 @@ fun FriendProfileEditorScreen( horizontalArrangement = Arrangement.SpaceBetween, ) { Text( - text = - stringResource(friendProfileEditorUIState.contactFrequency.reminderInterval.labelRes) + - stringResource( - R.string.friend_profile_editor_contact_period_format, - stringResource(friendProfileEditorUIState.contactFrequency.dayOfWeek.resId), - ), + text = buildContactFrequencyText(friendProfileEditorUIState.contactFrequency), style = NearTheme.typography.B2_14_MEDIUM, color = NearTheme.colors.BLACK_1A1A1A, ) @@ -613,3 +609,29 @@ fun FriendProfileEditorScreenPreview() { ) } } + +@Composable +private fun buildContactFrequencyText(contactFrequency: ContactFrequency): String { + val intervalText = stringResource(contactFrequency.reminderInterval.labelRes) + val suffix = + when (contactFrequency.reminderInterval) { + ReminderInterval.EVERY_WEEK, + ReminderInterval.EVERY_TWO_WEEK, + -> DateExtension.getTodayDayOfWeekInKorean() + ReminderInterval.EVERY_MONTH, + ReminderInterval.EVERY_SIX_MONTH, + -> + stringResource( + R.string.friend_profile_editor_contact_period_day_of_month, + DateExtension.getTodayDayOfMonth(), + ) + else -> null + } + if (suffix == null) { + return intervalText + } + return "$intervalText ${stringResource( + R.string.friend_profile_editor_contact_period_format, + suffix, + )}" +} diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/component/NearDatePicker.kt b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/component/NearDatePicker.kt index 2f23a951..9d50b2d3 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/component/NearDatePicker.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/feature/friendprofileedittor/component/NearDatePicker.kt @@ -1,7 +1,7 @@ package com.alarmy.near.presentation.feature.friendprofileedittor.component +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.DatePicker -import androidx.compose.material3.DatePickerColors import androidx.compose.material3.DatePickerDefaults import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DatePickerState @@ -12,11 +12,7 @@ import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.Preview -import com.alarmy.near.presentation.ui.theme.NearColor import com.alarmy.near.presentation.ui.theme.NearTheme -import java.text.SimpleDateFormat -import java.util.Date -import java.util.Locale @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -33,15 +29,27 @@ fun NearDatePicker( ), onDismissRequest = onDismiss, confirmButton = { - TextButton(onClick = { - onDateSelected(datePickerState.selectedDateMillis) - onDismiss() - }) { + TextButton( + onClick = { + onDateSelected(datePickerState.selectedDateMillis) + onDismiss() + }, + colors = + ButtonDefaults.textButtonColors( + contentColor = NearTheme.colors.BLUE01_5AA2E9, + ), + ) { Text("확인") } }, dismissButton = { - TextButton(onClick = onDismiss) { + TextButton( + onClick = onDismiss, + colors = + ButtonDefaults.textButtonColors( + contentColor = NearTheme.colors.BLUE01_5AA2E9, + ), + ) { Text("닫기") } }, @@ -57,6 +65,13 @@ fun NearDatePicker( colors = DatePickerDefaults.colors().copy( containerColor = NearTheme.colors.WHITE_FFFFFF, + selectedDayContainerColor = NearTheme.colors.BLUE01_5AA2E9, + selectedDayContentColor = NearTheme.colors.WHITE_FFFFFF, + todayDateBorderColor = NearTheme.colors.BLUE01_5AA2E9, + todayContentColor = NearTheme.colors.BLUE01_5AA2E9, + currentYearContentColor = NearTheme.colors.BLUE01_5AA2E9, + selectedYearContentColor = NearTheme.colors.WHITE_FFFFFF, + selectedYearContainerColor = NearTheme.colors.BLUE01_5AA2E9, ), ) } diff --git a/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt index 5737bacc..4e0aed22 100644 --- a/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt +++ b/Near/app/src/main/java/com/alarmy/near/presentation/ui/theme/Theme.kt @@ -6,7 +6,9 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalView +import androidx.compose.ui.unit.Density import androidx.core.view.WindowCompat val LocalCustomColors = @@ -29,7 +31,21 @@ fun NearTheme( darkTheme -> lightColor // TODO DarkTheme 추가시 수정 else -> lightColor } + + /* + * TODO + * 하단 부분으로 Typography의 크기를 고정합니다. + * 시스템에서 텍스트 크기를 조정해도 앱 내부에서는 변경되지 않기에 접근성을 해칠 수 있습니다. + * 추후 다른 방법으로 텍스트 크기를 조정하도록 합니다. + * */ + val currentDensity = LocalDensity.current + val themeDensity = + Density( + density = currentDensity.density, + fontScale = 1f, + ) CompositionLocalProvider( + LocalDensity provides themeDensity, LocalCustomColors provides colorScheme, LocalCustomTypography provides Typography, content = content, diff --git a/Near/app/src/main/java/com/alarmy/near/utils/extensions/DateExtension.kt b/Near/app/src/main/java/com/alarmy/near/utils/extensions/DateExtension.kt index 803497c4..fbf71edc 100644 --- a/Near/app/src/main/java/com/alarmy/near/utils/extensions/DateExtension.kt +++ b/Near/app/src/main/java/com/alarmy/near/utils/extensions/DateExtension.kt @@ -137,6 +137,12 @@ object DateExtension { // ReminderInterval을 contactWeek 문자열로 변환 fun toContactWeekString(reminderInterval: ReminderInterval): String = reminderInterval.name + // 오늘 날짜의 일(day)을 반환해서 반복 주기 표기에 사용한다. + fun getTodayDayOfMonth(): Int { + val calendar = Calendar.getInstance() + return calendar.get(Calendar.DAY_OF_MONTH) + } + // 오늘 요일을 DayOfWeek enum으로 반환 fun getTodayDayOfWeek(): DayOfWeek { val calendar = Calendar.getInstance() diff --git a/Near/app/src/main/res/values/strings.xml b/Near/app/src/main/res/values/strings.xml index 145bbba6..742b5e75 100644 --- a/Near/app/src/main/res/values/strings.xml +++ b/Near/app/src/main/res/values/strings.xml @@ -73,6 +73,7 @@ 추가하기 기념일 (%1$s 마다) + %1$d일 더 가까워졌어요! 수정 삭제