diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 5fbcc32d567..f383948cc35 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -56,6 +56,10 @@ * Add helper method `MediaSession.getControllerForCurrentRequest` to obtain information about the controller that is currently calling a`Player` method. + * Fix bug that prevented the `MediaLibraryService` from returning null for + a call from System UI to `Callback.onGetLibraryRoot` with + `params.isRecent == true` on API 30 + ([#355](https://github.com/androidx/media/issues/355)). * UI: * Add Util methods `shouldShowPlayButton` and diff --git a/demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt b/demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt index ac160cf9ea0..d930c051821 100644 --- a/demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt +++ b/demos/session/src/main/java/androidx/media3/demo/session/PlaybackService.kt @@ -30,6 +30,7 @@ import androidx.media3.common.util.Util import androidx.media3.datasource.DataSourceBitmapLoader import androidx.media3.exoplayer.ExoPlayer import androidx.media3.session.* +import androidx.media3.session.LibraryResult.RESULT_ERROR_NOT_SUPPORTED import androidx.media3.session.MediaSession.ControllerInfo import com.google.common.collect.ImmutableList import com.google.common.util.concurrent.Futures @@ -143,6 +144,12 @@ class PlaybackService : MediaLibraryService() { browser: ControllerInfo, params: LibraryParams? ): ListenableFuture> { + if (params != null && params.isRecent) { + // The service currently does not support playback resumption. Tell System UI by returning + // an error of type 'RESULT_ERROR_NOT_SUPPORTED' for a `params.isRecent` request. See + // https://github.com/androidx/media/issues/355 + return Futures.immediateFuture(LibraryResult.ofError(RESULT_ERROR_NOT_SUPPORTED)) + } return Futures.immediateFuture(LibraryResult.ofItem(MediaItemTree.getRootItem(), params)) } diff --git a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java index 60de48cae18..51e81c1b6c5 100644 --- a/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java +++ b/libraries/session/src/main/java/androidx/media3/session/MediaLibraryServiceLegacyStub.java @@ -126,8 +126,11 @@ public BrowserRoot onGetRoot( .putBoolean(BROWSER_SERVICE_EXTRAS_KEY_SEARCH_SUPPORTED, isSearchSessionCommandAvailable); return new BrowserRoot(result.value.mediaId, extras); } - // No library root, but keep browser compat connected to allow getting session. - return MediaUtils.defaultBrowserRoot; + // No library root, but keep browser compat connected to allow getting session unless the + // `Callback` implementation has not returned a `RESULT_SUCCESS`. + return result != null && result.resultCode != RESULT_SUCCESS + ? null + : MediaUtils.defaultBrowserRoot; } // TODO(b/192455639): Optimize potential multiple calls of