[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