[Android] Always return suggestions for quick search client

Robert Stone git at videolan.org
Thu Apr 24 07:23:39 UTC 2025


vlc-android | branch: master | Robert Stone <rhstone at gmail.com> | Mon Apr 21 23:29:47 2025 -0700| [8e88994523d72afb75bdd3549e0c633ab2da615b] | committer: Nicolas Pomepuy

Always return suggestions for quick search client
Remove unused menu structure and do not return Shuffle All in suggestions

Fixes #3163

> https://code.videolan.org/videolan/vlc-android/commit/8e88994523d72afb75bdd3549e0c633ab2da615b
---

 .../main/java/org/videolan/resources/Constants.kt  |  2 +-
 .../src/org/videolan/vlc/PlaybackService.kt        |  5 ++-
 .../org/videolan/vlc/media/MediaSessionBrowser.kt  | 43 +++++++---------------
 3 files changed, 18 insertions(+), 32 deletions(-)

diff --git a/application/resources/src/main/java/org/videolan/resources/Constants.kt b/application/resources/src/main/java/org/videolan/resources/Constants.kt
index 1814f3ea0f..35d4e39391 100644
--- a/application/resources/src/main/java/org/videolan/resources/Constants.kt
+++ b/application/resources/src/main/java/org/videolan/resources/Constants.kt
@@ -75,7 +75,7 @@ const val PLAYLIST_TYPE_AUDIO = 0
 const val PLAYLIST_TYPE_VIDEO = 1
 const val PLAYLIST_TYPE_ALL = 2
 const val MEDIALIBRARY_PAGE_SIZE = 500
-const val DRIVING_MODE_APP_PKG = "com.google.android.googlequicksearchbox"
+const val QUICK_SEARCH_BOX_APP_PKG = "com.google.android.googlequicksearchbox"
 const val ANDROID_AUTO_APP_PKG = "com.google.android.projection.gearhead"
 const val EXTRA_BROWSER_ICON_SIZE = "com.google.android.gms.car.media.BrowserIconSize"
 const val WEARABLE_SHOW_CUSTOM_ACTION = "android.support.wearable.media.extra.CUSTOM_ACTION_SHOW_ON_WEAR"
diff --git a/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt b/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
index f620bf15ef..56b6944f92 100644
--- a/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
+++ b/application/vlc-android/src/org/videolan/vlc/PlaybackService.kt
@@ -122,7 +122,6 @@ import org.videolan.resources.CUSTOM_ACTION_REPEAT
 import org.videolan.resources.CUSTOM_ACTION_REWIND
 import org.videolan.resources.CUSTOM_ACTION_SHUFFLE
 import org.videolan.resources.CUSTOM_ACTION_SPEED
-import org.videolan.resources.DRIVING_MODE_APP_PKG
 import org.videolan.resources.EXTRA_CUSTOM_ACTION_ID
 import org.videolan.resources.EXTRA_PLAY_ONLY
 import org.videolan.resources.EXTRA_SEARCH_BUNDLE
@@ -131,6 +130,7 @@ import org.videolan.resources.PLAYBACK_SLOT_RESERVATION_SKIP_TO_NEXT
 import org.videolan.resources.PLAYBACK_SLOT_RESERVATION_SKIP_TO_PREV
 import org.videolan.resources.PLAYLIST_TYPE_ALL
 import org.videolan.resources.PLAYLIST_TYPE_AUDIO
+import org.videolan.resources.QUICK_SEARCH_BOX_APP_PKG
 import org.videolan.resources.VLCInstance
 import org.videolan.resources.VLCOptions
 import org.videolan.resources.WEARABLE_RESERVE_SLOT_SKIP_TO_NEXT
@@ -1907,10 +1907,11 @@ class PlaybackService : MediaBrowserServiceCompat(), LifecycleOwner, CoroutineSc
             rootHints?.containsKey(BrowserRoot.EXTRA_SUGGESTED) == true -> BrowserRoot(MediaSessionBrowser.ID_SUGGESTED, null)
             else -> {
                 val rootId = when (clientPackageName) {
-                    DRIVING_MODE_APP_PKG -> MediaSessionBrowser.ID_ROOT_NO_TABS
+                    QUICK_SEARCH_BOX_APP_PKG -> MediaSessionBrowser.ID_SUGGESTED
                     else -> MediaSessionBrowser.ID_ROOT
                 }
                 val extras = MediaSessionBrowser.getContentStyle().apply {
+                    putBoolean(BrowserRoot.EXTRA_SUGGESTED, true)
                     putBoolean(MediaConstants.BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED, true)
                 }
                 if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O && clientPackageName == ANDROID_AUTO_APP_PKG) {
diff --git a/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt b/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
index 457a3c758c..ed116b546c 100644
--- a/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
+++ b/application/vlc-android/src/org/videolan/vlc/media/MediaSessionBrowser.kt
@@ -119,7 +119,6 @@ class MediaSessionBrowser {
         // Root item
         // MediaIds are all strings. Maintain in uri parsable format.
         const val ID_ROOT = "//${BuildConfig.APP_ID}/r"
-        const val ID_ROOT_NO_TABS = "$ID_ROOT?f=1"
         const val ID_MEDIA = "$ID_ROOT/media"
         const val ID_SEARCH = "$ID_ROOT/search"
         const val ID_SUGGESTED = "$ID_ROOT/suggested"
@@ -161,20 +160,16 @@ class MediaSessionBrowser {
             val page = parentIdUri.getQueryParameter("p")
             val pageOffset = page?.toInt()?.times(MAX_RESULT_SIZE) ?: 0
             val isAndroidAuto = rootHints?.containsKey(EXTRA_BROWSER_ICON_SIZE) ?: false
-            val flatten = parentIdUri.getBooleanQueryParameter("f", false)
             when (parentIdUri.removeQuery().toString()) {
                 ID_ROOT -> {
                     //Home
-                    if (flatten) browse(context, ID_HOME, isShuffling)?.let { results.addAll(it) }
-                    else {
-                        val homeMediaDesc = MediaDescriptionCompat.Builder()
-                                .setMediaId(ID_HOME)
-                                .setTitle(res.getString(R.string.auto_home))
-                                .setIconUri(res.getResourceUri(R.drawable.ic_auto_home))
-                                .setExtras(getContentStyle(CONTENT_STYLE_GRID_ITEM_HINT_VALUE, CONTENT_STYLE_GRID_ITEM_HINT_VALUE))
-                                .build()
-                        results.add(MediaBrowserCompat.MediaItem(homeMediaDesc, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE))
-                    }
+                    val homeMediaDesc = MediaDescriptionCompat.Builder()
+                        .setMediaId(ID_HOME)
+                        .setTitle(res.getString(R.string.auto_home))
+                        .setIconUri(res.getResourceUri(R.drawable.ic_auto_home))
+                        .setExtras(getContentStyle(CONTENT_STYLE_GRID_ITEM_HINT_VALUE, CONTENT_STYLE_GRID_ITEM_HINT_VALUE))
+                        .build()
+                    results.add(MediaBrowserCompat.MediaItem(homeMediaDesc, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE))
                     //Playlists
                     val playlistMediaDesc = MediaDescriptionCompat.Builder()
                             .setMediaId(ID_PLAYLIST)
@@ -184,16 +179,13 @@ class MediaSessionBrowser {
                             .build()
                     results.add(MediaBrowserCompat.MediaItem(playlistMediaDesc, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE))
                     //My library
-                    if (flatten) browse(context, ID_LIBRARY, isShuffling)?.let { results.addAll(it) }
-                    else {
-                        val libraryMediaDesc = MediaDescriptionCompat.Builder()
-                                .setMediaId(ID_LIBRARY)
-                                .setTitle(res.getString(R.string.auto_my_library))
-                                .setIconUri(res.getResourceUri(R.drawable.ic_auto_my_library))
-                                .setExtras(getContentStyle(CONTENT_STYLE_CATEGORY_ITEM_HINT_VALUE))
-                                .build()
-                        results.add(MediaBrowserCompat.MediaItem(libraryMediaDesc, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE))
-                    }
+                    val libraryMediaDesc = MediaDescriptionCompat.Builder()
+                            .setMediaId(ID_LIBRARY)
+                            .setTitle(res.getString(R.string.auto_my_library))
+                            .setIconUri(res.getResourceUri(R.drawable.ic_auto_my_library))
+                            .setExtras(getContentStyle(CONTENT_STYLE_CATEGORY_ITEM_HINT_VALUE))
+                            .build()
+                    results.add(MediaBrowserCompat.MediaItem(libraryMediaDesc, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE))
                     //Streams
                     val streamsMediaDesc = MediaDescriptionCompat.Builder()
                             .setMediaId(ID_STREAM)
@@ -442,13 +434,6 @@ class MediaSessionBrowser {
             if (!recentAudio.isNullOrEmpty()) for (mw in recentAudio) mw.albumName?.let { albumNames.add(it) }
             /* Build the list of media items */
             val results: ArrayList<MediaBrowserCompat.MediaItem> = ArrayList()
-            val shuffleAllPath = Uri.Builder()
-                    .appendPath(ArtworkProvider.SHUFFLE_ALL)
-                    .appendPath(ArtworkProvider.computeExpiration())
-                    .appendPath("$audioCount")
-                    .build()
-            val shuffleAllMediaDesc = getPlayAllBuilder(context, ID_SHUFFLE_ALL, R.string.shuffle_all_title, audioCount, shuffleAllPath).build()
-            results.add(MediaBrowserCompat.MediaItem(shuffleAllMediaDesc, MediaBrowserCompat.MediaItem.FLAG_PLAYABLE))
             /* Query albums by name */
             val albums = mutableSetOf<Album>()
             for (albumName in albumNames) ml.searchAlbum(albumName)?.let { albums.addAll(it.toList()) }



More information about the Android mailing list