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:
|
* IMA extension:
|
||||||
* Session:
|
* Session:
|
||||||
* Put the custom keys and values in `MediaMetadataCompat` to
|
* Put the custom keys and values in `MediaMetadataCompat` to
|
||||||
`MediaMetadata.extras`
|
`MediaMetadata.extras` and `MediaMetadata.extras` to
|
||||||
([#756](https://github.com/androidx/media/issues/756)).
|
`MediaMetadataCompat`
|
||||||
|
([#756](https://github.com/androidx/media/issues/756),
|
||||||
|
[#802](https://github.com/androidx/media/issues/802)).
|
||||||
* UI:
|
* UI:
|
||||||
* Fix issue where forward and rewind buttons are not visible when used
|
* Fix issue where forward and rewind buttons are not visible when used
|
||||||
with Material Design in a BottomSheetDialogFragment
|
with Material Design in a BottomSheetDialogFragment
|
||||||
|
@ -1146,6 +1146,7 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
return new Builder(/* mediaMetadata= */ this);
|
return new Builder(/* mediaMetadata= */ this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Note: Equality checking does not consider {@link #extras}. */
|
||||||
@SuppressWarnings("deprecation") // Comparing deprecated fields.
|
@SuppressWarnings("deprecation") // Comparing deprecated fields.
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(@Nullable Object obj) {
|
public boolean equals(@Nullable Object obj) {
|
||||||
|
@ -559,7 +559,9 @@ import java.util.concurrent.TimeoutException;
|
|||||||
* duration should be included.
|
* duration should be included.
|
||||||
* @return An instance of the legacy {@link MediaMetadataCompat}.
|
* @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(
|
public static MediaMetadataCompat convertToMediaMetadataCompat(
|
||||||
MediaMetadata metadata,
|
MediaMetadata metadata,
|
||||||
String mediaId,
|
String mediaId,
|
||||||
@ -639,6 +641,20 @@ import java.util.concurrent.TimeoutException;
|
|||||||
builder.putLong(MediaConstants.EXTRAS_KEY_MEDIA_TYPE_COMPAT, metadata.mediaType);
|
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();
|
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.MediaControllerCompat;
|
||||||
import android.support.v4.media.session.MediaSessionCompat;
|
import android.support.v4.media.session.MediaSessionCompat;
|
||||||
import android.support.v4.media.session.PlaybackStateCompat;
|
import android.support.v4.media.session.PlaybackStateCompat;
|
||||||
|
import android.text.SpannedString;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media.AudioAttributesCompat;
|
import androidx.media.AudioAttributesCompat;
|
||||||
import androidx.media.VolumeProviderCompat;
|
import androidx.media.VolumeProviderCompat;
|
||||||
@ -263,6 +264,42 @@ public final class LegacyConversionsTest {
|
|||||||
.isEqualTo(MediaMetadata.MEDIA_TYPE_MUSIC);
|
.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
|
@Test
|
||||||
public void convertBetweenRatingAndRatingCompat() {
|
public void convertBetweenRatingAndRatingCompat() {
|
||||||
assertRatingEquals(
|
assertRatingEquals(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user