[Android] Fix the initial loading state of the streams line
Nicolas Pomepuy
git at videolan.org
Wed Feb 11 13:25:17 UTC 2026
vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri Feb 6 11:08:19 2026 +0100| [6dcd2896db9885a607c1c35bdf33e189a5aa8d94] | committer: Nicolas Pomepuy
Fix the initial loading state of the streams line
> https://code.videolan.org/videolan/vlc-android/commit/6dcd2896db9885a607c1c35bdf33e189a5aa8d94
---
application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt | 5 +++--
.../vlc-android/src/org/videolan/vlc/gui/view/TitleListView.kt | 7 +++++++
.../vlc-android/src/org/videolan/vlc/viewmodels/StreamsModel.kt | 5 +++++
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
index b9d030299d..1c4bb871bc 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/MoreFragment.kt
@@ -143,14 +143,15 @@ class MoreFragment : BaseFragment(), IRefreshable, IHistory, IDialogManager,
}
streamsViewModel.dataset.observe(viewLifecycleOwner) {
streamsAdapter.update(it)
- streamsEntry.loading.state = EmptyLoadingState.NONE
+ if (streamsViewModel.loading.value == false)
+ streamsEntry.isLoading = false
}
streamsViewModel.loading.observe(viewLifecycleOwner) {
lifecycleScope.launchWhenStarted {
if (it) delay(300L)
(activity as? MainActivity)?.refreshing = it
- if (it) streamsEntry.loading.state = EmptyLoadingState.LOADING
+ streamsEntry.isLoading = it
}
}
streamsEntry.actionButton.setVisible()
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/view/TitleListView.kt b/application/vlc-android/src/org/videolan/vlc/gui/view/TitleListView.kt
index 12bea3c37c..9585cb2a3b 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/view/TitleListView.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/view/TitleListView.kt
@@ -37,10 +37,17 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.videolan.tools.dp
import org.videolan.tools.setGone
+import org.videolan.tools.setVisible
import org.videolan.vlc.R
class TitleListView : ConstraintLayout {
+ var isLoading: Boolean = false
+ set(value) {
+ field = value
+ if (value) loading.state = EmptyLoadingState.LOADING else loading.state = EmptyLoadingState.NONE
+ if (value) list.setGone() else list.setVisible()
+ }
private var actionClickListener: ((View) -> Unit)? = null
var displayInCards: Boolean = true
set(value) {
diff --git a/application/vlc-android/src/org/videolan/vlc/viewmodels/StreamsModel.kt b/application/vlc-android/src/org/videolan/vlc/viewmodels/StreamsModel.kt
index 8f9c5f00c0..ed66ca995a 100644
--- a/application/vlc-android/src/org/videolan/vlc/viewmodels/StreamsModel.kt
+++ b/application/vlc-android/src/org/videolan/vlc/viewmodels/StreamsModel.kt
@@ -21,11 +21,13 @@
package org.videolan.vlc.viewmodels
import android.content.Context
+import android.util.Log
import androidx.databinding.ObservableField
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onCompletion
import kotlinx.coroutines.flow.onEach
@@ -35,6 +37,7 @@ import org.videolan.medialibrary.interfaces.Medialibrary
import org.videolan.medialibrary.interfaces.media.MediaWrapper
import org.videolan.resources.util.getFromMl
import org.videolan.tools.CoroutineContextProvider
+import org.videolan.vlc.BuildConfig
import org.videolan.vlc.PlaybackService
import org.videolan.vlc.util.DummyMediaWrapperProvider
import org.videolan.vlc.util.EmptyPBSCallback
@@ -53,6 +56,7 @@ class StreamsModel(context: Context, private val showDummy: Boolean = false, cor
PlaybackService.serviceFlow.onEach { onServiceChanged(it) }
.onCompletion { onServiceChanged(null) }
.launchIn(viewModelScope)
+ loading.postValue(true)
}
override suspend fun updateList() {
@@ -61,6 +65,7 @@ class StreamsModel(context: Context, private val showDummy: Boolean = false, cor
.also {
deletingMedia?.let { remove(it) }
if (showDummy) it.add(0, DummyMediaWrapperProvider.getDummyMediaWrapper(-1))
+ loading.postValue(!medialibrary.isStarted)
}
}
More information about the Android
mailing list