diff --git a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
index c7c3efdb6..7810b43f3 100644
--- a/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
+++ b/app/src/main/java/com/github/libretube/fragments/PlayerFragment.kt
@@ -23,9 +23,11 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.view.accessibility.CaptioningManager
import android.widget.Toast
import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.ContextCompat
import androidx.core.net.toUri
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
@@ -78,6 +80,7 @@ import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.source.MergingMediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
+import com.google.android.exoplayer2.ui.CaptionStyleCompat
import com.google.android.exoplayer2.ui.PlayerNotificationManager
import com.google.android.exoplayer2.ui.StyledPlayerView
import com.google.android.exoplayer2.ui.TimeBar
@@ -738,6 +741,14 @@ class PlayerFragment : Fragment() {
useController = false
player = exoPlayer
}
+
+ val useSystemCaptionStyle = PreferenceHelper.getBoolean(requireContext(), "system_caption_style", true)
+ if (useSystemCaptionStyle) {
+ // set the subtitle style
+ val captionStyle = getCaptionStyle()
+ exoPlayerView.subtitleView?.setApplyEmbeddedStyles(captionStyle == CaptionStyleCompat.DEFAULT)
+ exoPlayerView.subtitleView?.setStyle(captionStyle)
+ }
}
private fun initializePlayerView(view: View, response: Streams) {
@@ -1531,4 +1542,14 @@ class PlayerFragment : Fragment() {
}
}
}
+
+ private fun getCaptionStyle(): CaptionStyleCompat {
+ val captioningManager = ContextCompat.getSystemService(
+ requireContext(),
+ CaptioningManager::class.java
+ )
+ return if (captioningManager == null || !captioningManager.isEnabled) {
+ CaptionStyleCompat.DEFAULT
+ } else CaptionStyleCompat.createFromCaptionStyle(captioningManager.userStyle)
+ }
}
diff --git a/app/src/main/res/drawable/ic_caption.xml b/app/src/main/res/drawable/ic_caption.xml
new file mode 100644
index 000000000..8720e7644
--- /dev/null
+++ b/app/src/main/res/drawable/ic_caption.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e89d87c4c..8d53e5f21 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -249,4 +249,5 @@
Watch and search history
Watch positions
Reset watch positions
+ System caption style
\ No newline at end of file
diff --git a/app/src/main/res/xml/appearance_settings.xml b/app/src/main/res/xml/appearance_settings.xml
index d3e5262df..4cae308d8 100644
--- a/app/src/main/res/xml/appearance_settings.xml
+++ b/app/src/main/res/xml/appearance_settings.xml
@@ -78,6 +78,16 @@
+
+
+
+
+
+