Browse Source

Add a video control setting to disable the orientation button

Fixes #3169
merge-requests/2174/head
Nicolas Pomepuy 1 year ago
committed by Duncan McNamara
parent
commit
6b86cbca60
  1. 1
      application/resources/src/main/res/values/strings.xml
  2. 2
      application/tools/src/main/java/org/videolan/tools/Settings.kt
  3. 14
      application/vlc-android/res/layout/player_orientation.xml
  4. 14
      application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOrientationDelegate.kt
  5. 39
      application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt

1
application/resources/src/main/res/values/strings.xml

@ -385,6 +385,7 @@
<string name="save_brightness_title">Save brightness level</string>
<string name="save_audiodelay_summary">Save individual audio delay for each video</string>
<string name="save_audiodelay_title">Save audio delay</string>
<string name="video_show_orientation_button">Show orientation button</string>
<string name="enable_brightness_gesture_title">Brightness gesture</string>
<string name="enable_brightness_gesture_summary">Control brightness by gesture during video playback</string>
<string name="enable_volume_gesture_title">Volume gesture</string>

2
application/tools/src/main/java/org/videolan/tools/Settings.kt

@ -10,6 +10,7 @@ import androidx.core.content.edit
import androidx.core.content.getSystemService
import androidx.lifecycle.MutableLiveData
import androidx.preference.PreferenceManager
import org.videolan.tools.Settings.audioControlsChangeListener
import org.videolan.tools.Settings.init
object Settings : SingletonHolder<SharedPreferences, Context>({ init(it.applicationContext) }) {
@ -183,6 +184,7 @@ const val SAVE_BRIGHTNESS = "save_brightness"
const val BRIGHTNESS_VALUE = "brightness_value"
const val POPUP_KEEPSCREEN = "popup_keepscreen"
const val POPUP_FORCE_LEGACY = "popup_force_legacy"
const val SHOW_ORIENTATION_BUTTON = "show_orientation_button"
const val RESTORE_BACKGROUND_VIDEO = "restore_background_video"
const val LOCK_USE_SENSOR = "lock_use_sensor"
const val DISPLAY_UNDER_NOTCH = "display_under_notch"

14
application/vlc-android/res/layout/player_orientation.xml

@ -45,6 +45,18 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/close" />
<CheckBox
android:id="@+id/show_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:paddingLeft="8dp"
android:text="@string/video_show_orientation_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/orientation_lock_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/orientation_list"
@ -56,7 +68,7 @@
android:paddingEnd="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/orientation_lock_title" />
app:layout_constraintTop_toBottomOf="@+id/show_button" />
</androidx.constraintlayout.widget.ConstraintLayout>

14
application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOrientationDelegate.kt

@ -28,13 +28,16 @@ import android.content.pm.ActivityInfo
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.CheckBox
import android.widget.FrameLayout
import androidx.annotation.StringRes
import androidx.appcompat.widget.ViewStubCompat
import androidx.core.content.edit
import androidx.core.widget.NestedScrollView
import androidx.leanback.widget.BrowseFrameLayout
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.videolan.tools.SHOW_ORIENTATION_BUTTON
import org.videolan.tools.Settings
import org.videolan.tools.setGone
import org.videolan.tools.setVisible
@ -42,6 +45,7 @@ import org.videolan.vlc.R
import org.videolan.vlc.databinding.VideoScaleItemBinding
import org.videolan.vlc.gui.helpers.MARQUEE_ACTION
import org.videolan.vlc.gui.helpers.enableMarqueeEffect
import org.videolan.vlc.gui.video.OrientationMode.values
import org.videolan.vlc.util.LifecycleAwareScheduler
class VideoPlayerOrientationDelegate(private val player: VideoPlayerActivity) {
@ -51,6 +55,7 @@ class VideoPlayerOrientationDelegate(private val player: VideoPlayerActivity) {
private lateinit var scrollView: NestedScrollView
private lateinit var orientationList: RecyclerView
private lateinit var orientationAdapter: OrientationAdapter
private lateinit var showOrientationButton: CheckBox
/**
* Check if the orientation overlay is currently shown
@ -74,11 +79,20 @@ class VideoPlayerOrientationDelegate(private val player: VideoPlayerActivity) {
}
orientationList = orientationMainView.findViewById(R.id.orientation_list)
scrollView = orientationMainView.findViewById(R.id.orientation_scrollview)
showOrientationButton = orientationMainView.findViewById(R.id.show_button)
orientationMainView.findViewById<View>(R.id.close).setOnClickListener {
hideOrientationOverlay()
}
val settings = Settings.getInstance(player)
showOrientationButton.isChecked = settings.getBoolean(SHOW_ORIENTATION_BUTTON, true)
showOrientationButton.setOnCheckedChangeListener { _, isChecked ->
settings.edit { putBoolean(SHOW_ORIENTATION_BUTTON, isChecked) }
player.overlayDelegate.updateOrientationIcon()
}
orientationList.layoutManager = LinearLayoutManager(player)
orientationAdapter = OrientationAdapter(if (player.orientationMode.locked) player.orientationMode.orientation else -1)
orientationAdapter.setOnSizeSelectedListener { orientation ->

39
application/vlc-android/src/org/videolan/vlc/gui/video/VideoPlayerOverlayDelegate.kt

@ -65,24 +65,51 @@ import org.videolan.libvlc.util.AndroidUtil
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.medialibrary.media.MediaWrapperImpl
import org.videolan.resources.AndroidDevices
import org.videolan.tools.*
import org.videolan.vlc.*
import org.videolan.tools.ALLOW_FOLD_AUTO_LAYOUT
import org.videolan.tools.ENABLE_SEEK_BUTTONS
import org.videolan.tools.HINGE_ON_RIGHT
import org.videolan.tools.KEY_PLAYBACK_SPEED_VIDEO_GLOBAL
import org.videolan.tools.SCREENSHOT_MODE
import org.videolan.tools.SHOW_ORIENTATION_BUTTON
import org.videolan.tools.Settings
import org.videolan.tools.VIDEO_TRANSITION_SHOW
import org.videolan.tools.dp
import org.videolan.tools.formatRateString
import org.videolan.tools.putSingle
import org.videolan.tools.runIO
import org.videolan.tools.setGone
import org.videolan.tools.setInvisible
import org.videolan.tools.setVisible
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.R
import org.videolan.vlc.RendererDelegate
import org.videolan.vlc.VlcMigrationHelper
import org.videolan.vlc.databinding.PlayerHudBinding
import org.videolan.vlc.databinding.PlayerHudRightBinding
import org.videolan.vlc.gui.audio.PlaylistAdapter
import org.videolan.vlc.gui.browser.FilePickerActivity
import org.videolan.vlc.gui.browser.KEY_MEDIA
import org.videolan.vlc.gui.dialogs.VideoTracksDialog
import org.videolan.vlc.gui.helpers.*
import org.videolan.vlc.gui.helpers.BookmarkListDelegate
import org.videolan.vlc.gui.helpers.OnRepeatListenerKey
import org.videolan.vlc.gui.helpers.SwipeDragItemTouchHelperCallback
import org.videolan.vlc.gui.helpers.TalkbackUtil
import org.videolan.vlc.gui.helpers.UiTools
import org.videolan.vlc.gui.helpers.UiTools.showVideoTrack
import org.videolan.vlc.gui.helpers.hf.checkPIN
import org.videolan.vlc.gui.view.PlayerProgress
import org.videolan.vlc.isVLC4
import org.videolan.vlc.manageAbRepeatStep
import org.videolan.vlc.media.MediaUtils
import org.videolan.vlc.util.*
import org.videolan.vlc.util.FileUtils
import org.videolan.vlc.util.getScreenWidth
import org.videolan.vlc.util.isSchemeFile
import org.videolan.vlc.util.isSchemeNetwork
import org.videolan.vlc.util.isTalkbackIsEnabled
import org.videolan.vlc.viewmodels.PlaylistModel
import java.text.DateFormat
import java.util.*
import java.util.Calendar
import java.util.Locale
class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
@ -728,7 +755,7 @@ class VideoPlayerOverlayDelegate (private val player: VideoPlayerActivity) {
hudBinding.orientationToggle.setImageDrawable(ContextCompat.getDrawable(player, drawable))
}
if (::hudRightBinding.isInitialized) {
if (player.orientationMode.locked) {
if (player.orientationMode.locked && Settings.getInstance(player).getBoolean(SHOW_ORIENTATION_BUTTON, true)) {
val drawable = if (player.orientationMode.orientation == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE || player.orientationMode.orientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE || player.orientationMode.orientation == ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE) {
R.drawable.ic_player_lock_landscape
} else {

Loading…
Cancel
Save