1package android.media; 2 3import android.annotation.NonNull; 4import android.annotation.Nullable; 5import android.content.ContentResolver; 6import android.content.res.Resources; 7import android.graphics.Bitmap; 8import android.graphics.Canvas; 9import android.graphics.Paint; 10import android.graphics.Point; 11import android.graphics.RectF; 12import android.graphics.drawable.BitmapDrawable; 13import android.graphics.drawable.Drawable; 14import android.net.Uri; 15import android.os.Bundle; 16import android.os.CancellationSignal; 17import android.os.Parcel; 18import android.os.Parcelable; 19import android.util.Size; 20 21/** 22 * A simple set of metadata for a media item suitable for display. This can be 23 * created using the Builder or retrieved from existing metadata using 24 * {@link MediaMetadata#getDescription()}. 25 */ 26public class MediaDescription implements Parcelable { 27 /** 28 * A unique persistent id for the content or null. 29 */ 30 private final String mMediaId; 31 /** 32 * A primary title suitable for display or null. 33 */ 34 private final CharSequence mTitle; 35 /** 36 * A subtitle suitable for display or null. 37 */ 38 private final CharSequence mSubtitle; 39 /** 40 * A description suitable for display or null. 41 */ 42 private final CharSequence mDescription; 43 /** 44 * A bitmap icon suitable for display or null. 45 */ 46 private final Bitmap mIcon; 47 /** 48 * A Uri for an icon suitable for display or null. 49 */ 50 private final Uri mIconUri; 51 /** 52 * Extras for opaque use by apps/system. 53 */ 54 private final Bundle mExtras; 55 56 private MediaDescription(String mediaId, CharSequence title, CharSequence subtitle, 57 CharSequence description, Bitmap icon, Uri iconUri, Bundle extras) { 58 mMediaId = mediaId; 59 mTitle = title; 60 mSubtitle = subtitle; 61 mDescription = description; 62 mIcon = icon; 63 mIconUri = iconUri; 64 mExtras = extras; 65 } 66 67 private MediaDescription(Parcel in) { 68 mMediaId = in.readString(); 69 mTitle = in.readCharSequence(); 70 mSubtitle = in.readCharSequence(); 71 mDescription = in.readCharSequence(); 72 mIcon = in.readParcelable(null); 73 mIconUri = in.readParcelable(null); 74 mExtras = in.readBundle(); 75 } 76 77 /** 78 * Returns the media id or null. See 79 * {@link MediaMetadata#METADATA_KEY_MEDIA_ID}. 80 */ 81 public @Nullable String getMediaId() { 82 return mMediaId; 83 } 84 85 /** 86 * Returns a title suitable for display or null. 87 * 88 * @return A title or null. 89 */ 90 public @Nullable CharSequence getTitle() { 91 return mTitle; 92 } 93 94 /** 95 * Returns a subtitle suitable for display or null. 96 * 97 * @return A subtitle or null. 98 */ 99 public @Nullable CharSequence getSubtitle() { 100 return mSubtitle; 101 } 102 103 /** 104 * Returns a description suitable for display or null. 105 * 106 * @return A description or null. 107 */ 108 public @Nullable CharSequence getDescription() { 109 return mDescription; 110 } 111 112 /** 113 * Returns a bitmap icon suitable for display or null. 114 * 115 * @return An icon or null. 116 */ 117 public @Nullable Bitmap getIconBitmap() { 118 return mIcon; 119 } 120 121 /** 122 * Returns a Uri for an icon suitable for display or null. 123 * 124 * @return An icon uri or null. 125 */ 126 public @Nullable Uri getIconUri() { 127 return mIconUri; 128 } 129 130 /** 131 * Returns any extras that were added to the description. 132 * 133 * @return A bundle of extras or null. 134 */ 135 public @Nullable Bundle getExtras() { 136 return mExtras; 137 } 138 139 @Override 140 public int describeContents() { 141 return 0; 142 } 143 144 @Override 145 public void writeToParcel(Parcel dest, int flags) { 146 dest.writeString(mMediaId); 147 dest.writeCharSequence(mTitle); 148 dest.writeCharSequence(mSubtitle); 149 dest.writeCharSequence(mDescription); 150 dest.writeParcelable(mIcon, flags); 151 dest.writeParcelable(mIconUri, flags); 152 dest.writeBundle(mExtras); 153 } 154 155 @Override 156 public String toString() { 157 return mTitle + ", " + mSubtitle + ", " + mDescription; 158 } 159 160 public static final Parcelable.Creator<MediaDescription> CREATOR = 161 new Parcelable.Creator<MediaDescription>() { 162 @Override 163 public MediaDescription createFromParcel(Parcel in) { 164 return new MediaDescription(in); 165 } 166 167 @Override 168 public MediaDescription[] newArray(int size) { 169 return new MediaDescription[size]; 170 } 171 }; 172 173 /** 174 * Builder for {@link MediaDescription} objects. 175 */ 176 public static class Builder { 177 private String mMediaId; 178 private CharSequence mTitle; 179 private CharSequence mSubtitle; 180 private CharSequence mDescription; 181 private Bitmap mIcon; 182 private Uri mIconUri; 183 private Bundle mExtras; 184 185 /** 186 * Creates an initially empty builder. 187 */ 188 public Builder() { 189 } 190 191 /** 192 * Sets the media id. 193 * 194 * @param mediaId The unique id for the item or null. 195 * @return this 196 */ 197 public Builder setMediaId(@Nullable String mediaId) { 198 mMediaId = mediaId; 199 return this; 200 } 201 202 /** 203 * Sets the title. 204 * 205 * @param title A title suitable for display to the user or null. 206 * @return this 207 */ 208 public Builder setTitle(@Nullable CharSequence title) { 209 mTitle = title; 210 return this; 211 } 212 213 /** 214 * Sets the subtitle. 215 * 216 * @param subtitle A subtitle suitable for display to the user or null. 217 * @return this 218 */ 219 public Builder setSubtitle(@Nullable CharSequence subtitle) { 220 mSubtitle = subtitle; 221 return this; 222 } 223 224 /** 225 * Sets the description. 226 * 227 * @param description A description suitable for display to the user or 228 * null. 229 * @return this 230 */ 231 public Builder setDescription(@Nullable CharSequence description) { 232 mDescription = description; 233 return this; 234 } 235 236 /** 237 * Sets the icon. 238 * 239 * @param icon A {@link Bitmap} icon suitable for display to the user or 240 * null. 241 * @return this 242 */ 243 public Builder setIconBitmap(@Nullable Bitmap icon) { 244 mIcon = icon; 245 return this; 246 } 247 248 /** 249 * Sets the icon uri. 250 * 251 * @param iconUri A {@link Uri} for an icon suitable for display to the 252 * user or null. 253 * @return this 254 */ 255 public Builder setIconUri(@Nullable Uri iconUri) { 256 mIconUri = iconUri; 257 return this; 258 } 259 260 /** 261 * Sets a bundle of extras. 262 * 263 * @param extras The extras to include with this description or null. 264 * @return this 265 */ 266 public Builder setExtras(@Nullable Bundle extras) { 267 mExtras = extras; 268 return this; 269 } 270 271 public MediaDescription build() { 272 return new MediaDescription(mMediaId, mTitle, mSubtitle, mDescription, mIcon, mIconUri, 273 mExtras); 274 } 275 } 276} 277