diff --git a/app/src/main/java/com/futo/platformplayer/Settings.kt b/app/src/main/java/com/futo/platformplayer/Settings.kt index 256d4ccf..ec425e45 100644 --- a/app/src/main/java/com/futo/platformplayer/Settings.kt +++ b/app/src/main/java/com/futo/platformplayer/Settings.kt @@ -6,28 +6,41 @@ import android.content.Intent import android.net.Uri import android.webkit.CookieManager import androidx.lifecycle.lifecycleScope -import com.futo.platformplayer.activities.* +import com.futo.platformplayer.activities.MainActivity +import com.futo.platformplayer.activities.ManageTabsActivity +import com.futo.platformplayer.activities.PolycentricHomeActivity +import com.futo.platformplayer.activities.PolycentricProfileActivity +import com.futo.platformplayer.activities.SettingsActivity import com.futo.platformplayer.api.http.ManagedHttpClient import com.futo.platformplayer.constructs.Event0 import com.futo.platformplayer.fragment.mainactivity.bottombar.MenuBottomBarFragment import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.serializers.FlexibleBooleanSerializer import com.futo.platformplayer.serializers.OffsetDateTimeSerializer -import com.futo.platformplayer.states.* +import com.futo.platformplayer.states.StateAnnouncement +import com.futo.platformplayer.states.StateApp +import com.futo.platformplayer.states.StateBackup +import com.futo.platformplayer.states.StateCache +import com.futo.platformplayer.states.StateMeta +import com.futo.platformplayer.states.StatePayment +import com.futo.platformplayer.states.StatePolycentric +import com.futo.platformplayer.states.StateUpdate import com.futo.platformplayer.stores.FragmentedStorage import com.futo.platformplayer.stores.FragmentedStorageFileJson import com.futo.platformplayer.views.FeedStyle import com.futo.platformplayer.views.fields.DropdownFieldOptionsId -import com.futo.platformplayer.views.fields.FormField import com.futo.platformplayer.views.fields.FieldForm +import com.futo.platformplayer.views.fields.FormField import com.futo.platformplayer.views.fields.FormFieldButton import com.futo.platformplayer.views.fields.FormFieldWarning import com.futo.platformplayer.views.overlays.slideup.SlideUpMenuItem import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import kotlinx.serialization.* -import kotlinx.serialization.json.* +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json import java.io.File import java.time.OffsetDateTime @@ -407,6 +420,9 @@ class Settings : FragmentedStorageFileJson() { @FormField(R.string.restart_after_connectivity_loss, FieldForm.DROPDOWN, R.string.restart_playback_when_gaining_connectivity_after_a_loss, 12) @DropdownFieldOptionsId(R.array.restart_playback_after_loss) var restartPlaybackAfterConnectivityLoss: Int = 1; + + @FormField(R.string.full_screen_portrait, FieldForm.TOGGLE, R.string.allow_full_screen_portrait, 13) + var fullscreenPortrait: Boolean = false; } @FormField(R.string.comments, "group", R.string.comments_description, 6) diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt index 4f1b087e..e0aa0236 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailFragment.kt @@ -108,17 +108,22 @@ class VideoDetailFragment : MainFragment { if(Settings.instance.other.bypassRotationPrevention && orientation == OrientationManager.Orientation.PORTRAIT) changeOrientation(OrientationManager.Orientation.PORTRAIT); + if(lastOrientation == newOrientation) return; activity?.let { if (isFullscreen) { - 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); + 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 { @@ -403,10 +408,14 @@ class VideoDetailFragment : MainFragment { private fun onFullscreenChanged(fullscreen : Boolean) { activity?.let { if (fullscreen) { - var orient = lastOrientation; - if(orient == OrientationManager.Orientation.PORTRAIT || orient == OrientationManager.Orientation.REVERSED_PORTRAIT) - orient = OrientationManager.Orientation.LANDSCAPE; - changeOrientation(orient); + 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); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 893729c3..beca95c4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -342,6 +342,8 @@ Give feedback on the application Info Live Chat Webview + Fullscreen portrait + Allow fullscreen portrait Switch to Audio in Background Optimize bandwidth usage by switching to audio-only stream in background if available, may cause stutter Preview Feed Items