mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 04:58:45 +00:00
Fix media player incorrect state when switching videos in album.
This commit is contained in:
@@ -112,8 +112,8 @@ class MediaPreviewPlayerControlView @JvmOverloads constructor(
|
||||
val videoDuration: Duration = finalPlayer.duration.milliseconds
|
||||
currentPositionLabel.text = "${currentMinutes.toString().padStart(2, '0')}:${currentSeconds.toString().padStart(2, '0')}"
|
||||
val remainingDuration: Duration = videoDuration - currentPosition
|
||||
val remainingMinutes: Long = remainingDuration.inWholeMinutes
|
||||
val remainingSeconds: Long = remainingDuration.inWholeSeconds % 60
|
||||
val remainingMinutes: Long = remainingDuration.inWholeMinutes.coerceAtLeast(0L)
|
||||
val remainingSeconds: Long = (remainingDuration.inWholeSeconds % 60).coerceAtLeast(0L)
|
||||
remainingDurationLabel.text = "–${remainingMinutes.toString().padStart(2, '0')}:${remainingSeconds.toString().padStart(2, '0')}"
|
||||
}
|
||||
|
||||
|
||||
@@ -37,6 +37,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.google.android.material.snackbar.Snackbar
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.kotlin.subscribeBy
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.launch
|
||||
import org.signal.core.util.concurrent.LifecycleDisposable
|
||||
import org.signal.core.util.concurrent.addTo
|
||||
@@ -259,7 +261,7 @@ class MediaPreviewV2Fragment :
|
||||
|
||||
bindTextViews(currentItem, currentState.showThread, currentState.messageBodies)
|
||||
bindMenuItems(currentItem)
|
||||
bindMediaPreviewPlaybackControls(currentItem, getMediaPreviewFragmentFromChildFragmentManager(currentPosition))
|
||||
tryBindMediaPreviewPlaybackControls(currentItem, currentPosition)
|
||||
|
||||
val albumThumbnailMedia: List<Media> = if (currentState.allMediaInAlbumRail) {
|
||||
currentState.mediaRecords.mapNotNull { it.toMedia() }
|
||||
@@ -352,6 +354,24 @@ class MediaPreviewV2Fragment :
|
||||
currentFragment?.autoPlayIfNeeded()
|
||||
}
|
||||
|
||||
private fun tryBindMediaPreviewPlaybackControls(
|
||||
currentItem: MediaTable.MediaRecord,
|
||||
currentPosition: Int,
|
||||
maxRetries: Int = 5,
|
||||
delayMillis: Long = 50L
|
||||
) {
|
||||
viewLifecycleOwner.lifecycleScope.launch {
|
||||
repeat(maxRetries) { attempt ->
|
||||
if (!isActive) return@launch
|
||||
val mediaFragment = getMediaPreviewFragmentFromChildFragmentManager(currentPosition)
|
||||
bindMediaPreviewPlaybackControls(currentItem, mediaFragment)
|
||||
|
||||
if (mediaFragment != null) return@launch
|
||||
delay(delayMillis)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun bindAlbumRail(albumThumbnailMedia: List<Media>, currentItem: MediaTable.MediaRecord) {
|
||||
val albumRail: RecyclerView = binding.mediaPreviewPlaybackControls.recyclerView
|
||||
if (albumThumbnailMedia.size > 1) {
|
||||
|
||||
Reference in New Issue
Block a user