Fix implementations of MediaLibrarySessionCallback to pass params
The documentation makes it clear this value should be propagated through to the result. PiperOrigin-RevId: 407085751
This commit is contained in:
parent
dfb87e2161
commit
8b34d160dc
@ -50,9 +50,7 @@ class PlaybackService : MediaLibraryService() {
|
||||
browser: MediaSession.ControllerInfo,
|
||||
params: LibraryParams?
|
||||
): ListenableFuture<LibraryResult<MediaItem>> {
|
||||
return Futures.immediateFuture(
|
||||
LibraryResult.ofItem(MediaItemTree.getRootItem(), /* params= */ null)
|
||||
)
|
||||
return Futures.immediateFuture(LibraryResult.ofItem(MediaItemTree.getRootItem(), params))
|
||||
}
|
||||
|
||||
override fun onGetItem(
|
||||
|
@ -153,7 +153,7 @@ public final class LibraryResult<V> implements Bundleable {
|
||||
/** The optional parameters. */
|
||||
@Nullable public final MediaLibraryService.LibraryParams params;
|
||||
|
||||
/** Constructs a new instance with {@link #resultCode}{@code ==}{@link #RESULT_SUCCESS}. */
|
||||
/** Creates an instance with {@link #resultCode}{@code ==}{@link #RESULT_SUCCESS}. */
|
||||
public static LibraryResult<Void> ofVoid() {
|
||||
return new LibraryResult<>(
|
||||
RESULT_SUCCESS,
|
||||
@ -163,6 +163,15 @@ public final class LibraryResult<V> implements Bundleable {
|
||||
VALUE_TYPE_VOID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance with {@link #resultCode}{@code ==}{@link #RESULT_SUCCESS} and optional
|
||||
* {@link LibraryParams params}.
|
||||
*/
|
||||
public static LibraryResult<Void> ofVoid(@Nullable LibraryParams params) {
|
||||
return new LibraryResult<>(
|
||||
RESULT_SUCCESS, SystemClock.elapsedRealtime(), params, /* value= */ null, VALUE_TYPE_VOID);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an instance with a media item and {@link #resultCode}{@code ==}{@link #RESULT_SUCCESS}.
|
||||
*
|
||||
|
@ -183,7 +183,7 @@ public class MediaBrowserListenerTest extends MediaControllerListenerTest {
|
||||
.postAndSync(() -> browser.getChildren(parentId, page, pageSize, params))
|
||||
.get(TIMEOUT_MS, MILLISECONDS);
|
||||
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
||||
assertThat(result.params).isNull();
|
||||
MediaTestUtils.assertLibraryParamsEquals(params, result.params);
|
||||
|
||||
MediaTestUtils.assertPaginatedListHasIds(
|
||||
result.value, MediaBrowserConstants.GET_CHILDREN_RESULT, page, pageSize);
|
||||
@ -205,7 +205,7 @@ public class MediaBrowserListenerTest extends MediaControllerListenerTest {
|
||||
.postAndSync(() -> browser.getChildren(parentId, page, pageSize, params))
|
||||
.get(LONG_TIMEOUT_MS, MILLISECONDS);
|
||||
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
||||
assertThat(result.params).isNull();
|
||||
MediaTestUtils.assertLibraryParamsEquals(params, result.params);
|
||||
|
||||
assertThat(result.value).hasSize(LONG_LIST_COUNT);
|
||||
for (int i = 0; i < result.value.size(); i++) {
|
||||
|
@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.session.MediaLibraryService.LibraryParams;
|
||||
import androidx.media3.session.MediaLibraryService.MediaLibrarySession;
|
||||
import androidx.media3.session.MediaSession.ControllerInfo;
|
||||
@ -82,11 +83,11 @@ public class MediaLibrarySessionCallbackTest {
|
||||
MediaLibrarySession session,
|
||||
ControllerInfo browser,
|
||||
String parentId,
|
||||
LibraryParams params) {
|
||||
@Nullable LibraryParams params) {
|
||||
assertThat(parentId).isEqualTo(testParentId);
|
||||
MediaTestUtils.assertLibraryParamsEquals(testParams, params);
|
||||
latch.countDown();
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -52,6 +52,7 @@ import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import android.os.HandlerThread;
|
||||
import androidx.annotation.GuardedBy;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.MediaMetadata;
|
||||
import androidx.media3.common.util.BundleableUtil;
|
||||
@ -183,7 +184,7 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
|
||||
@Override
|
||||
public ListenableFuture<LibraryResult<MediaItem>> onGetLibraryRoot(
|
||||
MediaLibrarySession session, ControllerInfo browser, LibraryParams params) {
|
||||
MediaLibrarySession session, ControllerInfo browser, @Nullable LibraryParams params) {
|
||||
assertLibraryParams(params);
|
||||
return Futures.immediateFuture(LibraryResult.ofItem(ROOT_ITEM, ROOT_PARAMS));
|
||||
}
|
||||
@ -218,30 +219,32 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
String parentId,
|
||||
int page,
|
||||
int pageSize,
|
||||
LibraryParams params) {
|
||||
@Nullable LibraryParams params) {
|
||||
assertLibraryParams(params);
|
||||
if (PARENT_ID.equals(parentId)) {
|
||||
return Futures.immediateFuture(
|
||||
LibraryResult.ofItemList(
|
||||
getPaginatedResult(GET_CHILDREN_RESULT, page, pageSize), /* params= */ null));
|
||||
getPaginatedResult(GET_CHILDREN_RESULT, page, pageSize), params));
|
||||
} else if (PARENT_ID_LONG_LIST.equals(parentId)) {
|
||||
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
||||
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
||||
list.add(createPlayableMediaItem(TestUtils.getMediaIdInFakeTimeline(i)));
|
||||
}
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(list, /* params= */ null));
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(list, params));
|
||||
} else if (PARENT_ID_ERROR.equals(parentId)) {
|
||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
||||
}
|
||||
// Includes the case of PARENT_ID_NO_CHILDREN.
|
||||
return Futures.immediateFuture(
|
||||
LibraryResult.ofItemList(ImmutableList.of(), /* params= */ null));
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.of(), params));
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("FutureReturnValueIgnored")
|
||||
public ListenableFuture<LibraryResult<Void>> onSearch(
|
||||
MediaLibrarySession session, ControllerInfo browser, String query, LibraryParams params) {
|
||||
MediaLibrarySession session,
|
||||
ControllerInfo browser,
|
||||
String query,
|
||||
@Nullable LibraryParams params) {
|
||||
assertLibraryParams(params);
|
||||
if (SEARCH_QUERY.equals(query)) {
|
||||
MockMediaLibraryService.this.session.notifySearchResultChanged(
|
||||
@ -266,7 +269,7 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
// SEARCH_QUERY_EMPTY_RESULT and SEARCH_QUERY_ERROR will be handled here.
|
||||
MockMediaLibraryService.this.session.notifySearchResultChanged(browser, query, 0, params);
|
||||
}
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -276,21 +279,19 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
String query,
|
||||
int page,
|
||||
int pageSize,
|
||||
LibraryParams params) {
|
||||
@Nullable LibraryParams params) {
|
||||
assertLibraryParams(params);
|
||||
if (SEARCH_QUERY.equals(query)) {
|
||||
return Futures.immediateFuture(
|
||||
LibraryResult.ofItemList(
|
||||
getPaginatedResult(SEARCH_RESULT, page, pageSize), /* params= */ null));
|
||||
LibraryResult.ofItemList(getPaginatedResult(SEARCH_RESULT, page, pageSize), params));
|
||||
} else if (SEARCH_QUERY_LONG_LIST.equals(query)) {
|
||||
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
||||
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
||||
list.add(createPlayableMediaItem(TestUtils.getMediaIdInFakeTimeline(i)));
|
||||
}
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(list, /* params= */ null));
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(list, params));
|
||||
} else if (SEARCH_QUERY_EMPTY_RESULT.equals(query)) {
|
||||
return Futures.immediateFuture(
|
||||
LibraryResult.ofItemList(ImmutableList.of(), /* params= */ null));
|
||||
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.of(), params));
|
||||
} else {
|
||||
// SEARCH_QUERY_ERROR will be handled here.
|
||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
||||
@ -309,25 +310,25 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL:
|
||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||
parentId, NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, NOTIFY_CHILDREN_CHANGED_PARAMS);
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE:
|
||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
||||
parentId,
|
||||
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
||||
NOTIFY_CHILDREN_CHANGED_PARAMS);
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL_WITH_NON_SUBSCRIBED_ID:
|
||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||
unsubscribedId, NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, NOTIFY_CHILDREN_CHANGED_PARAMS);
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE_WITH_NON_SUBSCRIBED_ID:
|
||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
||||
unsubscribedId,
|
||||
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
||||
NOTIFY_CHILDREN_CHANGED_PARAMS);
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
||||
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||
default: // fall out
|
||||
}
|
||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
||||
@ -354,7 +355,7 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
||||
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_ERROR_BAD_VALUE));
|
||||
}
|
||||
|
||||
private void assertLibraryParams(LibraryParams params) {
|
||||
private void assertLibraryParams(@Nullable LibraryParams params) {
|
||||
synchronized (MockMediaLibraryService.class) {
|
||||
if (assertLibraryParams) {
|
||||
assertLibraryParamsEquals(expectedParams, params);
|
||||
|
Loading…
x
Reference in New Issue
Block a user