diff --git a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt
index c19cbe9b1..102ccead5 100644
--- a/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt
+++ b/app/src/main/java/com/github/libretube/ui/activities/OfflinePlayerActivity.kt
@@ -7,6 +7,7 @@ import android.media.session.PlaybackState
import android.net.Uri
import android.os.Build
import android.os.Bundle
+import android.text.format.DateUtils
import android.view.View
import android.view.WindowManager
import androidx.activity.viewModels
@@ -23,6 +24,7 @@ import com.github.libretube.util.DownloadHelper
import com.github.libretube.util.PlayerHelper
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
+import com.google.android.exoplayer2.Player
import com.google.android.exoplayer2.source.MergingMediaSource
import com.google.android.exoplayer2.source.ProgressiveMediaSource
import com.google.android.exoplayer2.ui.StyledPlayerView
@@ -58,7 +60,17 @@ class OfflinePlayerActivity : BaseActivity() {
private fun initializePlayer() {
player = ExoPlayer.Builder(this)
.setHandleAudioBecomingNoisy(true)
- .build()
+ .build().apply {
+ addListener(object : Player.Listener {
+ override fun onEvents(player: Player, events: Player.Events) {
+ super.onEvents(player, events)
+ // update the displayed duration on changes
+ playerBinding.duration.text = DateUtils.formatElapsedTime(
+ player.duration / 1000
+ )
+ }
+ })
+ }
playerView = binding.player
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 fc1a1433b..f1aeffe05 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
@@ -859,6 +859,7 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
}
override fun onEvents(player: Player, events: Player.Events) {
+ updateDisplayedDuration()
super.onEvents(player, events)
if (events.containsAny(
Player.EVENT_PLAYBACK_STATE_CHANGED,
@@ -871,8 +872,6 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
}
override fun onPlaybackStateChanged(playbackState: Int) {
- updateDisplayedDuration()
-
exoPlayerView.keepScreenOn = !(
playbackState == Player.STATE_IDLE ||
playbackState == Player.STATE_ENDED
@@ -992,22 +991,21 @@ class PlayerFragment : BaseFragment(), OnlinePlayerOptions {
*/
@SuppressLint("SetTextI18n")
private fun updateDisplayedDuration() {
- if (exoPlayer.duration == Long.MAX_VALUE || isLive) return
-
- val durationWithSponsorBlock = if (
- !this::segmentData.isInitialized || this.segmentData.segments.isEmpty()
- ) {
- null
- } else {
- val difference = segmentData.segments.sumOf {
- it.segment[1] - it.segment[0]
- }.toInt()
- DateUtils.formatElapsedTime(exoPlayer.duration.div(1000) - difference)
- }
+ if (exoPlayer.duration < 0 || isLive) return
playerBinding.duration.text = DateUtils.formatElapsedTime(
exoPlayer.duration.div(1000)
- ) + if (durationWithSponsorBlock != null) " ($durationWithSponsorBlock)" else ""
+ )
+ if (!this::segmentData.isInitialized || this.segmentData.segments.isEmpty()) {
+ return
+ }
+
+ val durationWithSb = DateUtils.formatElapsedTime(
+ exoPlayer.duration.div(1000) - segmentData.segments.sumOf {
+ it.segment[1] - it.segment[0]
+ }.toInt()
+ )
+ playerBinding.duration.text = playerBinding.duration.text.toString() + " ($durationWithSb)"
}
private fun syncQueueButtons() {
diff --git a/app/src/main/res/layout/exo_styled_player_control_view.xml b/app/src/main/res/layout/exo_styled_player_control_view.xml
index 87ada7aec..35281c044 100644
--- a/app/src/main/res/layout/exo_styled_player_control_view.xml
+++ b/app/src/main/res/layout/exo_styled_player_control_view.xml
@@ -227,8 +227,8 @@
+ android:visibility="gone"
+ tools:text="05:10" />
+ android:text="00:00"
+ tools:ignore="HardcodedText" />