MediaDescriptionCompat.java revision 81f61057e1542008c03d6a85e8ef475d9177149f
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; 249cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lakeimport android.support.annotation.Nullable; 25cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.text.TextUtils; 26cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 27cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik/** 28cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A simple set of metadata for a media item suitable for display. This can be 29cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * created using the Builder or retrieved from existing metadata using 30cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#getDescription()}. 31cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 32cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikpublic final class MediaDescriptionCompat implements Parcelable { 33cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 34cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A unique persistent id for the content or null. 35cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 36cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final String mMediaId; 37cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 38cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A primary title suitable for display or null. 39cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 40cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mTitle; 41cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 42cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A subtitle suitable for display or null. 43cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 44cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mSubtitle; 45cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 46cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A description suitable for display or null. 47cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 48cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mDescription; 49cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 50cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A bitmap icon suitable for display or null. 51cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 52cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bitmap mIcon; 53cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 54cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A Uri for an icon suitable for display or null. 55cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 56cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Uri mIconUri; 57cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 58cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Extras for opaque use by apps/system. 59cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 60cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bundle mExtras; 619cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 629cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * A Uri to identify this content. 639cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 649cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private final Uri mMediaUri; 65cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 66cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 67cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A cached copy of the equivalent framework object. 68cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 69cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Object mDescriptionObj; 70cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 71cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private MediaDescriptionCompat(String mediaId, CharSequence title, CharSequence subtitle, 729cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake CharSequence description, Bitmap icon, Uri iconUri, Bundle extras, Uri mediaUri) { 73cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 74cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 75cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 76cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 77cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 78cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 79cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 809cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 81cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 82cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 83cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private MediaDescriptionCompat(Parcel in) { 84cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = in.readString(); 85cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 86cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 87cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 88cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = in.readParcelable(null); 89cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = in.readParcelable(null); 90cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = in.readBundle(); 919cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = in.readParcelable(null); 92cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 93cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 94cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 95cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns the media id or null. See 96cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#METADATA_KEY_MEDIA_ID}. 97cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 989cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 99cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String getMediaId() { 100cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mMediaId; 101cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 102cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 103cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 104cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a title suitable for display or null. 105cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 106cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A title or null. 107cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1089cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 109cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getTitle() { 110cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle; 111cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 112cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 113cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 114cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a subtitle suitable for display or null. 115cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 116cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A subtitle or null. 117cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1189cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 119cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getSubtitle() { 120cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mSubtitle; 121cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 122cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 123cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 124cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a description suitable for display or null. 125cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 126cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A description or null. 127cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1289cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 129cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getDescription() { 130cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescription; 131cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 132cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 133cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 134cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a bitmap icon suitable for display or null. 135cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 136cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon or null. 137cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1389cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 139cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bitmap getIconBitmap() { 140cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIcon; 141cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 142cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 143cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 144cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a Uri for an icon suitable for display or null. 145cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 146cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon uri or null. 147cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1489cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 149cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Uri getIconUri() { 150cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIconUri; 151cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 152cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 153cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 154cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns any extras that were added to the description. 155cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 156cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A bundle of extras or null. 157cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1589cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 159cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bundle getExtras() { 160cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mExtras; 161cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 162cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 1639cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 1649cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Returns a Uri representing this content or null. 1659cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 1669cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return A media Uri or null. 1679cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 1689cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 1699cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Uri getMediaUri() { 1709cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return mMediaUri; 1719cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 1729cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 173cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 174cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public int describeContents() { 175cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return 0; 176cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 177cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 178cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 179cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public void writeToParcel(Parcel dest, int flags) { 180cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 181cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeString(mMediaId); 182cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mTitle, dest, flags); 183cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mSubtitle, dest, flags); 184cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mDescription, dest, flags); 185cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIcon, flags); 186cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIconUri, flags); 187cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeBundle(mExtras); 18881f61057e1542008c03d6a85e8ef475d9177149fAndrew Sutherland dest.writeParcelable(mMediaUri, flags); 189cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 190cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.writeToParcel(getMediaDescription(), dest, flags); 191cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 192cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 193cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 194cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 195cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String toString() { 196cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle + ", " + mSubtitle + ", " + mDescription; 197cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 198cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 199cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 200cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Gets the underlying framework {@link android.media.MediaDescription} 201cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * object. 202cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 203cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on 204cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.os.Build.VERSION_CODES#LOLLIPOP} and later. 205cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 206cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 207cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link android.media.MediaDescription} object, or 208cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 209cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 210cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Object getMediaDescription() { 211cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (mDescriptionObj != null || Build.VERSION.SDK_INT < 21) { 212cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 213cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 214cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Object bob = MediaDescriptionCompatApi21.Builder.newInstance(); 215cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setMediaId(bob, mMediaId); 216cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setTitle(bob, mTitle); 217cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setSubtitle(bob, mSubtitle); 218cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setDescription(bob, mDescription); 219cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconBitmap(bob, mIcon); 220cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconUri(bob, mIconUri); 221cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setExtras(bob, mExtras); 2229cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake if (Build.VERSION.SDK_INT >= 23) { 2239cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake MediaDescriptionCompatApi23.Builder.setMediaUri(bob, mMediaUri); 2249cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 225cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescriptionObj = MediaDescriptionCompatApi21.Builder.build(bob); 226cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 227cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 228cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 229cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 230cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 231cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an instance from a framework 232cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.media.MediaDescription} object. 233cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 234cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on API 21+. 235cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 236cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 237cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param descriptionObj A {@link android.media.MediaDescription} object, or 238cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 239cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link MediaMetadataCompat} object, or null if 240cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * none. 241cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 242cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) { 243cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (descriptionObj == null || Build.VERSION.SDK_INT < 21) { 244cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return null; 245cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 246cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 247cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Builder bob = new Builder(); 248cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setMediaId(MediaDescriptionCompatApi21.getMediaId(descriptionObj)); 249cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setTitle(MediaDescriptionCompatApi21.getTitle(descriptionObj)); 250cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setSubtitle(MediaDescriptionCompatApi21.getSubtitle(descriptionObj)); 251cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setDescription(MediaDescriptionCompatApi21.getDescription(descriptionObj)); 252cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconBitmap(MediaDescriptionCompatApi21.getIconBitmap(descriptionObj)); 253cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconUri(MediaDescriptionCompatApi21.getIconUri(descriptionObj)); 254cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setExtras(MediaDescriptionCompatApi21.getExtras(descriptionObj)); 2559cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake if (Build.VERSION.SDK_INT >= 23) { 2569cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake bob.setMediaUri(MediaDescriptionCompatApi23.getMediaUri(descriptionObj)); 2579cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 258cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompat descriptionCompat = bob.build(); 259cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik descriptionCompat.mDescriptionObj = descriptionObj; 260cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 261cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return descriptionCompat; 262cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 263cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 264cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final Parcelable.Creator<MediaDescriptionCompat> CREATOR = 265cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik new Parcelable.Creator<MediaDescriptionCompat>() { 266cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 267cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat createFromParcel(Parcel in) { 268cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 269cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(in); 270cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 271cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return fromMediaDescription(MediaDescriptionCompatApi21.fromParcel(in)); 272cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 273cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 274cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 275cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 276cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat[] newArray(int size) { 277cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat[size]; 278cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 279cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik }; 280cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 281cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 282cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Builder for {@link MediaDescriptionCompat} objects. 283cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 284cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final class Builder { 285cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private String mMediaId; 286cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mTitle; 287cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mSubtitle; 288cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mDescription; 289cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bitmap mIcon; 290cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Uri mIconUri; 291cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bundle mExtras; 2929cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private Uri mMediaUri; 293cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 294cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 295cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an initially empty builder. 296cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 297cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder() { 298cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 299cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 300cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 301cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the media id. 302cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 303cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param mediaId The unique id for the item or null. 304cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 305cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3069cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaId(@Nullable String mediaId) { 307cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 308cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 309cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 310cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 311cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 312cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the title. 313cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 314cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param title A title suitable for display to the user or null. 315cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 316cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3179cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setTitle(@Nullable CharSequence title) { 318cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 319cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 320cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 321cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 322cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 323cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the subtitle. 324cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 325cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param subtitle A subtitle suitable for display to the user or null. 326cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 327cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3289cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setSubtitle(@Nullable CharSequence subtitle) { 329cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 330cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 331cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 332cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 333cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 334cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the description. 335cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 336cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param description A description suitable for display to the user or 337cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 338cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 339cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3409cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setDescription(@Nullable CharSequence description) { 341cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 342cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 343cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 344cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 345cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 346cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon. 347cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 348cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param icon A {@link Bitmap} icon suitable for display to the user or 349cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 350cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 351cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3529cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconBitmap(@Nullable Bitmap icon) { 353cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 354cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 355cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 356cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 357cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 358cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon uri. 359cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 360cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param iconUri A {@link Uri} for an icon suitable for display to the 361cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * user or null. 362cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 363cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3649cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconUri(@Nullable Uri iconUri) { 365cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 366cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 367cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 368cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 369cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 370cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets a bundle of extras. 371cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 372cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param extras The extras to include with this description or null. 373cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 374cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 3759cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setExtras(@Nullable Bundle extras) { 376cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 377cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 378cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 379cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 380cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 3819cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Sets the media uri. 3829cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 3839cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @param mediaUri The content's {@link Uri} for the item or null. 3849cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return this 3859cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 3869cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaUri(@Nullable Uri mediaUri) { 3879cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 3889cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return this; 3899cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 3909cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 3919cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 392cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates a {@link MediaDescriptionCompat} instance with the specified 393cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * fields. 394cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 395cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A MediaDescriptionCompat instance. 396cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 397cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat build() { 398cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(mMediaId, mTitle, mSubtitle, mDescription, mIcon, 3999cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mIconUri, mExtras, mMediaUri); 400cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 401cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 402cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik} 403