mirror of
https://github.com/androidx/media.git
synced 2025-05-03 21:57:46 +08:00
Populate MediaMetadata.extras
to MediaMetadataCompat
Ensures backward compatibility. Issue: androidx/media#802 PiperOrigin-RevId: 583425114 (cherry picked from commit 6df240877c30aedb271c2bc74c54fc2bab0e4cbf)
This commit is contained in:
parent
69884e764e
commit
aab1c9ada1
@ -21,8 +21,10 @@
|
||||
* IMA extension:
|
||||
* Session:
|
||||
* Put the custom keys and values in `MediaMetadataCompat` to
|
||||
`MediaMetadata.extras`
|
||||
([#756](https://github.com/androidx/media/issues/756)).
|
||||
`MediaMetadata.extras` and `MediaMetadata.extras` to
|
||||
`MediaMetadataCompat`
|
||||
([#756](https://github.com/androidx/media/issues/756),
|
||||
[#802](https://github.com/androidx/media/issues/802)).
|
||||
* UI:
|
||||
* Fix issue where forward and rewind buttons are not visible when used
|
||||
with Material Design in a BottomSheetDialogFragment
|
||||
|
@ -1146,6 +1146,7 @@ public final class MediaMetadata implements Bundleable {
|
||||
return new Builder(/* mediaMetadata= */ this);
|
||||
}
|
||||
|
||||
/** Note: Equality checking does not consider {@link #extras}. */
|
||||
@SuppressWarnings("deprecation") // Comparing deprecated fields.
|
||||
@Override
|
||||
public boolean equals(@Nullable Object obj) {
|
||||
|
@ -559,7 +559,9 @@ import java.util.concurrent.TimeoutException;
|
||||
* duration should be included.
|
||||
* @return An instance of the legacy {@link MediaMetadataCompat}.
|
||||
*/
|
||||
@SuppressWarnings("deprecation") // Converting deprecated fields.
|
||||
// Converting deprecated fields and suppressing nullness.
|
||||
// TODO: b/311689564 - Add @Nullable annotations to setters of MediaMetadataCompat.Builder
|
||||
@SuppressWarnings({"deprecation", "nullness:argument"})
|
||||
public static MediaMetadataCompat convertToMediaMetadataCompat(
|
||||
MediaMetadata metadata,
|
||||
String mediaId,
|
||||
@ -639,6 +641,20 @@ import java.util.concurrent.TimeoutException;
|
||||
builder.putLong(MediaConstants.EXTRAS_KEY_MEDIA_TYPE_COMPAT, metadata.mediaType);
|
||||
}
|
||||
|
||||
if (metadata.extras != null) {
|
||||
for (@Nullable String customKey : metadata.extras.keySet()) {
|
||||
@Nullable Object customValue = metadata.extras.get(customKey);
|
||||
if (customValue == null || customValue instanceof CharSequence) {
|
||||
builder.putText(customKey, (CharSequence) customValue);
|
||||
} else if (customValue instanceof Byte
|
||||
|| customValue instanceof Short
|
||||
|| customValue instanceof Integer
|
||||
|| customValue instanceof Long) {
|
||||
builder.putLong(customKey, ((Number) customValue).longValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ import android.support.v4.media.RatingCompat;
|
||||
import android.support.v4.media.session.MediaControllerCompat;
|
||||
import android.support.v4.media.session.MediaSessionCompat;
|
||||
import android.support.v4.media.session.PlaybackStateCompat;
|
||||
import android.text.SpannedString;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media.AudioAttributesCompat;
|
||||
import androidx.media.VolumeProviderCompat;
|
||||
@ -263,6 +264,42 @@ public final class LegacyConversionsTest {
|
||||
.isEqualTo(MediaMetadata.MEDIA_TYPE_MUSIC);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertToMediaMetadataCompat_populatesExtrasFromMediaMetadata() {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("customNullValueKey", null);
|
||||
extras.putString(null, "customNullKeyValue");
|
||||
extras.putString("customStringKey", "customStringValue");
|
||||
extras.putCharSequence("customCharSequenceKey", new SpannedString("customCharSequenceValue"));
|
||||
extras.putByte("customByteKey", (byte) 1);
|
||||
extras.putShort("customShortKey", (short) 5);
|
||||
extras.putInt("customIntegerKey", 10);
|
||||
extras.putLong("customLongKey", 20L);
|
||||
MediaItem mediaItem =
|
||||
new MediaItem.Builder()
|
||||
.setMediaMetadata(new MediaMetadata.Builder().setExtras(extras).build())
|
||||
.build();
|
||||
|
||||
MediaMetadataCompat mediaMetadataCompat =
|
||||
LegacyConversions.convertToMediaMetadataCompat(
|
||||
mediaItem.mediaMetadata,
|
||||
"mediadId",
|
||||
Uri.parse("http://www.test.com"),
|
||||
/* durationMs= */ C.TIME_UNSET,
|
||||
/* artworkBitmap= */ null);
|
||||
|
||||
assertThat(mediaMetadataCompat.getString("customNullValueKey")).isNull();
|
||||
assertThat(mediaMetadataCompat.getString(null)).isEqualTo("customNullKeyValue");
|
||||
assertThat(mediaMetadataCompat.getString("customStringKey")).isEqualTo("customStringValue");
|
||||
CharSequence customCharSequence = mediaMetadataCompat.getText("customCharSequenceKey");
|
||||
assertThat(customCharSequence).isInstanceOf(SpannedString.class);
|
||||
assertThat(customCharSequence.toString()).isEqualTo("customCharSequenceValue");
|
||||
assertThat(mediaMetadataCompat.getLong("customByteKey")).isEqualTo(1);
|
||||
assertThat(mediaMetadataCompat.getLong("customShortKey")).isEqualTo(5);
|
||||
assertThat(mediaMetadataCompat.getLong("customIntegerKey")).isEqualTo(10);
|
||||
assertThat(mediaMetadataCompat.getLong("customLongKey")).isEqualTo(20);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void convertBetweenRatingAndRatingCompat() {
|
||||
assertRatingEquals(
|
||||
|
Loading…
x
Reference in New Issue
Block a user