diff --git a/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt b/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt index 20a9555d7..7046e54b8 100644 --- a/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt +++ b/application/vlc-android/src/org/videolan/vlc/gui/audio/PlaylistAdapter.kt @@ -206,13 +206,14 @@ class PlaylistAdapter(private val player: IPlayer) : DiffUtilAdapter(protected val dataset: MutableLiveData>) { - private var sourceSet: List? = null +open class FilterDelegate(val dataset: MutableLiveData>) { + var sourceSet: List? = null protected fun initSource() : List? { if (sourceSet === null) sourceSet = (dataset.value) diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt index 218ffaeec..799615bdd 100644 --- a/application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt +++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/PlaylistModel.kt @@ -62,6 +62,7 @@ class PlaylistModel : ViewModel(), PlaybackService.Callback by EmptyPBSCallback val playerState = MutableLiveData() val connected : Boolean get() = service !== null + var lastQuery: CharSequence? = null private val filter by lazy(LazyThreadSafetyMode.NONE) { PlaylistFilterDelegate(dataset) } @@ -85,7 +86,13 @@ class PlaylistModel : ViewModel(), PlaybackService.Callback by EmptyPBSCallback override fun update() { service?.run { - dataset.value = media.toMutableList() + if (filtering) { + originalDataset = media.toMutableList() + filter.sourceSet = originalDataset + dataset.value = filter.dataset.value?.toMutableList() ?: media.toMutableList() + filterActor.trySend(lastQuery) + } else + dataset.value = media.toMutableList() playerState.value = PlayerState(isPlaying, title, artist) } } @@ -93,7 +100,15 @@ class PlaylistModel : ViewModel(), PlaybackService.Callback by EmptyPBSCallback val hasMedia get() = service?.hasMedia() ?: false - fun insertMedia(position: Int, media: MediaWrapper) = service?.insertItem(position, media) + fun insertMedia(position: Int, media: MediaWrapper) { + service?.insertItem(position, media) + if (filtering) { + service?.let { + originalDataset = it.media.toMutableList() + filter.sourceSet = originalDataset + } + } + } /** * Get original position even if current list is filtered @@ -111,6 +126,7 @@ class PlaylistModel : ViewModel(), PlaybackService.Callback by EmptyPBSCallback @MainThread fun filter(query: CharSequence?) { + lastQuery = query val filtering = query != null if (this.filtering != filtering) { this.filtering = filtering