Browse Source

Prevent the UI refresh when it's triggered by the playback saving meta data

Fixes #2936
merge-requests/1666/merge
Nicolas Pomepuy 3 years ago
committed by Duncan McNamara
parent
commit
654dc3623c
  1. 5
      application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
  2. 9
      application/vlc-android/src/org/videolan/vlc/viewmodels/CallBackDelegate.kt

5
application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt

@ -46,6 +46,10 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
companion object {
val showAudioPlayer = MutableLiveData<Boolean>().apply { value = false }
// The playback will periodically modify the media by saving its meta
// When playing audio, it will have no impact on UI but will trigger the media modified ML callback
// On slow devices, it will trigger an unwanted "refresh animation". This flag prevents it
var skipMediaUpdateRefresh = false
private val mediaList = MediaWrapperList()
fun hasMedia() = mediaList.size() != 0
}
@ -575,6 +579,7 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
}
}
}
if (media.type != MediaWrapper.TYPE_VIDEO && !canSwitchToVideo && !media.isPodcast) skipMediaUpdateRefresh = true
media.setStringMeta(MediaWrapper.META_SPEED, rate.toString())
}

9
application/vlc-android/src/org/videolan/vlc/viewmodels/CallBackDelegate.kt

@ -30,6 +30,7 @@ import kotlinx.coroutines.channels.actor
import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.resources.AppContextProvider
import org.videolan.tools.conflatedActor
import org.videolan.vlc.media.PlaylistManager
import org.videolan.vlc.util.FileUtils
import java.io.File
@ -195,7 +196,13 @@ class CallBackDelegate : ICallBackHandler,
override fun onMediaAdded() { refreshActor.trySend(Unit) }
override fun onMediaModified() { refreshActor.trySend(Unit) }
override fun onMediaModified() {
if (PlaylistManager.skipMediaUpdateRefresh) {
PlaylistManager.skipMediaUpdateRefresh = false
return
}
refreshActor.trySend(Unit)
}
override fun onMediaDeleted(ids: LongArray) {
refreshActor.trySend(Unit)

Loading…
Cancel
Save