Browse Source

Make the CallBackDelegate pausable to avoid refreshes while the UI is not shown

merge-requests/1454/head
Nicolas Pomepuy 4 years ago
committed by Duncan McNamara
parent
commit
2ed65b9048
  1. 11
      application/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt
  2. 2
      application/vlc-android/src/org/videolan/vlc/media/PlaylistManager.kt
  3. 31
      application/vlc-android/src/org/videolan/vlc/viewmodels/CallBackDelegate.kt

11
application/vlc-android/src/org/videolan/vlc/gui/browser/MediaBrowserFragment.kt

@ -101,6 +101,17 @@ abstract class MediaBrowserFragment<T : SortableModel> : BaseFragment(), Filtera
releaseBreadCrumb()
}
override fun onResume() {
super.onResume()
(viewModel as? MedialibraryViewModel)?.resume()
}
override fun onPause() {
super.onPause()
(viewModel as? MedialibraryViewModel)?.pause()
}
override fun onDestroy() {
super.onDestroy()
savedSelection.clear()

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

@ -999,7 +999,7 @@ class PlaylistManager(val service: PlaybackService) : MediaWrapperList.EventList
}
if (player.getCurrentTime() % 10 == 0L) savePosition()
val now = System.currentTimeMillis()
if (now - lastTimeMetaSaved > 20000){
if (now - lastTimeMetaSaved > 5000L){
lastTimeMetaSaved = now
saveMediaMeta()
}

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

@ -44,6 +44,8 @@ interface ICallBackHandler {
fun watchPlaylists()
fun watchHistory()
fun watchMediaGroups()
fun pause()
fun resume()
}
class CallBackDelegate : ICallBackHandler,
@ -69,9 +71,36 @@ class CallBackDelegate : ICallBackHandler,
private var playlistsCb = false
private var historyCb = false
private var mediaGroupsCb = false
var paused = false
set(value) {
field = value
if (!value && isInvalid) {
refreshActor.trySend(Unit)
isInvalid = false
}
}
var isInvalid = false
/**
* Pause the callbacks while the caller is paused to avoid unwanted refreshes
* During this time, instead of refreshing, it's marked as invalid.
* If invalid, a refresh is launched upon resuming
*/
override fun pause() {
paused = true
}
/**
* Resumes the callback and refresh if it has been marked invalid in the meantime
*/
override fun resume() {
paused = false
}
override fun CoroutineScope.registerCallBacks(refresh: () -> Unit) {
refreshActor = conflatedActor { refresh() }
refreshActor = conflatedActor {
if (paused) isInvalid = true else refresh()
}
deleteActor = actor(context = Dispatchers.IO, capacity = Channel.UNLIMITED) {
for (action in channel) when (action) {
is MediaDeletedAction -> {

Loading…
Cancel
Save