mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-04-30 06:34:34 +02:00
Merge branch 'detect-system-setting-changes' into 'master'
detect system auto rotate setting changes See merge request videostreaming/grayjay!62
This commit is contained in:
commit
f55a7f0a7b
@ -415,8 +415,8 @@ class Settings : FragmentedStorageFileJson() {
|
|||||||
@FormField(R.string.simplify_sources, FieldForm.TOGGLE, R.string.simplify_sources_description, 4)
|
@FormField(R.string.simplify_sources, FieldForm.TOGGLE, R.string.simplify_sources_description, 4)
|
||||||
var simplifySources: Boolean = true;
|
var simplifySources: Boolean = true;
|
||||||
|
|
||||||
@FormField(R.string.force_enable_auto_rotate_in_full_screen, FieldForm.TOGGLE, R.string.force_enable_auto_rotate_in_full_screen_description, 5)
|
@FormField(R.string.always_allow_reverse_landscape_auto_rotate, FieldForm.TOGGLE, R.string.always_allow_reverse_landscape_auto_rotate_description, 5)
|
||||||
var forceAllowFullScreenRotation: Boolean = true
|
var alwaysAllowReverseLandscapeAutoRotate: Boolean = true
|
||||||
|
|
||||||
@FormField(R.string.background_behavior, FieldForm.DROPDOWN, -1, 6)
|
@FormField(R.string.background_behavior, FieldForm.DROPDOWN, -1, 6)
|
||||||
@DropdownFieldOptionsId(R.array.player_background_behavior)
|
@DropdownFieldOptionsId(R.array.player_background_behavior)
|
||||||
|
@ -4,8 +4,11 @@ import android.annotation.SuppressLint
|
|||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
|
import android.database.ContentObserver
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
|
import android.os.Looper
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.OrientationEventListener
|
import android.view.OrientationEventListener
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -85,6 +88,7 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
|
|
||||||
private var _landscapeOrientationListener: LandscapeOrientationListener? = null
|
private var _landscapeOrientationListener: LandscapeOrientationListener? = null
|
||||||
private var _portraitOrientationListener: PortraitOrientationListener? = null
|
private var _portraitOrientationListener: PortraitOrientationListener? = null
|
||||||
|
private var _autoRotateObserver: AutoRotateObserver? = null
|
||||||
|
|
||||||
fun nextVideo() {
|
fun nextVideo() {
|
||||||
_viewDetail?.nextVideo(true, true, true);
|
_viewDetail?.nextVideo(true, true, true);
|
||||||
@ -161,6 +165,7 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
val isFullScreenPortraitAllowed = Settings.instance.playback.fullscreenPortrait
|
val isFullScreenPortraitAllowed = Settings.instance.playback.fullscreenPortrait
|
||||||
val isReversePortraitAllowed = Settings.instance.playback.reversePortrait
|
val isReversePortraitAllowed = Settings.instance.playback.reversePortrait
|
||||||
val rotationLock = StatePlayer.instance.rotationLock
|
val rotationLock = StatePlayer.instance.rotationLock
|
||||||
|
val alwaysAllowReverseLandscapeAutoRotate = Settings.instance.playback.alwaysAllowReverseLandscapeAutoRotate
|
||||||
|
|
||||||
val isLandscapeVideo: Boolean = _viewDetail?.isLandscapeVideo() ?: false
|
val isLandscapeVideo: Boolean = _viewDetail?.isLandscapeVideo() ?: false
|
||||||
|
|
||||||
@ -169,11 +174,7 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
|
|
||||||
// For small windows if the device isn't landscape right now and full screen portrait isn't allowed then we should force landscape
|
// For small windows if the device isn't landscape right now and full screen portrait isn't allowed then we should force landscape
|
||||||
if (isSmallWindow && isFullscreen && !isFullScreenPortraitAllowed && resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT && !rotationLock && isLandscapeVideo) {
|
if (isSmallWindow && isFullscreen && !isFullScreenPortraitAllowed && resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT && !rotationLock && isLandscapeVideo) {
|
||||||
if (Settings.instance.playback.forceAllowFullScreenRotation) {
|
|
||||||
a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
|
||||||
} else {
|
|
||||||
a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
|
a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
|
||||||
}
|
|
||||||
if (autoRotateEnabled
|
if (autoRotateEnabled
|
||||||
) {
|
) {
|
||||||
// start listening for the device to rotate to landscape
|
// start listening for the device to rotate to landscape
|
||||||
@ -181,6 +182,11 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
_landscapeOrientationListener?.enableListener()
|
_landscapeOrientationListener?.enableListener()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// For small windows if always all reverse landscape then we'll lock the orientation to landscape when system auto-rotate is off to make sure that locking
|
||||||
|
// and unlockiung in the player settings keep orientation in landscape
|
||||||
|
else if (isSmallWindow && isFullscreen && !isFullScreenPortraitAllowed && alwaysAllowReverseLandscapeAutoRotate && !rotationLock && isLandscapeVideo && !autoRotateEnabled) {
|
||||||
|
a.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
||||||
|
}
|
||||||
// For small windows if the device isn't in a portrait orientation and we're in the maximized state then we should force portrait
|
// For small windows if the device isn't in a portrait orientation and we're in the maximized state then we should force portrait
|
||||||
// only do this if auto-rotate is on portrait is forced when leaving full screen for autorotate off
|
// only do this if auto-rotate is on portrait is forced when leaving full screen for autorotate off
|
||||||
else if (isSmallWindow && !isMinimizingFromFullScreen && !isFullscreen && state == State.MAXIMIZED && resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
else if (isSmallWindow && !isMinimizingFromFullScreen && !isFullscreen && state == State.MAXIMIZED && resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||||
@ -392,6 +398,10 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
updateOrientation()
|
updateOrientation()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
_autoRotateObserver = AutoRotateObserver(requireContext(), Handler(Looper.getMainLooper())) {
|
||||||
|
updateOrientation()
|
||||||
|
}
|
||||||
|
_autoRotateObserver?.startObserving()
|
||||||
|
|
||||||
return _view!!;
|
return _view!!;
|
||||||
}
|
}
|
||||||
@ -496,6 +506,7 @@ class VideoDetailFragment() : MainFragment() {
|
|||||||
|
|
||||||
_landscapeOrientationListener?.disableListener()
|
_landscapeOrientationListener?.disableListener()
|
||||||
_portraitOrientationListener?.disableListener()
|
_portraitOrientationListener?.disableListener()
|
||||||
|
_autoRotateObserver?.stopObserving()
|
||||||
|
|
||||||
_viewDetail?.let {
|
_viewDetail?.let {
|
||||||
_viewDetail = null;
|
_viewDetail = null;
|
||||||
@ -657,3 +668,25 @@ class PortraitOrientationListener(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class AutoRotateObserver(context: Context, handler: Handler, private val onAutoRotateChanged: () -> Unit) : ContentObserver(handler) {
|
||||||
|
private val contentResolver = context.contentResolver
|
||||||
|
|
||||||
|
override fun onChange(selfChange: Boolean) {
|
||||||
|
super.onChange(selfChange)
|
||||||
|
|
||||||
|
onAutoRotateChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun startObserving() {
|
||||||
|
contentResolver.registerContentObserver(
|
||||||
|
android.provider.Settings.System.getUriFor(android.provider.Settings.System.ACCELEROMETER_ROTATION),
|
||||||
|
false,
|
||||||
|
this
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun stopObserving() {
|
||||||
|
contentResolver.unregisterContentObserver(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -287,8 +287,8 @@
|
|||||||
<string name="planned_content_notifications_description">Schedules discovered planned content as notifications, resulting in more accurate notifications for this content.</string>
|
<string name="planned_content_notifications_description">Schedules discovered planned content as notifications, resulting in more accurate notifications for this content.</string>
|
||||||
<string name="attempt_to_utilize_byte_ranges">Attempt to utilize byte ranges</string>
|
<string name="attempt_to_utilize_byte_ranges">Attempt to utilize byte ranges</string>
|
||||||
<string name="auto_update">Auto Update</string>
|
<string name="auto_update">Auto Update</string>
|
||||||
<string name="force_enable_auto_rotate_in_full_screen">Force Enable Auto-Rotate In Full-Screen Mode</string>
|
<string name="always_allow_reverse_landscape_auto_rotate">Always allow reverse landscape auto-rotate</string>
|
||||||
<string name="force_enable_auto_rotate_in_full_screen_description">Force enable auto-rotation between the two landscape orientations in full-screen mode, even when you disable auto-rotate at the system level.</string>
|
<string name="always_allow_reverse_landscape_auto_rotate_description">There will always be auto-rotation between the two landscape orientations in full-screen mode, even when you disable auto-rotate in system settings.</string>
|
||||||
<string name="simplify_sources">Simplify sources</string>
|
<string name="simplify_sources">Simplify sources</string>
|
||||||
<string name="simplify_sources_description">Deduplicate sources by resolution so that only more relevant sources are visible.</string>
|
<string name="simplify_sources_description">Deduplicate sources by resolution so that only more relevant sources are visible.</string>
|
||||||
<string name="automatic_backup">Automatic Backup</string>
|
<string name="automatic_backup">Automatic Backup</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user