diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/NewPlayerUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/NewPlayerUI.kt
index bc6ea4e..5935eae 100644
--- a/new-player/src/main/java/net/newpipe/newplayer/ui/NewPlayerUI.kt
+++ b/new-player/src/main/java/net/newpipe/newplayer/ui/NewPlayerUI.kt
@@ -141,7 +141,10 @@ fun NewPlayerUI(
uiState.uiMode == UIModeState.EMBEDDED_VIDEO_CHAPTER_SELECT
) {
VideoPlayerUi(viewModel = viewModel, uiState = uiState)
- } else if (uiState.uiMode == UIModeState.FULLSCREEN_AUDIO) {
+ } else if (uiState.uiMode == UIModeState.FULLSCREEN_AUDIO ||
+ uiState.uiMode == UIModeState.AUDIO_STREAM_SELECT ||
+ uiState.uiMode == UIModeState.AUDIO_CHAPTER_SELECT
+ ) {
AudioPlayerUI(viewModel = viewModel, uiState = uiState)
} else {
LoadingPlaceholder(uiState.embeddedUiRatio)
diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlaybackController.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlaybackController.kt
index 5c101d4..109581a 100644
--- a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlaybackController.kt
+++ b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlaybackController.kt
@@ -59,30 +59,27 @@ import net.newpipe.newplayer.ui.theme.VideoPlayerTheme
@OptIn(UnstableApi::class)
@Composable
fun AudioPlaybackController(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
- Row(modifier = Modifier.background(MaterialTheme.colorScheme.background),
- verticalAlignment = Alignment.CenterVertically) {
+ Row(
+ modifier = Modifier.background(MaterialTheme.colorScheme.background),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
ShuffleModeButton(viewModel = viewModel, uiState = uiState)
Box(modifier = Modifier.size(80.dp), contentAlignment = Alignment.Center) {
- androidx.compose.animation.AnimatedVisibility(
- uiState.currentPlaylistItemIndex != 0,
- enter = fadeIn(animationSpec = tween(400)),
- exit = fadeOut(animationSpec = tween(400))
-
+ Button(
+ modifier = Modifier
+ .fillMaxSize()
+ .aspectRatio(1f),
+ onClick = viewModel::prevStream,
+ colors = lightAudioControlButtonColorScheme(),
+ enabled =
+ uiState.currentPlaylistItemIndex != 0
) {
- Button(
- modifier = Modifier
- .fillMaxSize()
- .aspectRatio(1f),
- onClick = {},
- colors = lightAudioControlButtonColorScheme()
- ) {
- Icon(
- modifier = Modifier.fillMaxSize(),
- imageVector = Icons.Filled.SkipPrevious,
- contentDescription = stringResource(R.string.widget_description_previous_stream)
- )
- }
+ Icon(
+ modifier = Modifier.fillMaxSize(),
+ imageVector = Icons.Filled.SkipPrevious,
+ contentDescription = stringResource(R.string.widget_description_previous_stream)
+ )
}
}
@@ -92,6 +89,7 @@ fun AudioPlaybackController(viewModel: NewPlayerViewModel, uiState: NewPlayerUIS
shape = CircleShape
) {
Icon(
+ modifier = Modifier.fillMaxSize(),
imageVector = if (uiState.playing) Icons.Filled.Pause else Icons.Filled.PlayArrow,
contentDescription = stringResource(
if (uiState.playing) R.string.widget_description_pause
@@ -101,24 +99,19 @@ fun AudioPlaybackController(viewModel: NewPlayerViewModel, uiState: NewPlayerUIS
}
Box(modifier = Modifier.size(80.dp), contentAlignment = Alignment.Center) {
- androidx.compose.animation.AnimatedVisibility(
- uiState.currentPlaylistItemIndex < uiState.playList.size - 1,
- enter = fadeIn(animationSpec = tween(400)),
- exit = fadeOut(animationSpec = tween(400))
+ Button(
+ modifier = Modifier
+ .fillMaxSize()
+ .aspectRatio(1f),
+ onClick = viewModel::nextStream,
+ colors = lightAudioControlButtonColorScheme(),
+ enabled = uiState.currentPlaylistItemIndex < uiState.playList.size - 1
) {
- Button(
- modifier = Modifier
- .fillMaxSize()
- .aspectRatio(1f),
- onClick = {},
- colors = lightAudioControlButtonColorScheme()
- ) {
- Icon(
- modifier = Modifier.fillMaxSize(),
- imageVector = Icons.Filled.SkipNext,
- contentDescription = stringResource(R.string.widget_description_next_stream)
- )
- }
+ Icon(
+ modifier = Modifier.fillMaxSize(),
+ imageVector = Icons.Filled.SkipNext,
+ contentDescription = stringResource(R.string.widget_description_next_stream)
+ )
}
}
@@ -134,7 +127,7 @@ fun AudioPlayerControllerPreview() {
VideoPlayerTheme {
AudioPlaybackController(
viewModel = NewPlayerViewModelDummy(),
- uiState = NewPlayerUIState.DUMMY
+ uiState = NewPlayerUIState.DUMMY.copy(playList = emptyList())
)
}
}
\ No newline at end of file
diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlayerUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlayerUI.kt
index 0ec74b4..b56d04f 100644
--- a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlayerUI.kt
+++ b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/AudioPlayerUI.kt
@@ -57,7 +57,8 @@ import net.newpipe.newplayer.utils.getInsets
@Composable
fun lightAudioControlButtonColorScheme() = ButtonDefaults.buttonColors().copy(
containerColor = MaterialTheme.colorScheme.background,
- contentColor = MaterialTheme.colorScheme.onSurface
+ contentColor = MaterialTheme.colorScheme.onSurface,
+ disabledContainerColor = MaterialTheme.colorScheme.background
)
@OptIn(UnstableApi::class)
diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/BottomUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/BottomUI.kt
index b02a621..7571886 100644
--- a/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/BottomUI.kt
+++ b/new-player/src/main/java/net/newpipe/newplayer/ui/audioplayer/BottomUI.kt
@@ -22,6 +22,7 @@
package net.newpipe.newplayer.ui.audioplayer
+import android.app.Activity
import androidx.annotation.OptIn
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -55,19 +56,28 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.media3.common.util.UnstableApi
import net.newpipe.newplayer.R
+import net.newpipe.newplayer.model.EmbeddedUiConfig
import net.newpipe.newplayer.model.NewPlayerUIState
import net.newpipe.newplayer.model.NewPlayerViewModel
import net.newpipe.newplayer.model.NewPlayerViewModelDummy
+import net.newpipe.newplayer.model.UIModeState
import net.newpipe.newplayer.ui.theme.VideoPlayerTheme
+import net.newpipe.newplayer.utils.getEmbeddedUiConfig
@OptIn(UnstableApi::class)
@Composable
fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
+ val embeddedUiConfig = if(LocalContext.current is Activity)
+ getEmbeddedUiConfig(activity = LocalContext.current as Activity)
+ else
+ EmbeddedUiConfig.DUMMY
+
Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) {
Row(
modifier = Modifier
@@ -75,7 +85,9 @@ fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
.weight(1f), horizontalArrangement = Arrangement.SpaceAround
) {
Button(
- onClick = { /*TODO*/ },
+ onClick = {
+ viewModel.changeUiMode(UIModeState.EMBEDDED_AUDIO, embeddedUiConfig)
+ },
colors = lightAudioControlButtonColorScheme()
) {
Icon(
@@ -85,7 +97,9 @@ fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
)
)
}
- Button(onClick = { /*TODO*/ }, colors = lightAudioControlButtonColorScheme()) {
+ Button(onClick = {
+ viewModel.changeUiMode(UIModeState.FULLSCREEN_VIDEO, embeddedUiConfig)
+ }, colors = lightAudioControlButtonColorScheme()) {
Icon(
imageVector = Icons.Filled.LiveTv,
contentDescription = stringResource(
@@ -93,7 +107,9 @@ fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
)
)
}
- Button(onClick = { /*TODO*/ }, colors = lightAudioControlButtonColorScheme()) {
+ Button(onClick = {
+ viewModel.changeUiMode(UIModeState.AUDIO_CHAPTER_SELECT, embeddedUiConfig)
+ }, colors = lightAudioControlButtonColorScheme()) {
Icon(
imageVector = Icons.AutoMirrored.Filled.MenuBook,
contentDescription = stringResource(
@@ -101,7 +117,9 @@ fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
)
)
}
- Button(onClick = { /*TODO*/ }, colors = lightAudioControlButtonColorScheme()) {
+ Button(onClick = {
+ viewModel.changeUiMode(UIModeState.AUDIO_STREAM_SELECT, embeddedUiConfig)
+ }, colors = lightAudioControlButtonColorScheme()) {
Icon(
imageVector = Icons.AutoMirrored.Filled.List,
contentDescription = stringResource(
@@ -118,6 +136,11 @@ fun AudioBottomUI(viewModel: NewPlayerViewModel, uiState: NewPlayerUIState) {
private fun Menu() {
var showMenu: Boolean by remember { mutableStateOf(false) }
+ val embeddedUiConfig = if(LocalContext.current is Activity)
+ getEmbeddedUiConfig(activity = LocalContext.current as Activity)
+ else
+ EmbeddedUiConfig.DUMMY
+
Box {
IconButton(onClick = {
showMenu = true
diff --git a/new-player/src/main/res/values/strings.xml b/new-player/src/main/res/values/strings.xml
index cede39f..0c964dc 100644
--- a/new-player/src/main/res/values/strings.xml
+++ b/new-player/src/main/res/values/strings.xml
@@ -56,5 +56,5 @@
Stream Thumbnail
Switch to details view
Switch to fullscreen video mode
- Switch to picture in picture mode
+ Picture in picture
\ No newline at end of file