Change the behaviour in MediaMetadata.Builder.populate

Populate both `artworkUri` and `artworkData` in
`MediaMetadata.Builder.populate(MediaMetadata)` when at least one of them is non-null.

Issue: androidx/media#964
PiperOrigin-RevId: 600826103
This commit is contained in:
tianyifeng 2024-01-23 10:05:40 -08:00 committed by Copybara-Service
parent b98e5ac0d4
commit 35ac46b92e
3 changed files with 41 additions and 6 deletions

View File

@ -3,6 +3,9 @@
### Unreleased changes ### Unreleased changes
* Common Library: * Common Library:
* Populate both `artworkUri` and `artworkData` in
`MediaMetadata.Builder.populate(MediaMetadata)` when at least one of
them is non-null ([#964](https://github.com/androidx/media/issues/964)).
* ExoPlayer: * ExoPlayer:
* Prevent subclassing `CompositeSequenceableLoader`. This component was * Prevent subclassing `CompositeSequenceableLoader`. This component was
[previously made extensible](https://github.com/androidx/media/commit/0de57cbfae7165dd3bb829e323d089cd312b4b1b) [previously made extensible](https://github.com/androidx/media/commit/0de57cbfae7165dd3bb829e323d089cd312b4b1b)

View File

@ -462,7 +462,12 @@ public final class MediaMetadata implements Bundleable {
return this; return this;
} }
/** Populates all the fields from {@code mediaMetadata}, provided they are non-null. */ /**
* Populates all the fields from {@code mediaMetadata}.
*
* <p>Fields are populated when they are non-null with an exception that both {@code artworkUri}
* and {@code artworkData} are populated, when at least one of them is non-null.
*/
@SuppressWarnings("deprecation") // Populating deprecated fields. @SuppressWarnings("deprecation") // Populating deprecated fields.
@CanIgnoreReturnValue @CanIgnoreReturnValue
@UnstableApi @UnstableApi
@ -497,11 +502,9 @@ public final class MediaMetadata implements Bundleable {
if (mediaMetadata.overallRating != null) { if (mediaMetadata.overallRating != null) {
setOverallRating(mediaMetadata.overallRating); setOverallRating(mediaMetadata.overallRating);
} }
if (mediaMetadata.artworkData != null) { if (mediaMetadata.artworkUri != null || mediaMetadata.artworkData != null) {
setArtworkData(mediaMetadata.artworkData, mediaMetadata.artworkDataType);
}
if (mediaMetadata.artworkUri != null) {
setArtworkUri(mediaMetadata.artworkUri); setArtworkUri(mediaMetadata.artworkUri);
setArtworkData(mediaMetadata.artworkData, mediaMetadata.artworkDataType);
} }
if (mediaMetadata.trackNumber != null) { if (mediaMetadata.trackNumber != null) {
setTrackNumber(mediaMetadata.trackNumber); setTrackNumber(mediaMetadata.trackNumber);

View File

@ -89,7 +89,7 @@ public class MediaMetadataTest {
} }
@Test @Test
public void builderSetArworkUri_setsArtworkUri() { public void builderSetArtworkUri_setsArtworkUri() {
Uri uri = Uri.parse("https://www.google.com"); Uri uri = Uri.parse("https://www.google.com");
MediaMetadata mediaMetadata = new MediaMetadata.Builder().setArtworkUri(uri).build(); MediaMetadata mediaMetadata = new MediaMetadata.Builder().setArtworkUri(uri).build();
@ -107,6 +107,35 @@ public class MediaMetadataTest {
assertThat(populated.extras.getString(EXTRAS_KEY)).isEqualTo(EXTRAS_VALUE); assertThat(populated.extras.getString(EXTRAS_KEY)).isEqualTo(EXTRAS_VALUE);
} }
@Test
public void populate_withArtworkUriOnly_updatesBothArtWorkUriAndArtworkData() {
Uri artWorkUri = Uri.parse("https://www.test.com");
MediaMetadata mediaMetadata = new MediaMetadata.Builder().setArtworkUri(artWorkUri).build();
MediaMetadata originalMediaMetadata = getFullyPopulatedMediaMetadata();
MediaMetadata populatedMediaMetadata =
originalMediaMetadata.buildUpon().populate(mediaMetadata).build();
assertThat(populatedMediaMetadata.artworkUri).isEqualTo(artWorkUri);
assertThat(populatedMediaMetadata.artworkData).isNull();
}
@Test
public void populate_withArtworkDataOnly_updatesBothArtWorkUriAndArtworkData() {
byte[] artworkData = new byte[] {35, 12, 6, 77};
MediaMetadata mediaMetadata =
new MediaMetadata.Builder()
.setArtworkData(artworkData, MediaMetadata.PICTURE_TYPE_MEDIA)
.build();
MediaMetadata originalMediaMetadata = getFullyPopulatedMediaMetadata();
MediaMetadata populatedMediaMetadata =
originalMediaMetadata.buildUpon().populate(mediaMetadata).build();
assertThat(populatedMediaMetadata.artworkData).isEqualTo(artworkData);
assertThat(populatedMediaMetadata.artworkUri).isNull();
}
@Test @Test
public void toBundleSkipsDefaultValues_fromBundleRestoresThem() { public void toBundleSkipsDefaultValues_fromBundleRestoresThem() {
MediaMetadata mediaMetadata = new MediaMetadata.Builder().build(); MediaMetadata mediaMetadata = new MediaMetadata.Builder().build();