[update] Fullscreen mode
This commit is contained in:
@@ -26,6 +26,7 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeUp
|
||||
import androidx.compose.material.icons.filled.Brightness4
|
||||
import androidx.compose.material.icons.filled.FastForward
|
||||
import androidx.compose.material.icons.filled.Fullscreen
|
||||
import androidx.compose.material.icons.filled.Pause
|
||||
import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -397,6 +398,22 @@ fun PortalCorePlayer(modifier: Modifier, videoPlayerViewModel: VideoPlayerViewMo
|
||||
.align(Alignment.CenterVertically)
|
||||
.padding(start = 12.dp)
|
||||
)
|
||||
|
||||
IconButton(
|
||||
onClick = {
|
||||
videoPlayerViewModel.isLandscape = true
|
||||
},
|
||||
Modifier
|
||||
.size(36.dp)
|
||||
.align(Alignment.CenterVertically)
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.Fullscreen,
|
||||
contentDescription = "FullScreen",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(32.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.acitelight.aether.view
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.pm.ActivityInfo
|
||||
import android.content.res.Configuration
|
||||
import android.media.AudioManager
|
||||
import android.view.View
|
||||
@@ -71,6 +72,7 @@ import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.SliderDefaults
|
||||
import androidx.compose.material3.Tab
|
||||
import androidx.compose.material3.TabRow
|
||||
import androidx.compose.runtime.DisposableEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableFloatStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
@@ -136,23 +138,32 @@ fun moveBrit(db: Float, activity: Activity, videoPlayerViewModel: VideoPlayerVie
|
||||
activity.window.attributes = attr
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun isLandscape(): Boolean {
|
||||
val configuration = LocalConfiguration.current
|
||||
return configuration.orientation == Configuration.ORIENTATION_LANDSCAPE
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun VideoPlayer(
|
||||
videoPlayerViewModel: VideoPlayerViewModel = hiltViewModel<VideoPlayerViewModel>(),
|
||||
videoId: String,
|
||||
navController: NavHostController
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val activity = (context as? Activity)!!
|
||||
|
||||
DisposableEffect(Unit) {
|
||||
onDispose {
|
||||
activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
|
||||
val colorScheme = MaterialTheme.colorScheme
|
||||
videoPlayerViewModel.init(videoId)
|
||||
|
||||
activity.requestedOrientation =
|
||||
if(videoPlayerViewModel.isLandscape)
|
||||
ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
||||
else
|
||||
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||
|
||||
if (videoPlayerViewModel.startPlaying) {
|
||||
if (isLandscape()) {
|
||||
if (videoPlayerViewModel.isLandscape) {
|
||||
Box {
|
||||
VideoPlayerLandscape(videoPlayerViewModel)
|
||||
AnimatedVisibility(
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.media.AudioManager
|
||||
import android.view.View
|
||||
import androidx.activity.compose.BackHandler
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
@@ -16,6 +17,7 @@ import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
@@ -24,9 +26,14 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.automirrored.filled.VolumeUp
|
||||
import androidx.compose.material.icons.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.ArrowBackIosNew
|
||||
import androidx.compose.material.icons.filled.Brightness4
|
||||
import androidx.compose.material.icons.filled.FastForward
|
||||
import androidx.compose.material.icons.filled.Fullscreen
|
||||
import androidx.compose.material.icons.filled.FullscreenExit
|
||||
import androidx.compose.material.icons.filled.Pause
|
||||
import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material3.Icon
|
||||
@@ -80,6 +87,10 @@ fun VideoPlayerLandscape(videoPlayerViewModel: VideoPlayerViewModel) {
|
||||
)
|
||||
}
|
||||
|
||||
BackHandler {
|
||||
videoPlayerViewModel.isLandscape = false
|
||||
}
|
||||
|
||||
ToggleFullScreen(true)
|
||||
Box(Modifier.fillMaxSize())
|
||||
{
|
||||
@@ -343,11 +354,28 @@ fun VideoPlayerLandscape(videoPlayerViewModel: VideoPlayerViewModel) {
|
||||
)
|
||||
)
|
||||
{
|
||||
IconButton(
|
||||
onClick = {
|
||||
videoPlayerViewModel.isLandscape = false
|
||||
},
|
||||
Modifier
|
||||
.padding(top = 12.dp)
|
||||
.padding(start = 46.dp)
|
||||
.size(36.dp)
|
||||
.align(Alignment.CenterVertically)
|
||||
) {
|
||||
Icon(
|
||||
Icons.AutoMirrored.Filled.ArrowBack,
|
||||
contentDescription = "Back",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(32.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Text(
|
||||
text = name,
|
||||
fontWeight = FontWeight.Bold,
|
||||
modifier = Modifier
|
||||
.padding(horizontal = 46.dp).padding(top = 12.dp)
|
||||
modifier = Modifier.padding(top = 12.dp)
|
||||
.align(Alignment.CenterVertically),
|
||||
fontSize = 18.sp
|
||||
)
|
||||
@@ -418,6 +446,24 @@ fun VideoPlayerLandscape(videoPlayerViewModel: VideoPlayerViewModel) {
|
||||
modifier = Modifier.size(42.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Spacer(Modifier.weight(1f))
|
||||
|
||||
IconButton(
|
||||
onClick = {
|
||||
videoPlayerViewModel.isLandscape = false
|
||||
},
|
||||
Modifier
|
||||
.size(36.dp)
|
||||
.align(Alignment.CenterVertically)
|
||||
) {
|
||||
Icon(
|
||||
Icons.Default.FullscreenExit,
|
||||
contentDescription = "Exit FullScreen",
|
||||
tint = Color.White,
|
||||
modifier = Modifier.size(32.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ class VideoPlayerViewModel @Inject constructor(
|
||||
val recentManager: RecentManager,
|
||||
val videoLibrary: VideoLibrary,
|
||||
) : ViewModel() {
|
||||
var isLandscape by mutableStateOf(false)
|
||||
var tabIndex by mutableIntStateOf(0)
|
||||
var isPlaying by mutableStateOf(true)
|
||||
var playProcess by mutableFloatStateOf(0.0f)
|
||||
|
||||
Reference in New Issue
Block a user