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.compose.collectAsStateWithLifecycle
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import de.mm20.launcher2.music.PlaybackState
|
import de.mm20.launcher2.music.PlaybackState
|
||||||
|
import de.mm20.launcher2.music.SupportedActions
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||||
import de.mm20.launcher2.ui.ktx.conditional
|
import de.mm20.launcher2.ui.ktx.conditional
|
||||||
@ -77,6 +78,8 @@ fun MusicWidget() {
|
|||||||
val position by viewModel.position.collectAsStateWithLifecycle(null)
|
val position by viewModel.position.collectAsStateWithLifecycle(null)
|
||||||
val duration by viewModel.duration.collectAsStateWithLifecycle(null)
|
val duration by viewModel.duration.collectAsStateWithLifecycle(null)
|
||||||
|
|
||||||
|
val supportedActions by viewModel.supportedActions.collectAsStateWithLifecycle(SupportedActions())
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
@ -142,13 +145,13 @@ fun 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) {
|
if (playbackState != PlaybackState.Stopped || supportedActions.seekTo) {
|
||||||
Slider(
|
Slider(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 8.dp)
|
.padding(horizontal = 8.dp)
|
||||||
.requiredHeightIn(max = 20.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(),
|
valueRange = 0f..dur.toFloat(),
|
||||||
interactionSource = interactionSource,
|
interactionSource = interactionSource,
|
||||||
onValueChange = {
|
onValueChange = {
|
||||||
@ -276,14 +279,16 @@ fun MusicWidget() {
|
|||||||
verticalAlignment = Alignment.CenterVertically,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
|
||||||
) {
|
) {
|
||||||
IconButton(
|
if (supportedActions.skipToPrevious) {
|
||||||
onClick = {
|
IconButton(
|
||||||
viewModel.skipPrevious()
|
onClick = {
|
||||||
}) {
|
viewModel.skipPrevious()
|
||||||
Icon(
|
}) {
|
||||||
imageVector = Icons.Rounded.SkipPrevious,
|
Icon(
|
||||||
null
|
imageVector = Icons.Rounded.SkipPrevious,
|
||||||
)
|
null
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
val playPauseIcon =
|
val playPauseIcon =
|
||||||
AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause)
|
AnimatedImageVector.animatedVectorResource(R.drawable.anim_ic_play_pause)
|
||||||
@ -301,13 +306,15 @@ fun MusicWidget() {
|
|||||||
contentDescription = null
|
contentDescription = null
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
IconButton(onClick = {
|
if (supportedActions.skipToNext) {
|
||||||
viewModel.skipNext()
|
IconButton(onClick = {
|
||||||
}) {
|
viewModel.skipNext()
|
||||||
Icon(
|
}) {
|
||||||
imageVector = Icons.Rounded.SkipNext,
|
Icon(
|
||||||
null
|
imageVector = Icons.Rounded.SkipNext,
|
||||||
)
|
null
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ package de.mm20.launcher2.ui.launcher.widgets.music
|
|||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
import android.media.session.PlaybackState.CustomAction
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.lifecycle.LiveData
|
import androidx.lifecycle.LiveData
|
||||||
@ -11,6 +12,7 @@ import androidx.lifecycle.asLiveData
|
|||||||
import de.mm20.launcher2.crashreporter.CrashReporter
|
import de.mm20.launcher2.crashreporter.CrashReporter
|
||||||
import de.mm20.launcher2.music.MusicService
|
import de.mm20.launcher2.music.MusicService
|
||||||
import de.mm20.launcher2.music.PlaybackState
|
import de.mm20.launcher2.music.PlaybackState
|
||||||
|
import de.mm20.launcher2.music.SupportedActions
|
||||||
import de.mm20.launcher2.permissions.PermissionGroup
|
import de.mm20.launcher2.permissions.PermissionGroup
|
||||||
import de.mm20.launcher2.permissions.PermissionsManager
|
import de.mm20.launcher2.permissions.PermissionsManager
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
@ -29,6 +31,8 @@ class MusicWidgetVM: ViewModel(), KoinComponent {
|
|||||||
val duration: Flow<Long?> = musicService.duration
|
val duration: Flow<Long?> = musicService.duration
|
||||||
val position: Flow<Long?> = musicService.position
|
val position: Flow<Long?> = musicService.position
|
||||||
|
|
||||||
|
val supportedActions: Flow<SupportedActions> = musicService.supportedActions
|
||||||
|
|
||||||
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications)
|
val hasPermission = permissionsManager.hasPermission(PermissionGroup.Notifications)
|
||||||
|
|
||||||
val currentPlayerPackage
|
val currentPlayerPackage
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user