Skip to content

Commit a294dc9

Browse files
toniheiSheenaChhabra
authored andcommitted
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 (cherry picked from commit 766a15a)
1 parent ad57b41 commit a294dc9

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

‎RELEASENOTES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
* Muxers:
1818
* IMA extension:
1919
* Session:
20+
* Fix issue where `MediaItem.RequestMetadata` with just non-null extras is
21+
not sent transmitted between media controllers and sessions.
2022
* UI:
2123
* Downloads:
2224
* OkHttp Extension:

‎libraries/common/src/main/java/androidx/media3/common/MediaItem.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2267,8 +2267,8 @@ public RequestMetadata build() {
22672267
/**
22682268
* Optional extras {@link Bundle}.
22692269
*
2270-
* <p>Given the complexities of checking the equality of two {@link Bundle}s, this is not
2271-
* considered in the {@link #equals(Object)} or {@link #hashCode()}.
2270+
* <p>Given the complexities of checking the equality of two {@link Bundle}s, the contents of
2271+
* these extras are not considered in the {@link #equals(Object)} or {@link #hashCode()}.
22722272
*/
22732273
@Nullable public final Bundle extras;
22742274

@@ -2292,13 +2292,16 @@ public boolean equals(@Nullable Object o) {
22922292
return false;
22932293
}
22942294
RequestMetadata that = (RequestMetadata) o;
2295-
return Util.areEqual(mediaUri, that.mediaUri) && Util.areEqual(searchQuery, that.searchQuery);
2295+
return Util.areEqual(mediaUri, that.mediaUri)
2296+
&& Util.areEqual(searchQuery, that.searchQuery)
2297+
&& ((extras == null) == (that.extras == null));
22962298
}
22972299

22982300
@Override
22992301
public int hashCode() {
23002302
int result = mediaUri == null ? 0 : mediaUri.hashCode();
23012303
result = 31 * result + (searchQuery == null ? 0 : searchQuery.hashCode());
2304+
result = 31 * result + (extras == null ? 0 : 1);
23022305
return result;
23032306
}
23042307

‎libraries/common/src/test/java/androidx/media3/common/MediaItemTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1067,6 +1067,24 @@ public void roundTripViaBundle_withoutLocalConfiguration_yieldsEqualInstance() {
10671067
assertThat(restoredMediaItem.localConfiguration).isEqualTo(mediaItem.localConfiguration);
10681068
}
10691069

1070+
/** Regression test for internal b/323302460 */
1071+
@Test
1072+
public void roundTripViaBundle_withJustNonNullRequestMetadataExtras_restoresAllData() {
1073+
Bundle extras = new Bundle();
1074+
extras.putString("key", "value");
1075+
MediaItem mediaItem =
1076+
new MediaItem.Builder()
1077+
.setMediaId("mediaId")
1078+
.setRequestMetadata(new RequestMetadata.Builder().setExtras(extras).build())
1079+
.build();
1080+
1081+
MediaItem restoredItem = MediaItem.fromBundle(mediaItem.toBundle());
1082+
1083+
assertThat(restoredItem).isEqualTo(mediaItem);
1084+
assertThat(restoredItem.requestMetadata.extras).isNotNull();
1085+
assertThat(restoredItem.requestMetadata.extras.get("key")).isEqualTo("value");
1086+
}
1087+
10701088
@Test
10711089
public void createDefaultMediaItemInstance_checksDefaultValues() {
10721090
MediaItem mediaItem = new MediaItem.Builder().build();

0 commit comments

Comments
 (0)