make touch surface hide behind regular buttons
This commit is contained in:
parent
5a2f62b55e
commit
8551a36a0c
|
@ -193,6 +193,7 @@ class VideoPlayerViewModelImpl @Inject constructor(
|
|||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
|
||||
Log.d(TAG, "viewmodel cleared")
|
||||
}
|
||||
|
||||
|
@ -213,18 +214,25 @@ class VideoPlayerViewModelImpl @Inject constructor(
|
|||
}
|
||||
|
||||
override fun play() {
|
||||
uiVisibilityJob?.cancel()
|
||||
mutableUiState.update {
|
||||
it.copy(uiVissible = false)
|
||||
}
|
||||
newPlayer?.play()
|
||||
}
|
||||
|
||||
override fun pause() {
|
||||
resetHideUiDelayed()
|
||||
newPlayer?.pause()
|
||||
}
|
||||
|
||||
override fun prevStream() {
|
||||
resetHideUiDelayed()
|
||||
Log.e(TAG, "imeplement prev stream")
|
||||
}
|
||||
|
||||
override fun nextStream() {
|
||||
resetHideUiDelayed()
|
||||
Log.e(TAG, "implement next stream")
|
||||
}
|
||||
|
||||
|
@ -232,6 +240,10 @@ class VideoPlayerViewModelImpl @Inject constructor(
|
|||
mutableUiState.update {
|
||||
it.copy(uiVissible = true)
|
||||
}
|
||||
resetHideUiDelayed()
|
||||
}
|
||||
|
||||
private fun resetHideUiDelayed() {
|
||||
uiVisibilityJob?.cancel()
|
||||
uiVisibilityJob = viewModelScope.launch {
|
||||
delay(2000)
|
||||
|
@ -250,15 +262,18 @@ class VideoPlayerViewModelImpl @Inject constructor(
|
|||
|
||||
override fun switchToEmbeddedView() {
|
||||
fullscreenListener?.onFullscreenToggle(false)
|
||||
uiVisibilityJob?.cancel()
|
||||
mutableUiState.update {
|
||||
it.copy(fullscreen = false)
|
||||
it.copy(fullscreen = false, uiVissible = false)
|
||||
}
|
||||
}
|
||||
|
||||
override fun switchToFullscreen() {
|
||||
fullscreenListener?.onFullscreenToggle(true)
|
||||
uiVisibilityJob?.cancel()
|
||||
|
||||
mutableUiState.update {
|
||||
it.copy(fullscreen = true)
|
||||
it.copy(fullscreen = true, uiVissible = false)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
package net.newpipe.newplayer.ui
|
||||
|
||||
import android.view.MotionEvent
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
|
@ -67,9 +68,11 @@ import androidx.compose.runtime.mutableStateOf
|
|||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.input.pointer.pointerInteropFilter
|
||||
import androidx.compose.ui.layout.onPlaced
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.res.stringResource
|
||||
|
@ -96,11 +99,27 @@ fun VideoPlayerControllerUI(
|
|||
showUi: () -> Unit,
|
||||
hideUi: () -> Unit
|
||||
) {
|
||||
TouchControll(modifier = Modifier, hideUi = hideUi, showUi = showUi, uiVissible = uiVissible) {
|
||||
if (uiVissible) {
|
||||
|
||||
Box(modifier = Modifier) {
|
||||
if (!uiVissible) {
|
||||
TouchUi(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
hideUi = hideUi,
|
||||
showUi = showUi,
|
||||
uiVissible = uiVissible,
|
||||
fullscreen = fullscreen
|
||||
)
|
||||
} else {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize(), color = Color(0x75000000)
|
||||
) {
|
||||
TouchUi(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
hideUi = hideUi,
|
||||
showUi = showUi,
|
||||
uiVissible = uiVissible,
|
||||
fullscreen = fullscreen
|
||||
)
|
||||
Box(
|
||||
modifier = if (fullscreen) {
|
||||
Modifier
|
||||
|
@ -147,6 +166,45 @@ fun VideoPlayerControllerUI(
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
@Composable
|
||||
private fun TouchUi(
|
||||
modifier: Modifier,
|
||||
hideUi: () -> Unit,
|
||||
showUi: () -> Unit,
|
||||
uiVissible: Boolean,
|
||||
fullscreen: Boolean,
|
||||
) {
|
||||
Box(modifier = Modifier
|
||||
.pointerInteropFilter {
|
||||
when (it.action) {
|
||||
MotionEvent.ACTION_DOWN -> {
|
||||
true
|
||||
}
|
||||
|
||||
MotionEvent.ACTION_UP -> {
|
||||
if (uiVissible) {
|
||||
hideUi()
|
||||
} else {
|
||||
showUi()
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
MotionEvent.ACTION_MOVE -> {
|
||||
true
|
||||
}
|
||||
|
||||
else -> false
|
||||
}
|
||||
}) {
|
||||
Surface(color = Color.Transparent, modifier = Modifier.fillMaxSize()) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
// TopUI
|
||||
///////////////////////////////////////////////////////////////////
|
||||
|
@ -204,25 +262,6 @@ private fun TopUI(modifier: Modifier) {
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun TouchControll(
|
||||
modifier: Modifier,
|
||||
hideUi: () -> Unit,
|
||||
showUi: () -> kotlin.Unit,
|
||||
uiVissible: Boolean,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
Box(modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.clickable {
|
||||
if (uiVissible)
|
||||
hideUi()
|
||||
else
|
||||
showUi()
|
||||
}) {
|
||||
content()
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun MainMenu() {
|
||||
|
|
Loading…
Reference in New Issue