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 @@ + + + + + +