Music widget: hide unsupported skip actions

This commit is contained in:
MM20 2023-02-13 16:11:39 +01:00
parent 2a25db9433
commit c8d6da41dd
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 28 additions and 17 deletions

View File

@ -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<Float?>(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
)
}
}
}
}

View File

@ -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<Long?> = musicService.duration
val position: Flow<Long?> = musicService.position
val supportedActions: Flow<SupportedActions> = musicService.supportedActions
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications)
val currentPlayerPackage