From 8684bf95e116914b6860def55df7e56839bd8e94 Mon Sep 17 00:00:00 2001 From: Christian Schabesberger Date: Thu, 29 Aug 2024 11:08:12 +0200 Subject: [PATCH] open streem selection ui --- .../newplayer/model/VideoPlayerViewModel.kt | 2 +- .../model/VideoPlayerViewModelImpl.kt | 30 ++++++++++--------- .../model/ViewoPlayerViewModelDummy.kt | 2 +- .../newplayer/ui/VideoPlayerControllerUI.kt | 4 +-- .../net/newpipe/newplayer/ui/VideoPlayerUI.kt | 2 -- .../ui/videoplayer/StreamSelectUI.kt | 14 +++++++-- .../newpipe/newplayer/ui/videoplayer/TopUI.kt | 8 +++-- .../java/net/newpipe/newplayer/utils/utils.kt | 9 ++++++ 8 files changed, 46 insertions(+), 25 deletions(-) diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt index d251be0..6fe62ec 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModel.kt @@ -54,6 +54,6 @@ interface VideoPlayerViewModel { fun finishFastSeek() fun brightnessChange(changeRate: Float, systemBrightness: Float) fun volumeChange(changeRate: Float) - fun openStreamSelection(selectChapter: Boolean) + fun openStreamSelection(selectChapter: Boolean, embeddedUiConfig: EmbeddedUiConfig) fun closeStreamSelection() } \ No newline at end of file diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt index 8a60ab5..5d24c8b 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/VideoPlayerViewModelImpl.kt @@ -65,7 +65,7 @@ class VideoPlayerViewModelImpl @Inject constructor( private var uiVisibilityJob: Job? = null private var progressUpdaterJob: Job? = null - // this is necesary to restore the embedded view UI configuration when returning from fullscreen + // this is necesary to restore the embedded view UI configuration when returning from fullscreen private var embeddedUiConfig: EmbeddedUiConfig? = null private val audioManager = @@ -166,8 +166,10 @@ class VideoPlayerViewModelImpl @Inject constructor( val currentMode = mutableUiState.value.uiMode.toPlayMode() if (currentMode != newMode) { mutableUiState.update { - it.copy(uiMode = UIModeState.fromPlayMode(newMode), - embeddedUiConfig = embeddedUiConfig) + it.copy( + uiMode = UIModeState.fromPlayMode(newMode), + embeddedUiConfig = embeddedUiConfig + ) } } } @@ -357,21 +359,20 @@ class VideoPlayerViewModelImpl @Inject constructor( } } - override fun openStreamSelection(selectChapter: Boolean) { - mutableUiState.update { - it.copy( - uiMode = if (selectChapter) it.uiMode.getChapterSelectUiState() - else it.uiMode.getStreamSelectUiState() - ) + override fun openStreamSelection(selectChapter: Boolean, embeddedUiConfig: EmbeddedUiConfig) { + println("gurken openSelection ${embeddedUiConfig}") + uiVisibilityJob?.cancel() + if (!uiState.value.uiMode.fullscreen) { + this.embeddedUiConfig = embeddedUiConfig } + updateUiMode( + if (selectChapter) uiState.value.uiMode.getChapterSelectUiState() + else uiState.value.uiMode.getStreamSelectUiState() + ) } override fun closeStreamSelection() { - mutableUiState.update { - it.copy( - uiMode = it.uiMode.getUiHiddenState() - ) - } + updateUiMode(uiState.value.uiMode.getUiHiddenState()) } override fun switchToEmbeddedView() { @@ -381,6 +382,7 @@ class VideoPlayerViewModelImpl @Inject constructor( } override fun switchToFullscreen(embeddedUiConfig: EmbeddedUiConfig) { + println("gurken fullscreen: ${embeddedUiConfig}") uiVisibilityJob?.cancel() finishFastSeek() diff --git a/new-player/src/main/java/net/newpipe/newplayer/model/ViewoPlayerViewModelDummy.kt b/new-player/src/main/java/net/newpipe/newplayer/model/ViewoPlayerViewModelDummy.kt index 67024e0..9981286 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/model/ViewoPlayerViewModelDummy.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/model/ViewoPlayerViewModelDummy.kt @@ -69,7 +69,7 @@ open class VideoPlayerViewModelDummy : VideoPlayerViewModel { println("dummy impl") } - override fun openStreamSelection(selectChapter: Boolean) { + override fun openStreamSelection(selectChapter: Boolean, embeddedUiConfig: EmbeddedUiConfig) { println("dummy impl") } diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerControllerUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerControllerUI.kt index 9797fc8..51054ac 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerControllerUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerControllerUI.kt @@ -55,6 +55,7 @@ import net.newpipe.newplayer.ui.videoplayer.CenterUI import net.newpipe.newplayer.ui.videoplayer.TopUI import net.newpipe.newplayer.ui.videoplayer.GestureUI import net.newpipe.newplayer.utils.getDefaultBrightness +import net.newpipe.newplayer.utils.getInsets val CONTROLLER_UI_BACKGROUND_COLOR = Color(0x75000000) @@ -76,8 +77,7 @@ fun VideoPlayerControllerUI( viewModel.brightnessChange(rateChange, systemBrightness) } - val insets = - WindowInsets.systemBars.union(WindowInsets.displayCutout).union(WindowInsets.waterfall) + val insets = getInsets() AnimatedVisibility(uiState.uiMode.controllerUiVisible) { Surface( diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt index 1952af6..d7bfcbc 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/VideoPlayerUI.kt @@ -98,9 +98,7 @@ fun VideoPlayerUI( WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = false } else { - println("gurken dings") uiState.embeddedUiConfig?.let { - println("gurken bumbs") WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = it.systemBarInLightMode } diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt index dd3d45b..4b23d02 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/StreamSelectUI.kt @@ -34,6 +34,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close @@ -68,6 +69,7 @@ import net.newpipe.newplayer.utils.BitmapThumbnail import net.newpipe.newplayer.utils.OnlineThumbnail import net.newpipe.newplayer.utils.Thumbnail import net.newpipe.newplayer.utils.VectorThumbnail +import net.newpipe.newplayer.utils.getInsets @Composable fun StreamSelectUI( @@ -75,7 +77,13 @@ fun StreamSelectUI( viewModel: VideoPlayerViewModel, uiState: VideoPlayerUIState ) { - Surface(modifier = Modifier.fillMaxSize(), color = CONTROLLER_UI_BACKGROUND_COLOR) { + val insets = getInsets() + Surface( + modifier = Modifier + .fillMaxSize() + .windowInsetsPadding(insets), + color = CONTROLLER_UI_BACKGROUND_COLOR + ) { Scaffold( topBar = { if (isChapterSelect) { @@ -150,7 +158,7 @@ private fun ChapterItem( when (thumbnail) { is OnlineThumbnail -> AsyncImage( model = thumbnail.url, - contentDescription =contentDescription + contentDescription = contentDescription ) is BitmapThumbnail -> Image( @@ -206,7 +214,7 @@ private fun StreamItem( when (thumbnail) { is OnlineThumbnail -> AsyncImage( model = thumbnail.url, - contentDescription =contentDescription + contentDescription = contentDescription ) is BitmapThumbnail -> Image( diff --git a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/TopUI.kt b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/TopUI.kt index 41ab8cd..dc22b08 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/TopUI.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/ui/videoplayer/TopUI.kt @@ -20,6 +20,7 @@ package net.newpipe.newplayer.ui.videoplayer +import android.app.Activity import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -38,6 +39,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview @@ -49,6 +51,7 @@ import net.newpipe.newplayer.model.VideoPlayerViewModel import net.newpipe.newplayer.model.VideoPlayerViewModelDummy import net.newpipe.newplayer.ui.theme.VideoPlayerTheme import net.newpipe.newplayer.ui.theme.video_player_onSurface +import net.newpipe.newplayer.utils.getEmbeddedUiConfig @Composable fun TopUI( @@ -56,6 +59,7 @@ fun TopUI( viewModel: VideoPlayerViewModel, uiState: VideoPlayerUIState ) { + val embeddedUiConfig = getEmbeddedUiConfig(activity = LocalContext.current as Activity) Row( modifier = modifier, verticalAlignment = Alignment.CenterVertically, @@ -88,7 +92,7 @@ fun TopUI( ) } IconButton( - onClick = { viewModel.openStreamSelection(selectChapter = true) }, + onClick = { viewModel.openStreamSelection(selectChapter = true, embeddedUiConfig) }, ) { Icon( imageVector = Icons.AutoMirrored.Filled.MenuBook, @@ -96,7 +100,7 @@ fun TopUI( ) } IconButton( - onClick = { viewModel.openStreamSelection(selectChapter = false) }, + onClick = { viewModel.openStreamSelection(selectChapter = false, embeddedUiConfig) }, ) { Icon( imageVector = Icons.AutoMirrored.Filled.List, diff --git a/new-player/src/main/java/net/newpipe/newplayer/utils/utils.kt b/new-player/src/main/java/net/newpipe/newplayer/utils/utils.kt index c4d0281..90cfc3e 100644 --- a/new-player/src/main/java/net/newpipe/newplayer/utils/utils.kt +++ b/new-player/src/main/java/net/newpipe/newplayer/utils/utils.kt @@ -25,6 +25,11 @@ import android.app.Activity import android.content.Context import android.content.ContextWrapper import android.view.WindowManager +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.displayCutout +import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.waterfall import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect @@ -94,6 +99,10 @@ fun getEmbeddedUiConfig(activity: Activity): EmbeddedUiConfig { ) } +@Composable +fun getInsets() = + WindowInsets.systemBars.union(WindowInsets.displayCutout).union(WindowInsets.waterfall) + private const val HOURS_PER_DAY = 24 private const val MINUTES_PER_HOUR = 60 private const val SECONDS_PER_MINUTE = 60