diff --git a/i18n/src/main/res/values/strings.xml b/i18n/src/main/res/values/strings.xml
index 1e46bab6..3f911830 100644
--- a/i18n/src/main/res/values/strings.xml
+++ b/i18n/src/main/res/values/strings.xml
@@ -545,6 +545,7 @@
Compact
Fill screen height
Insert extra space above the clock to fill the entire screen height
+ Color
Style
Select a clock
Date
diff --git a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
index d34af3be..9e54e865 100644
--- a/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
+++ b/preferences/src/main/java/de/mm20/launcher2/preferences/Defaults.kt
@@ -45,6 +45,7 @@ fun createFactorySettings(context: Context): Settings {
.newBuilder()
.setLayout(Settings.ClockWidgetSettings.ClockWidgetLayout.Vertical)
.setClockStyle(Settings.ClockWidgetSettings.ClockStyle.DigitalClock1)
+ .setColor(Settings.ClockWidgetSettings.ClockWidgetColors.Auto)
.setAlarmPart(true)
.setBatteryPart(true)
.setDatePart(true)
diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto
index 7fb3f48c..e5383b21 100644
--- a/preferences/src/main/proto/settings.proto
+++ b/preferences/src/main/proto/settings.proto
@@ -122,6 +122,13 @@ message Settings {
bool alarm_part = 6;
bool favorites_part = 7;
bool fill_height = 8;
+
+ enum ClockWidgetColors {
+ Auto = 0;
+ Light = 1;
+ Dark = 2;
+ }
+ ClockWidgetColors color = 9;
}
ClockWidgetSettings clock_widget = 7;
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt
index 1f7670e0..be46cf5d 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt
@@ -16,11 +16,14 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
+import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockStyle
+import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetColors
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
import de.mm20.launcher2.ui.base.LocalTime
import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.*
import de.mm20.launcher2.ui.launcher.widgets.clock.parts.PartProvider
+import de.mm20.launcher2.ui.locals.LocalPreferDarkContentOverWallpaper
@Composable
fun ClockWidget(
@@ -30,6 +33,7 @@ fun ClockWidget(
val context = LocalContext.current
val layout by viewModel.layout.observeAsState()
val clockStyle by viewModel.clockStyle.observeAsState()
+ val color by viewModel.color.observeAsState()
val time = LocalTime.current
LaunchedEffect(time) {
@@ -44,8 +48,14 @@ fun ClockWidget(
contentAlignment = Alignment.BottomCenter
) {
+ val contentColor = if (color == ClockWidgetColors.Auto && LocalPreferDarkContentOverWallpaper.current || color == ClockWidgetColors.Dark) {
+ Color(0,0,0, 180)
+ } else {
+ Color.White
+ }
+
CompositionLocalProvider(
- LocalContentColor provides Color.White
+ LocalContentColor provides contentColor
) {
if (layout == ClockWidgetLayout.Vertical) {
Column(
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidgetVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidgetVM.kt
index 803358b3..76745e5c 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidgetVM.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidgetVM.kt
@@ -67,6 +67,8 @@ class ClockWidgetVM : ViewModel(), KoinComponent {
val layout = dataStore.data.map { it.clockWidget.layout }.asLiveData()
val clockStyle = dataStore.data.map { it.clockWidget.clockStyle }.asLiveData()
+ val color = dataStore.data.map { it.clockWidget.color }.asLiveData()
+
fun updateTime(time: Long) {
partProviders.value.forEach { it.setTime(time) }
}
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreen.kt
index 63ac3f19..e134b73f 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreen.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreen.kt
@@ -18,7 +18,9 @@ import com.google.accompanist.pager.ExperimentalPagerApi
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.HorizontalPagerIndicator
import com.google.accompanist.pager.rememberPagerState
+import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockStyle
+import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetColors
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout
import de.mm20.launcher2.ui.launcher.widgets.clock.Clock
import de.mm20.launcher2.ui.R
@@ -53,6 +55,19 @@ fun ClockWidgetSettingsScreen() {
viewModel.setClockStyle(it)
}
)
+ val color by viewModel.color.observeAsState()
+ ListPreference(
+ title = stringResource(R.string.preference_clock_widget_color),
+ value = color,
+ items = listOf(
+ stringResource(R.string.preference_system_bar_icons_auto) to ClockWidgetColors.Auto,
+ stringResource(R.string.preference_system_bar_icons_light) to ClockWidgetColors.Light,
+ stringResource(R.string.preference_system_bar_icons_dark) to ClockWidgetColors.Dark,
+ ),
+ onValueChanged = {
+ if (it != null) viewModel.setColor(it)
+ }
+ )
val fillHeight by viewModel.fillHeight.observeAsState()
SwitchPreference(
title = stringResource(R.string.preference_clock_widget_fill_height),
diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreenVM.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreenVM.kt
index bbbd2b8d..eb6a82f6 100644
--- a/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreenVM.kt
+++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/clockwidget/ClockWidgetSettingsScreenVM.kt
@@ -5,6 +5,7 @@ import androidx.lifecycle.asLiveData
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.LauncherDataStore
import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings
+import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetColors
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import org.koin.core.component.KoinComponent
@@ -38,6 +39,19 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
}
}
+ val color = dataStore.data.map { it.clockWidget.color }.asLiveData()
+ fun setColor(color: ClockWidgetColors) {
+ viewModelScope.launch {
+ dataStore.updateData {
+ it.toBuilder()
+ .setClockWidget(
+ it.clockWidget.toBuilder()
+ .setColor(color)
+ ).build()
+ }
+ }
+ }
+
val fillHeight = dataStore.data.map { it.clockWidget.fillHeight }.asLiveData()
fun setFillHeight(fillHeight: Boolean) {
viewModelScope.launch {