[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