diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt index 241d2a5..2ab0062 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/components/themed/MediaItemMenu.kt @@ -193,6 +193,8 @@ fun BaseMediaItemMenu( mediaItem: MediaItem, onDismiss: () -> Unit, modifier: Modifier = Modifier, + onGoToEqualizer: (() -> Unit)? = null, + onSetSleepTimer: (() -> Unit)? = null, onStartRadio: (() -> Unit)? = null, onPlaySingle: (() -> Unit)? = null, onPlayNext: (() -> Unit)? = null, @@ -211,6 +213,8 @@ fun BaseMediaItemMenu( MediaItemMenu( mediaItem = mediaItem, onDismiss = onDismiss, + onGoToEqualizer = onGoToEqualizer, + onSetSleepTimer = onSetSleepTimer, onStartRadio = onStartRadio, onPlayNext = onPlayNext, onPlaySingle = onPlaySingle, @@ -247,6 +251,8 @@ fun MediaItemMenu( mediaItem: MediaItem, onDismiss: () -> Unit, modifier: Modifier = Modifier, + onGoToEqualizer: (() -> Unit)? = null, + onSetSleepTimer: (() -> Unit)? = null, onStartRadio: (() -> Unit)? = null, onPlaySingle: (() -> Unit)? = null, onPlayNext: (() -> Unit)? = null, @@ -267,9 +273,7 @@ fun MediaItemMenu( val viewPlaylistsRoute = rememberCreatePlaylistRoute() - Menu( - modifier = modifier - ) { + Menu(modifier = modifier) { RouteHandler( transitionSpec = { when (targetState.route) { @@ -345,6 +349,28 @@ fun MediaItemMenu( 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 -> MenuEntry( icon = R.drawable.radio, diff --git a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt index 8325d4b..c508e72 100644 --- a/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt +++ b/app/src/main/kotlin/it/vfsfitvnm/vimusic/ui/views/PlayerView.kt @@ -1,7 +1,13 @@ package it.vfsfitvnm.vimusic.ui.views +import android.content.Intent +import android.media.audiofx.AudioEffect import android.text.format.DateUtils 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.foundation.Image 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.query 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.QueuedMediaItemMenu import it.vfsfitvnm.vimusic.ui.styling.* import it.vfsfitvnm.vimusic.utils.* import it.vfsfitvnm.youtubemusic.YouTube @@ -201,11 +207,27 @@ fun PlayerView( modifier = Modifier .clickable { menuState.display { - QueuedMediaItemMenu( + val resultRegistryOwner = LocalActivityResultRegistryOwner.current + + BaseMediaItemMenu( 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, - onGlobalRouteEmitted = layoutState.collapse + onGlobalRouteEmitted = layoutState.collapse, ) } } diff --git a/app/src/main/res/drawable/equalizer.xml b/app/src/main/res/drawable/equalizer.xml new file mode 100644 index 0000000..d366546 --- /dev/null +++ b/app/src/main/res/drawable/equalizer.xml @@ -0,0 +1,15 @@ + + + + +