From 9599ac542f5833b51ae1e27f5e8a852d0e02dbfb Mon Sep 17 00:00:00 2001 From: pabloscloud <93644977+pabloscloud@users.noreply.github.com> Date: Sun, 14 Apr 2024 22:09:12 +0200 Subject: [PATCH] - handle cases when fab is pressed after all categories have been deleted --- .../overload/data/category/CategoryState.kt | 1 - .../pablos/overload/data/item/ItemDao.kt | 22 +++++- .../OverloadNavigationComponents.kt | 2 +- .../ui/screens/category/CategoryScreen.kt | 24 ++++--- .../ui/tabs/calendar/CalendarTabTopAppBar.kt | 70 ++----------------- .../ui/tabs/calendar/CalendarTabYearDialog.kt | 5 +- .../ConfigurationsTabCreateCategoryDialog.kt | 12 ++++ .../overload/ui/tabs/home/HomeTabTopAppBar.kt | 14 +++- .../overload/ui/views/ChangeCategoryButton.kt | 52 ++++++++++++++ .../overload/ui/views/ChangeYearButton.kt | 54 ++++++++++++++ .../overload/ui/views/DayScreenDayView.kt | 1 - .../cloud/pablos/overload/ui/views/DayView.kt | 1 - .../pablos/overload/ui/views/YearView.kt | 50 ++++++------- 13 files changed, 196 insertions(+), 112 deletions(-) create mode 100644 app/src/main/java/cloud/pablos/overload/ui/views/ChangeCategoryButton.kt create mode 100644 app/src/main/java/cloud/pablos/overload/ui/views/ChangeYearButton.kt diff --git a/app/src/main/java/cloud/pablos/overload/data/category/CategoryState.kt b/app/src/main/java/cloud/pablos/overload/data/category/CategoryState.kt index b5ebed20..f381a5e6 100644 --- a/app/src/main/java/cloud/pablos/overload/data/category/CategoryState.kt +++ b/app/src/main/java/cloud/pablos/overload/data/category/CategoryState.kt @@ -1,6 +1,5 @@ package cloud.pablos.overload.data.category -import androidx.compose.material.icons.filled.Category import androidx.compose.ui.graphics.Color data class CategoryState( diff --git a/app/src/main/java/cloud/pablos/overload/data/item/ItemDao.kt b/app/src/main/java/cloud/pablos/overload/data/item/ItemDao.kt index b142ba3a..a51664e1 100644 --- a/app/src/main/java/cloud/pablos/overload/data/item/ItemDao.kt +++ b/app/src/main/java/cloud/pablos/overload/data/item/ItemDao.kt @@ -42,7 +42,7 @@ fun fabPress( val categories = categoryState.categories if (categories.isNotEmpty()) { - startOrStop(categoryState, itemState, itemEvent) + startOrStop(categoryState, categoryEvent, itemState, itemEvent) } else if (itemState.items.isNotEmpty()) { categoryEvent(CategoryEvent.SetId(1)) categoryEvent(CategoryEvent.SetName("Default")) @@ -53,7 +53,7 @@ fun fabPress( categoryEvent(CategoryEvent.SetIsDefault(true)) categoryEvent(CategoryEvent.SaveCategory) - startOrStop(categoryState, itemState, itemEvent) + startOrStop(categoryState, categoryEvent, itemState, itemEvent) } else { categoryEvent(CategoryEvent.SetIsCreateCategoryDialogOpenHome(true)) } @@ -61,11 +61,27 @@ fun fabPress( fun startOrStop( categoryState: CategoryState, + categoryEvent: (CategoryEvent) -> Unit, itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { val date = LocalDate.now() - val selectedCategoryId = categoryState.selectedCategory + val selectedCategory = categoryState.categories.find { it.id == categoryState.selectedCategory } + var selectedCategoryId: Int? + + if (selectedCategory != null) { + selectedCategoryId = selectedCategory.id + } else if (categoryState.categories.isEmpty()) { + categoryEvent(CategoryEvent.SetIsCreateCategoryDialogOpenHome(true)) + return + } else { + selectedCategoryId = categoryState.categories.first().id + categoryEvent(CategoryEvent.SetSelectedCategory(selectedCategoryId)) + + if (categoryState.categories.count() > 1) { + return + } + } val itemsForToday = getItemsOfDay(date, categoryState, itemState) val isFirstToday = itemsForToday.isEmpty() diff --git a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationComponents.kt b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationComponents.kt index dd3c4946..569bbb1b 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationComponents.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationComponents.kt @@ -402,7 +402,7 @@ fun OverloadTopAppBar( if (topBarState == currentTopBarState) { when (topBarState) { TopBarState.Home -> { - HomeTabTopAppBar() + HomeTabTopAppBar(categoryState, categoryEvent) } TopBarState.Calendar -> { diff --git a/app/src/main/java/cloud/pablos/overload/ui/screens/category/CategoryScreen.kt b/app/src/main/java/cloud/pablos/overload/ui/screens/category/CategoryScreen.kt index 6f583d9b..83670b0f 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/screens/category/CategoryScreen.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/screens/category/CategoryScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape @@ -230,17 +231,17 @@ fun CategoryScreen( ConfigurationsTabItem(title = stringResource(id = R.string.goals)) } - // Work Goal + // Goal 1 item { - val itemLabel = - stringResource(id = R.string.work) + ": " + stringResource(id = R.string.work_goal_descr) + val itemLabel = stringResource(id = R.string.work) + ": " + stringResource(id = R.string.work_goal_descr) Row( verticalAlignment = Alignment.CenterVertically, modifier = Modifier + .padding(bottom = 16.dp) .clip(shape = RoundedCornerShape(15.dp)) .clickable { - goalDialogState.value = true + pauseGoalDialogState.value = true } .clearAndSetSemantics { contentDescription = itemLabel @@ -248,7 +249,10 @@ fun CategoryScreen( ) { Text( selectedCategory.emoji, - modifier = Modifier.padding(horizontal = 8.dp), + modifier = + Modifier + .width(40.dp) + .padding(horizontal = 8.dp), ) Row( verticalAlignment = Alignment.CenterVertically, @@ -263,10 +267,9 @@ fun CategoryScreen( } } - // Pause Goal + // Goal 2 item { - val itemLabel = - stringResource(id = R.string.pause) + ": " + stringResource(id = R.string.pause_goal_descr) + val itemLabel = stringResource(id = R.string.pause) + ": " + stringResource(id = R.string.pause_goal_descr) Row( verticalAlignment = Alignment.CenterVertically, @@ -285,7 +288,10 @@ fun CategoryScreen( imageVector = Icons.Filled.DarkMode, contentDescription = stringResource(id = R.string.pause), tint = MaterialTheme.colorScheme.primary, - modifier = Modifier.padding(horizontal = 8.dp), + modifier = + Modifier + .width(40.dp) + .padding(horizontal = 8.dp), ) Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabTopAppBar.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabTopAppBar.kt index 9cd24a6c..bb1a41f3 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabTopAppBar.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabTopAppBar.kt @@ -1,30 +1,24 @@ package cloud.pablos.overload.ui.tabs.calendar -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults +import android.os.Build +import androidx.annotation.RequiresApi import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarDefaults import androidx.compose.material3.Surface import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.compose.ui.unit.dp import cloud.pablos.overload.R -import cloud.pablos.overload.data.Converters.Companion.convertStringToLocalDateTime -import cloud.pablos.overload.data.Helpers.Companion.decideBackground -import cloud.pablos.overload.data.Helpers.Companion.decideForeground import cloud.pablos.overload.data.category.CategoryEvent import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.ItemEvent import cloud.pablos.overload.data.item.ItemState +import cloud.pablos.overload.ui.views.ChangeCategoryButton +import cloud.pablos.overload.ui.views.ChangeYearButton import cloud.pablos.overload.ui.views.TextView -import java.time.LocalDate +@RequiresApi(Build.VERSION_CODES.S) @OptIn(ExperimentalMaterial3Api::class) @Composable fun CalendarTabTopAppBar( @@ -33,20 +27,6 @@ fun CalendarTabTopAppBar( itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { - val yearDialogState = remember { mutableStateOf(false) } - val categoryDialogState = remember { mutableStateOf(false) } - - val firstYear = - if (itemState.items.isEmpty()) { - LocalDate.now().year - } else { - itemState.items.minByOrNull { it.startTime }?.let { convertStringToLocalDateTime(it.startTime).year } ?: LocalDate.now().year - } - - val yearsCount = LocalDate.now().year - firstYear - val categoriesCount = categoryState.categories.count() - val selectedCategory = categoryState.categories.find { it.id == categoryState.selectedCategory } - Surface( tonalElevation = NavigationBarDefaults.Elevation, color = MaterialTheme.colorScheme.background, @@ -59,44 +39,8 @@ fun CalendarTabTopAppBar( ) }, actions = { - if (categoriesCount > 1 && selectedCategory != null) { - val backgroundColor = decideBackground(categoryState) - val foregroundColor = decideForeground(backgroundColor) - - Button( - onClick = { categoryDialogState.value = true }, - modifier = Modifier.padding(horizontal = 8.dp), - colors = - ButtonDefaults.buttonColors( - containerColor = backgroundColor, - contentColor = foregroundColor, - ), - ) { - TextView(selectedCategory.emoji) - } - if (categoryDialogState.value) { - CalendarTabCategoryDialog( - categoryState, - categoryEvent, - onClose = { categoryDialogState.value = false }, - ) - } - } - if (yearsCount > 0) { - Button( - onClick = { yearDialogState.value = true }, - modifier = Modifier.padding(horizontal = 8.dp), - ) { - TextView(itemState.selectedYearCalendar.toString()) - } - if (yearDialogState.value) { - CalendarTabYearDialog( - firstYear = firstYear, - itemEvent = itemEvent, - onClose = { yearDialogState.value = false }, - ) - } - } + ChangeYearButton(itemState, itemEvent) + ChangeCategoryButton(categoryState, categoryEvent) }, ) } diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabYearDialog.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabYearDialog.kt index d742c2c1..13c3a5dd 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabYearDialog.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/calendar/CalendarTabYearDialog.kt @@ -4,7 +4,6 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn @@ -81,9 +80,7 @@ private fun YearListContent( itemEvent: (ItemEvent) -> Unit, onClose: () -> Unit, ) { - LazyColumn( - modifier = Modifier.fillMaxHeight(), - ) { + LazyColumn { val currentYear = LocalDate.now().year items((currentYear downTo firstYear).toList()) { year -> YearRow(year = year, itemEvent = itemEvent, onClose = onClose) diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTabCreateCategoryDialog.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTabCreateCategoryDialog.kt index f4727427..b17af809 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTabCreateCategoryDialog.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTabCreateCategoryDialog.kt @@ -56,6 +56,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight @@ -139,6 +141,12 @@ fun ConfigurationsTabCreateCategoryDialog( var nameError by remember { mutableStateOf(false) } + val focusRequester = remember { FocusRequester() } + + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + AlertDialog( onDismissRequest = onClose, title = { @@ -157,6 +165,7 @@ fun ConfigurationsTabCreateCategoryDialog( ) { Column( verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.fillMaxWidth(), ) { TextView( "Name", @@ -176,11 +185,13 @@ fun ConfigurationsTabCreateCategoryDialog( placeholder = { Text(text = "Name") }, isError = nameError, keyboardOptions = KeyboardOptions(capitalization = KeyboardCapitalization.Sentences), + modifier = Modifier.fillMaxWidth().focusRequester(focusRequester), ) } Column( verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.fillMaxWidth(), ) { TextView( "Color", @@ -204,6 +215,7 @@ fun ConfigurationsTabCreateCategoryDialog( Column( verticalArrangement = Arrangement.spacedBy(8.dp), + modifier = Modifier.fillMaxWidth(), ) { TextView( "Emoji", diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabTopAppBar.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabTopAppBar.kt index ea9539c1..58950d26 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabTopAppBar.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabTopAppBar.kt @@ -1,5 +1,7 @@ package cloud.pablos.overload.ui.tabs.home +import android.os.Build +import androidx.annotation.RequiresApi import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme import androidx.compose.material3.NavigationBarDefaults @@ -9,11 +11,18 @@ import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.res.stringResource import cloud.pablos.overload.R +import cloud.pablos.overload.data.category.CategoryEvent +import cloud.pablos.overload.data.category.CategoryState +import cloud.pablos.overload.ui.views.ChangeCategoryButton import cloud.pablos.overload.ui.views.TextView +@RequiresApi(Build.VERSION_CODES.S) @OptIn(ExperimentalMaterial3Api::class) @Composable -fun HomeTabTopAppBar() { +fun HomeTabTopAppBar( + categoryState: CategoryState, + categoryEvent: (CategoryEvent) -> Unit, +) { Surface( tonalElevation = NavigationBarDefaults.Elevation, color = MaterialTheme.colorScheme.background, @@ -30,6 +39,9 @@ fun HomeTabTopAppBar() { containerColor = MaterialTheme.colorScheme.background, titleContentColor = MaterialTheme.colorScheme.onBackground, ), + actions = { + ChangeCategoryButton(categoryState, categoryEvent) + }, ) } } diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/ChangeCategoryButton.kt b/app/src/main/java/cloud/pablos/overload/ui/views/ChangeCategoryButton.kt new file mode 100644 index 00000000..0946c306 --- /dev/null +++ b/app/src/main/java/cloud/pablos/overload/ui/views/ChangeCategoryButton.kt @@ -0,0 +1,52 @@ +package cloud.pablos.overload.ui.views + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import cloud.pablos.overload.data.Helpers +import cloud.pablos.overload.data.category.CategoryEvent +import cloud.pablos.overload.data.category.CategoryState +import cloud.pablos.overload.ui.tabs.calendar.CalendarTabCategoryDialog + +@RequiresApi(Build.VERSION_CODES.S) +@Composable +fun ChangeCategoryButton( + categoryState: CategoryState, + categoryEvent: (CategoryEvent) -> Unit, +) { + val categoryDialogState = remember { mutableStateOf(false) } + + val categoriesCount = categoryState.categories.count() + val selectedCategory = categoryState.categories.find { it.id == categoryState.selectedCategory } + + if (categoriesCount > 1 && selectedCategory != null) { + val backgroundColor = Helpers.decideBackground(categoryState) + val foregroundColor = Helpers.decideForeground(backgroundColor) + + Button( + onClick = { categoryDialogState.value = true }, + modifier = Modifier.padding(horizontal = 8.dp), + colors = + ButtonDefaults.buttonColors( + containerColor = backgroundColor, + contentColor = foregroundColor, + ), + ) { + TextView(selectedCategory.emoji) + } + if (categoryDialogState.value) { + CalendarTabCategoryDialog( + categoryState, + categoryEvent, + onClose = { categoryDialogState.value = false }, + ) + } + } +} diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/ChangeYearButton.kt b/app/src/main/java/cloud/pablos/overload/ui/views/ChangeYearButton.kt new file mode 100644 index 00000000..c688ee06 --- /dev/null +++ b/app/src/main/java/cloud/pablos/overload/ui/views/ChangeYearButton.kt @@ -0,0 +1,54 @@ +package cloud.pablos.overload.ui.views + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import cloud.pablos.overload.data.Converters +import cloud.pablos.overload.data.item.ItemEvent +import cloud.pablos.overload.data.item.ItemState +import cloud.pablos.overload.ui.tabs.calendar.CalendarTabYearDialog +import java.time.LocalDate + +@RequiresApi(Build.VERSION_CODES.S) +@Composable +fun ChangeYearButton( + itemState: ItemState, + itemEvent: (ItemEvent) -> Unit, +) { + val yearDialogState = remember { mutableStateOf(false) } + + val firstYear = + if (itemState.items.isEmpty()) { + LocalDate.now().year + } else { + itemState.items.minByOrNull { it.startTime }?.let { + Converters.convertStringToLocalDateTime( + it.startTime, + ).year + } ?: LocalDate.now().year + } + + val yearsCount = LocalDate.now().year - firstYear + + if (yearsCount > 0) { + Button( + onClick = { yearDialogState.value = true }, + modifier = Modifier.padding(horizontal = 8.dp), + ) { + TextView(itemState.selectedYearCalendar.toString()) + } + if (yearDialogState.value) { + CalendarTabYearDialog( + firstYear = firstYear, + itemEvent = itemEvent, + onClose = { yearDialogState.value = false }, + ) + } + } +} diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/DayScreenDayView.kt b/app/src/main/java/cloud/pablos/overload/ui/views/DayScreenDayView.kt index f168e789..2398f972 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/DayScreenDayView.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/DayScreenDayView.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/DayView.kt b/app/src/main/java/cloud/pablos/overload/ui/views/DayView.kt index e5f50d08..67659460 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/DayView.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/DayView.kt @@ -15,7 +15,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/YearView.kt b/app/src/main/java/cloud/pablos/overload/ui/views/YearView.kt index b0bbc683..a99193be 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/YearView.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/YearView.kt @@ -28,6 +28,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import cloud.pablos.overload.data.Helpers.Companion.decideBackground +import cloud.pablos.overload.data.Helpers.Companion.decideForeground import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.ItemEvent import cloud.pablos.overload.ui.tabs.home.getFormattedDate @@ -145,7 +146,7 @@ fun WeekRow( val today = LocalDate.now() while (iterationDate < endDayOfWeek) { - val (backgroundColor, borderColor) = + val colors = getColorOfDay( categoryState = categoryState, date = iterationDate, @@ -159,8 +160,7 @@ fun WeekRow( DayCell( date = iterationDate, itemEvent = itemEvent, - backgroundColor = backgroundColor, - borderColor = borderColor, + colors = colors, number = number, clickable = clickable, onNavigate = onNavigate, @@ -177,8 +177,7 @@ fun WeekRow( fun DayCell( date: LocalDate, itemEvent: (ItemEvent) -> Unit, - backgroundColor: Color, - borderColor: Color, + colors: DayCellColors, number: String, clickable: Boolean, onNavigate: () -> Unit, @@ -188,7 +187,7 @@ fun DayCell( Modifier .padding() .requiredSize(36.dp) - .background(backgroundColor, shape = CircleShape) + .background(colors.background, shape = CircleShape) .combinedClickable( enabled = clickable, onClick = { @@ -203,12 +202,13 @@ fun DayCell( interactionSource = remember { MutableInteractionSource() }, ) .clip(CircleShape) - .border(3.dp, borderColor, CircleShape), + .border(3.dp, colors.borderColor, CircleShape), contentAlignment = Alignment.Center, ) { TextView( text = number, fontSize = 14.sp, + color = colors.foreground, ) } } @@ -226,6 +226,8 @@ fun EmptyDayCell() { ) } +data class DayCellColors(val foreground: Color, val background: Color, val borderColor: Color) + @Composable fun getColorOfDay( categoryState: CategoryState, @@ -233,37 +235,29 @@ fun getColorOfDay( firstDayOfMonth: LocalDate, selected: Boolean, highlightSelectedDay: Boolean = false, -): Pair { +): DayCellColors { val month = firstDayOfMonth.month val today = LocalDate.now() val backgroundColor = - if (date <= today && date.month == month) { + if (selected && highlightSelectedDay) { + decideBackground(categoryState) + } else if (date <= today && date.month == month) { MaterialTheme.colorScheme.surfaceVariant } else { Color.Transparent } - val borderColor = - when (highlightSelectedDay) { - true -> { - if (selected) { - decideBackground(categoryState) - } else { - Color.Transparent - } - } + val foregroundColor = decideForeground(backgroundColor) - false -> { - if ( - date == LocalDate.now() - ) { - decideBackground(categoryState) - } else { - Color.Transparent - } - } + val borderColor = + if ( + date == LocalDate.now() + ) { + decideBackground(categoryState) + } else { + Color.Transparent } - return Pair(backgroundColor, borderColor) + return DayCellColors(foregroundColor, backgroundColor, borderColor) }