feat: allow user to set custom preloading amount

This commit is contained in:
Bnyro 2024-09-17 17:23:28 +02:00
parent b7261b018b
commit ae01341bfa
5 changed files with 28 additions and 19 deletions

View File

@ -53,6 +53,7 @@ import kotlinx.coroutines.runBlocking
import java.util.Locale
import java.util.concurrent.Executors
import kotlin.math.absoluteValue
import kotlin.math.max
import kotlin.math.roundToInt
object PlayerHelper {
@ -543,7 +544,7 @@ object PlayerHelper {
.setBackBuffer(1000 * 60 * 3, true)
.setBufferDurationsMs(
MINIMUM_BUFFER_DURATION,
bufferingGoal,
max(bufferingGoal, MINIMUM_BUFFER_DURATION),
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_MS,
DefaultLoadControl.DEFAULT_BUFFER_FOR_PLAYBACK_AFTER_REBUFFER_MS
)

View File

@ -1,5 +1,7 @@
package com.github.libretube.ui.base
import android.text.InputType
import android.widget.Toast
import androidx.preference.EditTextPreference
import androidx.preference.ListPreference
import androidx.preference.MultiSelectListPreference
@ -8,6 +10,7 @@ import androidx.preference.PreferenceFragmentCompat
import com.github.libretube.R
import com.github.libretube.databinding.DialogTextPreferenceBinding
import com.github.libretube.ui.activities.SettingsActivity
import com.github.libretube.ui.preferences.EditNumberPreference
import com.google.android.material.dialog.MaterialAlertDialogBuilder
/**
@ -76,11 +79,21 @@ abstract class BasePreferenceFragment : PreferenceFragmentCompat() {
is EditTextPreference -> {
val binding = DialogTextPreferenceBinding.inflate(layoutInflater)
binding.input.setText(preference.text)
if (preference is EditNumberPreference) {
binding.input.inputType = InputType.TYPE_NUMBER_FLAG_SIGNED
}
MaterialAlertDialogBuilder(requireContext())
.setTitle(preference.title)
.setView(binding.root)
.setPositiveButton(android.R.string.ok) { _, _ ->
val newValue = binding.input.text.toString()
if (preference is EditNumberPreference && newValue.any { !it.isDigit() }) {
Toast.makeText(context, R.string.invalid_input, Toast.LENGTH_LONG).show()
return@setPositiveButton
}
if (preference.callChangeListener(newValue)) {
preference.text = newValue
}

View File

@ -0,0 +1,12 @@
package com.github.libretube.ui.preferences
import android.content.Context
import android.util.AttributeSet
import androidx.preference.EditTextPreference
import com.github.libretube.ui.base.BasePreferenceFragment
/**
* [EditTextPreference] that only allows numeric input.
* The actual functionality is done in [BasePreferenceFragment].
*/
class EditNumberPreference(context: Context, attributeSet: AttributeSet?): EditTextPreference(context, attributeSet)

View File

@ -200,21 +200,6 @@
<item>6</item>
</string-array>
<string-array name="bufferingGoal">
<item>50s</item>
<item>100s</item>
<item>200s</item>
<item>300s</item>
<item>450s</item>
</string-array>
<string-array name="bufferingGoalValues">
<item>50</item>
<item>100</item>
<item>200</item>
<item>300</item>
<item>450</item>
</string-array>
<string-array name="playerVideoFormat">
<item>WEBM</item>
<item>MPEG_4</item>

View File

@ -203,11 +203,9 @@
<PreferenceCategory app:title="@string/misc">
<ListPreference
<com.github.libretube.ui.preferences.EditNumberPreference
android:icon="@drawable/ic_time"
app:defaultValue="50"
app:entries="@array/bufferingGoal"
app:entryValues="@array/bufferingGoalValues"
app:key="buffering_goal"
app:summary="@string/buffering_goal_summary"
app:title="@string/buffering_goal" />