Add equalizer shortcut to PlayerView
This commit is contained in:
@@ -193,6 +193,8 @@ fun BaseMediaItemMenu(
|
|||||||
mediaItem: MediaItem,
|
mediaItem: MediaItem,
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
onGoToEqualizer: (() -> Unit)? = null,
|
||||||
|
onSetSleepTimer: (() -> Unit)? = null,
|
||||||
onStartRadio: (() -> Unit)? = null,
|
onStartRadio: (() -> Unit)? = null,
|
||||||
onPlaySingle: (() -> Unit)? = null,
|
onPlaySingle: (() -> Unit)? = null,
|
||||||
onPlayNext: (() -> Unit)? = null,
|
onPlayNext: (() -> Unit)? = null,
|
||||||
@@ -211,6 +213,8 @@ fun BaseMediaItemMenu(
|
|||||||
MediaItemMenu(
|
MediaItemMenu(
|
||||||
mediaItem = mediaItem,
|
mediaItem = mediaItem,
|
||||||
onDismiss = onDismiss,
|
onDismiss = onDismiss,
|
||||||
|
onGoToEqualizer = onGoToEqualizer,
|
||||||
|
onSetSleepTimer = onSetSleepTimer,
|
||||||
onStartRadio = onStartRadio,
|
onStartRadio = onStartRadio,
|
||||||
onPlayNext = onPlayNext,
|
onPlayNext = onPlayNext,
|
||||||
onPlaySingle = onPlaySingle,
|
onPlaySingle = onPlaySingle,
|
||||||
@@ -247,6 +251,8 @@ fun MediaItemMenu(
|
|||||||
mediaItem: MediaItem,
|
mediaItem: MediaItem,
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
|
onGoToEqualizer: (() -> Unit)? = null,
|
||||||
|
onSetSleepTimer: (() -> Unit)? = null,
|
||||||
onStartRadio: (() -> Unit)? = null,
|
onStartRadio: (() -> Unit)? = null,
|
||||||
onPlaySingle: (() -> Unit)? = null,
|
onPlaySingle: (() -> Unit)? = null,
|
||||||
onPlayNext: (() -> Unit)? = null,
|
onPlayNext: (() -> Unit)? = null,
|
||||||
@@ -267,9 +273,7 @@ fun MediaItemMenu(
|
|||||||
|
|
||||||
val viewPlaylistsRoute = rememberCreatePlaylistRoute()
|
val viewPlaylistsRoute = rememberCreatePlaylistRoute()
|
||||||
|
|
||||||
Menu(
|
Menu(modifier = modifier) {
|
||||||
modifier = modifier
|
|
||||||
) {
|
|
||||||
RouteHandler(
|
RouteHandler(
|
||||||
transitionSpec = {
|
transitionSpec = {
|
||||||
when (targetState.route) {
|
when (targetState.route) {
|
||||||
@@ -345,6 +349,28 @@ fun MediaItemMenu(
|
|||||||
detectTapGestures { }
|
detectTapGestures { }
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
|
onGoToEqualizer?.let { onGoToEqualizer ->
|
||||||
|
MenuEntry(
|
||||||
|
icon = R.drawable.equalizer,
|
||||||
|
text = "Equalizer",
|
||||||
|
onClick = {
|
||||||
|
onDismiss()
|
||||||
|
onGoToEqualizer()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
onSetSleepTimer?.let { onSetSleepTimer ->
|
||||||
|
MenuEntry(
|
||||||
|
icon = R.drawable.time,
|
||||||
|
text = "Sleep timer",
|
||||||
|
onClick = {
|
||||||
|
onDismiss()
|
||||||
|
onSetSleepTimer()
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
onStartRadio?.let { onStartRadio ->
|
onStartRadio?.let { onStartRadio ->
|
||||||
MenuEntry(
|
MenuEntry(
|
||||||
icon = R.drawable.radio,
|
icon = R.drawable.radio,
|
||||||
|
|||||||
@@ -1,7 +1,13 @@
|
|||||||
package it.vfsfitvnm.vimusic.ui.views
|
package it.vfsfitvnm.vimusic.ui.views
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.media.audiofx.AudioEffect
|
||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import android.text.format.Formatter
|
import android.text.format.Formatter
|
||||||
|
import android.widget.Toast
|
||||||
|
import androidx.activity.compose.LocalActivityResultRegistryOwner
|
||||||
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
@@ -41,8 +47,8 @@ import it.vfsfitvnm.vimusic.enums.ThumbnailRoundness
|
|||||||
import it.vfsfitvnm.vimusic.models.Song
|
import it.vfsfitvnm.vimusic.models.Song
|
||||||
import it.vfsfitvnm.vimusic.query
|
import it.vfsfitvnm.vimusic.query
|
||||||
import it.vfsfitvnm.vimusic.ui.components.*
|
import it.vfsfitvnm.vimusic.ui.components.*
|
||||||
|
import it.vfsfitvnm.vimusic.ui.components.themed.BaseMediaItemMenu
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.LoadingOrError
|
import it.vfsfitvnm.vimusic.ui.components.themed.LoadingOrError
|
||||||
import it.vfsfitvnm.vimusic.ui.components.themed.QueuedMediaItemMenu
|
|
||||||
import it.vfsfitvnm.vimusic.ui.styling.*
|
import it.vfsfitvnm.vimusic.ui.styling.*
|
||||||
import it.vfsfitvnm.vimusic.utils.*
|
import it.vfsfitvnm.vimusic.utils.*
|
||||||
import it.vfsfitvnm.youtubemusic.YouTube
|
import it.vfsfitvnm.youtubemusic.YouTube
|
||||||
@@ -201,11 +207,27 @@ fun PlayerView(
|
|||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.clickable {
|
.clickable {
|
||||||
menuState.display {
|
menuState.display {
|
||||||
QueuedMediaItemMenu(
|
val resultRegistryOwner = LocalActivityResultRegistryOwner.current
|
||||||
|
|
||||||
|
BaseMediaItemMenu(
|
||||||
mediaItem = playerState.mediaItem,
|
mediaItem = playerState.mediaItem,
|
||||||
indexInQueue = null,
|
onGoToEqualizer = {
|
||||||
|
val intent = Intent(AudioEffect.ACTION_DISPLAY_AUDIO_EFFECT_CONTROL_PANEL).apply {
|
||||||
|
putExtra(AudioEffect.EXTRA_AUDIO_SESSION, player.audioSessionId)
|
||||||
|
putExtra(AudioEffect.EXTRA_PACKAGE_NAME, context.packageName)
|
||||||
|
putExtra(AudioEffect.EXTRA_CONTENT_TYPE, AudioEffect.CONTENT_TYPE_MUSIC)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (intent.resolveActivity(context.packageManager) != null) {
|
||||||
|
val contract = ActivityResultContracts.StartActivityForResult()
|
||||||
|
|
||||||
|
resultRegistryOwner?.activityResultRegistry?.register("", contract) {}?.launch(intent)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(context, "No equalizer app found!", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
},
|
||||||
onDismiss = menuState::hide,
|
onDismiss = menuState::hide,
|
||||||
onGlobalRouteEmitted = layoutState.collapse
|
onGlobalRouteEmitted = layoutState.collapse,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
app/src/main/res/drawable/equalizer.xml
Normal file
15
app/src/main/res/drawable/equalizer.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="512"
|
||||||
|
android:viewportHeight="512">
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M125.96,64V130.75c-19.17,6.78 -31.99,24.91 -31.99,45.25 0,20.34 12.82,38.47 31.99,45.25l0,150.17c0,8.84 7.16,19.95 16,19.95 8.84,0 16,-9.71 16,-18.55l0,-151.58c19.17,-6.78 31.99,-24.91 31.99,-45.25 0,-20.34 -12.82,-38.47 -31.99,-45.25V64c0,-8.84 -7.16,-16 -16,-16 -8.84,0 -16,7.16 -16,16z"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="M242.42,153.03V290.75c-19.17,6.78 -31.99,24.91 -31.99,45.25 0,20.34 12.82,38.47 31.99,45.25V448c0,8.84 7.16,16 16,16 8.84,0 16,-7.16 16,-16v-66.75c19.17,-6.78 31.99,-24.91 31.99,-45.25 0,-20.34 -12.82,-38.47 -31.99,-45.25V152.58c0,-8.84 -7.16,-16.68 -16,-16.68 -8.84,0 -16,8.3 -16,17.13z"/>
|
||||||
|
<path
|
||||||
|
android:fillColor="#FF000000"
|
||||||
|
android:pathData="m358.88,66.87v66.75c-19.17,6.78 -31.99,24.91 -31.99,45.25 0,20.34 12.82,38.47 31.99,45.25v150.17c0,8.84 7.16,19.95 16,19.95 8.84,0 16,-9.71 16,-18.55V224.12c19.17,-6.78 31.99,-24.91 31.99,-45.25 0,-20.34 -12.82,-38.47 -31.99,-45.25V66.87c0,-8.84 -7.16,-16 -16,-16 -8.84,0 -16,7.16 -16,16z"/>
|
||||||
|
</vector>
|
||||||
Reference in New Issue
Block a user