MediaDescriptionCompat.java revision b768ed3824de2c109411654b3830feabe564ff0a
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 /** 348b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * Used as a long extra field to indicate the bluetooth folder type of the media item as 358b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * specified in the section 6.10.2.2 of the Bluetooth AVRCP 1.5. This is valid only for 368b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * {@link MediaBrowserCompat.MediaItem} with 378b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * {@link MediaBrowserCompat.MediaItem#FLAG_BROWSABLE}. The value should be one of the 388b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * following: 398b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <ul> 408b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_MIXED}</li> 418b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_TITLES}</li> 428b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_ALBUMS}</li> 438b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_ARTISTS}</li> 448b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_GENRES}</li> 458b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_PLAYLISTS}</li> 468b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_YEARS}</li> 478b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * </ul> 488b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 498b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * @see #getExtras() 508b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 518b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE"; 528b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 538b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 548b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that is unknown or contains media elements of mixed types as specified in 558b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * the section 6.10.2.2 of the Bluetooth AVRCP 1.5. 568b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 578b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_MIXED = 0; 588b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 598b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 608b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains media elements only as specified in the section 6.10.2.2 of 618b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * the Bluetooth AVRCP 1.5. 628b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 638b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_TITLES = 1; 648b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 658b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 668b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by album as specified in the section 678b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 688b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 698b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_ALBUMS = 2; 708b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 718b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 728b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by artist as specified in the section 738b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 748b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 758b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_ARTISTS = 3; 768b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 778b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 788b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by genre as specified in the section 798b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 808b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 818b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_GENRES = 4; 828b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 838b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 848b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by playlist as specified in the section 858b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 868b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 878b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_PLAYLISTS = 5; 888b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 898b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 908b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by year as specified in the section 918b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 928b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 938b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_YEARS = 6; 948b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 958b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 9601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * Custom key to store a media URI on API 21-22 devices (before it became part of the 9701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * framework class) when parceling/converting to and from framework objects. 9801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * 9901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * @hide 10001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake */ 10101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake public static final String DESCRIPTION_KEY_MEDIA_URI = 10201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake "android.support.v4.media.description.MEDIA_URI"; 10301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake /** 10401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * Custom key to store whether the original Bundle provided by the developer was null 10501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * 10601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * @hide 10701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake */ 10801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake public static final String DESCRIPTION_KEY_NULL_BUNDLE_FLAG = 10901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake "android.support.v4.media.description.NULL_BUNDLE_FLAG"; 11001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake /** 111cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A unique persistent id for the content or null. 112cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 113cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final String mMediaId; 114cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 115cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A primary title suitable for display or null. 116cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 117cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mTitle; 118cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 119cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A subtitle suitable for display or null. 120cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 121cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mSubtitle; 122cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 123cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A description suitable for display or null. 124cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 125cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mDescription; 126cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 127cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A bitmap icon suitable for display or null. 128cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 129cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bitmap mIcon; 130cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 131cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A Uri for an icon suitable for display or null. 132cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 133cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Uri mIconUri; 134cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 135cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Extras for opaque use by apps/system. 136cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 137cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bundle mExtras; 1389cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 1399cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * A Uri to identify this content. 1409cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 1419cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private final Uri mMediaUri; 142cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 143cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 144cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A cached copy of the equivalent framework object. 145cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 146cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Object mDescriptionObj; 147cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 148b768ed3824de2c109411654b3830feabe564ff0aAurimas Liutikas MediaDescriptionCompat(String mediaId, CharSequence title, CharSequence subtitle, 1499cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake CharSequence description, Bitmap icon, Uri iconUri, Bundle extras, Uri mediaUri) { 150cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 151cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 152cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 153cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 154cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 155cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 156cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 1579cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 158cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 159cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 160b768ed3824de2c109411654b3830feabe564ff0aAurimas Liutikas MediaDescriptionCompat(Parcel in) { 161cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = in.readString(); 162cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 163cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 164cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 165cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = in.readParcelable(null); 166cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = in.readParcelable(null); 167cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = in.readBundle(); 1689cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = in.readParcelable(null); 169cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 170cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 171cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 172cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns the media id or null. See 173cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#METADATA_KEY_MEDIA_ID}. 174cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1759cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 176cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String getMediaId() { 177cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mMediaId; 178cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 179cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 180cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 181cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a title suitable for display or null. 182cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 183cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A title or null. 184cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1859cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 186cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getTitle() { 187cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle; 188cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 189cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 190cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 191cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a subtitle suitable for display or null. 192cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 193cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A subtitle or null. 194cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 1959cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 196cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getSubtitle() { 197cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mSubtitle; 198cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 199cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 200cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 201cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a description suitable for display or null. 202cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 203cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A description or null. 204cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2059cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 206cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getDescription() { 207cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescription; 208cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 209cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 210cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 211cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a bitmap icon suitable for display or null. 212cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 213cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon or null. 214cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2159cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 216cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bitmap getIconBitmap() { 217cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIcon; 218cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 219cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 220cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 221cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a Uri for an icon suitable for display or null. 222cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 223cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon uri or null. 224cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2259cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 226cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Uri getIconUri() { 227cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIconUri; 228cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 229cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 230cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 231cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns any extras that were added to the description. 232cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 233cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A bundle of extras or null. 234cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2359cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 236cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bundle getExtras() { 237cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mExtras; 238cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 239cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 2409cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 2419cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Returns a Uri representing this content or null. 2429cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 2439cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return A media Uri or null. 2449cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 2459cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 2469cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Uri getMediaUri() { 2479cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return mMediaUri; 2489cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 2499cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 250cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 251cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public int describeContents() { 252cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return 0; 253cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 254cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 255cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 256cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public void writeToParcel(Parcel dest, int flags) { 257cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 258cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeString(mMediaId); 259cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mTitle, dest, flags); 260cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mSubtitle, dest, flags); 261cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mDescription, dest, flags); 262cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIcon, flags); 263cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIconUri, flags); 264cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeBundle(mExtras); 26581f61057e1542008c03d6a85e8ef475d9177149fAndrew Sutherland dest.writeParcelable(mMediaUri, flags); 266cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 267cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.writeToParcel(getMediaDescription(), dest, flags); 268cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 269cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 270cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 271cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 272cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String toString() { 273cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle + ", " + mSubtitle + ", " + mDescription; 274cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 275cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 276cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 277cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Gets the underlying framework {@link android.media.MediaDescription} 278cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * object. 279cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 280cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on 281cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.os.Build.VERSION_CODES#LOLLIPOP} and later. 282cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 283cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 284cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link android.media.MediaDescription} object, or 285cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 286cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 287cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Object getMediaDescription() { 288cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (mDescriptionObj != null || Build.VERSION.SDK_INT < 21) { 289cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 290cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 291cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Object bob = MediaDescriptionCompatApi21.Builder.newInstance(); 292cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setMediaId(bob, mMediaId); 293cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setTitle(bob, mTitle); 294cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setSubtitle(bob, mSubtitle); 295cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setDescription(bob, mDescription); 296cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconBitmap(bob, mIcon); 297cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconUri(bob, mIconUri); 29801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // Media URI was not added until API 23, so add it to the Bundle of extras to 29901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // ensure the data is not lost - this ensures that 30001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // fromMediaDescription(getMediaDescription(mediaDescriptionCompat)) returns 30101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // an equivalent MediaDescriptionCompat on all API levels 30201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake Bundle extras = mExtras; 30301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (Build.VERSION.SDK_INT < 23 && mMediaUri != null) { 30401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (extras == null) { 30501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras = new Bundle(); 30601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.putBoolean(DESCRIPTION_KEY_NULL_BUNDLE_FLAG, true); 30701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 30801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.putParcelable(DESCRIPTION_KEY_MEDIA_URI, mMediaUri); 30901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 31001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake MediaDescriptionCompatApi21.Builder.setExtras(bob, extras); 3119cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake if (Build.VERSION.SDK_INT >= 23) { 3129cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake MediaDescriptionCompatApi23.Builder.setMediaUri(bob, mMediaUri); 3139cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 314cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescriptionObj = MediaDescriptionCompatApi21.Builder.build(bob); 315cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 316cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 317cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 318cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 319cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 320cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an instance from a framework 321cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.media.MediaDescription} object. 322cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 323cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on API 21+. 324cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 325cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 326cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param descriptionObj A {@link android.media.MediaDescription} object, or 327cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 328cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link MediaMetadataCompat} object, or null if 329cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * none. 330cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 331cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) { 332cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (descriptionObj == null || Build.VERSION.SDK_INT < 21) { 333cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return null; 334cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 335cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 336cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Builder bob = new Builder(); 337cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setMediaId(MediaDescriptionCompatApi21.getMediaId(descriptionObj)); 338cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setTitle(MediaDescriptionCompatApi21.getTitle(descriptionObj)); 339cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setSubtitle(MediaDescriptionCompatApi21.getSubtitle(descriptionObj)); 340cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setDescription(MediaDescriptionCompatApi21.getDescription(descriptionObj)); 341cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconBitmap(MediaDescriptionCompatApi21.getIconBitmap(descriptionObj)); 342cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik bob.setIconUri(MediaDescriptionCompatApi21.getIconUri(descriptionObj)); 34301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake Bundle extras = MediaDescriptionCompatApi21.getExtras(descriptionObj); 34401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake Uri mediaUri = extras == null ? null : 34501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake (Uri) extras.getParcelable(DESCRIPTION_KEY_MEDIA_URI); 34601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (mediaUri != null) { 34701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (extras.containsKey(DESCRIPTION_KEY_NULL_BUNDLE_FLAG) && extras.size() == 2) { 34801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // The extras were only created for the media URI, so we set it back to null to 34901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // ensure mediaDescriptionCompat.getExtras() equals 35001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // fromMediaDescription(getMediaDescription(mediaDescriptionCompat)).getExtras() 35101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras = null; 35201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } else { 35301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // Remove media URI keys to ensure mediaDescriptionCompat.getExtras().keySet() 35401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // equals fromMediaDescription(getMediaDescription(mediaDescriptionCompat)) 35501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // .getExtras().keySet() 35601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.remove(DESCRIPTION_KEY_MEDIA_URI); 35701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.remove(DESCRIPTION_KEY_NULL_BUNDLE_FLAG); 35801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 35901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 36001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake bob.setExtras(extras); 36101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (mediaUri != null) { 36201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake bob.setMediaUri(mediaUri); 36301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } else if (Build.VERSION.SDK_INT >= 23) { 3649cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake bob.setMediaUri(MediaDescriptionCompatApi23.getMediaUri(descriptionObj)); 3659cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 366cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompat descriptionCompat = bob.build(); 367cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik descriptionCompat.mDescriptionObj = descriptionObj; 368cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 369cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return descriptionCompat; 370cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 371cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 372cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final Parcelable.Creator<MediaDescriptionCompat> CREATOR = 373cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik new Parcelable.Creator<MediaDescriptionCompat>() { 374cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 375cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat createFromParcel(Parcel in) { 376cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 377cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(in); 378cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 379cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return fromMediaDescription(MediaDescriptionCompatApi21.fromParcel(in)); 380cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 381cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 382cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 383cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 384cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat[] newArray(int size) { 385cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat[size]; 386cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 387cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik }; 388cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 389cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 390cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Builder for {@link MediaDescriptionCompat} objects. 391cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 392cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final class Builder { 393cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private String mMediaId; 394cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mTitle; 395cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mSubtitle; 396cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mDescription; 397cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bitmap mIcon; 398cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Uri mIconUri; 399cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bundle mExtras; 4009cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private Uri mMediaUri; 401cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 402cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 403cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an initially empty builder. 404cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 405cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder() { 406cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 407cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 408cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 409cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the media id. 410cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 411cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param mediaId The unique id for the item or null. 412cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 413cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4149cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaId(@Nullable String mediaId) { 415cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 416cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 417cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 418cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 419cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 420cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the title. 421cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 422cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param title A title suitable for display to the user or null. 423cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 424cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4259cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setTitle(@Nullable CharSequence title) { 426cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 427cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 428cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 429cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 430cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 431cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the subtitle. 432cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 433cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param subtitle A subtitle suitable for display to the user or null. 434cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 435cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4369cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setSubtitle(@Nullable CharSequence subtitle) { 437cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 438cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 439cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 440cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 441cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 442cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the description. 443cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 444cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param description A description suitable for display to the user or 445cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 446cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 447cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4489cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setDescription(@Nullable CharSequence description) { 449cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 450cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 451cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 452cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 453cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 454cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon. 455cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 456cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param icon A {@link Bitmap} icon suitable for display to the user or 457cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 458cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 459cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4609cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconBitmap(@Nullable Bitmap icon) { 461cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 462cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 463cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 464cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 465cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 466cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon uri. 467cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 468cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param iconUri A {@link Uri} for an icon suitable for display to the 469cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * user or null. 470cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 471cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4729cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconUri(@Nullable Uri iconUri) { 473cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 474cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 475cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 476cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 477cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 478cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets a bundle of extras. 479cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 480cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param extras The extras to include with this description or null. 481cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 482cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4839cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setExtras(@Nullable Bundle extras) { 484cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 485cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 486cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 487cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 488cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 4899cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Sets the media uri. 4909cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 4919cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @param mediaUri The content's {@link Uri} for the item or null. 4929cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return this 4939cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 4949cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaUri(@Nullable Uri mediaUri) { 4959cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 4969cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return this; 4979cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 4989cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 4999cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 500cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates a {@link MediaDescriptionCompat} instance with the specified 501cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * fields. 502cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 503cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A MediaDescriptionCompat instance. 504cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 505cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat build() { 506cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(mMediaId, mTitle, mSubtitle, mDescription, mIcon, 5079cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mIconUri, mExtras, mMediaUri); 508cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 509cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 510cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik} 511