package android.media; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.ContentResolver; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.graphics.RectF; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.os.CancellationSignal; import android.os.Parcel; import android.os.Parcelable; import android.util.Size; /** * A simple set of metadata for a media item suitable for display. This can be * created using the Builder or retrieved from existing metadata using * {@link MediaMetadata#getDescription()}. */ public class MediaDescription implements Parcelable { /** * A unique persistent id for the content or null. */ private final String mMediaId; /** * A primary title suitable for display or null. */ private final CharSequence mTitle; /** * A subtitle suitable for display or null. */ private final CharSequence mSubtitle; /** * A description suitable for display or null. */ private final CharSequence mDescription; /** * A bitmap icon suitable for display or null. */ private final Bitmap mIcon; /** * A Uri for an icon suitable for display or null. */ private final Uri mIconUri; /** * Extras for opaque use by apps/system. */ private final Bundle mExtras; private MediaDescription(String mediaId, CharSequence title, CharSequence subtitle, CharSequence description, Bitmap icon, Uri iconUri, Bundle extras) { mMediaId = mediaId; mTitle = title; mSubtitle = subtitle; mDescription = description; mIcon = icon; mIconUri = iconUri; mExtras = extras; } private MediaDescription(Parcel in) { mMediaId = in.readString(); mTitle = in.readCharSequence(); mSubtitle = in.readCharSequence(); mDescription = in.readCharSequence(); mIcon = in.readParcelable(null); mIconUri = in.readParcelable(null); mExtras = in.readBundle(); } /** * Returns the media id or null. See * {@link MediaMetadata#METADATA_KEY_MEDIA_ID}. */ public @Nullable String getMediaId() { return mMediaId; } /** * Returns a title suitable for display or null. * * @return A title or null. */ public @Nullable CharSequence getTitle() { return mTitle; } /** * Returns a subtitle suitable for display or null. * * @return A subtitle or null. */ public @Nullable CharSequence getSubtitle() { return mSubtitle; } /** * Returns a description suitable for display or null. * * @return A description or null. */ public @Nullable CharSequence getDescription() { return mDescription; } /** * Returns a bitmap icon suitable for display or null. * * @return An icon or null. */ public @Nullable Bitmap getIconBitmap() { return mIcon; } /** * Returns a Uri for an icon suitable for display or null. * * @return An icon uri or null. */ public @Nullable Uri getIconUri() { return mIconUri; } /** * Returns any extras that were added to the description. * * @return A bundle of extras or null. */ public @Nullable Bundle getExtras() { return mExtras; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mMediaId); dest.writeCharSequence(mTitle); dest.writeCharSequence(mSubtitle); dest.writeCharSequence(mDescription); dest.writeParcelable(mIcon, flags); dest.writeParcelable(mIconUri, flags); dest.writeBundle(mExtras); } @Override public String toString() { return mTitle + ", " + mSubtitle + ", " + mDescription; } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public MediaDescription createFromParcel(Parcel in) { return new MediaDescription(in); } @Override public MediaDescription[] newArray(int size) { return new MediaDescription[size]; } }; /** * Builder for {@link MediaDescription} objects. */ public static class Builder { private String mMediaId; private CharSequence mTitle; private CharSequence mSubtitle; private CharSequence mDescription; private Bitmap mIcon; private Uri mIconUri; private Bundle mExtras; /** * Creates an initially empty builder. */ public Builder() { } /** * Sets the media id. * * @param mediaId The unique id for the item or null. * @return this */ public Builder setMediaId(@Nullable String mediaId) { mMediaId = mediaId; return this; } /** * Sets the title. * * @param title A title suitable for display to the user or null. * @return this */ public Builder setTitle(@Nullable CharSequence title) { mTitle = title; return this; } /** * Sets the subtitle. * * @param subtitle A subtitle suitable for display to the user or null. * @return this */ public Builder setSubtitle(@Nullable CharSequence subtitle) { mSubtitle = subtitle; return this; } /** * Sets the description. * * @param description A description suitable for display to the user or * null. * @return this */ public Builder setDescription(@Nullable CharSequence description) { mDescription = description; return this; } /** * Sets the icon. * * @param icon A {@link Bitmap} icon suitable for display to the user or * null. * @return this */ public Builder setIconBitmap(@Nullable Bitmap icon) { mIcon = icon; return this; } /** * Sets the icon uri. * * @param iconUri A {@link Uri} for an icon suitable for display to the * user or null. * @return this */ public Builder setIconUri(@Nullable Uri iconUri) { mIconUri = iconUri; return this; } /** * Sets a bundle of extras. * * @param extras The extras to include with this description or null. * @return this */ public Builder setExtras(@Nullable Bundle extras) { mExtras = extras; return this; } public MediaDescription build() { return new MediaDescription(mMediaId, mTitle, mSubtitle, mDescription, mIcon, mIconUri, mExtras); } } }