diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt
index c99129746..0c86be3e7 100644
--- a/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt
+++ b/app/src/main/java/com/github/libretube/ui/fragments/PlayerFragment.kt
@@ -82,6 +82,7 @@ import com.github.libretube.ui.sheets.CommentsSheet
import com.github.libretube.ui.sheets.PlayingQueueSheet
import com.github.libretube.util.BackgroundHelper
import com.github.libretube.util.DashHelper
+import com.github.libretube.util.DataSaverMode
import com.github.libretube.util.ImageHelper
import com.github.libretube.util.NowPlayingNotification
import com.github.libretube.util.PlayerHelper
@@ -651,13 +652,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
setupSeekbarPreview()
if (!isLive) seekToWatchPosition()
exoPlayer.prepare()
- if (!PreferenceHelper.getBoolean(
- PreferenceKeys.DATA_SAVER_MODE,
- false
- )
- ) {
- exoPlayer.play()
- }
+ if (!DataSaverMode.isEnabled(requireContext())) exoPlayer.play()
if (binding.playerMotionLayout.progress != 1.0f) {
// show controllers when not in picture in picture mode
diff --git a/app/src/main/java/com/github/libretube/util/DataSaverMode.kt b/app/src/main/java/com/github/libretube/util/DataSaverMode.kt
new file mode 100644
index 000000000..620dbc5d9
--- /dev/null
+++ b/app/src/main/java/com/github/libretube/util/DataSaverMode.kt
@@ -0,0 +1,16 @@
+package com.github.libretube.util
+
+import android.content.Context
+import com.github.libretube.constants.PreferenceKeys
+
+object DataSaverMode {
+ fun isEnabled(context: Context): Boolean {
+ val pref = PreferenceHelper.getString(PreferenceKeys.DATA_SAVER_MODE, "disabled")
+ return when (pref) {
+ "enabled" -> true
+ "disabled" -> false
+ "metered"-> NetworkHelper.isNetworkMobile(context)
+ else -> throw IllegalArgumentException()
+ }
+ }
+}
diff --git a/app/src/main/java/com/github/libretube/util/ImageHelper.kt b/app/src/main/java/com/github/libretube/util/ImageHelper.kt
index 02315d8b2..f8662f0c3 100644
--- a/app/src/main/java/com/github/libretube/util/ImageHelper.kt
+++ b/app/src/main/java/com/github/libretube/util/ImageHelper.kt
@@ -52,11 +52,7 @@ object ImageHelper {
*/
fun loadImage(url: String?, target: ImageView) {
// only load the image if the data saver mode is disabled
- val dataSaverModeEnabled = PreferenceHelper.getBoolean(
- PreferenceKeys.DATA_SAVER_MODE,
- false
- )
- if (!dataSaverModeEnabled) target.load(url, imageLoader)
+ if (!DataSaverMode.isEnabled(target.context)) target.load(url, imageLoader)
}
fun downloadImage(context: Context, url: String, fileName: String) {
diff --git a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt
index 28e23fa96..1f05ba6db 100644
--- a/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt
+++ b/app/src/main/java/com/github/libretube/util/NowPlayingNotification.kt
@@ -109,7 +109,7 @@ class NowPlayingNotification(
player: Player,
callback: PlayerNotificationManager.BitmapCallback
): Bitmap? {
- if (PreferenceHelper.getBoolean(PreferenceKeys.DATA_SAVER_MODE, false)) return null
+ if (DataSaverMode.isEnabled(context)) return null
var bitmap: Bitmap? = null
diff --git a/app/src/main/res/values/array.xml b/app/src/main/res/values/array.xml
index 1263cb75e..14006255b 100644
--- a/app/src/main/res/values/array.xml
+++ b/app/src/main/res/values/array.xml
@@ -425,4 +425,16 @@
- name_reversed
+
+ - @string/disabled
+ - @string/network_metered
+ - @string/enabled
+
+
+
+ - disabled
+ - metered
+ - enabled
+
+
diff --git a/app/src/main/res/xml/advanced_settings.xml b/app/src/main/res/xml/advanced_settings.xml
index cf028a26d..69ab34666 100644
--- a/app/src/main/res/xml/advanced_settings.xml
+++ b/app/src/main/res/xml/advanced_settings.xml
@@ -4,7 +4,10 @@
-