diff --git a/app/schemas/cloud.pablos.overload.data.OverloadDatabase/2.json b/app/schemas/cloud.pablos.overload.data.OverloadDatabase/2.json index bb06459..9083aef 100644 --- a/app/schemas/cloud.pablos.overload.data.OverloadDatabase/2.json +++ b/app/schemas/cloud.pablos.overload.data.OverloadDatabase/2.json @@ -2,11 +2,11 @@ "formatVersion": 1, "database": { "version": 2, - "identityHash": "bb6e146c83819d370d9c303a8dc57a8b", + "identityHash": "5786d9fcd0545b1af0077201c347aca5", "entities": [ { "tableName": "categories", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `color` TEXT NOT NULL, `emoji` TEXT NOT NULL, `isDefault` INTEGER NOT NULL, `name` TEXT NOT NULL)", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `color` INTEGER NOT NULL, `emoji` TEXT NOT NULL, `isDefault` INTEGER NOT NULL, `name` TEXT NOT NULL)", "fields": [ { "fieldPath": "id", @@ -17,7 +17,7 @@ { "fieldPath": "color", "columnName": "color", - "affinity": "TEXT", + "affinity": "INTEGER", "notNull": true }, { @@ -103,7 +103,7 @@ "views": [], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'bb6e146c83819d370d9c303a8dc57a8b')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5786d9fcd0545b1af0077201c347aca5')" ] } } \ No newline at end of file diff --git a/app/src/main/java/cloud/pablos/overload/data/Converters.kt b/app/src/main/java/cloud/pablos/overload/data/Converters.kt index 8aea858..7b79d93 100644 --- a/app/src/main/java/cloud/pablos/overload/data/Converters.kt +++ b/app/src/main/java/cloud/pablos/overload/data/Converters.kt @@ -1,27 +1,23 @@ package cloud.pablos.overload.data -class Converters { - /*@TypeConverter - fun iconToString(icon: ImageVector): String { - return icon.name.split(".")[1] - } - - @TypeConverter - fun stringToIcon(name: String): ImageVector { - val cl = Class.forName("androidx.compose.material.icons.filled.${name}Kt") - val method = cl.declaredMethods.first() - return method.invoke(null, Icons.Filled) as ImageVector - } +import androidx.compose.ui.graphics.Color +class Converters { companion object { - fun iconToString(icon: ImageVector): String { - return icon.name.split(".")[1] + fun convertColorToLong(color: Color): Long { + val alpha = 255 // (color.alpha * 255).toInt() + val red = (color.red * 255).toInt() + val green = (color.green * 255).toInt() + val blue = (color.blue * 255).toInt() + return (alpha.toLong() shl 24) or (red.toLong() shl 16) or (green.toLong() shl 8) or blue.toLong() } - fun stringToIcon(name: String): ImageVector { - val cl = Class.forName("androidx.compose.material.icons.filled.${name}Kt") - val method = cl.declaredMethods.first() - return method.invoke(null, Icons.Filled) as ImageVector + fun convertLongToColor(value: Long): Color { + val alpha = 1f // (value shr 24 and 0xFF).toFloat() / 255f + val red = (value shr 16 and 0xFF).toFloat() / 255f + val green = (value shr 8 and 0xFF).toFloat() / 255f + val blue = (value and 0xFF).toFloat() / 255f + return Color(red, green, blue, alpha) } - }*/ + } } diff --git a/app/src/main/java/cloud/pablos/overload/data/Helpers.kt b/app/src/main/java/cloud/pablos/overload/data/Helpers.kt new file mode 100644 index 0000000..797cda8 --- /dev/null +++ b/app/src/main/java/cloud/pablos/overload/data/Helpers.kt @@ -0,0 +1,57 @@ +package cloud.pablos.overload.data + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import cloud.pablos.overload.data.category.CategoryState +import kotlin.math.max +import kotlin.math.min +import kotlin.math.pow + +class Helpers { + companion object { + private fun calculateRelativeLuminance(color: Color): Double { + val red = if (color.red <= 0.03928) color.red / 12.92 else ((color.red + 0.055) / 1.055).pow(2.4) + val green = if (color.green <= 0.03928) color.green / 12.92 else ((color.green + 0.055) / 1.055).pow(2.4) + val blue = if (color.blue <= 0.03928) color.blue / 12.92 else ((color.blue + 0.055) / 1.055).pow(2.4) + return 0.2126 * red + 0.7152 * green + 0.0722 * blue + } + + private fun calculateContrastRatio( + background: Color, + foreground: Color, + ): Double { + val lum1 = calculateRelativeLuminance(background) + val lum2 = calculateRelativeLuminance(foreground) + val lighter = max(lum1, lum2) + val darker = min(lum1, lum2) + return (lighter + 0.05) / (darker + 0.05) + } + + @Composable + fun decideBackground(categoryState: CategoryState): Color { + return ( + categoryState.categories.find { category -> + category.id == categoryState.selectedCategory + } + ) + ?.let { + if (it.isDefault) { + MaterialTheme.colorScheme.primaryContainer + } else { + Converters.convertLongToColor(it.color) + } + } + ?: MaterialTheme.colorScheme.primaryContainer + } + + @Composable + fun decideForeground(background: Color): Color { + val white = MaterialTheme.colorScheme.background + val black = MaterialTheme.colorScheme.onBackground + val contrastWithWhite = calculateContrastRatio(background, white) + val contrastWithBlack = calculateContrastRatio(background, black) + return if (contrastWithWhite >= contrastWithBlack) white else black + } + } +} diff --git a/app/src/main/java/cloud/pablos/overload/data/category/Category.kt b/app/src/main/java/cloud/pablos/overload/data/category/Category.kt index faf7b53..1971390 100644 --- a/app/src/main/java/cloud/pablos/overload/data/category/Category.kt +++ b/app/src/main/java/cloud/pablos/overload/data/category/Category.kt @@ -9,7 +9,7 @@ import cloud.pablos.overload.data.item.Item @Entity(tableName = "categories") data class Category( @PrimaryKey(autoGenerate = true) val id: Int = 1, - val color: String, + val color: Long, val emoji: String, val isDefault: Boolean, val name: String, diff --git a/app/src/main/java/cloud/pablos/overload/data/category/CategoryEvent.kt b/app/src/main/java/cloud/pablos/overload/data/category/CategoryEvent.kt index ee40053..22ccda8 100644 --- a/app/src/main/java/cloud/pablos/overload/data/category/CategoryEvent.kt +++ b/app/src/main/java/cloud/pablos/overload/data/category/CategoryEvent.kt @@ -5,7 +5,7 @@ sealed interface CategoryEvent { data class SetId(val id: Int) : CategoryEvent - data class SetColor(val color: String) : CategoryEvent + data class SetColor(val color: Long) : CategoryEvent data class SetEmoji(val emoji: String) : CategoryEvent 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 42e7c81..e5ad60f 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 @@ -8,7 +8,7 @@ data class CategoryState( val categoryWithItems: List = emptyList(), // -- val id: Int = 1, - val color: String = Color.Unspecified.toString(), + val color: Long = Color.Unspecified.value.toLong(), val emoji: String = "🕣", val name: String = "Default", val isDefault: Boolean = true, diff --git a/app/src/main/java/cloud/pablos/overload/data/category/CategoryViewModel.kt b/app/src/main/java/cloud/pablos/overload/data/category/CategoryViewModel.kt index 3a318b1..63509d2 100644 --- a/app/src/main/java/cloud/pablos/overload/data/category/CategoryViewModel.kt +++ b/app/src/main/java/cloud/pablos/overload/data/category/CategoryViewModel.kt @@ -3,6 +3,7 @@ package cloud.pablos.overload.data.category import androidx.compose.ui.graphics.Color import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import cloud.pablos.overload.data.Converters.Companion.convertColorToLong import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine @@ -60,7 +61,7 @@ class CategoryViewModel( _state.update { it.copy( id = 0, - color = Color.Unspecified.toString(), + color = convertColorToLong(Color.Unspecified), emoji = "🕣", isDefault = false, name = "", diff --git a/app/src/main/java/cloud/pablos/overload/ui/OverloadApp.kt b/app/src/main/java/cloud/pablos/overload/ui/OverloadApp.kt index 08efed8..54e86b4 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/OverloadApp.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/OverloadApp.kt @@ -336,6 +336,7 @@ fun OverloadAppContent( if (adjustEndDialogState) { AdjustEndDialog( onClose = { itemEvent(ItemEvent.SetAdjustEndDialogShown(false)) }, + categoryState, itemState, itemEvent, ) @@ -344,6 +345,7 @@ fun OverloadAppContent( if (spreadAcrossDaysDialogState) { SpreadAcrossDaysDialog( onClose = { itemEvent(ItemEvent.SetSpreadAcrossDaysDialogShown(false)) }, + categoryState, itemState, itemEvent, ) diff --git a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFab.kt b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFab.kt index be8dc3c..ce4ee0f 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFab.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFab.kt @@ -29,6 +29,8 @@ import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +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 @@ -49,6 +51,9 @@ fun OverloadNavigationFab( itemEvent: (ItemEvent) -> Unit, onDrawerClicked: () -> Unit = {}, ) { + val backgroundColor = decideBackground(categoryState) + val foregroundColor = decideForeground(backgroundColor) + val date = LocalDate.now() val itemsForToday = getItemsOfDay(date, categoryState, itemState) @@ -94,8 +99,8 @@ fun OverloadNavigationFab( itemEvent(ItemEvent.SetIsFabOpen(false)) }, interactionSource = interactionSource, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, modifier = Modifier.padding(bottom = 10.dp).fillMaxWidth(), ) { Column( @@ -234,8 +239,8 @@ fun OverloadNavigationFab( } }, interactionSource = interactionSource, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, modifier = Modifier.fillMaxWidth(), ) { Column( diff --git a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFabSmall.kt b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFabSmall.kt index 4100e09..d525bcd 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFabSmall.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/navigation/OverloadNavigationFabSmall.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +import cloud.pablos.overload.data.Helpers import cloud.pablos.overload.data.category.CategoryEvent import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.ItemEvent @@ -44,6 +45,9 @@ fun OverloadNavigationFabSmall( itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { + val backgroundColor = Helpers.decideBackground(categoryState) + val foregroundColor = Helpers.decideForeground(backgroundColor) + val date = LocalDate.now() val itemsForToday = getItemsOfDay(date, categoryState, itemState) @@ -88,8 +92,8 @@ fun OverloadNavigationFabSmall( onClick = { itemEvent(ItemEvent.SetIsFabOpen(false)) }, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, ) { Icon( imageVector = Icons.Default.Close, @@ -139,8 +143,8 @@ fun OverloadNavigationFabSmall( } }, interactionSource = interactionSource, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, ) { Icon( imageVector = diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTab.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTab.kt index f5da263..53bef3d 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTab.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/configurations/ConfigurationsTab.kt @@ -53,6 +53,7 @@ import androidx.navigation.NavHostController import androidx.room.withTransaction import cloud.pablos.overload.R import cloud.pablos.overload.data.Backup +import cloud.pablos.overload.data.Converters.Companion.convertColorToLong import cloud.pablos.overload.data.OverloadDatabase import cloud.pablos.overload.data.category.Category import cloud.pablos.overload.data.category.CategoryEvent @@ -102,12 +103,12 @@ fun ConfigurationsTab( val workGoalDialogState = remember { mutableStateOf(false) } val pauseGoalDialogState = remember { mutableStateOf(false) } - val color = MaterialTheme.colorScheme.onSurfaceVariant.toString() + val color = convertColorToLong(MaterialTheme.colorScheme.onSurfaceVariant) val categories = categoryState.categories LaunchedEffect(categories) { if (categories.isEmpty()) { - categoryEvent(CategoryEvent.SetId(0)) + categoryEvent(CategoryEvent.SetId(1)) categoryEvent(CategoryEvent.SetName("Default")) categoryEvent(CategoryEvent.SetColor(color)) categoryEvent(CategoryEvent.SetEmoji("🕣")) @@ -610,10 +611,11 @@ private fun importJsonData( Log.d("import", "Importing categories") val categoriesTable = databaseBackup.data["categories"] ?: emptyList() categoriesTable.forEach { categoriesData -> + Log.d("colorimport", categoriesData["color"].toString()) val category = Category( id = (categoriesData["id"] as? Double)?.toInt() ?: 0, - color = categoriesData["color"] as String, + color = (categoriesData["color"] as? Double)?.toLong() ?: 0, emoji = categoriesData["emoji"] as String, isDefault = categoriesData["isDefault"] as Boolean, name = categoriesData["name"] as String, 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 6b4983c..ab9c702 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 @@ -24,6 +24,7 @@ import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +import cloud.pablos.overload.data.Converters.Companion.convertColorToLong import cloud.pablos.overload.data.category.CategoryEvent import cloud.pablos.overload.ui.views.TextView @@ -65,7 +66,7 @@ fun ConfigurationsTabCreateCategoryDialog( onClick = { categoryEvent(CategoryEvent.SetName(name.text)) categoryEvent(CategoryEvent.SetEmoji("💙")) - categoryEvent(CategoryEvent.SetColor(Color.Blue.toString())) + categoryEvent(CategoryEvent.SetColor(convertColorToLong(Color.Blue))) categoryEvent(CategoryEvent.SetIsDefault(false)) categoryEvent(CategoryEvent.SaveCategory) onClose() diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTab.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTab.kt index 9366ee9..2ffb759 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTab.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTab.kt @@ -22,12 +22,15 @@ import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Tab +import androidx.compose.material3.TabRowDefaults import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight +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.data.item.ItemEvent @@ -51,6 +54,8 @@ fun HomeTab( itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { + val backgroundColor = Helpers.decideBackground(categoryState) + val pagerState = rememberPagerState( initialPage = 2, @@ -102,6 +107,13 @@ fun HomeTab( PrimaryTabRow( selectedTabIndex = pagerState.currentPage, divider = {}, + indicator = { + TabRowDefaults.PrimaryIndicator( + modifier = Modifier.tabIndicatorOffset(pagerState.currentPage, matchContentSize = true), + width = Dp.Unspecified, + color = backgroundColor, + ) + }, ) { homeTabItems.forEachIndexed { index, item -> Tab( diff --git a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabFab.kt b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabFab.kt index 889f5ae..dcdffba 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabFab.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/tabs/home/HomeTabFab.kt @@ -33,6 +33,7 @@ import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +import cloud.pablos.overload.data.Helpers import cloud.pablos.overload.data.category.CategoryEvent import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.ItemEvent @@ -51,6 +52,9 @@ fun HomeTabFab( itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { + val backgroundColor = Helpers.decideBackground(categoryState) + val foregroundColor = Helpers.decideForeground(backgroundColor) + val date = LocalDate.now() val itemsForToday = getItemsOfDay(date, categoryState, itemState) @@ -160,8 +164,8 @@ fun HomeTabFab( onClick = { itemEvent(ItemEvent.SetIsFabOpen(false)) }, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, ) { Icon( imageVector = Icons.Default.Close, @@ -179,8 +183,8 @@ fun HomeTabFab( } }, interactionSource = interactionSource, - containerColor = MaterialTheme.colorScheme.primaryContainer, - contentColor = MaterialTheme.colorScheme.onPrimaryContainer, + containerColor = backgroundColor, + contentColor = foregroundColor, ) { Row( verticalAlignment = Alignment.CenterVertically, diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/AdjustEndDialog.kt b/app/src/main/java/cloud/pablos/overload/ui/views/AdjustEndDialog.kt index c16b767..267a608 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/AdjustEndDialog.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/AdjustEndDialog.kt @@ -38,6 +38,7 @@ import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat import androidx.core.net.toUri import cloud.pablos.overload.R +import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.Item import cloud.pablos.overload.data.item.ItemEvent import cloud.pablos.overload.data.item.ItemState @@ -49,6 +50,7 @@ import java.time.format.DateTimeFormatter @Composable fun AdjustEndDialog( onClose: () -> Unit, + categoryState: CategoryState, itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { @@ -134,7 +136,13 @@ fun AdjustEndDialog( Spacer(modifier = Modifier.height(16.dp)) - DayViewItemOngoing(item = firstOngoingItem, showDate = true, hideEnd = true, itemState = itemState) + DayViewItemOngoing( + item = firstOngoingItem, + showDate = true, + hideEnd = true, + categoryState = categoryState, + itemState = itemState, + ) Spacer(modifier = Modifier.height(16.dp)) 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 db3bd01..3ea6aaf 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 @@ -136,6 +136,7 @@ fun DayScreenDayView( categoryId = categoryState.selectedCategory, ), isSelected = false, + categoryState = categoryState, itemState = itemState, ) } @@ -189,8 +190,8 @@ fun DayScreenDayView( ), ) { when (item.ongoing.not() && item.endTime.isNotBlank()) { - true -> DayViewItemNotOngoing(item, isSelected = isSelected, itemState) - else -> DayViewItemOngoing(item, isSelected = isSelected, itemState = itemState) + true -> DayViewItemNotOngoing(item, categoryState, itemState, isSelected) + else -> DayViewItemOngoing(item, categoryState, itemState, isSelected) } } } 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 dd01761..1df1add 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 @@ -136,6 +136,7 @@ fun DayView( categoryId = categoryState.selectedCategory, ), isSelected = false, + categoryState = categoryState, itemState = itemState, ) } @@ -189,8 +190,8 @@ fun DayView( ), ) { when (item.ongoing.not() && item.endTime.isNotBlank()) { - true -> DayViewItemNotOngoing(item, isSelected = isSelected, itemState) - else -> DayViewItemOngoing(item, isSelected = isSelected, itemState = itemState) + true -> DayViewItemNotOngoing(item, categoryState, itemState, isSelected) + else -> DayViewItemOngoing(item, categoryState, itemState, isSelected) } } } diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemNotOngoing.kt b/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemNotOngoing.kt index 1a78dc9..1c86b24 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemNotOngoing.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemNotOngoing.kt @@ -29,6 +29,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +import cloud.pablos.overload.data.Helpers +import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.Item import cloud.pablos.overload.data.item.ItemState import java.time.LocalDateTime @@ -38,9 +40,13 @@ import java.time.format.DateTimeFormatter @Composable fun DayViewItemNotOngoing( item: Item, - isSelected: Boolean, + categoryState: CategoryState, itemState: ItemState, + isSelected: Boolean, ) { + val backgroundColorCategory = Helpers.decideBackground(categoryState) + val foregroundColorCategory = Helpers.decideForeground(backgroundColorCategory) + var backgroundColor: Color var foregroundColor: Color @@ -73,8 +79,8 @@ fun DayViewItemNotOngoing( } false -> { - backgroundColor = MaterialTheme.colorScheme.onSurfaceVariant - foregroundColor = MaterialTheme.colorScheme.surfaceVariant + backgroundColor = backgroundColorCategory + foregroundColor = foregroundColorCategory } } } diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemOngoing.kt b/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemOngoing.kt index 6b54ffc..2293be3 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemOngoing.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/DayViewItemOngoing.kt @@ -38,6 +38,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import cloud.pablos.overload.R +import cloud.pablos.overload.data.Helpers +import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.Item import cloud.pablos.overload.data.item.ItemState import kotlinx.coroutines.delay @@ -50,11 +52,15 @@ import java.time.format.DateTimeFormatter @Composable fun DayViewItemOngoing( item: Item, + categoryState: CategoryState, + itemState: ItemState, isSelected: Boolean = false, showDate: Boolean = false, hideEnd: Boolean = false, - itemState: ItemState, ) { + val backgroundColorCategory = Helpers.decideBackground(categoryState) + val foregroundColorCategory = Helpers.decideForeground(backgroundColorCategory) + var backgroundColor: Color var foregroundColor: Color var blink by remember { mutableStateOf(true) } @@ -96,8 +102,8 @@ fun DayViewItemOngoing( } false -> { - backgroundColor = MaterialTheme.colorScheme.onSurfaceVariant - foregroundColor = MaterialTheme.colorScheme.surfaceVariant + backgroundColor = backgroundColorCategory + foregroundColor = foregroundColorCategory } } } diff --git a/app/src/main/java/cloud/pablos/overload/ui/views/SpreadAcrossDaysDialog.kt b/app/src/main/java/cloud/pablos/overload/ui/views/SpreadAcrossDaysDialog.kt index 6f33628..4070c38 100644 --- a/app/src/main/java/cloud/pablos/overload/ui/views/SpreadAcrossDaysDialog.kt +++ b/app/src/main/java/cloud/pablos/overload/ui/views/SpreadAcrossDaysDialog.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat import androidx.core.net.toUri import cloud.pablos.overload.R +import cloud.pablos.overload.data.category.CategoryState import cloud.pablos.overload.data.item.Item import cloud.pablos.overload.data.item.ItemEvent import cloud.pablos.overload.data.item.ItemState @@ -41,6 +42,7 @@ import java.time.format.DateTimeFormatter @Composable fun SpreadAcrossDaysDialog( onClose: () -> Unit, + categoryState: CategoryState, itemState: ItemState, itemEvent: (ItemEvent) -> Unit, ) { @@ -105,7 +107,13 @@ fun SpreadAcrossDaysDialog( Spacer(modifier = Modifier.height(16.dp)) - DayViewItemOngoing(item = firstOngoingItem, showDate = true, hideEnd = true, itemState = itemState) + DayViewItemOngoing( + item = firstOngoingItem, + showDate = true, + hideEnd = true, + categoryState = categoryState, + itemState = itemState, + ) } }, confirmButton = {