855 lines
32 KiB
Java
855 lines
32 KiB
Java
/*
|
|
* Copyright 2018 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package android.media;
|
|
|
|
import android.annotation.NonNull;
|
|
import android.annotation.Nullable;
|
|
import android.annotation.StringDef;
|
|
import android.graphics.Bitmap;
|
|
import android.media.update.ApiLoader;
|
|
import android.media.update.MediaMetadata2Provider;
|
|
import android.net.Uri;
|
|
import android.os.Bundle;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* @hide
|
|
* Contains metadata about an item, such as the title, artist, etc.
|
|
*/
|
|
// New version of MediaMetadata with following changes
|
|
// - Don't implement Parcelable for updatable support.
|
|
// - Also support MediaDescription features. MediaDescription is deprecated instead because
|
|
// it was insufficient for controller to display media contents.
|
|
public final class MediaMetadata2 {
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the title of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the artist of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* duration of the media in ms. A negative duration indicates that the duration is unknown
|
|
* (or infinite).
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the album title for the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the author of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the writer of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the composer of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the compilation status of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the date the media was created or published.
|
|
* The format is unspecified but RFC 3339 is recommended.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the year
|
|
* the media was created or published.
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the genre of the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* track number for the media.
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* number of tracks in the media's original source.
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* disc number for the media's original source.
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the artist for the album of the media's original source.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
|
|
|
|
/**
|
|
* The metadata key for a {@link Bitmap} typed value to retrieve the information about the
|
|
* artwork for the media.
|
|
* The artwork should be relatively small and may be scaled down if it is too large.
|
|
* For higher resolution artwork, {@link #METADATA_KEY_ART_URI} should be used instead.
|
|
*
|
|
* @see Builder#putBitmap(String, Bitmap)
|
|
* @see #getBitmap(String)
|
|
*/
|
|
public static final String METADATA_KEY_ART = "android.media.metadata.ART";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about Uri of the artwork for the media.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
|
|
|
|
/**
|
|
* The metadata key for a {@link Bitmap} typed value to retrieve the information about the
|
|
* artwork for the album of the media's original source.
|
|
* The artwork should be relatively small and may be scaled down if it is too large.
|
|
* For higher resolution artwork, {@link #METADATA_KEY_ALBUM_ART_URI} should be used instead.
|
|
*
|
|
* @see Builder#putBitmap(String, Bitmap)
|
|
* @see #getBitmap(String)
|
|
*/
|
|
public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the Uri of the artwork for the album of the media's original source.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
|
|
|
|
/**
|
|
* The metadata key for a {@link Rating2} typed value to retrieve the information about the
|
|
* user's rating for the media.
|
|
*
|
|
* @see Builder#putRating(String, Rating2)
|
|
* @see #getRating(String)
|
|
*/
|
|
public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
|
|
|
|
/**
|
|
* The metadata key for a {@link Rating2} typed value to retrieve the information about the
|
|
* overall rating for the media.
|
|
*
|
|
* @see Builder#putRating(String, Rating2)
|
|
* @see #getRating(String)
|
|
*/
|
|
public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the title that is suitable for display to the user.
|
|
* It will generally be the same as {@link #METADATA_KEY_TITLE} but may differ for some formats.
|
|
* When displaying media described by this metadata, this should be preferred if present.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the subtitle that is suitable for display to the user.
|
|
* When displaying a second line for media described by this metadata, this should be preferred
|
|
* to other fields if present.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISPLAY_SUBTITLE
|
|
= "android.media.metadata.DISPLAY_SUBTITLE";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the description that is suitable for display to the user.
|
|
* When displaying more information for media described by this metadata,
|
|
* this should be preferred to other fields if present.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISPLAY_DESCRIPTION
|
|
= "android.media.metadata.DISPLAY_DESCRIPTION";
|
|
|
|
/**
|
|
* The metadata key for a {@link Bitmap} typed value to retrieve the information about the icon
|
|
* or thumbnail that is suitable for display to the user.
|
|
* When displaying an icon for media described by this metadata, this should be preferred to
|
|
* other fields if present.
|
|
* <p>
|
|
* The icon should be relatively small and may be scaled down if it is too large.
|
|
* For higher resolution artwork, {@link #METADATA_KEY_DISPLAY_ICON_URI} should be used instead.
|
|
*
|
|
* @see Builder#putBitmap(String, Bitmap)
|
|
* @see #getBitmap(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISPLAY_ICON = "android.media.metadata.DISPLAY_ICON";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the Uri of icon or thumbnail that is suitable for display to the user.
|
|
* When displaying more information for media described by this metadata, the
|
|
* display description should be preferred to other fields when present.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_DISPLAY_ICON_URI
|
|
= "android.media.metadata.DISPLAY_ICON_URI";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the media ID of the content. This value is specific to the
|
|
* service providing the content. If used, this should be a persistent
|
|
* unique key for the underlying content. It may be used with
|
|
* {@link MediaController2#playFromMediaId(String, Bundle)}
|
|
* to initiate playback when provided by a {@link MediaBrowser2} connected to
|
|
* the same app.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
|
|
|
|
/**
|
|
* The metadata key for a {@link CharSequence} or {@link String} typed value to retrieve the
|
|
* information about the Uri of the content. This value is specific to the service providing the
|
|
* content. It may be used with {@link MediaController2#playFromUri(Uri, Bundle)}
|
|
* to initiate playback when provided by a {@link MediaBrowser2} connected to the same app.
|
|
*
|
|
* @see Builder#putText(String, CharSequence)
|
|
* @see Builder#putString(String, String)
|
|
* @see #getText(String)
|
|
* @see #getString(String)
|
|
*/
|
|
public static final String METADATA_KEY_MEDIA_URI = "android.media.metadata.MEDIA_URI";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* bluetooth folder type of the media specified in the section 6.10.2.2 of the Bluetooth
|
|
* AVRCP 1.5. It should be one of the following:
|
|
* <ul>
|
|
* <li>{@link #BT_FOLDER_TYPE_MIXED}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_TITLES}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_ALBUMS}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_ARTISTS}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_GENRES}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_PLAYLISTS}</li>
|
|
* <li>{@link #BT_FOLDER_TYPE_YEARS}</li>
|
|
* </ul>
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_BT_FOLDER_TYPE
|
|
= "android.media.metadata.BT_FOLDER_TYPE";
|
|
|
|
/**
|
|
* The type of folder that is unknown or contains media elements of mixed types as specified in
|
|
* the section 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_MIXED = 0;
|
|
|
|
/**
|
|
* The type of folder that contains media elements only as specified in the section 6.10.2.2 of
|
|
* the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_TITLES = 1;
|
|
|
|
/**
|
|
* The type of folder that contains folders categorized by album as specified in the section
|
|
* 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_ALBUMS = 2;
|
|
|
|
/**
|
|
* The type of folder that contains folders categorized by artist as specified in the section
|
|
* 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_ARTISTS = 3;
|
|
|
|
/**
|
|
* The type of folder that contains folders categorized by genre as specified in the section
|
|
* 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_GENRES = 4;
|
|
|
|
/**
|
|
* The type of folder that contains folders categorized by playlist as specified in the section
|
|
* 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_PLAYLISTS = 5;
|
|
|
|
/**
|
|
* The type of folder that contains folders categorized by year as specified in the section
|
|
* 6.10.2.2 of the Bluetooth AVRCP 1.5.
|
|
*/
|
|
public static final long BT_FOLDER_TYPE_YEARS = 6;
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about whether
|
|
* the media is an advertisement. A value of 0 indicates it is not an advertisement.
|
|
* A value of 1 or non-zero indicates it is an advertisement.
|
|
* If not specified, this value is set to 0 by default.
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_ADVERTISEMENT = "android.media.metadata.ADVERTISEMENT";
|
|
|
|
/**
|
|
* The metadata key for a {@link Long} typed value to retrieve the information about the
|
|
* download status of the media which will be used for later offline playback. It should be
|
|
* one of the following:
|
|
*
|
|
* <ul>
|
|
* <li>{@link #STATUS_NOT_DOWNLOADED}</li>
|
|
* <li>{@link #STATUS_DOWNLOADING}</li>
|
|
* <li>{@link #STATUS_DOWNLOADED}</li>
|
|
* </ul>
|
|
*
|
|
* @see Builder#putLong(String, long)
|
|
* @see #getLong(String)
|
|
*/
|
|
public static final String METADATA_KEY_DOWNLOAD_STATUS =
|
|
"android.media.metadata.DOWNLOAD_STATUS";
|
|
|
|
/**
|
|
* The status value to indicate the media item is not downloaded.
|
|
*
|
|
* @see #METADATA_KEY_DOWNLOAD_STATUS
|
|
*/
|
|
public static final long STATUS_NOT_DOWNLOADED = 0;
|
|
|
|
/**
|
|
* The status value to indicate the media item is being downloaded.
|
|
*
|
|
* @see #METADATA_KEY_DOWNLOAD_STATUS
|
|
*/
|
|
public static final long STATUS_DOWNLOADING = 1;
|
|
|
|
/**
|
|
* The status value to indicate the media item is downloaded for later offline playback.
|
|
*
|
|
* @see #METADATA_KEY_DOWNLOAD_STATUS
|
|
*/
|
|
public static final long STATUS_DOWNLOADED = 2;
|
|
|
|
/**
|
|
* A {@link Bundle} extra.
|
|
*/
|
|
public static final String METADATA_KEY_EXTRAS = "android.media.metadata.EXTRAS";
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
@StringDef({METADATA_KEY_TITLE, METADATA_KEY_ARTIST, METADATA_KEY_ALBUM, METADATA_KEY_AUTHOR,
|
|
METADATA_KEY_WRITER, METADATA_KEY_COMPOSER, METADATA_KEY_COMPILATION,
|
|
METADATA_KEY_DATE, METADATA_KEY_GENRE, METADATA_KEY_ALBUM_ARTIST, METADATA_KEY_ART_URI,
|
|
METADATA_KEY_ALBUM_ART_URI, METADATA_KEY_DISPLAY_TITLE, METADATA_KEY_DISPLAY_SUBTITLE,
|
|
METADATA_KEY_DISPLAY_DESCRIPTION, METADATA_KEY_DISPLAY_ICON_URI,
|
|
METADATA_KEY_MEDIA_ID, METADATA_KEY_MEDIA_URI})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface TextKey {}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
@StringDef({METADATA_KEY_DURATION, METADATA_KEY_YEAR, METADATA_KEY_TRACK_NUMBER,
|
|
METADATA_KEY_NUM_TRACKS, METADATA_KEY_DISC_NUMBER, METADATA_KEY_BT_FOLDER_TYPE,
|
|
METADATA_KEY_ADVERTISEMENT, METADATA_KEY_DOWNLOAD_STATUS})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface LongKey {}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
@StringDef({METADATA_KEY_ART, METADATA_KEY_ALBUM_ART, METADATA_KEY_DISPLAY_ICON})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface BitmapKey {}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
@StringDef({METADATA_KEY_USER_RATING, METADATA_KEY_RATING})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface RatingKey {}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
// TODO(jaewan): Add predefined float key.
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface FloatKey {}
|
|
|
|
private final MediaMetadata2Provider mProvider;
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
public MediaMetadata2(MediaMetadata2Provider provider) {
|
|
mProvider = provider;
|
|
}
|
|
|
|
/**
|
|
* Returns true if the given key is contained in the metadata
|
|
*
|
|
* @param key a String key
|
|
* @return true if the key exists in this metadata, false otherwise
|
|
*/
|
|
public boolean containsKey(@NonNull String key) {
|
|
return mProvider.containsKey_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Returns the value associated with the given key, or null if no mapping of
|
|
* the desired type exists for the given key or a null value is explicitly
|
|
* associated with the key.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return a CharSequence value, or null
|
|
*/
|
|
public @Nullable CharSequence getText(@NonNull @TextKey String key) {
|
|
return mProvider.getText_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Returns the media id, or {@code null} if the id doesn't exist.
|
|
*<p>
|
|
* This is equivalent to the {@link #getString(String)} with the {@link #METADATA_KEY_MEDIA_ID}.
|
|
*
|
|
* @return media id. Can be {@code null}
|
|
* @see #METADATA_KEY_MEDIA_ID
|
|
*/
|
|
public @Nullable String getMediaId() {
|
|
return mProvider.getMediaId_impl();
|
|
}
|
|
|
|
/**
|
|
* Returns the value associated with the given key, or null if no mapping of
|
|
* the desired type exists for the given key or a null value is explicitly
|
|
* associated with the key.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return a String value, or null
|
|
*/
|
|
public @Nullable String getString(@NonNull @TextKey String key) {
|
|
return mProvider.getString_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Returns the value associated with the given key, or 0L if no long exists
|
|
* for the given key.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return a long value
|
|
*/
|
|
public long getLong(@NonNull @LongKey String key) {
|
|
return mProvider.getLong_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Return a {@link Rating2} for the given key or null if no rating exists for
|
|
* the given key.
|
|
* <p>
|
|
* For the {@link #METADATA_KEY_USER_RATING}, A {@code null} return value means that user rating
|
|
* cannot be set by {@link MediaController2}.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return A {@link Rating2} or {@code null}
|
|
*/
|
|
public @Nullable Rating2 getRating(@NonNull @RatingKey String key) {
|
|
return mProvider.getRating_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Return a {@link Bitmap} for the given key or null if no bitmap exists for
|
|
* the given key.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return A {@link Bitmap} or null
|
|
*/
|
|
public @Nullable Bitmap getBitmap(@NonNull @BitmapKey String key) {
|
|
return mProvider.getBitmap_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Return the value associated with the given key, or 0.0f if no long exists
|
|
* for the given key.
|
|
*
|
|
* @param key The key the value is stored under
|
|
* @return a float value
|
|
*/
|
|
public float getFloat(@NonNull @FloatKey String key) {
|
|
return mProvider.getFloat_impl(key);
|
|
}
|
|
|
|
/**
|
|
* Get the extra {@link Bundle} from the metadata object.
|
|
*
|
|
* @return A {@link Bundle} or {@code null}
|
|
*/
|
|
public @Nullable Bundle getExtras() {
|
|
return mProvider.getExtras_impl();
|
|
}
|
|
|
|
/**
|
|
* Get the number of fields in this metadata.
|
|
*
|
|
* @return The number of fields in the metadata.
|
|
*/
|
|
public int size() {
|
|
return mProvider.size_impl();
|
|
}
|
|
|
|
/**
|
|
* Returns a Set containing the Strings used as keys in this metadata.
|
|
*
|
|
* @return a Set of String keys
|
|
*/
|
|
public @NonNull Set<String> keySet() {
|
|
return mProvider.keySet_impl();
|
|
}
|
|
|
|
/**
|
|
* Gets the bundle backing the metadata object. This is available to support
|
|
* backwards compatibility. Apps should not modify the bundle directly.
|
|
*
|
|
* @return The Bundle backing this metadata.
|
|
*/
|
|
public @NonNull Bundle toBundle() {
|
|
return mProvider.toBundle_impl();
|
|
}
|
|
|
|
/**
|
|
* Creates the {@link MediaMetadata2} from the bundle that previously returned by
|
|
* {@link #toBundle()}.
|
|
*
|
|
* @param bundle bundle for the metadata
|
|
* @return a new MediaMetadata2
|
|
*/
|
|
public static @NonNull MediaMetadata2 fromBundle(@Nullable Bundle bundle) {
|
|
return ApiLoader.getProvider().fromBundle_MediaMetadata2(bundle);
|
|
}
|
|
|
|
/**
|
|
* Use to build MediaMetadata2 objects. The system defined metadata keys must
|
|
* use the appropriate data type.
|
|
*/
|
|
public static final class Builder {
|
|
private final MediaMetadata2Provider.BuilderProvider mProvider;
|
|
|
|
/**
|
|
* Create an empty Builder. Any field that should be included in the
|
|
* {@link MediaMetadata2} must be added.
|
|
*/
|
|
public Builder() {
|
|
mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(this);
|
|
}
|
|
|
|
/**
|
|
* Create a Builder using a {@link MediaMetadata2} instance to set the
|
|
* initial values. All fields in the source metadata will be included in
|
|
* the new metadata. Fields can be overwritten by adding the same key.
|
|
*
|
|
* @param source
|
|
*/
|
|
public Builder(@NonNull MediaMetadata2 source) {
|
|
mProvider = ApiLoader.getProvider().createMediaMetadata2Builder(this, source);
|
|
}
|
|
|
|
/**
|
|
* @hide
|
|
*/
|
|
public Builder(@NonNull MediaMetadata2Provider.BuilderProvider provider) {
|
|
mProvider = provider;
|
|
}
|
|
|
|
/**
|
|
* Put a CharSequence value into the metadata. Custom keys may be used,
|
|
* but if the METADATA_KEYs defined in this class are used they may only
|
|
* be one of the following:
|
|
* <ul>
|
|
* <li>{@link #METADATA_KEY_TITLE}</li>
|
|
* <li>{@link #METADATA_KEY_ARTIST}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM}</li>
|
|
* <li>{@link #METADATA_KEY_AUTHOR}</li>
|
|
* <li>{@link #METADATA_KEY_WRITER}</li>
|
|
* <li>{@link #METADATA_KEY_COMPOSER}</li>
|
|
* <li>{@link #METADATA_KEY_DATE}</li>
|
|
* <li>{@link #METADATA_KEY_GENRE}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM_ARTIST}</li>
|
|
* <li>{@link #METADATA_KEY_ART_URI}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM_ART_URI}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_TITLE}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_SUBTITLE}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_DESCRIPTION}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_ICON_URI}</li>
|
|
* </ul>
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The CharSequence value to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putText(@NonNull @TextKey String key,
|
|
@Nullable CharSequence value) {
|
|
return mProvider.putText_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Put a String value into the metadata. Custom keys may be used, but if
|
|
* the METADATA_KEYs defined in this class are used they may only be one
|
|
* of the following:
|
|
* <ul>
|
|
* <li>{@link #METADATA_KEY_TITLE}</li>
|
|
* <li>{@link #METADATA_KEY_ARTIST}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM}</li>
|
|
* <li>{@link #METADATA_KEY_AUTHOR}</li>
|
|
* <li>{@link #METADATA_KEY_WRITER}</li>
|
|
* <li>{@link #METADATA_KEY_COMPOSER}</li>
|
|
* <li>{@link #METADATA_KEY_DATE}</li>
|
|
* <li>{@link #METADATA_KEY_GENRE}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM_ARTIST}</li>
|
|
* <li>{@link #METADATA_KEY_ART_URI}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM_ART_URI}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_TITLE}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_SUBTITLE}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_DESCRIPTION}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_ICON_URI}</li>
|
|
* </ul>
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The String value to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putString(@NonNull @TextKey String key,
|
|
@Nullable String value) {
|
|
return mProvider.putString_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Put a long value into the metadata. Custom keys may be used, but if
|
|
* the METADATA_KEYs defined in this class are used they may only be one
|
|
* of the following:
|
|
* <ul>
|
|
* <li>{@link #METADATA_KEY_DURATION}</li>
|
|
* <li>{@link #METADATA_KEY_TRACK_NUMBER}</li>
|
|
* <li>{@link #METADATA_KEY_NUM_TRACKS}</li>
|
|
* <li>{@link #METADATA_KEY_DISC_NUMBER}</li>
|
|
* <li>{@link #METADATA_KEY_YEAR}</li>
|
|
* <li>{@link #METADATA_KEY_BT_FOLDER_TYPE}</li>
|
|
* <li>{@link #METADATA_KEY_ADVERTISEMENT}</li>
|
|
* <li>{@link #METADATA_KEY_DOWNLOAD_STATUS}</li>
|
|
* </ul>
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The String value to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putLong(@NonNull @LongKey String key, long value) {
|
|
return mProvider.putLong_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Put a {@link Rating2} into the metadata. Custom keys may be used, but
|
|
* if the METADATA_KEYs defined in this class are used they may only be
|
|
* one of the following:
|
|
* <ul>
|
|
* <li>{@link #METADATA_KEY_RATING}</li>
|
|
* <li>{@link #METADATA_KEY_USER_RATING}</li>
|
|
* </ul>
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The String value to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putRating(@NonNull @RatingKey String key, @Nullable Rating2 value) {
|
|
return mProvider.putRating_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Put a {@link Bitmap} into the metadata. Custom keys may be used, but
|
|
* if the METADATA_KEYs defined in this class are used they may only be
|
|
* one of the following:
|
|
* <ul>
|
|
* <li>{@link #METADATA_KEY_ART}</li>
|
|
* <li>{@link #METADATA_KEY_ALBUM_ART}</li>
|
|
* <li>{@link #METADATA_KEY_DISPLAY_ICON}</li>
|
|
* </ul>
|
|
* Large bitmaps may be scaled down by the system when
|
|
* {@link android.media.session.MediaSession#setMetadata} is called.
|
|
* To pass full resolution images {@link Uri Uris} should be used with
|
|
* {@link #putString}.
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The Bitmap to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putBitmap(@NonNull @BitmapKey String key, @Nullable Bitmap value) {
|
|
return mProvider.putBitmap_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Put a float value into the metadata. Custom keys may be used.
|
|
*
|
|
* @param key The key for referencing this value
|
|
* @param value The float value to store
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public @NonNull Builder putFloat(@NonNull @LongKey String key, float value) {
|
|
return mProvider.putFloat_impl(key, value);
|
|
}
|
|
|
|
/**
|
|
* Set a bundle of extras.
|
|
*
|
|
* @param extras The extras to include with this description or null.
|
|
* @return The Builder to allow chaining
|
|
*/
|
|
public Builder setExtras(@Nullable Bundle extras) {
|
|
return mProvider.setExtras_impl(extras);
|
|
}
|
|
|
|
/**
|
|
* Creates a {@link MediaMetadata2} instance with the specified fields.
|
|
*
|
|
* @return The new MediaMetadata2 instance
|
|
*/
|
|
public @NonNull MediaMetadata2 build() {
|
|
return mProvider.build_impl();
|
|
}
|
|
}
|
|
}
|
|
|