Include nullness of RequestMetadata.extras in equals method

This ensures RequestMetadata with just non-null extras is not
considered equal to RequestMetadata.EMPTY. This makes sure the
contents are bundled when a controller sets the extras in a
new MediaItem.

PiperOrigin-RevId: 604632788
This commit is contained in:
tonihei 2024-02-06 06:52:41 -08:00 committed by Copybara-Service
parent db74bb9609
commit 766a15a51e
3 changed files with 26 additions and 3 deletions

View File

@ -17,6 +17,8 @@
* Muxers: * Muxers:
* IMA extension: * IMA extension:
* Session: * Session:
* Fix issue where `MediaItem.RequestMetadata` with just non-null extras is
not sent transmitted between media controllers and sessions.
* UI: * UI:
* Downloads: * Downloads:
* OkHttp Extension: * OkHttp Extension:

View File

@ -2267,8 +2267,8 @@ public final class MediaItem implements Bundleable {
/** /**
* Optional extras {@link Bundle}. * Optional extras {@link Bundle}.
* *
* <p>Given the complexities of checking the equality of two {@link Bundle}s, this is not * <p>Given the complexities of checking the equality of two {@link Bundle}s, the contents of
* considered in the {@link #equals(Object)} or {@link #hashCode()}. * these extras are not considered in the {@link #equals(Object)} or {@link #hashCode()}.
*/ */
@Nullable public final Bundle extras; @Nullable public final Bundle extras;
@ -2292,13 +2292,16 @@ public final class MediaItem implements Bundleable {
return false; return false;
} }
RequestMetadata that = (RequestMetadata) o; RequestMetadata that = (RequestMetadata) o;
return Util.areEqual(mediaUri, that.mediaUri) && Util.areEqual(searchQuery, that.searchQuery); return Util.areEqual(mediaUri, that.mediaUri)
&& Util.areEqual(searchQuery, that.searchQuery)
&& ((extras == null) == (that.extras == null));
} }
@Override @Override
public int hashCode() { public int hashCode() {
int result = mediaUri == null ? 0 : mediaUri.hashCode(); int result = mediaUri == null ? 0 : mediaUri.hashCode();
result = 31 * result + (searchQuery == null ? 0 : searchQuery.hashCode()); result = 31 * result + (searchQuery == null ? 0 : searchQuery.hashCode());
result = 31 * result + (extras == null ? 0 : 1);
return result; return result;
} }

View File

@ -1067,6 +1067,24 @@ public class MediaItemTest {
assertThat(restoredMediaItem.localConfiguration).isEqualTo(mediaItem.localConfiguration); assertThat(restoredMediaItem.localConfiguration).isEqualTo(mediaItem.localConfiguration);
} }
/** Regression test for internal b/323302460 */
@Test
public void roundTripViaBundle_withJustNonNullRequestMetadataExtras_restoresAllData() {
Bundle extras = new Bundle();
extras.putString("key", "value");
MediaItem mediaItem =
new MediaItem.Builder()
.setMediaId("mediaId")
.setRequestMetadata(new RequestMetadata.Builder().setExtras(extras).build())
.build();
MediaItem restoredItem = MediaItem.fromBundle(mediaItem.toBundle());
assertThat(restoredItem).isEqualTo(mediaItem);
assertThat(restoredItem.requestMetadata.extras).isNotNull();
assertThat(restoredItem.requestMetadata.extras.get("key")).isEqualTo("value");
}
@Test @Test
public void createDefaultMediaItemInstance_checksDefaultValues() { public void createDefaultMediaItemInstance_checksDefaultValues() {
MediaItem mediaItem = new MediaItem.Builder().build(); MediaItem mediaItem = new MediaItem.Builder().build();