From 7cdc74d2e74a487a5c6ec7cbcbbed83deace8a0e Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester <32322857+jarnedemeulemeester@users.noreply.github.com> Date: Sat, 11 Jun 2022 13:45:26 +0200 Subject: [PATCH] Split gesture option into volume & brightness and zoom (#121) --- .../jdtech/jellyfin/utils/AppPreferences.kt | 2 + .../dev/jdtech/jellyfin/utils/Constants.kt | 2 + .../jellyfin/utils/PlayerGestureHelper.kt | 79 +++++++++++++------ app/src/main/res/values-b+es+419/strings.xml | 2 +- app/src/main/res/values-de/strings.xml | 2 +- app/src/main/res/values-es-rMX/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-pl/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 5 +- .../main/res/xml/fragment_settings_player.xml | 13 ++- 12 files changed, 83 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt index 5d51b356..fbe41d71 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt @@ -11,6 +11,8 @@ constructor( private val sharedPreferences: SharedPreferences ) { 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 = sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false) diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt index 3ecb4a7b..74f8c190 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt @@ -9,6 +9,8 @@ object Constants { // pref 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 = "pref_player_brightness" const val PREF_IMAGE_CACHE = "pref_image_cache" diff --git a/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt b/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt index 9b7b830e..740a266c 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt @@ -20,8 +20,6 @@ class PlayerGestureHelper( private val playerView: StyledPlayerView, private val audioManager: AudioManager ) { - - /** * 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. @@ -37,12 +35,17 @@ class PlayerGestureHelper( private var swipeGestureValueTrackerVolume = -1f private var swipeGestureValueTrackerBrightness = -1f - private val gestureDetector = GestureDetector(playerView.context, object : GestureDetector.SimpleOnGestureListener() { - override fun onDoubleTap(e: MotionEvent): Boolean { + private val tapGestureDetector = GestureDetector(playerView.context, object : GestureDetector.SimpleOnGestureListener() { + override fun onSingleTapUp(e: MotionEvent?): Boolean { + playerView.apply { + if (!isControllerFullyVisible) showController() else hideController() + } 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 { if (!isControllerFullyVisible) showController() else hideController() } @@ -142,33 +145,63 @@ class PlayerGestureHelper( 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 { if (appPreferences.playerBrightnessRemember) { activity.window.attributes.screenBrightness = appPreferences.playerBrightness } - @Suppress("ClickableViewAccessibility") - playerView.setOnTouchListener { _, event -> - if (playerView.useController) { - when (event.pointerCount) { - 1 -> gestureDetector.onTouchEvent(event) - 2 -> zoomGestureDetector.onTouchEvent(event) - } - } - if(event.action == MotionEvent.ACTION_UP) { - activity.binding.gestureVolumeLayout.apply { - if (visibility == View.VISIBLE) { - removeCallbacks(hideGestureVolumeIndicatorOverlayAction) - postDelayed(hideGestureVolumeIndicatorOverlayAction, 1000) + + if (appPreferences.playerGesturesVB && !appPreferences.playerGesturesZoom) { + @Suppress("ClickableViewAccessibility") + playerView.setOnTouchListener { _, event -> + if (playerView.useController) { + if (event.pointerCount == 1) { + gestureDetector.onTouchEvent(event) } } - activity.binding.gestureBrightnessLayout.apply { - if (visibility == View.VISIBLE) { - removeCallbacks(hideGestureBrightnessIndicatorOverlayAction) - postDelayed(hideGestureBrightnessIndicatorOverlayAction, 1000) + releaseAction(event) + true + } + } 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 } } } diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml index 5d2e1f67..32cb0d81 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -122,5 +122,5 @@ Gestos Recordar el nivel de brillo Gestos del reproductor - 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 + 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 \ No newline at end of file diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 878cfba2..9f744776 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -121,5 +121,5 @@ Zeige erweiterten Episodentitel inklusiver der Staffel und Episodeninformationen (SXX:EXX - Episodenname). Native Drittanbieter Jellyfin App Sicher, dass du den Server %1$s entfernen willst - 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 + 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 \ No newline at end of file diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 6a00fd2a..135d9d79 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -122,5 +122,5 @@ Gestos del reproductor Recordar el nivel de brillo Gestos - 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 + 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 \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1911c2b9..d31e6ee4 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -122,5 +122,5 @@ Gestos Gestos del reproductor Recordar nivel de brillo - 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 + 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 \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 2af12818..cd302f8e 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -107,7 +107,7 @@ Toile de fond %1$s Gestes Gestes du lecteur - 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é + 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é Choisissez une version Afficher le titre étendu inclut la numérotation de la saison et de l\'épisode (SXX:EXX - NomEpisode). Adresse du serveur vide diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 0415b895..d1637f9b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -7,7 +7,7 @@ Wybierz wersję Pobieraj używając danych komórkowych Używaj eksperymentalnego odtwarzacza MPV do odtwarzania wideo. MPV wspiera więcej kodeków wideo, audio i napisów. - Przesuń w górę lub w dół po prawej stronie ekrany by zmienić głośność, po lewej stronie by zmienić jasność + Przesuń w górę lub w dół po prawej stronie ekrany by zmienić głośność, po lewej stronie by zmienić jasność Wyświetlaj rozszerzoną nazwę odcinka, razem z informacją o sezonie i odcinku (SXX:EXX - NazwaOdcinka). Zbyt wolna odpowiedź serwera: %1$s Serwer już dodany diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ae564ecf..517ec395 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -107,7 +107,7 @@ 第三方原生Jellyfin app 用户名或密码错误 最新%1$s - 在屏幕右侧上下划动来调整音量,在屏幕左侧上下划动来调整亮度 + 在屏幕右侧上下划动来调整音量,在屏幕左侧上下划动来调整亮度 服务器版本过旧:%1$s。请更新您的服务器 服务器地址 你没有收藏过任何东西 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 73fefcde..ca5aabdd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,7 +101,10 @@ %1$s backdrop Gestures Player gestures - Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness + Volume and brightness gestures + Zoom gesture + Swipe up and down on the right side of the screen to change the volume and on the left side to change the brightness + Pinch to fill the screen with the video Remember brightness level Name IMDB Rating diff --git a/app/src/main/res/xml/fragment_settings_player.xml b/app/src/main/res/xml/fragment_settings_player.xml index 0c1e3834..a43d33ae 100644 --- a/app/src/main/res/xml/fragment_settings_player.xml +++ b/app/src/main/res/xml/fragment_settings_player.xml @@ -21,10 +21,21 @@ + +