Music widget: hide unsupported skip actions
This commit is contained in:
parent
2a25db9433
commit
c8d6da41dd
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user