mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-08-03 14:50:49 +00:00
Rotation fixes.
This commit is contained in:
parent
72efb21439
commit
834de928c2
14 changed files with 183 additions and 259 deletions
|
@ -50,7 +50,7 @@
|
||||||
android:name=".activities.MainActivity"
|
android:name=".activities.MainActivity"
|
||||||
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
|
android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar"
|
android:theme="@style/Theme.FutoVideo.NoActionBar"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:resizeableActivity="true"
|
android:resizeableActivity="true"
|
||||||
|
@ -152,27 +152,27 @@
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.SettingsActivity"
|
android:name=".activities.SettingsActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.DeveloperActivity"
|
android:name=".activities.DeveloperActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.ExceptionActivity"
|
android:name=".activities.ExceptionActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.CaptchaActivity"
|
android:name=".activities.CaptchaActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.LoginActivity"
|
android:name=".activities.LoginActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.AddSourceActivity"
|
android:name=".activities.AddSourceActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar">
|
android:theme="@style/Theme.FutoVideo.NoActionBar">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
@ -186,44 +186,44 @@
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.AddSourceOptionsActivity"
|
android:name=".activities.AddSourceOptionsActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricHomeActivity"
|
android:name=".activities.PolycentricHomeActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricBackupActivity"
|
android:name=".activities.PolycentricBackupActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricCreateProfileActivity"
|
android:name=".activities.PolycentricCreateProfileActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricProfileActivity"
|
android:name=".activities.PolycentricProfileActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricWhyActivity"
|
android:name=".activities.PolycentricWhyActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.PolycentricImportProfileActivity"
|
android:name=".activities.PolycentricImportProfileActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.ManageTabsActivity"
|
android:name=".activities.ManageTabsActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.QRCaptureActivity"
|
android:name=".activities.QRCaptureActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.FCastGuideActivity"
|
android:name=".activities.FCastGuideActivity"
|
||||||
android:screenOrientation="portrait"
|
android:screenOrientation="sensorPortrait"
|
||||||
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
android:theme="@style/Theme.FutoVideo.NoActionBar" />
|
||||||
</application>
|
</application>
|
||||||
</manifest>
|
</manifest>
|
|
@ -23,6 +23,7 @@ import com.futo.platformplayer.states.StateBackup
|
||||||
import com.futo.platformplayer.states.StateCache
|
import com.futo.platformplayer.states.StateCache
|
||||||
import com.futo.platformplayer.states.StateMeta
|
import com.futo.platformplayer.states.StateMeta
|
||||||
import com.futo.platformplayer.states.StatePayment
|
import com.futo.platformplayer.states.StatePayment
|
||||||
|
import com.futo.platformplayer.states.StatePlayer
|
||||||
import com.futo.platformplayer.states.StatePolycentric
|
import com.futo.platformplayer.states.StatePolycentric
|
||||||
import com.futo.platformplayer.states.StateUpdate
|
import com.futo.platformplayer.states.StateUpdate
|
||||||
import com.futo.platformplayer.stores.FragmentedStorage
|
import com.futo.platformplayer.stores.FragmentedStorage
|
||||||
|
@ -389,15 +390,7 @@ class Settings : FragmentedStorageFileJson() {
|
||||||
@DropdownFieldOptionsId(R.array.system_enabled_disabled_array)
|
@DropdownFieldOptionsId(R.array.system_enabled_disabled_array)
|
||||||
var autoRotate: Int = 2;
|
var autoRotate: Int = 2;
|
||||||
|
|
||||||
fun isAutoRotate() = autoRotate == 1 || (autoRotate == 2 && StateApp.instance.getCurrentSystemAutoRotate());
|
fun isAutoRotate() = (autoRotate == 1 && !StatePlayer.instance.rotationLock) || (autoRotate == 2 && StateApp.instance.getCurrentSystemAutoRotate() && !StatePlayer.instance.rotationLock);
|
||||||
|
|
||||||
@FormField(R.string.auto_rotate_dead_zone, FieldForm.DROPDOWN, R.string.this_prevents_the_device_from_rotating_within_the_given_amount_of_degrees, 6)
|
|
||||||
@DropdownFieldOptionsId(R.array.auto_rotate_dead_zone)
|
|
||||||
var autoRotateDeadZone: Int = 0;
|
|
||||||
|
|
||||||
fun getAutoRotateDeadZoneDegrees(): Int {
|
|
||||||
return autoRotateDeadZone * 5;
|
|
||||||
}
|
|
||||||
|
|
||||||
@FormField(R.string.background_behavior, FieldForm.DROPDOWN, -1, 7)
|
@FormField(R.string.background_behavior, FieldForm.DROPDOWN, -1, 7)
|
||||||
@DropdownFieldOptionsId(R.array.player_background_behavior)
|
@DropdownFieldOptionsId(R.array.player_background_behavior)
|
||||||
|
|
|
@ -39,7 +39,6 @@ import com.futo.platformplayer.fragment.mainactivity.topbar.GeneralTopBarFragmen
|
||||||
import com.futo.platformplayer.fragment.mainactivity.topbar.ImportTopBarFragment
|
import com.futo.platformplayer.fragment.mainactivity.topbar.ImportTopBarFragment
|
||||||
import com.futo.platformplayer.fragment.mainactivity.topbar.NavigationTopBarFragment
|
import com.futo.platformplayer.fragment.mainactivity.topbar.NavigationTopBarFragment
|
||||||
import com.futo.platformplayer.fragment.mainactivity.topbar.SearchTopBarFragment
|
import com.futo.platformplayer.fragment.mainactivity.topbar.SearchTopBarFragment
|
||||||
import com.futo.platformplayer.listeners.OrientationManager
|
|
||||||
import com.futo.platformplayer.logging.Logger
|
import com.futo.platformplayer.logging.Logger
|
||||||
import com.futo.platformplayer.models.ImportCache
|
import com.futo.platformplayer.models.ImportCache
|
||||||
import com.futo.platformplayer.states.*
|
import com.futo.platformplayer.states.*
|
||||||
|
@ -131,9 +130,6 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
|
||||||
|
|
||||||
val onNavigated = Event1<MainFragment>();
|
val onNavigated = Event1<MainFragment>();
|
||||||
|
|
||||||
private lateinit var _orientationManager: OrientationManager;
|
|
||||||
var orientation: OrientationManager.Orientation = OrientationManager.Orientation.PORTRAIT
|
|
||||||
private set;
|
|
||||||
private var _isVisible = true;
|
private var _isVisible = true;
|
||||||
private var _wasStopped = false;
|
private var _wasStopped = false;
|
||||||
|
|
||||||
|
@ -413,26 +409,6 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
|
||||||
.commitNow();
|
.commitNow();
|
||||||
|
|
||||||
defaultTab.action(_fragBotBarMenu);
|
defaultTab.action(_fragBotBarMenu);
|
||||||
|
|
||||||
_orientationManager = OrientationManager(this);
|
|
||||||
_orientationManager.onOrientationChanged.subscribe {
|
|
||||||
orientation = it;
|
|
||||||
Logger.i(TAG, "Orientation changed (Found ${it})");
|
|
||||||
fragCurrent.onOrientationChanged(it);
|
|
||||||
if(_fragVideoDetail.state == VideoDetailFragment.State.MAXIMIZED)
|
|
||||||
_fragVideoDetail.onOrientationChanged(it);
|
|
||||||
else if(Settings.instance.other.bypassRotationPrevention)
|
|
||||||
{
|
|
||||||
requestedOrientation = when(orientation) {
|
|
||||||
OrientationManager.Orientation.PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
|
||||||
OrientationManager.Orientation.LANDSCAPE -> ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
|
|
||||||
OrientationManager.Orientation.REVERSED_PORTRAIT -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT
|
|
||||||
OrientationManager.Orientation.REVERSED_LANDSCAPE -> ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
_orientationManager.enable();
|
|
||||||
|
|
||||||
StateSubscriptions.instance;
|
StateSubscriptions.instance;
|
||||||
|
|
||||||
fragCurrent.onShown(null, false);
|
fragCurrent.onShown(null, false);
|
||||||
|
@ -529,17 +505,6 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Logger.v(TAG, "onResume")
|
Logger.v(TAG, "onResume")
|
||||||
|
|
||||||
val curOrientation = _orientationManager.orientation;
|
|
||||||
|
|
||||||
if(_fragVideoDetail.state == VideoDetailFragment.State.MAXIMIZED && _fragVideoDetail.lastOrientation != curOrientation) {
|
|
||||||
Logger.i(TAG, "Orientation mismatch (Found ${curOrientation})");
|
|
||||||
orientation = curOrientation;
|
|
||||||
fragCurrent.onOrientationChanged(curOrientation);
|
|
||||||
if(_fragVideoDetail.state == VideoDetailFragment.State.MAXIMIZED)
|
|
||||||
_fragVideoDetail.onOrientationChanged(curOrientation);
|
|
||||||
}
|
|
||||||
|
|
||||||
_isVisible = true;
|
_isVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -940,18 +905,6 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
|
||||||
override fun onRestart() {
|
override fun onRestart() {
|
||||||
super.onRestart();
|
super.onRestart();
|
||||||
Logger.i(TAG, "onRestart");
|
Logger.i(TAG, "onRestart");
|
||||||
|
|
||||||
//Force Portrait on restart
|
|
||||||
Logger.i(TAG, "Restarted with state ${_fragVideoDetail.state}");
|
|
||||||
if(_fragVideoDetail.state != VideoDetailFragment.State.MAXIMIZED) {
|
|
||||||
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(window, true)
|
|
||||||
WindowInsetsControllerCompat(window, rootView).let { controller ->
|
|
||||||
controller.show(WindowInsetsCompat.Type.statusBars());
|
|
||||||
controller.show(WindowInsetsCompat.Type.systemBars())
|
|
||||||
}
|
|
||||||
_fragVideoDetail.onOrientationChanged(OrientationManager.Orientation.PORTRAIT);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {
|
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {
|
||||||
|
@ -966,9 +919,6 @@ class MainActivity : AppCompatActivity, IWithResultLauncher {
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
Logger.v(TAG, "onDestroy")
|
Logger.v(TAG, "onDestroy")
|
||||||
|
|
||||||
_orientationManager.disable();
|
|
||||||
|
|
||||||
StateApp.instance.mainAppDestroyed(this);
|
StateApp.instance.mainAppDestroyed(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import androidx.core.app.ActivityCompat
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import com.futo.platformplayer.*
|
import com.futo.platformplayer.*
|
||||||
|
import com.futo.platformplayer.constructs.Event0
|
||||||
import com.futo.platformplayer.logging.Logger
|
import com.futo.platformplayer.logging.Logger
|
||||||
import com.futo.platformplayer.states.StateApp
|
import com.futo.platformplayer.states.StateApp
|
||||||
import com.futo.platformplayer.views.LoaderView
|
import com.futo.platformplayer.views.LoaderView
|
||||||
|
@ -184,12 +185,19 @@ class SettingsActivity : AppCompatActivity(), IWithResultLauncher {
|
||||||
resultLauncher.launch(intent);
|
resultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onDestroy() {
|
||||||
|
super.onDestroy()
|
||||||
|
settingsActivityClosed.emit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
//TODO: Temporary for solving Settings issues
|
//TODO: Temporary for solving Settings issues
|
||||||
@SuppressLint("StaticFieldLeak")
|
@SuppressLint("StaticFieldLeak")
|
||||||
private var _lastActivity: SettingsActivity? = null;
|
private var _lastActivity: SettingsActivity? = null;
|
||||||
|
|
||||||
|
val settingsActivityClosed = Event0()
|
||||||
|
|
||||||
fun getActivity(): SettingsActivity? {
|
fun getActivity(): SettingsActivity? {
|
||||||
val act = _lastActivity;
|
val act = _lastActivity;
|
||||||
if(act != null && !act._isFinished)
|
if(act != null && !act._isFinished)
|
||||||
|
|
|
@ -8,7 +8,6 @@ import com.futo.platformplayer.activities.MainActivity
|
||||||
import com.futo.platformplayer.constructs.Event1
|
import com.futo.platformplayer.constructs.Event1
|
||||||
import com.futo.platformplayer.fragment.mainactivity.MainActivityFragment
|
import com.futo.platformplayer.fragment.mainactivity.MainActivityFragment
|
||||||
import com.futo.platformplayer.fragment.mainactivity.topbar.TopFragment
|
import com.futo.platformplayer.fragment.mainactivity.topbar.TopFragment
|
||||||
import com.futo.platformplayer.listeners.OrientationManager
|
|
||||||
|
|
||||||
abstract class MainFragment : MainActivityFragment() {
|
abstract class MainFragment : MainActivityFragment() {
|
||||||
open val isMainView: Boolean = false;
|
open val isMainView: Boolean = false;
|
||||||
|
@ -46,10 +45,6 @@ abstract class MainFragment : MainActivityFragment() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun onOrientationChanged(orientation: OrientationManager.Orientation) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun onBackPressed(): Boolean {
|
open fun onBackPressed(): Boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,24 +3,25 @@ package com.futo.platformplayer.fragment.mainactivity.main
|
||||||
import android.content.pm.ActivityInfo
|
import android.content.pm.ActivityInfo
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.os.Handler
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.view.WindowInsets
|
||||||
|
import android.view.WindowInsetsController
|
||||||
import androidx.constraintlayout.motion.widget.MotionLayout
|
import androidx.constraintlayout.motion.widget.MotionLayout
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
|
||||||
import com.futo.platformplayer.R
|
import com.futo.platformplayer.R
|
||||||
import com.futo.platformplayer.Settings
|
import com.futo.platformplayer.Settings
|
||||||
import com.futo.platformplayer.UIDialogs
|
import com.futo.platformplayer.UIDialogs
|
||||||
import com.futo.platformplayer.activities.MainActivity
|
import com.futo.platformplayer.activities.SettingsActivity
|
||||||
import com.futo.platformplayer.api.media.models.video.IPlatformVideo
|
import com.futo.platformplayer.api.media.models.video.IPlatformVideo
|
||||||
import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails
|
import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails
|
||||||
import com.futo.platformplayer.casting.CastConnectionState
|
|
||||||
import com.futo.platformplayer.casting.StateCasting
|
import com.futo.platformplayer.casting.StateCasting
|
||||||
import com.futo.platformplayer.constructs.Event0
|
import com.futo.platformplayer.constructs.Event0
|
||||||
import com.futo.platformplayer.constructs.Event1
|
import com.futo.platformplayer.constructs.Event1
|
||||||
import com.futo.platformplayer.listeners.OrientationManager
|
import com.futo.platformplayer.listeners.AutoRotateChangeListener
|
||||||
import com.futo.platformplayer.logging.Logger
|
import com.futo.platformplayer.logging.Logger
|
||||||
import com.futo.platformplayer.models.PlatformVideoWithTime
|
import com.futo.platformplayer.models.PlatformVideoWithTime
|
||||||
import com.futo.platformplayer.models.UrlVideoWithTime
|
import com.futo.platformplayer.models.UrlVideoWithTime
|
||||||
|
@ -37,6 +38,7 @@ class VideoDetailFragment : MainFragment {
|
||||||
|
|
||||||
private var _viewDetail : VideoDetailView? = null;
|
private var _viewDetail : VideoDetailView? = null;
|
||||||
private var _view : SingleViewTouchableMotionLayout? = null;
|
private var _view : SingleViewTouchableMotionLayout? = null;
|
||||||
|
private lateinit var _autoRotateChangeListener: AutoRotateChangeListener
|
||||||
|
|
||||||
var isFullscreen : Boolean = false;
|
var isFullscreen : Boolean = false;
|
||||||
val onFullscreenChanged = Event1<Boolean>();
|
val onFullscreenChanged = Event1<Boolean>();
|
||||||
|
@ -45,14 +47,22 @@ class VideoDetailFragment : MainFragment {
|
||||||
var isInPictureInPicture : Boolean = false
|
var isInPictureInPicture : Boolean = false
|
||||||
private set;
|
private set;
|
||||||
|
|
||||||
var state: State = State.CLOSED;
|
private var _state: State = State.CLOSED
|
||||||
|
|
||||||
|
var state: State
|
||||||
|
get() = _state
|
||||||
|
set(value) {
|
||||||
|
_state = value
|
||||||
|
onStateChanged(value)
|
||||||
|
}
|
||||||
|
|
||||||
val currentUrl get() = _viewDetail?.currentUrl;
|
val currentUrl get() = _viewDetail?.currentUrl;
|
||||||
|
|
||||||
val onMinimize = Event0();
|
val onMinimize = Event0();
|
||||||
val onTransitioning = Event1<Boolean>();
|
val onTransitioning = Event1<Boolean>();
|
||||||
val onMaximized = Event0();
|
val onMaximized = Event0();
|
||||||
|
|
||||||
var lastOrientation : OrientationManager.Orientation = OrientationManager.Orientation.PORTRAIT
|
var lastOrientation : Int = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
|
||||||
private set;
|
private set;
|
||||||
|
|
||||||
private var _isInitialMaximize = true;
|
private var _isInitialMaximize = true;
|
||||||
|
@ -74,6 +84,44 @@ class VideoDetailFragment : MainFragment {
|
||||||
_viewDetail?.prevVideo(true);
|
_viewDetail?.prevVideo(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun onStateChanged(state: VideoDetailFragment.State) {
|
||||||
|
updateOrientation()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateOrientation() {
|
||||||
|
val isMaximized = state == State.MAXIMIZED;
|
||||||
|
val isFullScreenPortraitAllowed = Settings.instance.playback.fullscreenPortrait;
|
||||||
|
val isAutoRotateAllowed = Settings.instance.playback.isAutoRotate();
|
||||||
|
|
||||||
|
if (isFullscreen && isMaximized) {
|
||||||
|
if (isFullScreenPortraitAllowed) {
|
||||||
|
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
|
||||||
|
} else if (isAutoRotateAllowed) {
|
||||||
|
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
|
||||||
|
} else {
|
||||||
|
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (isMaximized && isAutoRotateAllowed) {
|
||||||
|
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
|
||||||
|
} else {
|
||||||
|
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.i(TAG, "updateOrientation (isMaximized = ${isMaximized}, isFullScreenPortraitAllowed = ${isFullScreenPortraitAllowed}, isAutoRotateAllowed = ${isAutoRotateAllowed}) resulted in requested orientation ${activity?.requestedOrientation}");
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
|
super.onConfigurationChanged(newConfig)
|
||||||
|
|
||||||
|
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE && !isFullscreen && Settings.instance.playback.isAutoRotate()) {
|
||||||
|
_viewDetail?.setFullscreen(true)
|
||||||
|
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT && isFullscreen && Settings.instance.playback.isAutoRotate() && !Settings.instance.playback.fullscreenPortrait) {
|
||||||
|
_viewDetail?.setFullscreen(false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onShownWithView(parameter: Any?, isBack: Boolean) {
|
override fun onShownWithView(parameter: Any?, isBack: Boolean) {
|
||||||
super.onShownWithView(parameter, isBack);
|
super.onShownWithView(parameter, isBack);
|
||||||
Logger.i(TAG, "onShownWithView parameter=$parameter")
|
Logger.i(TAG, "onShownWithView parameter=$parameter")
|
||||||
|
@ -99,49 +147,6 @@ class VideoDetailFragment : MainFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onOrientationChanged(orientation: OrientationManager.Orientation) {
|
|
||||||
super.onOrientationChanged(orientation);
|
|
||||||
|
|
||||||
if(!_isActive || state != State.MAXIMIZED)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var newOrientation = orientation;
|
|
||||||
val d = StateCasting.instance.activeDevice;
|
|
||||||
if (d != null && d.connectionState == CastConnectionState.CONNECTED) {
|
|
||||||
newOrientation = OrientationManager.Orientation.PORTRAIT;
|
|
||||||
} else if(StatePlayer.instance.rotationLock) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(Settings.instance.other.bypassRotationPrevention && orientation == OrientationManager.Orientation.PORTRAIT)
|
|
||||||
changeOrientation(OrientationManager.Orientation.PORTRAIT);
|
|
||||||
|
|
||||||
if(lastOrientation == newOrientation)
|
|
||||||
return;
|
|
||||||
|
|
||||||
activity?.let {
|
|
||||||
if (isFullscreen) {
|
|
||||||
if (Settings.instance.playback.fullscreenPortrait) {
|
|
||||||
changeOrientation(newOrientation);
|
|
||||||
} else {
|
|
||||||
if(newOrientation == OrientationManager.Orientation.REVERSED_LANDSCAPE && it.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
|
|
||||||
changeOrientation(OrientationManager.Orientation.REVERSED_LANDSCAPE);
|
|
||||||
else if(newOrientation == OrientationManager.Orientation.LANDSCAPE && it.requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE)
|
|
||||||
changeOrientation(OrientationManager.Orientation.LANDSCAPE);
|
|
||||||
else if(Settings.instance.playback.isAutoRotate() && (newOrientation == OrientationManager.Orientation.PORTRAIT || newOrientation == OrientationManager.Orientation.REVERSED_PORTRAIT)) {
|
|
||||||
_viewDetail?.setFullscreen(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if(Settings.instance.playback.isAutoRotate() && (lastOrientation == OrientationManager.Orientation.PORTRAIT || lastOrientation == OrientationManager.Orientation.REVERSED_PORTRAIT)) {
|
|
||||||
lastOrientation = newOrientation;
|
|
||||||
_viewDetail?.setFullscreen(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lastOrientation = newOrientation;
|
|
||||||
}
|
|
||||||
override fun onBackPressed(): Boolean {
|
override fun onBackPressed(): Boolean {
|
||||||
Logger.i(TAG, "onBackPressed")
|
Logger.i(TAG, "onBackPressed")
|
||||||
|
|
||||||
|
@ -155,6 +160,7 @@ class VideoDetailFragment : MainFragment {
|
||||||
closeVideoDetails();
|
closeVideoDetails();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onHide() {
|
override fun onHide() {
|
||||||
super.onHide();
|
super.onHide();
|
||||||
}
|
}
|
||||||
|
@ -266,7 +272,6 @@ class VideoDetailFragment : MainFragment {
|
||||||
override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) { }
|
override fun onTransitionTrigger(p0: MotionLayout?, p1: Int, p2: Boolean, p3: Float) { }
|
||||||
});
|
});
|
||||||
|
|
||||||
context
|
|
||||||
_view?.let {
|
_view?.let {
|
||||||
if (it.progress >= 0.5 && it.progress < 1.0)
|
if (it.progress >= 0.5 && it.progress < 1.0)
|
||||||
maximizeVideoDetail();
|
maximizeVideoDetail();
|
||||||
|
@ -274,9 +279,21 @@ class VideoDetailFragment : MainFragment {
|
||||||
minimizeVideoDetail();
|
minimizeVideoDetail();
|
||||||
}
|
}
|
||||||
|
|
||||||
_loadUrlOnCreate?.let { _viewDetail?.setVideo(it.url, it.timeSeconds, it.playWhenReady) };
|
_autoRotateChangeListener = AutoRotateChangeListener(requireContext(), Handler()) { _ ->
|
||||||
|
updateOrientation()
|
||||||
|
}
|
||||||
|
|
||||||
|
_loadUrlOnCreate?.let { _viewDetail?.setVideo(it.url, it.timeSeconds, it.playWhenReady) };
|
||||||
maximizeVideoDetail();
|
maximizeVideoDetail();
|
||||||
|
|
||||||
|
SettingsActivity.settingsActivityClosed.subscribe(this) {
|
||||||
|
updateOrientation()
|
||||||
|
}
|
||||||
|
|
||||||
|
StatePlayer.instance.onRotationLockChanged.subscribe(this) {
|
||||||
|
updateOrientation()
|
||||||
|
}
|
||||||
|
|
||||||
return _view!!;
|
return _view!!;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,11 +351,6 @@ class VideoDetailFragment : MainFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val realOrientation = if(activity is MainActivity) (activity as MainActivity).orientation else lastOrientation;
|
|
||||||
Logger.i(TAG, "Real orientation on boot ${realOrientation}, lastOrientation: ${lastOrientation}");
|
|
||||||
if(realOrientation != lastOrientation)
|
|
||||||
onOrientationChanged(realOrientation);
|
|
||||||
|
|
||||||
StateCasting.instance.onResume();
|
StateCasting.instance.onResume();
|
||||||
}
|
}
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
|
@ -380,6 +392,11 @@ class VideoDetailFragment : MainFragment {
|
||||||
override fun onDestroyMainView() {
|
override fun onDestroyMainView() {
|
||||||
super.onDestroyMainView();
|
super.onDestroyMainView();
|
||||||
Logger.v(TAG, "onDestroyMainView");
|
Logger.v(TAG, "onDestroyMainView");
|
||||||
|
_autoRotateChangeListener?.unregister()
|
||||||
|
|
||||||
|
SettingsActivity.settingsActivityClosed.remove(this)
|
||||||
|
StatePlayer.instance.onRotationLockChanged.remove(this)
|
||||||
|
|
||||||
_viewDetail?.let {
|
_viewDetail?.let {
|
||||||
_viewDetail = null;
|
_viewDetail = null;
|
||||||
it.onDestroy();
|
it.onDestroy();
|
||||||
|
@ -387,13 +404,6 @@ class VideoDetailFragment : MainFragment {
|
||||||
_view = null;
|
_view = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
StateCasting.instance.onActiveDeviceConnectionStateChanged.subscribe(this) { _, _ ->
|
|
||||||
onOrientationChanged(lastOrientation);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
|
|
||||||
|
@ -409,64 +419,38 @@ class VideoDetailFragment : MainFragment {
|
||||||
onMaximized.clear();
|
onMaximized.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun hideSystemUI() {
|
||||||
|
WindowCompat.setDecorFitsSystemWindows(requireActivity().window, false)
|
||||||
|
activity?.window?.insetsController?.let { controller ->
|
||||||
|
controller.hide(WindowInsets.Type.statusBars())
|
||||||
|
controller.hide(WindowInsets.Type.systemBars())
|
||||||
|
controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showSystemUI() {
|
||||||
|
WindowCompat.setDecorFitsSystemWindows(requireActivity().window, true)
|
||||||
|
activity?.window?.insetsController?.let { controller ->
|
||||||
|
controller.show(WindowInsets.Type.statusBars())
|
||||||
|
controller.show(WindowInsets.Type.systemBars())
|
||||||
|
controller.systemBarsBehavior = WindowInsetsController.BEHAVIOR_DEFAULT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun onFullscreenChanged(fullscreen : Boolean) {
|
private fun onFullscreenChanged(fullscreen : Boolean) {
|
||||||
activity?.let {
|
|
||||||
if (fullscreen) {
|
|
||||||
if (Settings.instance.playback.fullscreenPortrait) {
|
|
||||||
changeOrientation(lastOrientation);
|
|
||||||
} else {
|
|
||||||
var orient = lastOrientation;
|
|
||||||
if(orient == OrientationManager.Orientation.PORTRAIT || orient == OrientationManager.Orientation.REVERSED_PORTRAIT)
|
|
||||||
orient = OrientationManager.Orientation.LANDSCAPE;
|
|
||||||
changeOrientation(orient);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
changeOrientation(OrientationManager.Orientation.PORTRAIT);
|
|
||||||
}
|
|
||||||
isFullscreen = fullscreen;
|
isFullscreen = fullscreen;
|
||||||
onFullscreenChanged.emit(isFullscreen);
|
onFullscreenChanged.emit(isFullscreen);
|
||||||
|
|
||||||
|
if (isFullscreen) {
|
||||||
|
hideSystemUI()
|
||||||
|
} else {
|
||||||
|
showSystemUI()
|
||||||
|
}
|
||||||
|
|
||||||
|
updateOrientation();
|
||||||
_view?.allowMotion = !fullscreen;
|
_view?.allowMotion = !fullscreen;
|
||||||
}
|
}
|
||||||
private fun changeOrientation(orientation: OrientationManager.Orientation) {
|
|
||||||
Logger.i(TAG, "Orientation Change:" + orientation.name);
|
|
||||||
activity?.let {
|
|
||||||
when (orientation) {
|
|
||||||
OrientationManager.Orientation.LANDSCAPE -> {
|
|
||||||
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
|
|
||||||
_view?.allowMotion = false;
|
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(requireActivity().window, false)
|
|
||||||
WindowInsetsControllerCompat(it.window, _viewDetail!!).let { controller ->
|
|
||||||
controller.hide(WindowInsetsCompat.Type.statusBars());
|
|
||||||
controller.hide(WindowInsetsCompat.Type.systemBars());
|
|
||||||
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
OrientationManager.Orientation.REVERSED_LANDSCAPE -> {
|
|
||||||
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;
|
|
||||||
_view?.allowMotion = false;
|
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(requireActivity().window, false)
|
|
||||||
WindowInsetsControllerCompat(it.window, _viewDetail!!).let { controller ->
|
|
||||||
controller.hide(WindowInsetsCompat.Type.statusBars());
|
|
||||||
controller.hide(WindowInsetsCompat.Type.systemBars());
|
|
||||||
controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else -> {
|
|
||||||
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
|
|
||||||
_view?.allowMotion = true;
|
|
||||||
|
|
||||||
WindowCompat.setDecorFitsSystemWindows(it.window, true)
|
|
||||||
WindowInsetsControllerCompat(it.window, _viewDetail!!).let { controller ->
|
|
||||||
controller.show(WindowInsetsCompat.Type.statusBars());
|
|
||||||
controller.show(WindowInsetsCompat.Type.systemBars())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val TAG = "VideoDetailFragment";
|
private val TAG = "VideoDetailFragment";
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.futo.platformplayer.listeners
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.database.ContentObserver
|
||||||
|
import android.os.Handler
|
||||||
|
import android.provider.Settings
|
||||||
|
|
||||||
|
class AutoRotateObserver(handler: Handler, private val onChangeCallback: () -> Unit) : ContentObserver(handler) {
|
||||||
|
override fun onChange(selfChange: Boolean) {
|
||||||
|
super.onChange(selfChange)
|
||||||
|
onChangeCallback()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AutoRotateChangeListener(context: Context, handler: Handler, private val onAutoRotateChanged: (Boolean) -> Unit) {
|
||||||
|
|
||||||
|
private val contentResolver = context.contentResolver
|
||||||
|
private val autoRotateObserver = AutoRotateObserver(handler) {
|
||||||
|
val isAutoRotateEnabled = isAutoRotateEnabled()
|
||||||
|
onAutoRotateChanged(isAutoRotateEnabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
contentResolver.registerContentObserver(
|
||||||
|
Settings.System.getUriFor(Settings.System.ACCELEROMETER_ROTATION),
|
||||||
|
false,
|
||||||
|
autoRotateObserver
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun unregister() {
|
||||||
|
contentResolver.unregisterContentObserver(autoRotateObserver)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isAutoRotateEnabled(): Boolean {
|
||||||
|
return Settings.System.getInt(
|
||||||
|
contentResolver,
|
||||||
|
Settings.System.ACCELEROMETER_ROTATION,
|
||||||
|
0
|
||||||
|
) == 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,56 +0,0 @@
|
||||||
package com.futo.platformplayer.listeners
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.view.OrientationEventListener
|
|
||||||
import com.futo.platformplayer.Settings
|
|
||||||
import com.futo.platformplayer.constructs.Event1
|
|
||||||
import com.futo.platformplayer.logging.Logger
|
|
||||||
|
|
||||||
class OrientationManager : OrientationEventListener {
|
|
||||||
|
|
||||||
val onOrientationChanged = Event1<Orientation>();
|
|
||||||
|
|
||||||
var orientation : Orientation = Orientation.PORTRAIT;
|
|
||||||
|
|
||||||
constructor(context: Context) : super(context) { }
|
|
||||||
|
|
||||||
//TODO: Something weird is going on here
|
|
||||||
//TODO: Old implementation felt pretty good for me, but now with 0 deadzone still feels bad, even though code should be identical?
|
|
||||||
override fun onOrientationChanged(orientationAnglep: Int) {
|
|
||||||
if (orientationAnglep == -1) return
|
|
||||||
|
|
||||||
val deadZone = Settings.instance.playback.getAutoRotateDeadZoneDegrees()
|
|
||||||
val isInDeadZone = when (orientation) {
|
|
||||||
Orientation.PORTRAIT -> orientationAnglep in 0 until (60 - deadZone) || orientationAnglep in (300 + deadZone) .. 360
|
|
||||||
Orientation.REVERSED_LANDSCAPE -> orientationAnglep in (60 + deadZone) until (140 - deadZone)
|
|
||||||
Orientation.REVERSED_PORTRAIT -> orientationAnglep in (140 + deadZone) until (220 - deadZone)
|
|
||||||
Orientation.LANDSCAPE -> orientationAnglep in (220 + deadZone) until (300 - deadZone)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isInDeadZone) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
val newOrientation = when (orientationAnglep) {
|
|
||||||
in 60 until 140 -> Orientation.REVERSED_LANDSCAPE
|
|
||||||
in 140 until 220 -> Orientation.REVERSED_PORTRAIT
|
|
||||||
in 220 until 300 -> Orientation.LANDSCAPE
|
|
||||||
else -> Orientation.PORTRAIT
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.i("OrientationManager", "Orientation=$newOrientation orientationAnglep=$orientationAnglep");
|
|
||||||
|
|
||||||
if (newOrientation != orientation) {
|
|
||||||
orientation = newOrientation
|
|
||||||
onOrientationChanged.emit(newOrientation)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: Perhaps just use ActivityInfo orientations instead..
|
|
||||||
enum class Orientation {
|
|
||||||
PORTRAIT,
|
|
||||||
LANDSCAPE,
|
|
||||||
REVERSED_PORTRAIT,
|
|
||||||
REVERSED_LANDSCAPE
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -38,7 +38,13 @@ class StatePlayer {
|
||||||
private var _thumbnailExoPlayer : PlayerManager? = null;
|
private var _thumbnailExoPlayer : PlayerManager? = null;
|
||||||
|
|
||||||
//Video Status
|
//Video Status
|
||||||
var rotationLock : Boolean = false;
|
var rotationLock: Boolean = false
|
||||||
|
get() = field
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
onRotationLockChanged.emit(value)
|
||||||
|
}
|
||||||
|
val onRotationLockChanged = Event1<Boolean>()
|
||||||
var loopVideo : Boolean = false;
|
var loopVideo : Boolean = false;
|
||||||
|
|
||||||
val isPlaying: Boolean get() = _exoplayer?.player?.playWhenReady ?: false;
|
val isPlaying: Boolean get() = _exoplayer?.player?.playWhenReady ?: false;
|
||||||
|
|
|
@ -567,6 +567,8 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
|
|
||||||
@OptIn(UnstableApi::class)
|
@OptIn(UnstableApi::class)
|
||||||
fun setFullScreen(fullScreen: Boolean) {
|
fun setFullScreen(fullScreen: Boolean) {
|
||||||
|
updateRotateLock()
|
||||||
|
|
||||||
if (isFullScreen == fullScreen) {
|
if (isFullScreen == fullScreen) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -759,7 +761,7 @@ class FutoVideoPlayer : FutoVideoPlayerBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateRotateLock() {
|
fun updateRotateLock() {
|
||||||
if(!Settings.instance.playback.isAutoRotate()) {
|
if(Settings.instance.playback.autoRotate == 0) {
|
||||||
_control_rotate_lock.visibility = View.GONE;
|
_control_rotate_lock.visibility = View.GONE;
|
||||||
_control_rotate_lock_fullscreen.visibility = View.GONE;
|
_control_rotate_lock_fullscreen.visibility = View.GONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit c700081466038ee4782610feaa05cd4d34d024d8
|
Subproject commit 4d554e93882d29542cb05d2956f4b2484d7df27f
|
|
@ -1 +1 @@
|
||||||
Subproject commit 546d862342b10398d0737f0f2163691b611af8f2
|
Subproject commit 24f9e4456faf97fbbb866e1df2df9d94628ffcc6
|
|
@ -1 +1 @@
|
||||||
Subproject commit c700081466038ee4782610feaa05cd4d34d024d8
|
Subproject commit 4d554e93882d29542cb05d2956f4b2484d7df27f
|
|
@ -1 +1 @@
|
||||||
Subproject commit 546d862342b10398d0737f0f2163691b611af8f2
|
Subproject commit 24f9e4456faf97fbbb866e1df2df9d94628ffcc6
|
Loading…
Add table
Add a link
Reference in a new issue