Add a mediaType field to MediaMetadata.
#minor-release PiperOrigin-RevId: 375097412
This commit is contained in:
parent
7a6a9b0d48
commit
ae400176b2
@ -51,6 +51,8 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
@Nullable private Uri artworkUri;
|
@Nullable private Uri artworkUri;
|
||||||
@Nullable private Integer trackNumber;
|
@Nullable private Integer trackNumber;
|
||||||
@Nullable private Integer totalTrackCount;
|
@Nullable private Integer totalTrackCount;
|
||||||
|
@Nullable @FolderType private Integer folderType;
|
||||||
|
@Nullable private Boolean isPlayable;
|
||||||
|
|
||||||
public Builder() {}
|
public Builder() {}
|
||||||
|
|
||||||
@ -69,6 +71,8 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
this.artworkUri = mediaMetadata.artworkUri;
|
this.artworkUri = mediaMetadata.artworkUri;
|
||||||
this.trackNumber = mediaMetadata.trackNumber;
|
this.trackNumber = mediaMetadata.trackNumber;
|
||||||
this.totalTrackCount = mediaMetadata.totalTrackCount;
|
this.totalTrackCount = mediaMetadata.totalTrackCount;
|
||||||
|
this.folderType = mediaMetadata.folderType;
|
||||||
|
this.isPlayable = mediaMetadata.isPlayable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the title. */
|
/** Sets the title. */
|
||||||
@ -159,6 +163,18 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the {@link FolderType}. */
|
||||||
|
public Builder setFolderType(@Nullable @FolderType Integer folderType) {
|
||||||
|
this.folderType = folderType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Sets whether the media is playable. */
|
||||||
|
public Builder setIsPlayable(@Nullable Boolean isPlayable) {
|
||||||
|
this.isPlayable = isPlayable;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets all fields supported by the {@link Metadata.Entry entries} within the {@link Metadata}.
|
* Sets all fields supported by the {@link Metadata.Entry entries} within the {@link Metadata}.
|
||||||
*
|
*
|
||||||
@ -203,6 +219,41 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The folder type of the media item.
|
||||||
|
*
|
||||||
|
* <p>This can be used as the type of a browsable bluetooth folder (see section 6.10.2.2 of the <a
|
||||||
|
* href="https://www.bluetooth.com/specifications/specs/a-v-remote-control-profile-1-6-2/">Bluetooth
|
||||||
|
* AVRCP 1.6.2</a>).
|
||||||
|
*/
|
||||||
|
@Documented
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntDef({
|
||||||
|
FOLDER_TYPE_MIXED,
|
||||||
|
FOLDER_TYPE_TITLES,
|
||||||
|
FOLDER_TYPE_ALBUMS,
|
||||||
|
FOLDER_TYPE_ARTISTS,
|
||||||
|
FOLDER_TYPE_GENRES,
|
||||||
|
FOLDER_TYPE_PLAYLISTS,
|
||||||
|
FOLDER_TYPE_YEARS
|
||||||
|
})
|
||||||
|
public @interface FolderType {}
|
||||||
|
|
||||||
|
/** Type for a folder containing media of mixed types. */
|
||||||
|
public static final int FOLDER_TYPE_MIXED = 0;
|
||||||
|
/** Type for a folder containing only playable media. */
|
||||||
|
public static final int FOLDER_TYPE_TITLES = 1;
|
||||||
|
/** Type for a folder containing media categorized by album. */
|
||||||
|
public static final int FOLDER_TYPE_ALBUMS = 2;
|
||||||
|
/** Type for a folder containing media categorized by artist. */
|
||||||
|
public static final int FOLDER_TYPE_ARTISTS = 3;
|
||||||
|
/** Type for a folder containing media categorized by genre. */
|
||||||
|
public static final int FOLDER_TYPE_GENRES = 4;
|
||||||
|
/** Type for a folder containing a playlist. */
|
||||||
|
public static final int FOLDER_TYPE_PLAYLISTS = 5;
|
||||||
|
/** Type for a folder containing media categorized by year. */
|
||||||
|
public static final int FOLDER_TYPE_YEARS = 6;
|
||||||
|
|
||||||
/** Empty {@link MediaMetadata}. */
|
/** Empty {@link MediaMetadata}. */
|
||||||
public static final MediaMetadata EMPTY = new MediaMetadata.Builder().build();
|
public static final MediaMetadata EMPTY = new MediaMetadata.Builder().build();
|
||||||
|
|
||||||
@ -238,6 +289,10 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
@Nullable public final Integer trackNumber;
|
@Nullable public final Integer trackNumber;
|
||||||
/** Optional total number of tracks. */
|
/** Optional total number of tracks. */
|
||||||
@Nullable public final Integer totalTrackCount;
|
@Nullable public final Integer totalTrackCount;
|
||||||
|
/** Optional {@link FolderType}. */
|
||||||
|
@Nullable @FolderType public final Integer folderType;
|
||||||
|
/** Optional boolean for media playability. */
|
||||||
|
@Nullable public final Boolean isPlayable;
|
||||||
|
|
||||||
private MediaMetadata(Builder builder) {
|
private MediaMetadata(Builder builder) {
|
||||||
this.title = builder.title;
|
this.title = builder.title;
|
||||||
@ -254,6 +309,8 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
this.artworkUri = builder.artworkUri;
|
this.artworkUri = builder.artworkUri;
|
||||||
this.trackNumber = builder.trackNumber;
|
this.trackNumber = builder.trackNumber;
|
||||||
this.totalTrackCount = builder.totalTrackCount;
|
this.totalTrackCount = builder.totalTrackCount;
|
||||||
|
this.folderType = builder.folderType;
|
||||||
|
this.isPlayable = builder.isPlayable;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns a new {@link Builder} instance with the current {@link MediaMetadata} fields. */
|
/** Returns a new {@link Builder} instance with the current {@link MediaMetadata} fields. */
|
||||||
@ -283,7 +340,9 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
&& Arrays.equals(artworkData, that.artworkData)
|
&& Arrays.equals(artworkData, that.artworkData)
|
||||||
&& Util.areEqual(artworkUri, that.artworkUri)
|
&& Util.areEqual(artworkUri, that.artworkUri)
|
||||||
&& Util.areEqual(trackNumber, that.trackNumber)
|
&& Util.areEqual(trackNumber, that.trackNumber)
|
||||||
&& Util.areEqual(totalTrackCount, that.totalTrackCount);
|
&& Util.areEqual(totalTrackCount, that.totalTrackCount)
|
||||||
|
&& Util.areEqual(folderType, that.folderType)
|
||||||
|
&& Util.areEqual(isPlayable, that.isPlayable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -302,7 +361,9 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
Arrays.hashCode(artworkData),
|
Arrays.hashCode(artworkData),
|
||||||
artworkUri,
|
artworkUri,
|
||||||
trackNumber,
|
trackNumber,
|
||||||
totalTrackCount);
|
totalTrackCount,
|
||||||
|
folderType,
|
||||||
|
isPlayable);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bundleable implementation.
|
// Bundleable implementation.
|
||||||
@ -323,7 +384,9 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
FIELD_ARTWORK_DATA,
|
FIELD_ARTWORK_DATA,
|
||||||
FIELD_ARTWORK_URI,
|
FIELD_ARTWORK_URI,
|
||||||
FIELD_TRACK_NUMBER,
|
FIELD_TRACK_NUMBER,
|
||||||
FIELD_TOTAL_TRACK_COUNT
|
FIELD_TOTAL_TRACK_COUNT,
|
||||||
|
FIELD_FOLDER_TYPE,
|
||||||
|
FIELD_IS_PLAYABLE
|
||||||
})
|
})
|
||||||
private @interface FieldNumber {}
|
private @interface FieldNumber {}
|
||||||
|
|
||||||
@ -341,6 +404,8 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
private static final int FIELD_ARTWORK_URI = 11;
|
private static final int FIELD_ARTWORK_URI = 11;
|
||||||
private static final int FIELD_TRACK_NUMBER = 12;
|
private static final int FIELD_TRACK_NUMBER = 12;
|
||||||
private static final int FIELD_TOTAL_TRACK_COUNT = 13;
|
private static final int FIELD_TOTAL_TRACK_COUNT = 13;
|
||||||
|
private static final int FIELD_FOLDER_TYPE = 14;
|
||||||
|
private static final int FIELD_IS_PLAYABLE = 15;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Bundle toBundle() {
|
public Bundle toBundle() {
|
||||||
@ -368,6 +433,13 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
if (totalTrackCount != null) {
|
if (totalTrackCount != null) {
|
||||||
bundle.putInt(keyForField(FIELD_TOTAL_TRACK_COUNT), totalTrackCount);
|
bundle.putInt(keyForField(FIELD_TOTAL_TRACK_COUNT), totalTrackCount);
|
||||||
}
|
}
|
||||||
|
if (folderType != null) {
|
||||||
|
bundle.putInt(keyForField(FIELD_FOLDER_TYPE), folderType);
|
||||||
|
}
|
||||||
|
if (isPlayable != null) {
|
||||||
|
bundle.putBoolean(keyForField(FIELD_IS_PLAYABLE), isPlayable);
|
||||||
|
}
|
||||||
|
|
||||||
return bundle;
|
return bundle;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -406,6 +478,12 @@ public final class MediaMetadata implements Bundleable {
|
|||||||
if (bundle.containsKey(keyForField(FIELD_TOTAL_TRACK_COUNT))) {
|
if (bundle.containsKey(keyForField(FIELD_TOTAL_TRACK_COUNT))) {
|
||||||
builder.setTotalTrackCount(bundle.getInt(keyForField(FIELD_TOTAL_TRACK_COUNT)));
|
builder.setTotalTrackCount(bundle.getInt(keyForField(FIELD_TOTAL_TRACK_COUNT)));
|
||||||
}
|
}
|
||||||
|
if (bundle.containsKey(keyForField(FIELD_FOLDER_TYPE))) {
|
||||||
|
builder.setFolderType(bundle.getInt(keyForField(FIELD_FOLDER_TYPE)));
|
||||||
|
}
|
||||||
|
if (bundle.containsKey(keyForField(FIELD_IS_PLAYABLE))) {
|
||||||
|
builder.setIsPlayable(bundle.getBoolean(keyForField(FIELD_IS_PLAYABLE)));
|
||||||
|
}
|
||||||
|
|
||||||
return builder.build();
|
return builder.build();
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,8 @@ public class MediaMetadataTest {
|
|||||||
assertThat(mediaMetadata.overallRating).isNull();
|
assertThat(mediaMetadata.overallRating).isNull();
|
||||||
assertThat(mediaMetadata.artworkData).isNull();
|
assertThat(mediaMetadata.artworkData).isNull();
|
||||||
assertThat(mediaMetadata.artworkUri).isNull();
|
assertThat(mediaMetadata.artworkUri).isNull();
|
||||||
|
assertThat(mediaMetadata.folderType).isNull();
|
||||||
|
assertThat(mediaMetadata.isPlayable).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -86,6 +88,8 @@ public class MediaMetadataTest {
|
|||||||
.setUserRating(new HeartRating(false))
|
.setUserRating(new HeartRating(false))
|
||||||
.setOverallRating(new PercentageRating(87.4f))
|
.setOverallRating(new PercentageRating(87.4f))
|
||||||
.setArtworkData(new byte[] {-88, 12, 3, 2, 124, -54, -33, 69})
|
.setArtworkData(new byte[] {-88, 12, 3, 2, 124, -54, -33, 69})
|
||||||
|
.setFolderType(MediaMetadata.FOLDER_TYPE_PLAYLISTS)
|
||||||
|
.setIsPlayable(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
MediaMetadata fromBundle = MediaMetadata.CREATOR.fromBundle(mediaMetadata.toBundle());
|
MediaMetadata fromBundle = MediaMetadata.CREATOR.fromBundle(mediaMetadata.toBundle());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user