Music widget: add preference to make progress bar non-interactive
This commit is contained in:
parent
720d2ab52a
commit
ca4979abaf
@ -119,7 +119,7 @@ fun ConfigureWidgetSheet(
|
|||||||
is AppWidget -> ConfigureAppWidget(widget, onWidgetUpdated)
|
is AppWidget -> ConfigureAppWidget(widget, onWidgetUpdated)
|
||||||
is CalendarWidget -> ConfigureCalendarWidget(widget, onWidgetUpdated)
|
is CalendarWidget -> ConfigureCalendarWidget(widget, onWidgetUpdated)
|
||||||
is FavoritesWidget -> ConfigureFavoritesWidget(widget, onWidgetUpdated)
|
is FavoritesWidget -> ConfigureFavoritesWidget(widget, onWidgetUpdated)
|
||||||
is MusicWidget -> ConfigureMusicWidget()
|
is MusicWidget -> ConfigureMusicWidget(widget, onWidgetUpdated)
|
||||||
is NotesWidget -> ConfigureNotesWidget(widget, onWidgetUpdated)
|
is NotesWidget -> ConfigureNotesWidget(widget, onWidgetUpdated)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -232,10 +232,27 @@ fun ColumnScope.ConfigureFavoritesWidget(
|
|||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ColumnScope.ConfigureMusicWidget(
|
fun ColumnScope.ConfigureMusicWidget(
|
||||||
|
widget: MusicWidget,
|
||||||
|
onWidgetUpdated: (MusicWidget) -> Unit,
|
||||||
|
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
|
OutlinedCard {
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
SwitchPreference(
|
||||||
|
title = stringResource(R.string.music_widget_interactive_progress_bar),
|
||||||
|
iconPadding = false,
|
||||||
|
value = widget.config.interactiveProgressBar,
|
||||||
|
onValueChanged = {
|
||||||
|
onWidgetUpdated(widget.copy(config = widget.config.copy(interactiveProgressBar = it)))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
TextButton(
|
TextButton(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.align(Alignment.CenterHorizontally),
|
.align(Alignment.CenterHorizontally),
|
||||||
|
|||||||
@ -168,7 +168,7 @@ fun MusicWidget(widget: MusicWidget) {
|
|||||||
var seekPosition by remember { mutableStateOf<Float?>(null) }
|
var seekPosition by remember { mutableStateOf<Float?>(null) }
|
||||||
|
|
||||||
if (pos != null && dur != null && dur > 0) {
|
if (pos != null && dur != null && dur > 0) {
|
||||||
if (playbackState != PlaybackState.Stopped || supportedActions.seekTo) {
|
if (playbackState != PlaybackState.Stopped && supportedActions.seekTo && widget.config.interactiveProgressBar) {
|
||||||
Slider(
|
Slider(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
|
|||||||
@ -325,6 +325,7 @@
|
|||||||
<!-- Default title that is shown in the music widget if the app that is playing media did not publish a title -->
|
<!-- Default title that is shown in the music widget if the app that is playing media did not publish a title -->
|
||||||
<string name="music_widget_default_title">%1$s is playing media</string>
|
<string name="music_widget_default_title">%1$s is playing media</string>
|
||||||
<string name="music_widget_no_data">No media has been played yet</string>
|
<string name="music_widget_no_data">No media has been played yet</string>
|
||||||
|
<string name="music_widget_interactive_progress_bar">Interactive progress bar</string>
|
||||||
<string name="weather_condition_sleetshowers">Sleet showers</string>
|
<string name="weather_condition_sleetshowers">Sleet showers</string>
|
||||||
<string name="weather_condition_heavysleet">Heavy sleet</string>
|
<string name="weather_condition_heavysleet">Heavy sleet</string>
|
||||||
<string name="weather_condition_lightrainshowersandthunder">Light rain showers and thunder</string>
|
<string name="weather_condition_lightrainshowersandthunder">Light rain showers and thunder</string>
|
||||||
|
|||||||
@ -0,0 +1,28 @@
|
|||||||
|
package de.mm20.launcher2.widgets
|
||||||
|
|
||||||
|
import de.mm20.launcher2.database.entities.PartialWidgetEntity
|
||||||
|
import kotlinx.serialization.Serializable
|
||||||
|
import kotlinx.serialization.json.Json
|
||||||
|
import java.util.UUID
|
||||||
|
|
||||||
|
@Serializable
|
||||||
|
data class MusicWidgetConfig(
|
||||||
|
val interactiveProgressBar: Boolean = false
|
||||||
|
)
|
||||||
|
|
||||||
|
data class MusicWidget(
|
||||||
|
override val id: UUID,
|
||||||
|
val config: MusicWidgetConfig = MusicWidgetConfig(),
|
||||||
|
) : Widget() {
|
||||||
|
override fun toDatabaseEntity(): PartialWidgetEntity {
|
||||||
|
return PartialWidgetEntity(
|
||||||
|
id = id,
|
||||||
|
type = Type,
|
||||||
|
config = Json.encodeToString(config),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val Type = "music"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -32,7 +32,11 @@ sealed class Widget {
|
|||||||
?: WeatherWidgetConfig()
|
?: WeatherWidgetConfig()
|
||||||
WeatherWidget(entity.id, config)
|
WeatherWidget(entity.id, config)
|
||||||
}
|
}
|
||||||
MusicWidget.Type -> MusicWidget(entity.id)
|
MusicWidget.Type -> MusicWidget(
|
||||||
|
entity.id,
|
||||||
|
Json.decodeFromStringOrNull(entity.config?.takeIf { it.isNotBlank() })
|
||||||
|
?: MusicWidgetConfig(),
|
||||||
|
)
|
||||||
CalendarWidget.Type -> {
|
CalendarWidget.Type -> {
|
||||||
val config: CalendarWidgetConfig =
|
val config: CalendarWidgetConfig =
|
||||||
Json.decodeFromStringOrNull(entity.config?.takeIf { it.isNotBlank() })
|
Json.decodeFromStringOrNull(entity.config?.takeIf { it.isNotBlank() })
|
||||||
@ -68,23 +72,6 @@ sealed class Widget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
data class MusicWidget(
|
|
||||||
override val id: UUID,
|
|
||||||
) : Widget() {
|
|
||||||
override fun toDatabaseEntity(): PartialWidgetEntity {
|
|
||||||
return PartialWidgetEntity(
|
|
||||||
id = id,
|
|
||||||
type = Type,
|
|
||||||
config = null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
const val Type = "music"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum class WidgetType(val value: String) {
|
enum class WidgetType(val value: String) {
|
||||||
INTERNAL("internal"),
|
INTERNAL("internal"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user