diff --git a/app/src/main/java/com/acitelight/aether/view/PortalCorePlayer.kt b/app/src/main/java/com/acitelight/aether/view/PortalCorePlayer.kt index 1df2786..e0c05fd 100644 --- a/app/src/main/java/com/acitelight/aether/view/PortalCorePlayer.kt +++ b/app/src/main/java/com/acitelight/aether/view/PortalCorePlayer.kt @@ -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) + ) + } } } diff --git a/app/src/main/java/com/acitelight/aether/view/VideoPlayer.kt b/app/src/main/java/com/acitelight/aether/view/VideoPlayer.kt index 5893b80..79dd1b8 100644 --- a/app/src/main/java/com/acitelight/aether/view/VideoPlayer.kt +++ b/app/src/main/java/com/acitelight/aether/view/VideoPlayer.kt @@ -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(), 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( diff --git a/app/src/main/java/com/acitelight/aether/view/VideoPlayerLandscape.kt b/app/src/main/java/com/acitelight/aether/view/VideoPlayerLandscape.kt index 2751575..8d2968b 100644 --- a/app/src/main/java/com/acitelight/aether/view/VideoPlayerLandscape.kt +++ b/app/src/main/java/com/acitelight/aether/view/VideoPlayerLandscape.kt @@ -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) + ) + } } } } diff --git a/app/src/main/java/com/acitelight/aether/viewModel/VideoPlayerViewModel.kt b/app/src/main/java/com/acitelight/aether/viewModel/VideoPlayerViewModel.kt index 7cf8bbb..e3dde4f 100644 --- a/app/src/main/java/com/acitelight/aether/viewModel/VideoPlayerViewModel.kt +++ b/app/src/main/java/com/acitelight/aether/viewModel/VideoPlayerViewModel.kt @@ -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)