Split gesture option into volume & brightness and zoom (#121)

This commit is contained in:
Jarne Demeulemeester 2022-06-11 13:45:26 +02:00 committed by GitHub
parent c1740c1b68
commit 7cdc74d2e7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 83 additions and 32 deletions

View file

@ -11,6 +11,8 @@ constructor(
private val sharedPreferences: SharedPreferences private val sharedPreferences: SharedPreferences
) { ) {
val playerGestures = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true) val playerGestures = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true)
val playerGesturesVB = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_VB, true)
val playerGesturesZoom = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES_ZOOM, true)
val playerBrightnessRemember = val playerBrightnessRemember =
sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false) sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false)

View file

@ -9,6 +9,8 @@ object Constants {
// pref // pref
const val PREF_PLAYER_GESTURES = "pref_player_gestures" const val PREF_PLAYER_GESTURES = "pref_player_gestures"
const val PREF_PLAYER_GESTURES_VB = "pref_player_gestures_vb"
const val PREF_PLAYER_GESTURES_ZOOM = "pref_player_gestures_zoom"
const val PREF_PLAYER_BRIGHTNESS_REMEMBER = "pref_player_brightness_remember" const val PREF_PLAYER_BRIGHTNESS_REMEMBER = "pref_player_brightness_remember"
const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness" const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness"
const val PREF_IMAGE_CACHE = "pref_image_cache" const val PREF_IMAGE_CACHE = "pref_image_cache"

View file

@ -20,8 +20,6 @@ class PlayerGestureHelper(
private val playerView: StyledPlayerView, private val playerView: StyledPlayerView,
private val audioManager: AudioManager private val audioManager: AudioManager
) { ) {
/** /**
* Tracks whether video content should fill the screen, cutting off unwanted content on the sides. * Tracks whether video content should fill the screen, cutting off unwanted content on the sides.
* Useful on wide-screen phones to remove black bars from some movies. * Useful on wide-screen phones to remove black bars from some movies.
@ -37,12 +35,17 @@ class PlayerGestureHelper(
private var swipeGestureValueTrackerVolume = -1f private var swipeGestureValueTrackerVolume = -1f
private var swipeGestureValueTrackerBrightness = -1f private var swipeGestureValueTrackerBrightness = -1f
private val gestureDetector = GestureDetector(playerView.context, object : GestureDetector.SimpleOnGestureListener() { private val tapGestureDetector = GestureDetector(playerView.context, object : GestureDetector.SimpleOnGestureListener() {
override fun onDoubleTap(e: MotionEvent): Boolean { override fun onSingleTapUp(e: MotionEvent?): Boolean {
playerView.apply {
if (!isControllerFullyVisible) showController() else hideController()
}
return true return true
} }
})
override fun onSingleTapUp(e: MotionEvent?): Boolean { private val gestureDetector = GestureDetector(playerView.context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent): Boolean {
playerView.apply { playerView.apply {
if (!isControllerFullyVisible) showController() else hideController() if (!isControllerFullyVisible) showController() else hideController()
} }
@ -142,33 +145,63 @@ class PlayerGestureHelper(
playerView.resizeMode = if (enabled) AspectRatioFrameLayout.RESIZE_MODE_ZOOM else AspectRatioFrameLayout.RESIZE_MODE_FIT playerView.resizeMode = if (enabled) AspectRatioFrameLayout.RESIZE_MODE_ZOOM else AspectRatioFrameLayout.RESIZE_MODE_FIT
} }
private fun releaseAction(event: MotionEvent) {
if (event.action == MotionEvent.ACTION_UP) {
activity.binding.gestureVolumeLayout.apply {
if (visibility == View.VISIBLE) {
removeCallbacks(hideGestureVolumeIndicatorOverlayAction)
postDelayed(hideGestureVolumeIndicatorOverlayAction, 1000)
}
}
activity.binding.gestureBrightnessLayout.apply {
if (visibility == View.VISIBLE) {
removeCallbacks(hideGestureBrightnessIndicatorOverlayAction)
postDelayed(hideGestureBrightnessIndicatorOverlayAction, 1000)
}
}
}
}
init { init {
if (appPreferences.playerBrightnessRemember) { if (appPreferences.playerBrightnessRemember) {
activity.window.attributes.screenBrightness = appPreferences.playerBrightness activity.window.attributes.screenBrightness = appPreferences.playerBrightness
} }
@Suppress("ClickableViewAccessibility")
playerView.setOnTouchListener { _, event -> if (appPreferences.playerGesturesVB && !appPreferences.playerGesturesZoom) {
if (playerView.useController) { @Suppress("ClickableViewAccessibility")
when (event.pointerCount) { playerView.setOnTouchListener { _, event ->
1 -> gestureDetector.onTouchEvent(event) if (playerView.useController) {
2 -> zoomGestureDetector.onTouchEvent(event) if (event.pointerCount == 1) {
} gestureDetector.onTouchEvent(event)
}
if(event.action == MotionEvent.ACTION_UP) {
activity.binding.gestureVolumeLayout.apply {
if (visibility == View.VISIBLE) {
removeCallbacks(hideGestureVolumeIndicatorOverlayAction)
postDelayed(hideGestureVolumeIndicatorOverlayAction, 1000)
} }
} }
activity.binding.gestureBrightnessLayout.apply { releaseAction(event)
if (visibility == View.VISIBLE) { true
removeCallbacks(hideGestureBrightnessIndicatorOverlayAction) }
postDelayed(hideGestureBrightnessIndicatorOverlayAction, 1000) } else if (!appPreferences.playerGesturesVB && appPreferences.playerGesturesZoom) {
@Suppress("ClickableViewAccessibility")
playerView.setOnTouchListener { _, event ->
if (playerView.useController) {
when (event.pointerCount) {
1 -> tapGestureDetector.onTouchEvent(event)
2 -> zoomGestureDetector.onTouchEvent(event)
} }
} }
releaseAction(event)
true
}
} else if (appPreferences.playerGesturesVB && appPreferences.playerGesturesZoom) {
@Suppress("ClickableViewAccessibility")
playerView.setOnTouchListener { _, event ->
if (playerView.useController) {
when (event.pointerCount) {
1 -> gestureDetector.onTouchEvent(event)
2 -> zoomGestureDetector.onTouchEvent(event)
}
}
releaseAction(event)
true
} }
true
} }
} }
} }

View file

@ -122,5 +122,5 @@
<string name="gestures">Gestos</string> <string name="gestures">Gestos</string>
<string name="player_brightness_remember">Recordar el nivel de brillo</string> <string name="player_brightness_remember">Recordar el nivel de brillo</string>
<string name="player_gestures">Gestos del reproductor</string> <string name="player_gestures">Gestos del reproductor</string>
<string name="player_gestures_summary">Desliza hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string> <string name="player_gestures_vb_summary">Desliza hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string>
</resources> </resources>

View file

@ -121,5 +121,5 @@
<string name="display_extended_title_summary">Zeige erweiterten Episodentitel inklusiver der Staffel und Episodeninformationen (SXX:EXX - Episodenname).</string> <string name="display_extended_title_summary">Zeige erweiterten Episodentitel inklusiver der Staffel und Episodeninformationen (SXX:EXX - Episodenname).</string>
<string name="app_description">Native Drittanbieter Jellyfin App</string> <string name="app_description">Native Drittanbieter Jellyfin App</string>
<string name="remove_server_dialog_text">Sicher, dass du den Server %1$s entfernen willst</string> <string name="remove_server_dialog_text">Sicher, dass du den Server %1$s entfernen willst</string>
<string name="player_gestures_summary">Wische auf der rechten Seite des Bildschirms hoch und runter, um die Lautstärke anzupassen und auf der linken Seite, um gleiches mit der Helligkeit zu machen</string> <string name="player_gestures_vb_summary">Wische auf der rechten Seite des Bildschirms hoch und runter, um die Lautstärke anzupassen und auf der linken Seite, um gleiches mit der Helligkeit zu machen</string>
</resources> </resources>

View file

@ -122,5 +122,5 @@
<string name="player_gestures">Gestos del reproductor</string> <string name="player_gestures">Gestos del reproductor</string>
<string name="player_brightness_remember">Recordar el nivel de brillo</string> <string name="player_brightness_remember">Recordar el nivel de brillo</string>
<string name="gestures">Gestos</string> <string name="gestures">Gestos</string>
<string name="player_gestures_summary">Desliza hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string> <string name="player_gestures_vb_summary">Desliza hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string>
</resources> </resources>

View file

@ -122,5 +122,5 @@
<string name="gestures">Gestos</string> <string name="gestures">Gestos</string>
<string name="player_gestures">Gestos del reproductor</string> <string name="player_gestures">Gestos del reproductor</string>
<string name="player_brightness_remember">Recordar nivel de brillo</string> <string name="player_brightness_remember">Recordar nivel de brillo</string>
<string name="player_gestures_summary">Deslice hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string> <string name="player_gestures_vb_summary">Deslice hacia arriba y hacia abajo en el lado derecho de la pantalla para cambiar el volumen y en el lado izquierdo para cambiar el brillo</string>
</resources> </resources>

View file

@ -107,7 +107,7 @@
<string name="image_description_backdrop">Toile de fond %1$s</string> <string name="image_description_backdrop">Toile de fond %1$s</string>
<string name="gestures">Gestes</string> <string name="gestures">Gestes</string>
<string name="player_gestures">Gestes du lecteur</string> <string name="player_gestures">Gestes du lecteur</string>
<string name="player_gestures_summary">Glissez vers le haut ou vers le bas sur le côté droit de l\'écran pour modifier le volume et sur le côté gauche de l\'écran pour modifier la luminosité</string> <string name="player_gestures_vb_summary">Glissez vers le haut ou vers le bas sur le côté droit de l\'écran pour modifier le volume et sur le côté gauche de l\'écran pour modifier la luminosité</string>
<string name="select_video_version_title">Choisissez une version</string> <string name="select_video_version_title">Choisissez une version</string>
<string name="display_extended_title_summary">Afficher le titre étendu inclut la numérotation de la saison et de l\'épisode (SXX:EXX - NomEpisode).</string> <string name="display_extended_title_summary">Afficher le titre étendu inclut la numérotation de la saison et de l\'épisode (SXX:EXX - NomEpisode).</string>
<string name="add_server_empty_error">Adresse du serveur vide</string> <string name="add_server_empty_error">Adresse du serveur vide</string>

View file

@ -7,7 +7,7 @@
<string name="select_a_version">Wybierz wersję</string> <string name="select_a_version">Wybierz wersję</string>
<string name="download_mobile_data">Pobieraj używając danych komórkowych</string> <string name="download_mobile_data">Pobieraj używając danych komórkowych</string>
<string name="mpv_player_summary">Używaj eksperymentalnego odtwarzacza MPV do odtwarzania wideo. MPV wspiera więcej kodeków wideo, audio i napisów.</string> <string name="mpv_player_summary">Używaj eksperymentalnego odtwarzacza MPV do odtwarzania wideo. MPV wspiera więcej kodeków wideo, audio i napisów.</string>
<string name="player_gestures_summary">Przesuń w górę lub w dół po prawej stronie ekrany by zmienić głośność, po lewej stronie by zmienić jasność</string> <string name="player_gestures_vb_summary">Przesuń w górę lub w dół po prawej stronie ekrany by zmienić głośność, po lewej stronie by zmienić jasność</string>
<string name="display_extended_title_summary">Wyświetlaj rozszerzoną nazwę odcinka, razem z informacją o sezonie i odcinku (SXX:EXX - NazwaOdcinka).</string> <string name="display_extended_title_summary">Wyświetlaj rozszerzoną nazwę odcinka, razem z informacją o sezonie i odcinku (SXX:EXX - NazwaOdcinka).</string>
<string name="add_server_error_slow">Zbyt wolna odpowiedź serwera: %1$s</string> <string name="add_server_error_slow">Zbyt wolna odpowiedź serwera: %1$s</string>
<string name="add_server_error_already_added">Serwer już dodany</string> <string name="add_server_error_already_added">Serwer już dodany</string>

View file

@ -107,7 +107,7 @@
<string name="app_description">第三方原生Jellyfin app</string> <string name="app_description">第三方原生Jellyfin app</string>
<string name="login_error_wrong_username_password">用户名或密码错误</string> <string name="login_error_wrong_username_password">用户名或密码错误</string>
<string name="latest_library">最新%1$s</string> <string name="latest_library">最新%1$s</string>
<string name="player_gestures_summary">在屏幕右侧上下划动来调整音量,在屏幕左侧上下划动来调整亮度</string> <string name="player_gestures_vb_summary">在屏幕右侧上下划动来调整音量,在屏幕左侧上下划动来调整亮度</string>
<string name="add_server_error_outdated">服务器版本过旧:%1$s。请更新您的服务器</string> <string name="add_server_error_outdated">服务器版本过旧:%1$s。请更新您的服务器</string>
<string name="edit_text_server_address_hint">服务器地址</string> <string name="edit_text_server_address_hint">服务器地址</string>
<string name="no_favorites">你没有收藏过任何东西</string> <string name="no_favorites">你没有收藏过任何东西</string>

View file

@ -101,7 +101,10 @@
<string name="image_description_backdrop">%1$s backdrop</string> <string name="image_description_backdrop">%1$s backdrop</string>
<string name="gestures">Gestures</string> <string name="gestures">Gestures</string>
<string name="player_gestures">Player gestures</string> <string name="player_gestures">Player gestures</string>
<string name="player_gestures_summary">Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness</string> <string name="player_gestures_vb">Volume and brightness gestures</string>
<string name="player_gestures_zoom">Zoom gesture</string>
<string name="player_gestures_vb_summary">Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness</string>
<string name="player_gestures_zoom_summary">Pinch to fill the screen with the video</string>
<string name="player_brightness_remember">Remember brightness level</string> <string name="player_brightness_remember">Remember brightness level</string>
<string name="sort_by_options_0">Name</string> <string name="sort_by_options_0">Name</string>
<string name="sort_by_options_1">IMDB Rating</string> <string name="sort_by_options_1">IMDB Rating</string>

View file

@ -21,10 +21,21 @@
<SwitchPreference <SwitchPreference
app:defaultValue="true" app:defaultValue="true"
app:key="pref_player_gestures" app:key="pref_player_gestures"
app:summary="@string/player_gestures_summary"
app:title="@string/player_gestures" /> app:title="@string/player_gestures" />
<SwitchPreference <SwitchPreference
app:defaultValue="true"
app:dependency="pref_player_gestures" app:dependency="pref_player_gestures"
app:key="pref_player_gestures_vb"
app:summary="@string/player_gestures_vb_summary"
app:title="@string/player_gestures_vb" />
<SwitchPreference
app:defaultValue="true"
app:dependency="pref_player_gestures"
app:key="pref_player_gestures_zoom"
app:summary="@string/player_gestures_zoom_summary"
app:title="@string/player_gestures_zoom" />
<SwitchPreference
app:dependency="pref_player_gestures_vb"
app:key="pref_player_brightness_remember" app:key="pref_player_brightness_remember"
app:title="@string/player_brightness_remember" /> app:title="@string/player_brightness_remember" />
</PreferenceCategory> </PreferenceCategory>