diff --git a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
index 22ff62a93..e27ef87b1 100644
--- a/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
+++ b/app/src/main/java/com/github/libretube/helpers/PlayerHelper.kt
@@ -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
)
diff --git a/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt b/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt
index 0a579e0dd..c6663453d 100644
--- a/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt
+++ b/app/src/main/java/com/github/libretube/ui/base/BasePreferenceFragment.kt
@@ -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
}
diff --git a/app/src/main/java/com/github/libretube/ui/preferences/EditNumberPreference.kt b/app/src/main/java/com/github/libretube/ui/preferences/EditNumberPreference.kt
new file mode 100644
index 000000000..b0cf3d9a0
--- /dev/null
+++ b/app/src/main/java/com/github/libretube/ui/preferences/EditNumberPreference.kt
@@ -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)
\ No newline at end of file
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
index 686e0782c..2a2e7d51e 100644
--- a/app/src/main/res/values/array.xml
+++ b/app/src/main/res/values/array.xml
@@ -200,21 +200,6 @@
- 6
-
- - 50s
- - 100s
- - 200s
- - 300s
- - 450s
-
-
- - 50
- - 100
- - 200
- - 300
- - 450
-
-
- WEBM
- MPEG_4
diff --git a/app/src/main/res/xml/player_settings.xml b/app/src/main/res/xml/player_settings.xml
index 170221875..1ef1eae18 100644
--- a/app/src/main/res/xml/player_settings.xml
+++ b/app/src/main/res/xml/player_settings.xml
@@ -203,11 +203,9 @@
-