feat: preference to force landscape as orientation

This commit is contained in:
Bnyro 2023-08-06 12:39:52 +02:00
parent 179c283b8e
commit 1e22fab499
11 changed files with 58 additions and 43 deletions

View File

@ -17,7 +17,7 @@ object PreferenceKeys {
*/ */
const val LANGUAGE = "language" const val LANGUAGE = "language"
const val REGION = "region" const val REGION = "region"
const val AUTO_ROTATION = "auto_rotation" const val ORIENTATION = "orientation"
const val SLEEP_TIMER = "sleep_timer_toggle" const val SLEEP_TIMER = "sleep_timer_toggle"
const val SLEEP_TIMER_DELAY = "sleep_timer_delay" const val SLEEP_TIMER_DELAY = "sleep_timer_delay"
const val SAVE_FEED = "save_feed" const val SAVE_FEED = "save_feed"

View File

@ -114,7 +114,7 @@ object PlayerHelper {
} }
} }
val autoRotationEnabled: Boolean val autoFullscreenEnabled: Boolean
get() = PreferenceHelper.getBoolean( get() = PreferenceHelper.getBoolean(
PreferenceKeys.AUTO_FULLSCREEN, PreferenceKeys.AUTO_FULLSCREEN,
false false

View File

@ -60,13 +60,6 @@ class MainActivity : BaseActivity() {
private var savedSearchQuery: String? = null private var savedSearchQuery: String? = null
val autoRotationEnabled by lazy {
PreferenceHelper.getBoolean(
PreferenceKeys.AUTO_ROTATION,
resources.getBoolean(R.bool.config_default_auto_rotation_pref)
)
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -230,17 +223,6 @@ class MainActivity : BaseActivity() {
} }
} }
/**
* Rotate according to the preference
*/
fun requestOrientationChange() {
requestedOrientation = if (autoRotationEnabled) {
ActivityInfo.SCREEN_ORIENTATION_USER
} else {
ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
}
}
/** /**
* Initialize the notification badge showing the amount of new videos * Initialize the notification badge showing the amount of new videos
*/ */
@ -501,11 +483,7 @@ class MainActivity : BaseActivity() {
} }
playerViewModel.isFullscreen.value = false playerViewModel.isFullscreen.value = false
requestedOrientation = if (autoRotationEnabled) { requestOrientationChange()
ActivityInfo.SCREEN_ORIENTATION_USER
} else {
ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
}
} }
@SuppressLint("SwitchIntDef") @SuppressLint("SwitchIntDef")

View File

@ -1,14 +1,31 @@
package com.github.libretube.ui.base package com.github.libretube.ui.base
import android.content.pm.ActivityInfo
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.github.libretube.R
import com.github.libretube.constants.PreferenceKeys
import com.github.libretube.helpers.LocaleHelper import com.github.libretube.helpers.LocaleHelper
import com.github.libretube.helpers.PreferenceHelper
import com.github.libretube.helpers.ThemeHelper import com.github.libretube.helpers.ThemeHelper
/** /**
* Activity that applies the LibreTube theme and the in-app language * Activity that applies the LibreTube theme and the in-app language
*/ */
open class BaseActivity : AppCompatActivity() { open class BaseActivity : AppCompatActivity() {
private val screenOrientationPref by lazy {
val orientationPref = PreferenceHelper.getString(
PreferenceKeys.ORIENTATION,
resources.getString(R.string.config_default_orientation_pref)
)
when (orientationPref) {
"portrait" -> ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
"landscape" -> ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE
"auto" -> ActivityInfo.SCREEN_ORIENTATION_USER
else -> throw IllegalArgumentException()
}
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
// set the app theme (e.g. Material You) // set the app theme (e.g. Material You)
ThemeHelper.updateTheme(this) ThemeHelper.updateTheme(this)
@ -16,6 +33,15 @@ open class BaseActivity : AppCompatActivity() {
// set the apps language // set the apps language
LocaleHelper.updateLanguage(this) LocaleHelper.updateLanguage(this)
requestOrientationChange()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
} }
/**
* Rotate according to the preference
*/
fun requestOrientationChange() {
requestedOrientation = screenOrientationPref
}
} }

View File

@ -415,7 +415,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
// FullScreen button trigger // FullScreen button trigger
// hide fullscreen button if autorotation enabled // hide fullscreen button if autorotation enabled
playerBinding.fullscreen.isInvisible = PlayerHelper.autoRotationEnabled playerBinding.fullscreen.isInvisible = PlayerHelper.autoFullscreenEnabled
playerBinding.fullscreen.setOnClickListener { playerBinding.fullscreen.setOnClickListener {
// hide player controller // hide player controller
binding.player.hideController() binding.player.hideController()
@ -513,7 +513,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
* Expected behavior: Portrait for shorts, Landscape for normal videos * Expected behavior: Portrait for shorts, Landscape for normal videos
*/ */
private fun updateFullscreenOrientation() { private fun updateFullscreenOrientation() {
if (!PlayerHelper.autoRotationEnabled) { if (!PlayerHelper.autoFullscreenEnabled) {
val height = streams.videoStreams.firstOrNull()?.height ?: exoPlayer.videoSize.height val height = streams.videoStreams.firstOrNull()?.height ?: exoPlayer.videoSize.height
val width = streams.videoStreams.firstOrNull()?.width ?: exoPlayer.videoSize.width val width = streams.videoStreams.firstOrNull()?.width ?: exoPlayer.videoSize.width
@ -563,7 +563,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
playerBinding.fullscreen.setImageResource(R.drawable.ic_fullscreen) playerBinding.fullscreen.setImageResource(R.drawable.ic_fullscreen)
playerBinding.exoTitle.isInvisible = true playerBinding.exoTitle.isInvisible = true
if (!PlayerHelper.autoRotationEnabled) { if (!PlayerHelper.autoFullscreenEnabled) {
// switch back to portrait mode if autorotation disabled // switch back to portrait mode if autorotation disabled
mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
} }
@ -641,12 +641,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
nowPlayingNotification.destroySelfAndPlayer() nowPlayingNotification.destroySelfAndPlayer()
activity?.requestedOrientation = (context as MainActivity).requestOrientationChange()
if ((activity as MainActivity).autoRotationEnabled) {
ActivityInfo.SCREEN_ORIENTATION_USER
} else {
ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT
}
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
} }
@ -1400,7 +1395,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
*/ */
@SuppressLint("SourceLockedOrientationActivity") @SuppressLint("SourceLockedOrientationActivity")
private fun changeOrientationMode() { private fun changeOrientationMode() {
if (PlayerHelper.autoRotationEnabled) { if (PlayerHelper.autoFullscreenEnabled) {
// enable auto rotation // enable auto rotation
mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR mainActivity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
onConfigurationChanged(resources.configuration) onConfigurationChanged(resources.configuration)
@ -1612,7 +1607,7 @@ class PlayerFragment : Fragment(), OnlinePlayerOptions {
override fun onConfigurationChanged(newConfig: Configuration) { override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig) super.onConfigurationChanged(newConfig)
if (!PlayerHelper.autoRotationEnabled || _binding == null || if (!PlayerHelper.autoFullscreenEnabled || _binding == null ||
// If in PiP mode, orientation is given as landscape. // If in PiP mode, orientation is given as landscape.
PictureInPictureCompat.isInPictureInPictureMode(requireActivity()) PictureInPictureCompat.isInPictureInPictureMode(requireActivity())
) { ) {

View File

@ -27,7 +27,7 @@ class GeneralSettings : BasePreferenceFragment() {
val region = findPreference<ListPreference>("region") val region = findPreference<ListPreference>("region")
region?.let { setupRegionPref(it) } region?.let { setupRegionPref(it) }
val autoRotation = findPreference<SwitchPreferenceCompat>(PreferenceKeys.AUTO_ROTATION) val autoRotation = findPreference<ListPreference>(PreferenceKeys.ORIENTATION)
autoRotation?.setOnPreferenceChangeListener { _, _ -> autoRotation?.setOnPreferenceChangeListener { _, _ ->
RequireRestartDialog().show(childFragmentManager, RequireRestartDialog::class.java.name) RequireRestartDialog().show(childFragmentManager, RequireRestartDialog::class.java.name)
true true

View File

@ -1,3 +1,3 @@
<resources> <resources>
<bool name="config_default_auto_rotation_pref">true</bool> <string name="config_default_orientation_pref" translatable="false">landscape</string>
</resources> </resources>

View File

@ -455,4 +455,16 @@
<item>automatic</item> <item>automatic</item>
</string-array> </string-array>
<string-array name="orientation">
<item>@string/portrait</item>
<item>@string/landscape</item>
<item>@string/auto_rotation</item>
</string-array>
<string-array name="orientation_values">
<item>portrait</item>
<item>landscape</item>
<item>auto</item>
</string-array>
</resources> </resources>

View File

@ -1,3 +1,3 @@
<resources> <resources>
<bool name="config_default_auto_rotation_pref">false</bool> <string name="config_default_orientation_pref" translatable="false">portrait</string>
</resources> </resources>

View File

@ -461,6 +461,7 @@
<string name="unknown_or_no_audio">unknown or no audio</string> <string name="unknown_or_no_audio">unknown or no audio</string>
<string name="continue_watching">Continue watching</string> <string name="continue_watching">Continue watching</string>
<string name="no_chapter">No chapter</string> <string name="no_chapter">No chapter</string>
<string name="screen_orientation">Screen orientation</string>
<!-- Notification channel strings --> <!-- Notification channel strings -->
<string name="download_channel_name">Download Service</string> <string name="download_channel_name">Download Service</string>

View File

@ -30,11 +30,14 @@
android:title="@string/audio_only_mode" android:title="@string/audio_only_mode"
app:key="audio_only_mode" /> app:key="audio_only_mode" />
<SwitchPreferenceCompat <ListPreference
android:defaultValue="@bool/config_default_auto_rotation_pref" android:defaultValue="@string/config_default_orientation_pref"
android:entries="@array/orientation"
android:entryValues="@array/orientation_values"
android:icon="@drawable/ic_screen_rotation" android:icon="@drawable/ic_screen_rotation"
app:key="auto_rotation" app:key="orientation"
app:title="@string/auto_rotation" /> app:title="@string/screen_orientation"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat <SwitchPreferenceCompat
android:defaultValue="true" android:defaultValue="true"