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:
parent
22012873a0
commit
f400571e04
8 changed files with 49 additions and 7 deletions
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
Loading…
Reference in a new issue