diff --git a/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt b/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt index 6eb889898..85ed65b37 100644 --- a/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt +++ b/app/src/main/java/org/tasks/compose/settings/SelectColorRow.kt @@ -12,6 +12,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -24,13 +25,22 @@ import androidx.compose.ui.unit.dp import org.tasks.R import org.tasks.compose.Constants import org.tasks.kmp.org.tasks.compose.settings.SettingRow +import org.tasks.themes.ColorProvider import org.tasks.themes.TasksTheme @Composable -fun SelectColorRow(color: Int, selectColor: () -> Unit, clearColor: () -> Unit) = +fun SelectColorRow( + color: Int, + selectColor: () -> Unit, + clearColor: () -> Unit +) = SettingRow( modifier = Modifier.clickable(onClick = selectColor), left = { + val context = LocalContext.current + val adjusted = remember(color) { + ColorProvider(context).getThemeColor(color).primaryColor + } IconButton(onClick = { selectColor() }) { if (color == 0) { Icon( @@ -45,9 +55,8 @@ fun SelectColorRow(color: Int, selectColor: () -> Unit, clearColor: () -> Unit) contentAlignment = Alignment.Center ) { Canvas(modifier = Modifier.size(24.dp)) { - drawCircle(color = Color(color)) - drawCircle(color = borderColor, style = Stroke(width = 4.0f) - ) + drawCircle(color = Color(adjusted)) + drawCircle(color = borderColor, style = Stroke(width = 4.0f)) } } } diff --git a/app/src/main/java/org/tasks/themes/ColorProvider.kt b/app/src/main/java/org/tasks/themes/ColorProvider.kt index f096647ac..34b87df22 100644 --- a/app/src/main/java/org/tasks/themes/ColorProvider.kt +++ b/app/src/main/java/org/tasks/themes/ColorProvider.kt @@ -4,6 +4,8 @@ import android.content.Context import androidx.annotation.ColorInt import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.R +import org.tasks.kmp.org.tasks.themes.ColorProvider.BLACK +import org.tasks.kmp.org.tasks.themes.ColorProvider.WHITE import org.tasks.kmp.org.tasks.themes.ColorProvider.priorityColor import org.tasks.kmp.org.tasks.themes.ColorProvider.saturated import javax.inject.Inject @@ -15,11 +17,11 @@ class ColorProvider @Inject constructor( private val isDark = context.resources.getBoolean(R.bool.is_dark) private fun getColor(@ColorInt color: Int, adjust: Boolean) = - if (adjust && isDark) { - saturated[color] ?: color - } else { - color - } + when { + adjust && isDark -> saturated[color] ?: color + !isDark && color == WHITE -> BLACK + else -> color + } fun getThemeColor(@ColorInt color: Int, adjust: Boolean = true) = ThemeColor(context, color, getColor(color, adjust)) diff --git a/app/src/main/java/org/tasks/themes/ThemeColor.java b/app/src/main/java/org/tasks/themes/ThemeColor.java index f4dd43943..dee81edec 100644 --- a/app/src/main/java/org/tasks/themes/ThemeColor.java +++ b/app/src/main/java/org/tasks/themes/ThemeColor.java @@ -1,6 +1,7 @@ package org.tasks.themes; import static com.todoroo.andlib.utility.AndroidUtilities.atLeastOreo; +import static org.tasks.kmp.org.tasks.themes.ColorProvider.WHITE; import static org.tasks.themes.ColorUtilsKt.calculateContrast; import android.app.Activity; @@ -69,7 +70,6 @@ public class ThemeColor implements Pickable { public static final int[] COLORS = new int[] { - org.tasks.kmp.R.color.grey_900, org.tasks.kmp.R.color.tomato, org.tasks.kmp.R.color.red_500, org.tasks.kmp.R.color.deep_orange_500, @@ -168,12 +168,12 @@ public class ThemeColor implements Pickable { } colorPrimary = color; - double contrast = calculateContrast(TasksThemeKt.WHITE, colorPrimary); + double contrast = calculateContrast(WHITE, colorPrimary); isDark = contrast < 3; if (isDark) { colorOnPrimary = context.getColor(R.color.black_87); } else { - colorOnPrimary = TasksThemeKt.WHITE; + colorOnPrimary = WHITE; } } diff --git a/kmp/src/commonMain/kotlin/org/tasks/themes/ColorProvider.kt b/kmp/src/commonMain/kotlin/org/tasks/themes/ColorProvider.kt index def9c3ce2..da0858371 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/themes/ColorProvider.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/themes/ColorProvider.kt @@ -7,8 +7,9 @@ object ColorProvider { private const val RED_500 = -769226 private const val AMBER_500 = -16121 private const val GREY_500 = -6381922 - private const val WHITE = -1 - private const val BLACK = -16777216 + private const val GREY_900 = -14606047 + const val WHITE = -1 + const val BLACK = -16777216 val saturated: Map = hashMapOf( // 2014 material design palette @@ -31,7 +32,7 @@ object ColorProvider { -43230 to -30107, // deep orange // -8825528 to -6190977, // brown GREY_500 to -2039584, // grey - WHITE to BLACK, + GREY_900 to WHITE, // GREY_900 removed from palette // 2019 google calendar -2818048 to -3397335, // tomato diff --git a/kmp/src/commonMain/kotlin/org/tasks/themes/ColorUtils.kt b/kmp/src/commonMain/kotlin/org/tasks/themes/ColorUtils.kt index 4792411e8..2632d49c5 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/themes/ColorUtils.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/themes/ColorUtils.kt @@ -1,17 +1,16 @@ package org.tasks.themes import androidx.compose.ui.graphics.Color +import org.tasks.kmp.org.tasks.themes.ColorProvider.WHITE import kotlin.math.max import kotlin.math.min import kotlin.math.pow fun contentColorFor(backgroundColor: Int): Color = - if (backgroundColor == 0) { - Color.White - } else if (calculateContrast(WHITE, backgroundColor) < 3) { - Color.Black - } else { - Color.White + when { + backgroundColor == 0 -> Color.White + calculateContrast(WHITE, backgroundColor) < 3 -> Color.Black + else -> Color.White } fun calculateContrast(foreground: Int, background: Int): Double { diff --git a/kmp/src/commonMain/kotlin/org/tasks/themes/TasksTheme.kt b/kmp/src/commonMain/kotlin/org/tasks/themes/TasksTheme.kt index 952ff4c70..79a61833c 100644 --- a/kmp/src/commonMain/kotlin/org/tasks/themes/TasksTheme.kt +++ b/kmp/src/commonMain/kotlin/org/tasks/themes/TasksTheme.kt @@ -8,10 +8,11 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb +import org.tasks.kmp.org.tasks.themes.ColorProvider.BLACK +import org.tasks.kmp.org.tasks.themes.ColorProvider.WHITE import org.tasks.kmp.org.tasks.themes.ColorProvider.saturated const val BLUE = -14575885 -const val WHITE = -1 private val lightColorScheme = lightColorScheme( surface = Color(0xFFEAEFF1), @@ -52,10 +53,10 @@ fun TasksTheme( 3 -> wallpaperScheme else -> if (isSystemInDarkTheme()) darkColorScheme else lightColorScheme } - val desaturated = if (isSystemInDarkTheme()) { - saturated[primary] ?: primary - } else { - primary + val desaturated = when { + isSystemInDarkTheme() -> saturated[primary] ?: primary + primary == WHITE -> BLACK + else -> primary } val colorOnPrimary = colorOn(desaturated) MaterialTheme(