From 9ec6992ca171abbfd7b7aa0fde4ddc0bf0f4fe7e Mon Sep 17 00:00:00 2001 From: samrobinson Date: Thu, 1 Apr 2021 17:58:14 +0100 Subject: [PATCH] Populate MediaMetadata title from IcyInfo and TextInformationFrame. PiperOrigin-RevId: 366272937 --- .../android/exoplayer2/metadata/Metadata.java | 8 ++++++++ .../metadata/id3/TextInformationFrame.java | 13 +++++++++++++ .../android/exoplayer2/MediaMetadataTest.java | 13 +++++++++++++ .../android/exoplayer2/metadata/icy/IcyInfo.java | 8 ++++++++ 4 files changed, 42 insertions(+) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java b/library/common/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java index 21dacd4f9b..7e9a651ece 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/metadata/Metadata.java @@ -19,6 +19,7 @@ import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.Nullable; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.MediaMetadata; import com.google.android.exoplayer2.util.Util; import java.util.Arrays; import java.util.List; @@ -48,6 +49,13 @@ public final class Metadata implements Parcelable { default byte[] getWrappedMetadataBytes() { return null; } + + /** + * Updates the {@link MediaMetadata.Builder} with the type specific values stored in this Entry. + * + * @param builder The builder to be updated. + */ + default void populateMediaMetadata(MediaMetadata.Builder builder) {} } private final Entry[] entries; diff --git a/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/TextInformationFrame.java b/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/TextInformationFrame.java index 8337911c0d..048e7e70d8 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/TextInformationFrame.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/metadata/id3/TextInformationFrame.java @@ -20,6 +20,7 @@ import static com.google.android.exoplayer2.util.Util.castNonNull; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.Nullable; +import com.google.android.exoplayer2.MediaMetadata; import com.google.android.exoplayer2.util.Util; /** @@ -42,6 +43,18 @@ public final class TextInformationFrame extends Id3Frame { value = castNonNull(in.readString()); } + @Override + public void populateMediaMetadata(MediaMetadata.Builder builder) { + switch (id) { + case "TT2": + case "TIT2": + builder.setTitle(value); + break; + default: + break; + } + } + @Override public boolean equals(@Nullable Object obj) { if (this == obj) { diff --git a/library/common/src/test/java/com/google/android/exoplayer2/MediaMetadataTest.java b/library/common/src/test/java/com/google/android/exoplayer2/MediaMetadataTest.java index 8e3c486a40..0fe0821977 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/MediaMetadataTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/MediaMetadataTest.java @@ -18,6 +18,8 @@ package com.google.android.exoplayer2; import static com.google.common.truth.Truth.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.android.exoplayer2.metadata.Metadata; +import com.google.android.exoplayer2.metadata.id3.TextInformationFrame; import org.junit.Test; import org.junit.runner.RunWith; @@ -47,4 +49,15 @@ public class MediaMetadataTest { assertThat(MediaMetadata.CREATOR.fromBundle(mediaMetadata.toBundle())).isEqualTo(mediaMetadata); } + + @Test + public void builderPopulatedFromMetadataEntry_setsTitleCorrectly() { + String title = "the title"; + Metadata.Entry entry = + new TextInformationFrame(/* id= */ "TT2", /* description= */ null, /* value= */ title); + MediaMetadata.Builder builder = MediaMetadata.EMPTY.buildUpon(); + + entry.populateMediaMetadata(builder); + assertThat(builder.build().title).isEqualTo(title); + } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyInfo.java b/library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyInfo.java index 1a3ed2ea6d..9fda4ac725 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyInfo.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/metadata/icy/IcyInfo.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.metadata.icy; import android.os.Parcel; import android.os.Parcelable; import androidx.annotation.Nullable; +import com.google.android.exoplayer2.MediaMetadata; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.util.Assertions; import java.util.Arrays; @@ -52,6 +53,13 @@ public final class IcyInfo implements Metadata.Entry { url = in.readString(); } + @Override + public void populateMediaMetadata(MediaMetadata.Builder builder) { + if (title != null) { + builder.setTitle(title); + } + } + @Override public boolean equals(@Nullable Object obj) { if (this == obj) {