Customize the seeking increments (#128)

* Add the ability to customize the seeking increments

* Fix number keyboard image cache size

* Clean up fragment_settings_player.xml
This commit is contained in:
Jarne Demeulemeester 2022-07-05 09:06:26 +02:00 committed by GitHub
parent 22012873a0
commit f400571e04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 49 additions and 7 deletions

View file

@ -11,7 +11,7 @@ class SettingsCacheFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_cache, rootKey) setPreferencesFromResource(R.xml.fragment_settings_cache, rootKey)
findPreference<EditTextPreference>("image_cache_size")?.setOnBindEditTextListener { editText -> findPreference<EditTextPreference>("pref_image_cache_size")?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER editText.inputType = InputType.TYPE_CLASS_NUMBER
} }
} }

View file

@ -1,6 +1,8 @@
package dev.jdtech.jellyfin.fragments package dev.jdtech.jellyfin.fragments
import android.os.Bundle import android.os.Bundle
import android.text.InputType
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import dev.jdtech.jellyfin.R import dev.jdtech.jellyfin.R
@ -8,5 +10,11 @@ import dev.jdtech.jellyfin.R
class SettingsPlayerFragment : PreferenceFragmentCompat() { class SettingsPlayerFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.fragment_settings_player, rootKey) setPreferencesFromResource(R.xml.fragment_settings_player, rootKey)
findPreference<EditTextPreference>("pref_player_seek_back_inc")?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
findPreference<EditTextPreference>("pref_player_seek_forward_inc")?.setOnBindEditTextListener { editText ->
editText.inputType = InputType.TYPE_CLASS_NUMBER
}
} }
} }

View file

@ -23,6 +23,7 @@ import com.google.android.exoplayer2.text.CueGroup
import com.google.android.exoplayer2.trackselection.TrackSelectionParameters import com.google.android.exoplayer2.trackselection.TrackSelectionParameters
import com.google.android.exoplayer2.util.* import com.google.android.exoplayer2.util.*
import com.google.android.exoplayer2.video.VideoSize import com.google.android.exoplayer2.video.VideoSize
import dev.jdtech.jellyfin.utils.AppPreferences
import kotlinx.parcelize.Parcelize import kotlinx.parcelize.Parcelize
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONException import org.json.JSONException
@ -36,7 +37,7 @@ class MPVPlayer(
context: Context, context: Context,
requestAudioFocus: Boolean, requestAudioFocus: Boolean,
preferredLanguages: Map<String, String>, preferredLanguages: Map<String, String>,
disableHardwareDecoding: Boolean private val appPreferences: AppPreferences
) : BasePlayer(), MPVLib.EventObserver, AudioManager.OnAudioFocusChangeListener { ) : BasePlayer(), MPVLib.EventObserver, AudioManager.OnAudioFocusChangeListener {
private val audioManager: AudioManager by lazy { context.getSystemService()!! } private val audioManager: AudioManager by lazy { context.getSystemService()!! }
@ -68,7 +69,7 @@ class MPVPlayer(
MPVLib.setOptionString("ao", "audiotrack,opensles") MPVLib.setOptionString("ao", "audiotrack,opensles")
// Hardware video decoding // Hardware video decoding
if (disableHardwareDecoding) { if (appPreferences.mpvDisableHwDec) {
MPVLib.setOptionString("hwdec", "no") MPVLib.setOptionString("hwdec", "no")
} else { } else {
MPVLib.setOptionString("hwdec", "mediacodec-copy") MPVLib.setOptionString("hwdec", "mediacodec-copy")
@ -863,11 +864,11 @@ class MPVPlayer(
} }
override fun getSeekBackIncrement(): Long { override fun getSeekBackIncrement(): Long {
return C.DEFAULT_SEEK_BACK_INCREMENT_MS return appPreferences.playerSeekBackIncrement
} }
override fun getSeekForwardIncrement(): Long { override fun getSeekForwardIncrement(): Long {
return C.DEFAULT_SEEK_FORWARD_INCREMENT_MS return appPreferences.playerSeekForwardIncrement
} }
override fun getMaxSeekToPreviousPosition(): Long { override fun getMaxSeekToPreviousPosition(): Long {

View file

@ -3,6 +3,8 @@ package dev.jdtech.jellyfin.utils
import android.content.SharedPreferences import android.content.SharedPreferences
import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE import android.view.WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
import androidx.core.content.edit import androidx.core.content.edit
import com.google.android.exoplayer2.C.DEFAULT_SEEK_BACK_INCREMENT_MS
import com.google.android.exoplayer2.C.DEFAULT_SEEK_FORWARD_INCREMENT_MS
import javax.inject.Inject import javax.inject.Inject
class AppPreferences class AppPreferences
@ -27,4 +29,13 @@ constructor(
putFloat(Constants.PREF_PLAYER_BRIGHTNESS, value) putFloat(Constants.PREF_PLAYER_BRIGHTNESS, value)
} }
} }
val playerSeekBackIncrement = sharedPreferences.getString(
Constants.PREF_PLAYER_SEEK_BACK_INC,
DEFAULT_SEEK_BACK_INCREMENT_MS.toString()
)!!.toLong()
val playerSeekForwardIncrement = sharedPreferences.getString(
Constants.PREF_PLAYER_SEEK_FORWARD_INC,
DEFAULT_SEEK_FORWARD_INCREMENT_MS.toString()
)!!.toLong()
val mpvDisableHwDec = sharedPreferences.getBoolean("mpv_disable_hwdec", false)
} }

View file

@ -13,6 +13,8 @@ object Constants {
const val PREF_PLAYER_GESTURES_ZOOM = "pref_player_gestures_zoom" 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_PLAYER_SEEK_BACK_INC = "pref_player_seek_back_inc"
const val PREF_PLAYER_SEEK_FORWARD_INC = "pref_player_seek_forward_inc"
const val PREF_IMAGE_CACHE = "pref_image_cache" const val PREF_IMAGE_CACHE = "pref_image_cache"
const val PREF_IMAGE_CACHE_SIZE = "pref_image_cache_size" const val PREF_IMAGE_CACHE_SIZE = "pref_image_cache_size"

View file

@ -19,6 +19,7 @@ import dev.jdtech.jellyfin.models.PlayerItem
import dev.jdtech.jellyfin.mpv.MPVPlayer import dev.jdtech.jellyfin.mpv.MPVPlayer
import dev.jdtech.jellyfin.mpv.TrackType import dev.jdtech.jellyfin.mpv.TrackType
import dev.jdtech.jellyfin.repository.JellyfinRepository import dev.jdtech.jellyfin.repository.JellyfinRepository
import dev.jdtech.jellyfin.utils.AppPreferences
import dev.jdtech.jellyfin.utils.postDownloadPlaybackProgress import dev.jdtech.jellyfin.utils.postDownloadPlaybackProgress
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
@ -32,7 +33,8 @@ class PlayerActivityViewModel
constructor( constructor(
application: Application, application: Application,
private val jellyfinRepository: JellyfinRepository, private val jellyfinRepository: JellyfinRepository,
private val downloadDatabase: DownloadDatabaseDao private val downloadDatabase: DownloadDatabaseDao,
appPreferences: AppPreferences,
) : ViewModel(), Player.Listener { ) : ViewModel(), Player.Listener {
val player: Player val player: Player
@ -75,7 +77,7 @@ constructor(
application, application,
false, false,
preferredLanguages, preferredLanguages,
sp.getBoolean("mpv_disable_hwdec", false) appPreferences
) )
} else { } else {
val renderersFactory = val renderersFactory =
@ -90,6 +92,8 @@ constructor(
) )
player = ExoPlayer.Builder(application, renderersFactory) player = ExoPlayer.Builder(application, renderersFactory)
.setTrackSelector(trackSelector) .setTrackSelector(trackSelector)
.setSeekBackIncrementMs(appPreferences.playerSeekBackIncrement)
.setSeekForwardIncrementMs(appPreferences.playerSeekForwardIncrement)
.build() .build()
} }
} }

View file

@ -125,4 +125,7 @@
<string name="add_server_empty_error">Empty server address</string> <string name="add_server_empty_error">Empty server address</string>
<string name="display_extended_title_summary">Display extended episode title including season and episode information (SXX:EXX - EpisodeName).</string> <string name="display_extended_title_summary">Display extended episode title including season and episode information (SXX:EXX - EpisodeName).</string>
<string name="display_extended_title">Display extended title</string> <string name="display_extended_title">Display extended title</string>
<string name="seeking">Seeking</string>
<string name="seek_back_increment">Seek back increment (ms)</string>
<string name="seek_forward_increment">Seek forward increment (ms)</string>
</resources> </resources>

View file

@ -40,4 +40,17 @@
app:title="@string/player_brightness_remember" /> app:title="@string/player_brightness_remember" />
</PreferenceCategory> </PreferenceCategory>
<PreferenceCategory app:title="@string/seeking">
<EditTextPreference
app:defaultValue="5000"
app:key="pref_player_seek_back_inc"
app:title="@string/seek_back_increment"
app:useSimpleSummaryProvider="true" />
<EditTextPreference
app:defaultValue="15000"
app:key="pref_player_seek_forward_inc"
app:title="@string/seek_forward_increment"
app:useSimpleSummaryProvider="true" />
</PreferenceCategory>
</PreferenceScreen> </PreferenceScreen>