diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 8eb95c496a..8b67555e01 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -16,6 +16,10 @@ * Fix issue where `MediaController` doesn't update its available commands when connected to a legacy `MediaSessionCompat` that updates its actions. + * 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)). ### 1.0.1 (2023-04-18) 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 192499d4e1..58720bbbb3 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 @@ -29,6 +29,7 @@ import androidx.media3.common.MediaItem import androidx.media3.common.util.Util 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 @@ -142,6 +143,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 60de48cae1..51e81c1b6c 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 @@ import org.checkerframework.checker.nullness.compatqual.NullableType; .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