[Android] Allow disabling the network discovery

Nicolas Pomepuy git at videolan.org
Tue May 20 16:04:24 UTC 2025


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Fri May 16 13:54:36 2025 +0200| [34edd49eab15992d96b786be71fb48383a757371] | committer: Duncan McNamara

Allow disabling the network discovery

> https://code.videolan.org/videolan/vlc-android/commit/34edd49eab15992d96b786be71fb48383a757371
---

 .../resources/src/main/res/values/strings.xml        |  2 ++
 .../src/main/java/org/videolan/tools/Settings.kt     |  1 +
 application/vlc-android/res/menu/activity_option.xml |  8 ++++++++
 .../videolan/vlc/gui/browser/MainBrowserFragment.kt  | 20 ++++++++++++++++++++
 .../org/videolan/vlc/providers/NetworkProvider.kt    | 14 +++++++++++---
 5 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/application/resources/src/main/res/values/strings.xml b/application/resources/src/main/res/values/strings.xml
index d315fe3628..315aa1d285 100644
--- a/application/resources/src/main/res/values/strings.xml
+++ b/application/resources/src/main/res/values/strings.xml
@@ -643,6 +643,8 @@
     <string name="network_shares_discovery">Looking for network shares</string>
     <string name="network_empty">This directory is empty.</string>
     <string name="network_connection_needed">No connection to local network.</string>
+    <string name="network_disabled">Network browsing disabled</string>
+    <string name="browse_network">Browse network</string>
     <string name="search_hint">Search media</string>
     <string name="search_in_list_hint">Search in current list</string>
     <string name="search_global">Search in all media library</string>
diff --git a/application/tools/src/main/java/org/videolan/tools/Settings.kt b/application/tools/src/main/java/org/videolan/tools/Settings.kt
index fabe3cfd59..aaa2b71763 100644
--- a/application/tools/src/main/java/org/videolan/tools/Settings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Settings.kt
@@ -122,6 +122,7 @@ const val KEY_AUDIO_SHOW_CHAPTER_BUTTONS = "audio_show_chapter_buttons"
 const val KEY_AUDIO_SHOW_BOOkMARK_BUTTONS = "audio_show_bookmark_buttons"
 const val KEY_AUDIO_SHOW_BOOKMARK_MARKERS = "audio_show_bookmark_markers"
 const val KEY_PERSISTENT_INCOGNITO = "persistent_incognito"
+const val KEY_BROWSE_NETWORK = "browse_network"
 
 
 // AudioPlayer
diff --git a/application/vlc-android/res/menu/activity_option.xml b/application/vlc-android/res/menu/activity_option.xml
index 254990511a..5ae1711573 100644
--- a/application/vlc-android/res/menu/activity_option.xml
+++ b/application/vlc-android/res/menu/activity_option.xml
@@ -76,6 +76,14 @@
             vlc:showAsAction="never"
             android:icon="@drawable/ic_view_list"
             android:visible="false"/>
+
+    <item
+            android:orderInCategory="3"
+            android:id="@+id/browse_network"
+            android:title="@string/browse_network"
+            android:checkable="true"
+            vlc:showAsAction="never"
+            android:visible="false"/>
     <item
             android:orderInCategory="3"
             android:id="@+id/ml_menu_display_grid"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
index c0a9508aa5..d20fb62245 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/browser/MainBrowserFragment.kt
@@ -44,6 +44,7 @@ import org.videolan.medialibrary.media.MediaLibraryItem
 import org.videolan.medialibrary.media.MediaWrapperImpl
 import org.videolan.resources.EXTRA_FOR_ESPRESSO
 import org.videolan.resources.util.parcelableList
+import org.videolan.tools.KEY_BROWSE_NETWORK
 import org.videolan.tools.NetworkMonitor
 import org.videolan.tools.Settings
 import org.videolan.tools.isStarted
@@ -140,6 +141,8 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
         menu.findItem(R.id.ml_menu_display_grid).isVisible = displayInList
         menu.findItem(R.id.ml_menu_display_list).isVisible = !displayInList
         menu.findItem(R.id.add_server_favorite).isVisible = true
+        menu.findItem(R.id.browse_network)?.isVisible = true
+        menu.findItem(R.id.browse_network)?.isChecked = Settings.getInstance(requireActivity()).getBoolean(KEY_BROWSE_NETWORK, true)
     }
 
     override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -156,6 +159,18 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
                 Settings.getInstance(requireActivity()).putSingle(displayInListKey, displayInList)
                 true
             }
+            R.id.browse_network -> {
+                lifecycleScope.launch {
+                    item.isChecked = !item.isChecked
+                    Settings.getInstance(requireActivity()).putSingle(KEY_BROWSE_NETWORK, item.isChecked)
+                    if (!item.isChecked) {
+                        networkViewModel.provider.stop()
+                        networkViewModel.provider.dataset.clear()
+                    }
+                    networkViewModel.refresh()
+                }
+                true
+            }
             R.id.add_server_favorite -> {
                 showAddServerDialog(null)
                 true
@@ -300,6 +315,11 @@ class MainBrowserFragment : BaseFragment(), View.OnClickListener, CtxActionRecei
     }
 
     private fun updateNetworkEmptyView(emptyLoading: EmptyLoadingStateView) {
+        if (!Settings.getInstance(requireActivity()).getBoolean(KEY_BROWSE_NETWORK, true)) {
+            emptyLoading.state = EmptyLoadingState.EMPTY
+            emptyLoading.emptyText = getString(R.string.network_disabled)
+            return
+        }
         if (networkMonitor.connected) {
             if (networkViewModel.isEmpty()) {
                 if (networkViewModel.loading.value == true) {
diff --git a/application/vlc-android/src/org/videolan/vlc/providers/NetworkProvider.kt b/application/vlc-android/src/org/videolan/vlc/providers/NetworkProvider.kt
index 27f61459d4..86f9e72a3f 100644
--- a/application/vlc-android/src/org/videolan/vlc/providers/NetworkProvider.kt
+++ b/application/vlc-android/src/org/videolan/vlc/providers/NetworkProvider.kt
@@ -21,19 +21,19 @@
 package org.videolan.vlc.providers
 
 import android.content.Context
-import android.graphics.Bitmap
-import android.net.Uri
+import android.util.Log
 import androidx.core.net.toUri
 import androidx.lifecycle.Observer
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.withContext
 import org.videolan.libvlc.util.MediaBrowser
-import org.videolan.medialibrary.MLServiceLocator
 import org.videolan.medialibrary.interfaces.Medialibrary
 import org.videolan.medialibrary.interfaces.media.MediaWrapper
 import org.videolan.medialibrary.media.DummyItem
 import org.videolan.medialibrary.media.MediaLibraryItem
+import org.videolan.tools.KEY_BROWSE_NETWORK
 import org.videolan.tools.NetworkMonitor
+import org.videolan.tools.Settings
 import org.videolan.tools.livedata.LiveDataset
 import org.videolan.vlc.R
 
@@ -41,6 +41,10 @@ class NetworkProvider(context: Context, dataset: LiveDataset<MediaLibraryItem>,
 
 
     override suspend fun browseRootImpl() {
+        if (!Settings.getInstance(context).getBoolean(KEY_BROWSE_NETWORK, true)) {
+            Log.i(TAG, "Network browseRootImpl disabled by KEY_BROWSE_NETWORK")
+            return
+        }
         dataset.clear()
         dataset.value = mutableListOf()
         if (mocked!= null)
@@ -52,6 +56,10 @@ class NetworkProvider(context: Context, dataset: LiveDataset<MediaLibraryItem>,
     override fun fetch() {}
 
     override suspend fun requestBrowsing(url: String?, eventListener: MediaBrowser.EventListener, interact : Boolean) = withContext(Dispatchers.IO) {
+        if (!Settings.getInstance(context).getBoolean(KEY_BROWSE_NETWORK, true)) {
+            Log.i(TAG, "Network browseRootImpl disabled by KEY_BROWSE_NETWORK")
+            return at withContext
+        }
         initBrowser()
         mediabrowser?.let {
             it.changeEventListener(eventListener)



More information about the Android mailing list