From c8d6da41ddae8a5e445f50542d0f43f9edd3152a Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 13 Feb 2023 16:11:39 +0100 Subject: [PATCH] Music widget: hide unsupported skip actions --- .../ui/launcher/widgets/music/MusicWidget.kt | 41 +++++++++++-------- .../launcher/widgets/music/MusicWidgetVM.kt | 4 ++ 2 files changed, 28 insertions(+), 17 deletions(-) diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt index c345599d..ba3e1715 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt @@ -58,6 +58,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewmodel.compose.viewModel import de.mm20.launcher2.music.PlaybackState +import de.mm20.launcher2.music.SupportedActions import de.mm20.launcher2.ui.R import de.mm20.launcher2.ui.component.MissingPermissionBanner import de.mm20.launcher2.ui.ktx.conditional @@ -77,6 +78,8 @@ fun MusicWidget() { val position by viewModel.position.collectAsStateWithLifecycle(null) val duration by viewModel.duration.collectAsStateWithLifecycle(null) + val supportedActions by viewModel.supportedActions.collectAsStateWithLifecycle(SupportedActions()) + val context = LocalContext.current Column( @@ -142,13 +145,13 @@ fun MusicWidget() { var seekPosition by remember { mutableStateOf(null) } if (pos != null && dur != null && dur > 0) { - if (playbackState != PlaybackState.Stopped) { + if (playbackState != PlaybackState.Stopped || supportedActions.seekTo) { Slider( modifier = Modifier .fillMaxWidth() .padding(horizontal = 8.dp) .requiredHeightIn(max = 20.dp), - value = (if (isDragged) seekPosition else pos?.toFloat()) ?: 0f , + value = (if (isDragged) seekPosition else pos?.toFloat()) ?: 0f, valueRange = 0f..dur.toFloat(), interactionSource = interactionSource, onValueChange = { @@ -276,14 +279,16 @@ fun MusicWidget() { verticalAlignment = Alignment.CenterVertically, ) { - IconButton( - onClick = { - viewModel.skipPrevious() - }) { - Icon( - imageVector = Icons.Rounded.SkipPrevious, - null - ) + if (supportedActions.skipToPrevious) { + IconButton( + onClick = { + viewModel.skipPrevious() + }) { + Icon( + imageVector = Icons.Rounded.SkipPrevious, + null + ) + } } val playPauseIcon = AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause) @@ -301,13 +306,15 @@ fun MusicWidget() { contentDescription = null ) } - IconButton(onClick = { - viewModel.skipNext() - }) { - Icon( - imageVector = Icons.Rounded.SkipNext, - null - ) + if (supportedActions.skipToNext) { + IconButton(onClick = { + viewModel.skipNext() + }) { + Icon( + imageVector = Icons.Rounded.SkipNext, + null + ) + } } } } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidgetVM.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidgetVM.kt index 098a6b53..ee333f2a 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidgetVM.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidgetVM.kt @@ -3,6 +3,7 @@ package de.mm20.launcher2.ui.launcher.widgets.music import android.app.PendingIntent import android.content.Context import android.graphics.Bitmap +import android.media.session.PlaybackState.CustomAction import androidx.appcompat.app.AppCompatActivity import androidx.compose.ui.graphics.Color import androidx.lifecycle.LiveData @@ -11,6 +12,7 @@ import androidx.lifecycle.asLiveData import de.mm20.launcher2.crashreporter.CrashReporter import de.mm20.launcher2.music.MusicService import de.mm20.launcher2.music.PlaybackState +import de.mm20.launcher2.music.SupportedActions import de.mm20.launcher2.permissions.PermissionGroup import de.mm20.launcher2.permissions.PermissionsManager import kotlinx.coroutines.flow.Flow @@ -29,6 +31,8 @@ class MusicWidgetVM: ViewModel(), KoinComponent { val duration: Flow = musicService.duration val position: Flow = musicService.position + val supportedActions: Flow = musicService.supportedActions + val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications) val currentPlayerPackage