1cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik/* 2cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Copyright (C) 2014 The Android Open Source Project 3cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 4cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Licensed under the Apache License, Version 2.0 (the "License"); 5cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * you may not use this file except in compliance with the License. 6cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * You may obtain a copy of the License at 7cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 8cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * http://www.apache.org/licenses/LICENSE-2.0 9cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 10cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Unless required by applicable law or agreed to in writing, software 11cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * distributed under the License is distributed on an "AS IS" BASIS, 12cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * See the License for the specific language governing permissions and 14cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * limitations under the License. 15cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 16cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikpackage android.support.v4.media; 17cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 18cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.graphics.Bitmap; 19cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.net.Uri; 20cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Build; 21cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Bundle; 22cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Parcel; 23cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Parcelable; 24cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.text.TextUtils; 25cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 26cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik/** 27cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A simple set of metadata for a media item suitable for display. This can be 28cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * created using the Builder or retrieved from existing metadata using 29cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#getDescription()}. 30cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 31cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikpublic final class MediaDescriptionCompat implements Parcelable { 32cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 33cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A unique persistent id for the content or null. 34cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 35cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final String mMediaId; 36cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 37cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A primary title suitable for display or null. 38cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 39cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mTitle; 40cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 41cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A subtitle suitable for display or null. 42cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 43cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mSubtitle; 44cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 45cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A description suitable for display or null. 46cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 47cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mDescription; 48cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 49cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A bitmap icon suitable for display or null. 50cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 51cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bitmap mIcon; 52cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 53cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A Uri for an icon suitable for display or null. 54cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 55cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Uri mIconUri; 56cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 57cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Extras for opaque use by apps/system. 58cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 59cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bundle mExtras; 60cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 61cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 62cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A cached copy of the equivalent framework object. 63cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 64cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Object mDescriptionObj; 65cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 66cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private MediaDescriptionCompat(String mediaId, CharSequence title, CharSequence subtitle, 67cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik CharSequence description, Bitmap icon, Uri iconUri, Bundle extras) { 68cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 69cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 70cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 71cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 72cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 73cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 74cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 75cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 76cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 77cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private MediaDescriptionCompat(Parcel in) { 78cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = in.readString(); 79cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 80cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 81cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 82cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = in.readParcelable(null); 83cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = in.readParcelable(null); 84cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = in.readBundle(); 85cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 86cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 87cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 88cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns the media id or null. See 89cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#METADATA_KEY_MEDIA_ID}. 90cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 91cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String getMediaId() { 92cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mMediaId; 93cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 94cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 95cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 96cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a title suitable for display or null. 97cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 98cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A title or null. 99cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 100cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getTitle() { 101cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle; 102cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 103cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 104cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 105cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a subtitle suitable for display or null. 106cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 107cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A subtitle or null. 108cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 109cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getSubtitle() { 110cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mSubtitle; 111cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 112cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 113cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 114cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a description suitable for display or null. 115cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 116cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A description or null. 117cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 118cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getDescription() { 119cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescription; 120cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 121cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 122cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 123cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a bitmap icon suitable for display or null. 124cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 125cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon or null. 126cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 127cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bitmap getIconBitmap() { 128cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIcon; 129cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 130cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 131cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 132cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a Uri for an icon suitable for display or null. 133cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 134cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon uri or null. 135cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 136cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Uri getIconUri() { 137cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIconUri; 138cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 139cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 140cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 141cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns any extras that were added to the description. 142cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 143cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A bundle of extras or null. 144cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 145cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bundle getExtras() { 146cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mExtras; 147cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 148cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 149cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 150cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public int describeContents() { 151cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return 0; 152cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 153cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 154cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 155cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public void writeToParcel(Parcel dest, int flags) { 156cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 157cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeString(mMediaId); 158cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mTitle, dest, flags); 159cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mSubtitle, dest, flags); 160cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mDescription, dest, flags); 161cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIcon, flags); 162cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIconUri, flags); 163cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeBundle(mExtras); 164cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 165cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.writeToParcel(getMediaDescription(), dest, flags); 166cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 167cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 168cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 169cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 170cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String toString() { 171cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle + ", " + mSubtitle + ", " + mDescription; 172cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 173cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 174cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 175cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Gets the underlying framework {@link android.media.MediaDescription} 176cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * object. 177cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 178cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on 179cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.os.Build.VERSION_CODES#LOLLIPOP} and later. 180cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 181cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 182cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link android.media.MediaDescription} object, or 183cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 184cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 185cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Object getMediaDescription() { 186cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (mDescriptionObj != null || Build.VERSION.SDK_INT < 21) { 187cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 188cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 189cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Object bob = MediaDescriptionCompatApi21.Builder.newInstance(); 190cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setMediaId(bob, mMediaId); 191cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setTitle(bob, mTitle); 192cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setSubtitle(bob, mSubtitle); 193cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setDescription(bob, mDescription); 194cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconBitmap(bob, mIcon); 195cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconUri(bob, mIconUri); 196cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setExtras(bob, mExtras); 197cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescriptionObj = MediaDescriptionCompatApi21.Builder.build(bob); 198cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 199cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 200cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 201cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 202cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 203cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an instance from a framework 204cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.media.MediaDescription} object. 205cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 206cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on API 21+. 207cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 208cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 209cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param descriptionObj A {@link android.media.MediaDescription} object, or 210cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 211cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link MediaMetadataCompat} object, or null if 212cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * none. 213cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 214cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) { 215cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (descriptionObj == null || Build.VERSION.SDK_INT < 21) { 216cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return null; 217cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 218cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 219cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Builder bob = new Builder(); 220cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setMediaId(MediaDescriptionCompatApi21.getMediaId(descriptionObj)); 221cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setTitle(MediaDescriptionCompatApi21.getTitle(descriptionObj)); 222cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setSubtitle(MediaDescriptionCompatApi21.getSubtitle(descriptionObj)); 223cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setDescription(MediaDescriptionCompatApi21.getDescription(descriptionObj)); 224cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconBitmap(MediaDescriptionCompatApi21.getIconBitmap(descriptionObj)); 225cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconUri(MediaDescriptionCompatApi21.getIconUri(descriptionObj)); 226cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setExtras(MediaDescriptionCompatApi21.getExtras(descriptionObj)); 227cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompat descriptionCompat = bob.build(); 228cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik descriptionCompat.mDescriptionObj = descriptionObj; 229cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 230cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return descriptionCompat; 231cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 232cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 233cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final Parcelable.Creator<MediaDescriptionCompat> CREATOR = 234cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik new Parcelable.Creator<MediaDescriptionCompat>() { 235cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 236cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat createFromParcel(Parcel in) { 237cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 238cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(in); 239cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 240cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return fromMediaDescription(MediaDescriptionCompatApi21.fromParcel(in)); 241cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 242cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 243cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 244cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 245cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat[] newArray(int size) { 246cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat[size]; 247cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 248cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik }; 249cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 250cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 251cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Builder for {@link MediaDescriptionCompat} objects. 252cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 253cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final class Builder { 254cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private String mMediaId; 255cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mTitle; 256cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mSubtitle; 257cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mDescription; 258cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bitmap mIcon; 259cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Uri mIconUri; 260cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bundle mExtras; 261cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 262cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 263cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an initially empty builder. 264cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 265cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder() { 266cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 267cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 268cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 269cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the media id. 270cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 271cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param mediaId The unique id for the item or null. 272cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 273cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 274cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setMediaId(String mediaId) { 275cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 276cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 277cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 278cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 279cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 280cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the title. 281cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 282cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param title A title suitable for display to the user or null. 283cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 284cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 285cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setTitle(CharSequence title) { 286cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 287cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 288cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 289cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 290cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 291cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the subtitle. 292cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 293cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param subtitle A subtitle suitable for display to the user or null. 294cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 295cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 296cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setSubtitle(CharSequence subtitle) { 297cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 298cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 299cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 300cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 301cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 302cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the description. 303cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 304cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param description A description suitable for display to the user or 305cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 306cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 307cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 308cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setDescription(CharSequence description) { 309cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 310cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 311cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 312cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 313cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 314cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon. 315cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 316cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param icon A {@link Bitmap} icon suitable for display to the user or 317cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 318cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 319cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 320cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setIconBitmap(Bitmap icon) { 321cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 322cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 323cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 324cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 325cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 326cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon uri. 327cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 328cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param iconUri A {@link Uri} for an icon suitable for display to the 329cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * user or null. 330cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 331cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 332cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setIconUri(Uri iconUri) { 333cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 334cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 335cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 336cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 337cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 338cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets a bundle of extras. 339cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 340cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param extras The extras to include with this description or null. 341cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 342cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 343cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder setExtras(Bundle extras) { 344cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 345cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 346cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 347cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 348cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 349cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates a {@link MediaDescriptionCompat} instance with the specified 350cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * fields. 351cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 352cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A MediaDescriptionCompat instance. 353cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 354cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat build() { 355cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(mMediaId, mTitle, mSubtitle, mDescription, mIcon, 356cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri, mExtras); 357cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 358cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 359cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik} 360