From a7e63eb1bbac012e5d67d905d42a1ae168b939bf Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Mon, 28 Mar 2022 14:07:31 +0200 Subject: [PATCH 1/3] Add options to disable player gestures and remember screen brightness --- .../dev/jdtech/jellyfin/PlayerActivity.kt | 16 +++++---- .../jdtech/jellyfin/utils/AppPreferences.kt | 6 +++- .../dev/jdtech/jellyfin/utils/Constants.kt | 8 ++--- .../jellyfin/utils/PlayerGestureHelper.kt | 8 +++-- app/src/main/res/values-b+es+419/strings.xml | 4 +-- app/src/main/res/values-cs-rCZ/strings.xml | 4 +-- app/src/main/res/values-es-rMX/strings.xml | 4 +-- app/src/main/res/values-es/strings.xml | 4 +-- app/src/main/res/values/strings.xml | 8 +++-- .../main/res/xml/fragment_settings_player.xml | 34 ++++++++++++++----- 10 files changed, 63 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt index e1754aeb..19815b8a 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/PlayerActivity.kt @@ -31,7 +31,7 @@ class PlayerActivity : BasePlayerActivity() { lateinit var appPreferences: AppPreferences lateinit var binding: ActivityPlayerBinding - private lateinit var playerGestureHelper: PlayerGestureHelper + private var playerGestureHelper: PlayerGestureHelper? = null override val viewModel: PlayerActivityViewModel by viewModels() private val args: PlayerActivityArgs by navArgs() @@ -49,12 +49,14 @@ class PlayerActivity : BasePlayerActivity() { configureInsets(playerControls) - playerGestureHelper = PlayerGestureHelper( - appPreferences, - this, - binding.playerView, - getSystemService(Context.AUDIO_SERVICE) as AudioManager - ) + if (appPreferences.playerGestures) { + playerGestureHelper = PlayerGestureHelper( + appPreferences, + this, + binding.playerView, + getSystemService(Context.AUDIO_SERVICE) as AudioManager + ) + } binding.playerView.findViewById(R.id.back_button).setOnClickListener { onBackPressed() 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 46e0dbbd..5d51b356 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/AppPreferences.kt @@ -10,6 +10,11 @@ class AppPreferences constructor( private val sharedPreferences: SharedPreferences ) { + val playerGestures = sharedPreferences.getBoolean(Constants.PREF_PLAYER_GESTURES, true) + + val playerBrightnessRemember = + sharedPreferences.getBoolean(Constants.PREF_PLAYER_BRIGHTNESS_REMEMBER, false) + var playerBrightness: Float get() = sharedPreferences.getFloat( Constants.PREF_PLAYER_BRIGHTNESS, @@ -20,5 +25,4 @@ constructor( putFloat(Constants.PREF_PLAYER_BRIGHTNESS, value) } } - } 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 667bdb3f..2f51b3b5 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt @@ -1,14 +1,14 @@ package dev.jdtech.jellyfin.utils object Constants { - - //player + // player const val GESTURE_EXCLUSION_AREA_TOP = 48 const val FULL_SWIPE_RANGE_SCREEN_RATIO = 0.66f const val ZOOM_SCALE_BASE = 1f const val ZOOM_SCALE_THRESHOLD = 0.01f - //pref + // pref + const val PREF_PLAYER_GESTURES = "pref_player_gestures" + const val PREF_PLAYER_BRIGHTNESS_REMEMBER = "pref_player_brightness_remember" const val PREF_PLAYER_BRIGHTNESS = "pref_player_brightness" - } \ No newline at end of file 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 afcc2f1c..ff4bb00a 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/PlayerGestureHelper.kt @@ -115,7 +115,9 @@ class PlayerGestureHelper( private val hideGestureBrightnessIndicatorOverlayAction = Runnable { activity.binding.gestureBrightnessLayout.visibility = View.GONE - appPreferences.playerBrightness = activity.window.attributes.screenBrightness + if (appPreferences.playerBrightnessRemember) { + appPreferences.playerBrightness = activity.window.attributes.screenBrightness + } } /** @@ -141,7 +143,9 @@ class PlayerGestureHelper( } init { - activity.window.attributes.screenBrightness = appPreferences.playerBrightness + if (appPreferences.playerBrightnessRemember) { + activity.window.attributes.screenBrightness = appPreferences.playerBrightness + } @Suppress("ClickableViewAccessibility") playerView.setOnTouchListener { _, event -> if (playerView.useController) { 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 14c60b33..d94aec36 100644 --- a/app/src/main/res/values-b+es+419/strings.xml +++ b/app/src/main/res/values-b+es+419/strings.xml @@ -55,8 +55,8 @@ Error desconocido Buscar películas, series, episodios… Reciente en %1$s - Reproductor MPV - Usar el reproductor MPV parar reproducir contenidos. MPV soporta mas codecs de video, audio y subtitulos. + Reproductor mpv + Usar el reproductor mpv parar reproducir contenidos. mpv soporta mas codecs de video, audio y subtitulos. Elegir pista de audio Elegir subtítulo Forzar la decodificación por software diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 95ace9c2..04a813d2 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -70,8 +70,8 @@ Neočekávaná chyba Vyberte zvukovou stopu Vyberte titulky - MPV přehrávač - Použít experimentální MPV přehrávač k přehrávání videí. MPV má podporu pro více video a audio kodeků a formátů titulků. + mpv přehrávač + Použít experimentální mpv přehrávač k přehrávání videí. mpv má podporu pro více video a audio kodeků a formátů titulků. Vynutit softwarové dekódování Vypnout hardwarové dekódování a vynutit softwarové dekódování. Může být užitečné pokud hardwarové dekódování produkuje artefakty. %1$s plakát diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index f351969a..2b0dc26d 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -55,8 +55,8 @@ Información de la App Error desconocido Buscar películas, series, episodios… - Reproductor MPV - Usar el reproductor MPV parar reproducir contenidos. MPV soporta mas codecs de video, audio y subtitulos. + Reproductor mpv + Usar el reproductor mpv parar reproducir contenidos. mpv soporta mas codecs de video, audio y subtitulos. Elegir subtítulo Elegir pista de audio Forzar la decodificación por software diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 0249df54..0720e961 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -55,10 +55,10 @@ Información de aplicación Error desconocido Buscar películas, series, episodios… - Reproductor MPV + Reproductor mpv Elegir pista de audio Elegir pista de subtitulo - Usar el reproductor MPV parar reproducir contenidos. MPV soporta mas codecs de video, audio y subtitulos. + Usar el reproductor mpv parar reproducir contenidos. mpv soporta mas codecs de video, audio y subtitulos. Forzar la decodificación por software Deshabilita la decodificación por hardtware y usa solo software. Puede ser útil sí la decodificación por hardware genera artefactos visuales. \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9af0dded..ea1a4814 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -80,10 +80,10 @@ Select audio track Select subtitle track Select playback speed - MPV Player + mpv player Download using mobile data Download when roaming - Use the experimental MPV Player to play videos. MPV has support for more video, audio and subtitle codecs. + Use the experimental mpv player to play videos. mpv has support for more video, audio and subtitle codecs. Force software decoding Disable hardware decoding and use software decoding. Can be useful if hardware decoding gives weird artifacts. Download @@ -99,6 +99,10 @@ Share %1$s poster %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 + Remember brightness level Name diff --git a/app/src/main/res/xml/fragment_settings_player.xml b/app/src/main/res/xml/fragment_settings_player.xml index 9877327a..0c1e3834 100644 --- a/app/src/main/res/xml/fragment_settings_player.xml +++ b/app/src/main/res/xml/fragment_settings_player.xml @@ -1,16 +1,32 @@ - - + + + + + + + + + + + \ No newline at end of file From cce2513c7e0a2a4ad2580986b92f507954729ba7 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 29 Mar 2022 13:01:47 +0200 Subject: [PATCH 2/3] Enable image caching by default and set size to 20MB --- app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt | 8 +++----- app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt | 5 +++++ app/src/main/res/xml/fragment_settings_cache.xml | 9 +++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt b/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt index 05dc9ad0..c63712e7 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/di/GlideModule.kt @@ -9,21 +9,19 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy.RESOURCE import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory import com.bumptech.glide.module.AppGlideModule import com.bumptech.glide.request.RequestOptions +import dev.jdtech.jellyfin.utils.Constants import kotlinx.coroutines.MainScope import kotlinx.coroutines.launch import timber.log.Timber -private const val cacheDefaultSize = 250 - @GlideModule class GlideModule : AppGlideModule() { - override fun applyOptions(context: Context, builder: GlideBuilder) { val preferences = PreferenceManager.getDefaultSharedPreferences(context) - val use = preferences.getBoolean("use_image_cache", false) + val use = preferences.getBoolean(Constants.PREF_IMAGE_CACHE, true) if (use) { - val sizeMb = preferences.getString("image_cache_size", "$cacheDefaultSize")?.toInt()!! + val sizeMb = preferences.getString(Constants.PREF_IMAGE_CACHE_SIZE, "${Constants.DEFAULT_CACHE_SIZE}")?.toInt()!! val sizeB = 1024L * 1024 * sizeMb Timber.d("Setting image cache to use $sizeMb MB of disk space") 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 2f51b3b5..3ecb4a7b 100644 --- a/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt +++ b/app/src/main/java/dev/jdtech/jellyfin/utils/Constants.kt @@ -11,4 +11,9 @@ object Constants { const val PREF_PLAYER_GESTURES = "pref_player_gestures" 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" + const val PREF_IMAGE_CACHE_SIZE = "pref_image_cache_size" + + // caching + const val DEFAULT_CACHE_SIZE = 20 } \ No newline at end of file diff --git a/app/src/main/res/xml/fragment_settings_cache.xml b/app/src/main/res/xml/fragment_settings_cache.xml index 104cac8c..d54321fc 100644 --- a/app/src/main/res/xml/fragment_settings_cache.xml +++ b/app/src/main/res/xml/fragment_settings_cache.xml @@ -1,14 +1,15 @@ \ No newline at end of file From 5e5567bf2639ba115e8878856a2338c493e2f010 Mon Sep 17 00:00:00 2001 From: Jarne Demeulemeester Date: Tue, 29 Mar 2022 13:17:12 +0200 Subject: [PATCH 3/3] Fix ProGuard not keeping SettingsFragments --- app/proguard-rules.pro | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 97fdeba0..41e960de 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -25,4 +25,12 @@ # Keep all mpvlib methods because proguard removes some which makes the app crash -keep class is.xyz.libmpv.MPVLib { *; -} \ No newline at end of file +} + +# ProGuard thinks all SettingsFragments are unused +-keep class dev.jdtech.jellyfin.fragments.SettingsLanguageFragment +-keep class dev.jdtech.jellyfin.fragments.SettingsAppearanceFragment +-keep class dev.jdtech.jellyfin.fragments.SettingsDownloadsFragment +-keep class dev.jdtech.jellyfin.fragments.SettingsPlayerFragment +-keep class dev.jdtech.jellyfin.fragments.SettingsDeviceFragment +-keep class dev.jdtech.jellyfin.fragments.SettingsCacheFragment \ No newline at end of file