Merge branch 'main' of github.com:MM2-0/Kvaesitso

This commit is contained in:
MM20
2026-03-13 15:42:29 +01:00
9 changed files with 73 additions and 16 deletions

View File

@@ -51,6 +51,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.preferences.BatteryStatusVisibility
import de.mm20.launcher2.preferences.ClockWidgetAlignment
import de.mm20.launcher2.preferences.ClockWidgetColors
import de.mm20.launcher2.preferences.ClockWidgetStyle
@@ -61,6 +62,7 @@ import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.component.DismissableBottomSheet
import de.mm20.launcher2.ui.component.preferences.Preference
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
import de.mm20.launcher2.ui.component.preferences.ListPreference
import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.AnalogClock
import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.BinaryClock
import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.CustomClock
@@ -666,14 +668,19 @@ fun ConfigureClockWidgetSheet(
viewModel.setAlarmPart(it)
}
)
SwitchPreference(
ListPreference(
title = stringResource(R.string.preference_clockwidget_battery_part),
summary = stringResource(R.string.preference_clockwidget_battery_part_summary),
icon = R.drawable.battery_full_24px,
value = parts?.battery == true,
value = parts?.battery,
onValueChanged = {
viewModel.setBatteryPart(it)
}
if (it != null) viewModel.setBatteryPart(it)
},
items = listOf(
stringResource(R.string.preference_clockwidget_battery_part_hide) to BatteryStatusVisibility.Hide,
stringResource(R.string.preference_clockwidget_battery_part_show) to BatteryStatusVisibility.Show,
stringResource(R.string.preference_clockwidget_battery_part_always_show) to BatteryStatusVisibility.Always
)
)
}
}

View File

@@ -38,7 +38,7 @@ class ClockWidgetVM : ViewModel(), KoinComponent {
val providers = mutableListOf<PartProvider>()
if (parts.date) providers += DatePartProvider()
if (parts.music) providers += MusicPartProvider()
if (parts.battery) providers += BatteryPartProvider()
providers += BatteryPartProvider(parts.battery)
if (parts.alarm) providers += AlarmPartProvider()
providers
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())
@@ -82,4 +82,4 @@ class ClockWidgetVM : ViewModel(), KoinComponent {
flags = Intent.FLAG_ACTIVITY_NEW_TASK
})
}
}
}

View File

@@ -23,13 +23,16 @@ import androidx.compose.ui.res.pluralStringResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.core.content.getSystemService
import de.mm20.launcher2.preferences.BatteryStatusVisibility
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.utils.formatPercent
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.channels.trySendBlocking
import kotlinx.coroutines.flow.*
class BatteryPartProvider : PartProvider {
class BatteryPartProvider(
private val batteryStatusVisibility: BatteryStatusVisibility = BatteryStatusVisibility.Hide,
) : PartProvider {
private val batteryInfo = MutableStateFlow<BatteryInfo?>(null)
@@ -38,7 +41,11 @@ class BatteryPartProvider : PartProvider {
chargingInfo.collectLatest {
batteryInfo.value = it
if (it.charging) {
if (batteryStatusVisibility == BatteryStatusVisibility.Hide) {
send(0)
} else if (batteryStatusVisibility == BatteryStatusVisibility.Always) {
send(10)
} else if (it.charging) {
send(10)
} else if (it.level <= 15) {
send(55)
@@ -177,4 +184,4 @@ private data class BatteryInfo(
val level: Int,
val charging: Boolean,
val fullIn: Long?,
)
)

View File

@@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.settings.clockwidget
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import de.mm20.launcher2.preferences.BatteryStatusVisibility
import de.mm20.launcher2.preferences.ClockWidgetAlignment
import de.mm20.launcher2.preferences.ClockWidgetColors
import de.mm20.launcher2.preferences.ClockWidgetStyle
@@ -88,7 +89,7 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
settings.setDatePart(datePart)
}
fun setBatteryPart(batteryPart: Boolean) {
fun setBatteryPart(batteryPart: BatteryStatusVisibility) {
settings.setBatteryPart(batteryPart)
}
@@ -114,4 +115,4 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
settings.setUseSmartspacer(false)
}
}
}

View File

@@ -607,7 +607,10 @@
<string name="preference_clockwidget_music_part">Media</string>
<string name="preference_clockwidget_music_part_summary">Show media controls when there is an active media session</string>
<string name="preference_clockwidget_battery_part">Battery</string>
<string name="preference_clockwidget_battery_part_summary">Show the current battery level when the battery is low or charging</string>
<string name="preference_clockwidget_battery_part_summary">Show the current battery level</string>
<string name="preference_clockwidget_battery_part_always_show">Always show</string>
<string name="preference_clockwidget_battery_part_show">Show when low or charging</string>
<string name="preference_clockwidget_battery_part_hide">Off</string>
<string name="preference_clockwidget_alarm_part">Alarms</string>
<string name="preference_clockwidget_alarm_part_summary">Show alarms that will ring within the next 8 hours</string>
<string name="preference_screen_backup">Backup and restore</string>

View File

@@ -6,6 +6,7 @@ import de.mm20.launcher2.preferences.migrations.Migration2
import de.mm20.launcher2.preferences.migrations.Migration3
import de.mm20.launcher2.preferences.migrations.Migration4
import de.mm20.launcher2.preferences.migrations.Migration5
import de.mm20.launcher2.preferences.migrations.Migration6
import de.mm20.launcher2.settings.BaseSettings
internal class LauncherDataStore(
@@ -19,6 +20,7 @@ internal class LauncherDataStore(
Migration3(),
Migration4(),
Migration5(),
Migration6(),
),
corruptionHandler = ReplaceFileCorruptionHandler { LauncherSettingsData() }
) {

View File

@@ -51,7 +51,11 @@ data class LauncherSettingsData internal constructor(
val clockWidgetMonospaced: Boolean = false,
val clockWidgetUseThemeColor: Boolean = false,
val clockWidgetAlarmPart: Boolean = true,
val clockWidgetBatteryPart: Boolean = true,
@Deprecated("")
@SerialName("clockWidgetBatteryPart")
val _clockWidgetBatteryPart: Boolean = true,
@SerialName("clockWidgetBatteryPart2")
val clockWidgetBatteryPart: BatteryStatusVisibility = BatteryStatusVisibility.Show,
val clockWidgetMusicPart: Boolean = true,
val clockWidgetDatePart: Boolean = true,
val clockWidgetFillHeight: Boolean = false,
@@ -457,3 +461,10 @@ enum class MeasurementSystem {
@SerialName("uk") UnitedKingdom,
@SerialName("us") UnitedStates,
}
@Serializable
enum class BatteryStatusVisibility {
@SerialName("hide") Hide,
@SerialName("show") Show,
@SerialName("always") Always
}

View File

@@ -0,0 +1,25 @@
package de.mm20.launcher2.preferences.migrations
import androidx.datastore.core.DataMigration
import de.mm20.launcher2.preferences.BatteryStatusVisibility
import de.mm20.launcher2.preferences.LauncherSettingsData
class Migration6 : DataMigration<LauncherSettingsData> {
override suspend fun cleanUp() {
}
override suspend fun shouldMigrate(currentData: LauncherSettingsData): Boolean {
return currentData.schemaVersion < 6
}
override suspend fun migrate(currentData: LauncherSettingsData): LauncherSettingsData {
return currentData.copy(
schemaVersion = 6,
clockWidgetBatteryPart = if (currentData._clockWidgetBatteryPart) {
BatteryStatusVisibility.Show
} else {
BatteryStatusVisibility.Hide
}
)
}
}

View File

@@ -1,5 +1,6 @@
package de.mm20.launcher2.preferences.ui
import de.mm20.launcher2.preferences.BatteryStatusVisibility
import de.mm20.launcher2.preferences.ClockWidgetAlignment
import de.mm20.launcher2.preferences.ClockWidgetColors
import de.mm20.launcher2.preferences.ClockWidgetStyle
@@ -13,7 +14,7 @@ import kotlinx.coroutines.flow.map
data class ClockWidgetParts(
val date: Boolean,
val music: Boolean = false,
val battery: Boolean = false,
val battery: BatteryStatusVisibility = BatteryStatusVisibility.Hide,
val alarm: Boolean = false,
)
@@ -51,7 +52,7 @@ class ClockWidgetSettings internal constructor(
}
}
fun setBatteryPart(batteryPart: Boolean) {
fun setBatteryPart(batteryPart: BatteryStatusVisibility) {
launcherDataStore.update {
it.copy(clockWidgetBatteryPart = batteryPart)
}
@@ -175,4 +176,4 @@ internal val ClockWidgetStyle.enumValue
is ClockWidgetStyle.Segment -> ClockWidgetStyleEnum.Segment
is ClockWidgetStyle.Empty -> ClockWidgetStyleEnum.Empty
is ClockWidgetStyle.Custom -> ClockWidgetStyleEnum.Custom
}
}