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,
|
browser: MediaSession.ControllerInfo,
|
||||||
params: LibraryParams?
|
params: LibraryParams?
|
||||||
): ListenableFuture<LibraryResult<MediaItem>> {
|
): ListenableFuture<LibraryResult<MediaItem>> {
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(LibraryResult.ofItem(MediaItemTree.getRootItem(), params))
|
||||||
LibraryResult.ofItem(MediaItemTree.getRootItem(), /* params= */ null)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onGetItem(
|
override fun onGetItem(
|
||||||
|
@ -153,7 +153,7 @@ public final class LibraryResult<V> implements Bundleable {
|
|||||||
/** The optional parameters. */
|
/** The optional parameters. */
|
||||||
@Nullable public final MediaLibraryService.LibraryParams params;
|
@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() {
|
public static LibraryResult<Void> ofVoid() {
|
||||||
return new LibraryResult<>(
|
return new LibraryResult<>(
|
||||||
RESULT_SUCCESS,
|
RESULT_SUCCESS,
|
||||||
@ -163,6 +163,15 @@ public final class LibraryResult<V> implements Bundleable {
|
|||||||
VALUE_TYPE_VOID);
|
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}.
|
* 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))
|
.postAndSync(() -> browser.getChildren(parentId, page, pageSize, params))
|
||||||
.get(TIMEOUT_MS, MILLISECONDS);
|
.get(TIMEOUT_MS, MILLISECONDS);
|
||||||
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
||||||
assertThat(result.params).isNull();
|
MediaTestUtils.assertLibraryParamsEquals(params, result.params);
|
||||||
|
|
||||||
MediaTestUtils.assertPaginatedListHasIds(
|
MediaTestUtils.assertPaginatedListHasIds(
|
||||||
result.value, MediaBrowserConstants.GET_CHILDREN_RESULT, page, pageSize);
|
result.value, MediaBrowserConstants.GET_CHILDREN_RESULT, page, pageSize);
|
||||||
@ -205,7 +205,7 @@ public class MediaBrowserListenerTest extends MediaControllerListenerTest {
|
|||||||
.postAndSync(() -> browser.getChildren(parentId, page, pageSize, params))
|
.postAndSync(() -> browser.getChildren(parentId, page, pageSize, params))
|
||||||
.get(LONG_TIMEOUT_MS, MILLISECONDS);
|
.get(LONG_TIMEOUT_MS, MILLISECONDS);
|
||||||
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
assertThat(result.resultCode).isEqualTo(RESULT_SUCCESS);
|
||||||
assertThat(result.params).isNull();
|
MediaTestUtils.assertLibraryParamsEquals(params, result.params);
|
||||||
|
|
||||||
assertThat(result.value).hasSize(LONG_LIST_COUNT);
|
assertThat(result.value).hasSize(LONG_LIST_COUNT);
|
||||||
for (int i = 0; i < result.value.size(); i++) {
|
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 static java.util.concurrent.TimeUnit.MILLISECONDS;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.session.MediaLibraryService.LibraryParams;
|
import androidx.media3.session.MediaLibraryService.LibraryParams;
|
||||||
import androidx.media3.session.MediaLibraryService.MediaLibrarySession;
|
import androidx.media3.session.MediaLibraryService.MediaLibrarySession;
|
||||||
import androidx.media3.session.MediaSession.ControllerInfo;
|
import androidx.media3.session.MediaSession.ControllerInfo;
|
||||||
@ -82,11 +83,11 @@ public class MediaLibrarySessionCallbackTest {
|
|||||||
MediaLibrarySession session,
|
MediaLibrarySession session,
|
||||||
ControllerInfo browser,
|
ControllerInfo browser,
|
||||||
String parentId,
|
String parentId,
|
||||||
LibraryParams params) {
|
@Nullable LibraryParams params) {
|
||||||
assertThat(parentId).isEqualTo(testParentId);
|
assertThat(parentId).isEqualTo(testParentId);
|
||||||
MediaTestUtils.assertLibraryParamsEquals(testParams, params);
|
MediaTestUtils.assertLibraryParamsEquals(testParams, params);
|
||||||
latch.countDown();
|
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.Bundle;
|
||||||
import android.os.HandlerThread;
|
import android.os.HandlerThread;
|
||||||
import androidx.annotation.GuardedBy;
|
import androidx.annotation.GuardedBy;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.MediaMetadata;
|
import androidx.media3.common.MediaMetadata;
|
||||||
import androidx.media3.common.util.BundleableUtil;
|
import androidx.media3.common.util.BundleableUtil;
|
||||||
@ -183,7 +184,7 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ListenableFuture<LibraryResult<MediaItem>> onGetLibraryRoot(
|
public ListenableFuture<LibraryResult<MediaItem>> onGetLibraryRoot(
|
||||||
MediaLibrarySession session, ControllerInfo browser, LibraryParams params) {
|
MediaLibrarySession session, ControllerInfo browser, @Nullable LibraryParams params) {
|
||||||
assertLibraryParams(params);
|
assertLibraryParams(params);
|
||||||
return Futures.immediateFuture(LibraryResult.ofItem(ROOT_ITEM, ROOT_PARAMS));
|
return Futures.immediateFuture(LibraryResult.ofItem(ROOT_ITEM, ROOT_PARAMS));
|
||||||
}
|
}
|
||||||
@ -218,30 +219,32 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
|||||||
String parentId,
|
String parentId,
|
||||||
int page,
|
int page,
|
||||||
int pageSize,
|
int pageSize,
|
||||||
LibraryParams params) {
|
@Nullable LibraryParams params) {
|
||||||
assertLibraryParams(params);
|
assertLibraryParams(params);
|
||||||
if (PARENT_ID.equals(parentId)) {
|
if (PARENT_ID.equals(parentId)) {
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(
|
||||||
LibraryResult.ofItemList(
|
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)) {
|
} else if (PARENT_ID_LONG_LIST.equals(parentId)) {
|
||||||
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
||||||
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
||||||
list.add(createPlayableMediaItem(TestUtils.getMediaIdInFakeTimeline(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)) {
|
} else if (PARENT_ID_ERROR.equals(parentId)) {
|
||||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
||||||
}
|
}
|
||||||
// Includes the case of PARENT_ID_NO_CHILDREN.
|
// Includes the case of PARENT_ID_NO_CHILDREN.
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.of(), params));
|
||||||
LibraryResult.ofItemList(ImmutableList.of(), /* params= */ null));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("FutureReturnValueIgnored")
|
@SuppressWarnings("FutureReturnValueIgnored")
|
||||||
public ListenableFuture<LibraryResult<Void>> onSearch(
|
public ListenableFuture<LibraryResult<Void>> onSearch(
|
||||||
MediaLibrarySession session, ControllerInfo browser, String query, LibraryParams params) {
|
MediaLibrarySession session,
|
||||||
|
ControllerInfo browser,
|
||||||
|
String query,
|
||||||
|
@Nullable LibraryParams params) {
|
||||||
assertLibraryParams(params);
|
assertLibraryParams(params);
|
||||||
if (SEARCH_QUERY.equals(query)) {
|
if (SEARCH_QUERY.equals(query)) {
|
||||||
MockMediaLibraryService.this.session.notifySearchResultChanged(
|
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.
|
// SEARCH_QUERY_EMPTY_RESULT and SEARCH_QUERY_ERROR will be handled here.
|
||||||
MockMediaLibraryService.this.session.notifySearchResultChanged(browser, query, 0, params);
|
MockMediaLibraryService.this.session.notifySearchResultChanged(browser, query, 0, params);
|
||||||
}
|
}
|
||||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -276,21 +279,19 @@ public class MockMediaLibraryService extends MediaLibraryService {
|
|||||||
String query,
|
String query,
|
||||||
int page,
|
int page,
|
||||||
int pageSize,
|
int pageSize,
|
||||||
LibraryParams params) {
|
@Nullable LibraryParams params) {
|
||||||
assertLibraryParams(params);
|
assertLibraryParams(params);
|
||||||
if (SEARCH_QUERY.equals(query)) {
|
if (SEARCH_QUERY.equals(query)) {
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(
|
||||||
LibraryResult.ofItemList(
|
LibraryResult.ofItemList(getPaginatedResult(SEARCH_RESULT, page, pageSize), params));
|
||||||
getPaginatedResult(SEARCH_RESULT, page, pageSize), /* params= */ null));
|
|
||||||
} else if (SEARCH_QUERY_LONG_LIST.equals(query)) {
|
} else if (SEARCH_QUERY_LONG_LIST.equals(query)) {
|
||||||
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
List<MediaItem> list = new ArrayList<>(LONG_LIST_COUNT);
|
||||||
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
for (int i = 0; i < LONG_LIST_COUNT; i++) {
|
||||||
list.add(createPlayableMediaItem(TestUtils.getMediaIdInFakeTimeline(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)) {
|
} else if (SEARCH_QUERY_EMPTY_RESULT.equals(query)) {
|
||||||
return Futures.immediateFuture(
|
return Futures.immediateFuture(LibraryResult.ofItemList(ImmutableList.of(), params));
|
||||||
LibraryResult.ofItemList(ImmutableList.of(), /* params= */ null));
|
|
||||||
} else {
|
} else {
|
||||||
// SEARCH_QUERY_ERROR will be handled here.
|
// SEARCH_QUERY_ERROR will be handled here.
|
||||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
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:
|
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL:
|
||||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||||
parentId, NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, NOTIFY_CHILDREN_CHANGED_PARAMS);
|
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:
|
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE:
|
||||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||||
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
||||||
parentId,
|
parentId,
|
||||||
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
||||||
NOTIFY_CHILDREN_CHANGED_PARAMS);
|
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:
|
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ALL_WITH_NON_SUBSCRIBED_ID:
|
||||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||||
unsubscribedId, NOTIFY_CHILDREN_CHANGED_ITEM_COUNT, NOTIFY_CHILDREN_CHANGED_PARAMS);
|
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:
|
case SUBSCRIBE_ID_NOTIFY_CHILDREN_CHANGED_TO_ONE_WITH_NON_SUBSCRIBED_ID:
|
||||||
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
MockMediaLibraryService.this.session.notifyChildrenChanged(
|
||||||
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
MediaTestUtils.getTestControllerInfo(MockMediaLibraryService.this.session),
|
||||||
unsubscribedId,
|
unsubscribedId,
|
||||||
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
NOTIFY_CHILDREN_CHANGED_ITEM_COUNT,
|
||||||
NOTIFY_CHILDREN_CHANGED_PARAMS);
|
NOTIFY_CHILDREN_CHANGED_PARAMS);
|
||||||
return Futures.immediateFuture(LibraryResult.ofVoid());
|
return Futures.immediateFuture(LibraryResult.ofVoid(params));
|
||||||
default: // fall out
|
default: // fall out
|
||||||
}
|
}
|
||||||
return Futures.immediateFuture(LibraryResult.ofError(LibraryResult.RESULT_ERROR_BAD_VALUE));
|
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));
|
return Futures.immediateFuture(new SessionResult(SessionResult.RESULT_ERROR_BAD_VALUE));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertLibraryParams(LibraryParams params) {
|
private void assertLibraryParams(@Nullable LibraryParams params) {
|
||||||
synchronized (MockMediaLibraryService.class) {
|
synchronized (MockMediaLibraryService.class) {
|
||||||
if (assertLibraryParams) {
|
if (assertLibraryParams) {
|
||||||
assertLibraryParamsEquals(expectedParams, params);
|
assertLibraryParamsEquals(expectedParams, params);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user