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 18ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport static androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP; 198e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas 20cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.graphics.Bitmap; 21cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.net.Uri; 22cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Build; 23cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Bundle; 24cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Parcel; 25cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.os.Parcelable; 26cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikimport android.text.TextUtils; 27cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 2889febf83e2bd3720923474006bcdf6c91a3b88f2Aurimas Liutikasimport androidx.annotation.Nullable; 2989febf83e2bd3720923474006bcdf6c91a3b88f2Aurimas Liutikasimport androidx.annotation.RestrictTo; 30ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikas 31cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik/** 32cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A simple set of metadata for a media item suitable for display. This can be 33cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * created using the Builder or retrieved from existing metadata using 34cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#getDescription()}. 35cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 36cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErikpublic final class MediaDescriptionCompat implements Parcelable { 37cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 388b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * Used as a long extra field to indicate the bluetooth folder type of the media item as 398b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * specified in the section 6.10.2.2 of the Bluetooth AVRCP 1.5. This is valid only for 408b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * {@link MediaBrowserCompat.MediaItem} with 418b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * {@link MediaBrowserCompat.MediaItem#FLAG_BROWSABLE}. The value should be one of the 428b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * following: 438b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <ul> 448b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_MIXED}</li> 458b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_TITLES}</li> 468b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_ALBUMS}</li> 478b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_ARTISTS}</li> 488b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_GENRES}</li> 498b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_PLAYLISTS}</li> 508b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * <li>{@link #BT_FOLDER_TYPE_YEARS}</li> 518b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * </ul> 528b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 538b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * @see #getExtras() 548b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 558b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final String EXTRA_BT_FOLDER_TYPE = "android.media.extra.BT_FOLDER_TYPE"; 568b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 578b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 588b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that is unknown or contains media elements of mixed types as specified in 598b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * the section 6.10.2.2 of the Bluetooth AVRCP 1.5. 608b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 618b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_MIXED = 0; 628b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 638b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 648b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains media elements only as specified in the section 6.10.2.2 of 658b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * the Bluetooth AVRCP 1.5. 668b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 678b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_TITLES = 1; 688b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 698b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 708b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by album as specified in the section 718b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 728b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 738b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_ALBUMS = 2; 748b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 758b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 768b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by artist as specified in the section 778b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 788b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 798b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_ARTISTS = 3; 808b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 818b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 828b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by genre as specified in the section 838b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 848b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 858b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_GENRES = 4; 868b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 878b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 888b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by playlist as specified in the section 898b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 908b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 918b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_PLAYLISTS = 5; 928b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 938b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 948b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * The type of folder that contains folders categorized by year as specified in the section 958b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho * 6.10.2.2 of the Bluetooth AVRCP 1.5. 968b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho */ 978b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho public static final long BT_FOLDER_TYPE_YEARS = 6; 988b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho 998b663a24c352adb2a5dcacffed4d1e5b1cadaf99Donghyun Cho /** 100b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * Used as a long extra field to indicate the download status of the media item. The value 101b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * should be one of the following: 102b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * <ul> 103b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * <li>{@link #STATUS_NOT_DOWNLOADED}</li> 104b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * <li>{@link #STATUS_DOWNLOADING}</li> 105b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * <li>{@link #STATUS_DOWNLOADED}</li> 106b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * </ul> 107b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * 108b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * @see #getExtras() 109b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho */ 110b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho public static final String EXTRA_DOWNLOAD_STATUS = "android.media.extra.DOWNLOAD_STATUS"; 111b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho 112b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho /** 113b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * The status value to indicate the media item is not downloaded. 114b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * 115b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * @see #EXTRA_DOWNLOAD_STATUS 116b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho */ 117b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho public static final long STATUS_NOT_DOWNLOADED = 0; 118b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho 119b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho /** 120b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * The status value to indicate the media item is being downloaded. 121b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * 122b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * @see #EXTRA_DOWNLOAD_STATUS 123b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho */ 124b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho public static final long STATUS_DOWNLOADING = 1; 125b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho 126b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho /** 127b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * The status value to indicate the media item is downloaded for later offline playback. 128b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * 129b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho * @see #EXTRA_DOWNLOAD_STATUS 130b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho */ 131b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho public static final long STATUS_DOWNLOADED = 2; 132b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho 133b78a7edc82d18094e93383f96b161f267a976f3eDonghyun Cho /** 13401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * Custom key to store a media URI on API 21-22 devices (before it became part of the 13501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * framework class) when parceling/converting to and from framework objects. 13601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * 13701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * @hide 13801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake */ 1398e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas @RestrictTo(LIBRARY_GROUP) 14001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake public static final String DESCRIPTION_KEY_MEDIA_URI = 14101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake "android.support.v4.media.description.MEDIA_URI"; 14201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake /** 14301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * Custom key to store whether the original Bundle provided by the developer was null 14401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * 14501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake * @hide 14601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake */ 1478e10080c914d1ad0784394fa3026b85535535847Aurimas Liutikas @RestrictTo(LIBRARY_GROUP) 14801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake public static final String DESCRIPTION_KEY_NULL_BUNDLE_FLAG = 14901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake "android.support.v4.media.description.NULL_BUNDLE_FLAG"; 15001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake /** 151cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A unique persistent id for the content or null. 152cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 153cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final String mMediaId; 154cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 155cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A primary title suitable for display or null. 156cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 157cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mTitle; 158cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 159cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A subtitle suitable for display or null. 160cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 161cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mSubtitle; 162cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 163cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A description suitable for display or null. 164cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 165cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final CharSequence mDescription; 166cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 167cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A bitmap icon suitable for display or null. 168cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 169cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bitmap mIcon; 170cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 171cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A Uri for an icon suitable for display or null. 172cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 173cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Uri mIconUri; 174cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 175cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Extras for opaque use by apps/system. 176cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 177cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private final Bundle mExtras; 1789cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 1799cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * A Uri to identify this content. 1809cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 1819cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private final Uri mMediaUri; 182cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 183cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 184cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * A cached copy of the equivalent framework object. 185cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 186cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Object mDescriptionObj; 187cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 188b768ed3824de2c109411654b3830feabe564ff0aAurimas Liutikas MediaDescriptionCompat(String mediaId, CharSequence title, CharSequence subtitle, 1899cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake CharSequence description, Bitmap icon, Uri iconUri, Bundle extras, Uri mediaUri) { 190cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 191cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 192cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 193cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 194cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 195cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 196cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 1979cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 198cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 199cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 200b768ed3824de2c109411654b3830feabe564ff0aAurimas Liutikas MediaDescriptionCompat(Parcel in) { 201cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = in.readString(); 202cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 203cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 204cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in); 205cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = in.readParcelable(null); 206cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = in.readParcelable(null); 207cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = in.readBundle(); 2089cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = in.readParcelable(null); 209cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 210cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 211cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 212cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns the media id or null. See 213cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link MediaMetadataCompat#METADATA_KEY_MEDIA_ID}. 214cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2159cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 216cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String getMediaId() { 217cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mMediaId; 218cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 219cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 220cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 221cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a title suitable for display or null. 222cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 223cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A title or null. 224cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2259cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 226cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getTitle() { 227cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle; 228cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 229cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 230cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 231cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a subtitle suitable for display or null. 232cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 233cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A subtitle or null. 234cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2359cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 236cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getSubtitle() { 237cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mSubtitle; 238cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 239cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 240cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 241cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a description suitable for display or null. 242cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 243cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A description or null. 244cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2459cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 246cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public CharSequence getDescription() { 247cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescription; 248cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 249cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 250cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 251cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a bitmap icon suitable for display or null. 252cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 253cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon or null. 254cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2559cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 256cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bitmap getIconBitmap() { 257cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIcon; 258cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 259cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 260cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 261cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns a Uri for an icon suitable for display or null. 262cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 263cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An icon uri or null. 264cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2659cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 266cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Uri getIconUri() { 267cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mIconUri; 268cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 269cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 270cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 271cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Returns any extras that were added to the description. 272cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 273cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A bundle of extras or null. 274cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 2759cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 276cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Bundle getExtras() { 277cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mExtras; 278cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 279cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 2809cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 2819cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Returns a Uri representing this content or null. 2829cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 2839cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return A media Uri or null. 2849cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 2859cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake @Nullable 2869cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Uri getMediaUri() { 2879cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return mMediaUri; 2889cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 2899cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 290cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 291cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public int describeContents() { 292cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return 0; 293cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 294cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 295cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 296cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public void writeToParcel(Parcel dest, int flags) { 297cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 298cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeString(mMediaId); 299cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mTitle, dest, flags); 300cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mSubtitle, dest, flags); 301cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik TextUtils.writeToParcel(mDescription, dest, flags); 302cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIcon, flags); 303cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeParcelable(mIconUri, flags); 304cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik dest.writeBundle(mExtras); 30581f61057e1542008c03d6a85e8ef475d9177149fAndrew Sutherland dest.writeParcelable(mMediaUri, flags); 306cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 307cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.writeToParcel(getMediaDescription(), dest, flags); 308cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 309cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 310cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 311cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 312cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public String toString() { 313cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mTitle + ", " + mSubtitle + ", " + mDescription; 314cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 315cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 316cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 317cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Gets the underlying framework {@link android.media.MediaDescription} 318cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * object. 319cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 320cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on 321cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.os.Build.VERSION_CODES#LOLLIPOP} and later. 322cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 323cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 324cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link android.media.MediaDescription} object, or 325cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 326cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 327cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Object getMediaDescription() { 328cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (mDescriptionObj != null || Build.VERSION.SDK_INT < 21) { 329cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 330cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 331cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik Object bob = MediaDescriptionCompatApi21.Builder.newInstance(); 332cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setMediaId(bob, mMediaId); 333cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setTitle(bob, mTitle); 334cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setSubtitle(bob, mSubtitle); 335cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setDescription(bob, mDescription); 336cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconBitmap(bob, mIcon); 337cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik MediaDescriptionCompatApi21.Builder.setIconUri(bob, mIconUri); 33801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // Media URI was not added until API 23, so add it to the Bundle of extras to 33901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // ensure the data is not lost - this ensures that 34001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // fromMediaDescription(getMediaDescription(mediaDescriptionCompat)) returns 34101ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake // an equivalent MediaDescriptionCompat on all API levels 34201ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake Bundle extras = mExtras; 34301ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (Build.VERSION.SDK_INT < 23 && mMediaUri != null) { 34401ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake if (extras == null) { 34501ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras = new Bundle(); 34601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.putBoolean(DESCRIPTION_KEY_NULL_BUNDLE_FLAG, true); 34701ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 34801ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake extras.putParcelable(DESCRIPTION_KEY_MEDIA_URI, mMediaUri); 34901ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 35001ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake MediaDescriptionCompatApi21.Builder.setExtras(bob, extras); 3519cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake if (Build.VERSION.SDK_INT >= 23) { 3529cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake MediaDescriptionCompatApi23.Builder.setMediaUri(bob, mMediaUri); 3539cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 354cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescriptionObj = MediaDescriptionCompatApi21.Builder.build(bob); 355cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 356cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return mDescriptionObj; 357cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 358cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 359cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 360cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an instance from a framework 361cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * {@link android.media.MediaDescription} object. 362cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * <p> 363cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * This method is only supported on API 21+. 364cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * </p> 365cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 366cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param descriptionObj A {@link android.media.MediaDescription} object, or 367cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null if none. 368cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return An equivalent {@link MediaMetadataCompat} object, or null if 369cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * none. 370cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 371cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static MediaDescriptionCompat fromMediaDescription(Object descriptionObj) { 372c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette if (descriptionObj != null && Build.VERSION.SDK_INT >= 21) { 373c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette Builder bob = new Builder(); 374c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setMediaId(MediaDescriptionCompatApi21.getMediaId(descriptionObj)); 375c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setTitle(MediaDescriptionCompatApi21.getTitle(descriptionObj)); 376c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setSubtitle(MediaDescriptionCompatApi21.getSubtitle(descriptionObj)); 377c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setDescription(MediaDescriptionCompatApi21.getDescription(descriptionObj)); 378c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setIconBitmap(MediaDescriptionCompatApi21.getIconBitmap(descriptionObj)); 379c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setIconUri(MediaDescriptionCompatApi21.getIconUri(descriptionObj)); 380c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette Bundle extras = MediaDescriptionCompatApi21.getExtras(descriptionObj); 381c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette Uri mediaUri = extras == null ? null : 382c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette (Uri) extras.getParcelable(DESCRIPTION_KEY_MEDIA_URI); 383c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette if (mediaUri != null) { 384c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette if (extras.containsKey(DESCRIPTION_KEY_NULL_BUNDLE_FLAG) && extras.size() == 2) { 385c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // The extras were only created for the media URI, so we set it back to null to 386c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // ensure mediaDescriptionCompat.getExtras() equals 387c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // fromMediaDescription(getMediaDescription(mediaDescriptionCompat)).getExtras() 388c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette extras = null; 389c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } else { 390c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // Remove media URI keys to ensure mediaDescriptionCompat.getExtras().keySet() 391c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // equals fromMediaDescription(getMediaDescription(mediaDescriptionCompat)) 392c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette // .getExtras().keySet() 393c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette extras.remove(DESCRIPTION_KEY_MEDIA_URI); 394c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette extras.remove(DESCRIPTION_KEY_NULL_BUNDLE_FLAG); 395c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } 39601ce79ae5cba1be3859bf520d2186c882631fca5Ian Lake } 397c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setExtras(extras); 398c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette if (mediaUri != null) { 399c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setMediaUri(mediaUri); 400c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } else if (Build.VERSION.SDK_INT >= 23) { 401c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette bob.setMediaUri(MediaDescriptionCompatApi23.getMediaUri(descriptionObj)); 402c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } 403c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette MediaDescriptionCompat descriptionCompat = bob.build(); 404c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette descriptionCompat.mDescriptionObj = descriptionObj; 405cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 406c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette return descriptionCompat; 407c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } else { 408c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette return null; 409c69882cb9b130902c1554ef5d3e3b06d776cd796Alan Viverette } 410cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 411cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 412cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final Parcelable.Creator<MediaDescriptionCompat> CREATOR = 413cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik new Parcelable.Creator<MediaDescriptionCompat>() { 414cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 415cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat createFromParcel(Parcel in) { 416cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik if (Build.VERSION.SDK_INT < 21) { 417cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(in); 418cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } else { 419cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return fromMediaDescription(MediaDescriptionCompatApi21.fromParcel(in)); 420cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 421cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 422cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 423cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik @Override 424cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat[] newArray(int size) { 425cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat[size]; 426cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 427cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik }; 428cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 429cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 430cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Builder for {@link MediaDescriptionCompat} objects. 431cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 432cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public static final class Builder { 433cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private String mMediaId; 434cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mTitle; 435cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mSubtitle; 436cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private CharSequence mDescription; 437cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bitmap mIcon; 438cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Uri mIconUri; 439cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik private Bundle mExtras; 4409cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake private Uri mMediaUri; 441cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 442cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 443cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates an initially empty builder. 444cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 445cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public Builder() { 446cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 447cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 448cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 449cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the media id. 450cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 451cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param mediaId The unique id for the item or null. 452cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 453cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4549cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaId(@Nullable String mediaId) { 455cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mMediaId = mediaId; 456cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 457cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 458cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 459cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 460cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the title. 461cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 462cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param title A title suitable for display to the user or null. 463cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 464cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4659cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setTitle(@Nullable CharSequence title) { 466cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mTitle = title; 467cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 468cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 469cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 470cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 471cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the subtitle. 472cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 473cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param subtitle A subtitle suitable for display to the user or null. 474cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 475cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4769cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setSubtitle(@Nullable CharSequence subtitle) { 477cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mSubtitle = subtitle; 478cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 479cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 480cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 481cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 482cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the description. 483cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 484cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param description A description suitable for display to the user or 485cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 486cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 487cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 4889cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setDescription(@Nullable CharSequence description) { 489cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mDescription = description; 490cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 491cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 492cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 493cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 494cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon. 495cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 496cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param icon A {@link Bitmap} icon suitable for display to the user or 497cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * null. 498cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 499cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 5009cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconBitmap(@Nullable Bitmap icon) { 501cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIcon = icon; 502cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 503cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 504cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 505cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 506cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets the icon uri. 507cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 508cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param iconUri A {@link Uri} for an icon suitable for display to the 509cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * user or null. 510cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 511cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 5129cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setIconUri(@Nullable Uri iconUri) { 513cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mIconUri = iconUri; 514cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 515cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 516cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 517cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 518cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Sets a bundle of extras. 519cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 520cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @param extras The extras to include with this description or null. 521cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return this 522cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 5239cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setExtras(@Nullable Bundle extras) { 524cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik mExtras = extras; 525cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return this; 526cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 527cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik 528cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik /** 5299cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * Sets the media uri. 5309cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * 5319cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @param mediaUri The content's {@link Uri} for the item or null. 5329cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake * @return this 5339cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake */ 5349cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake public Builder setMediaUri(@Nullable Uri mediaUri) { 5359cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mMediaUri = mediaUri; 5369cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake return this; 5379cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake } 5389cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake 5399cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake /** 540cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * Creates a {@link MediaDescriptionCompat} instance with the specified 541cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * fields. 542cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * 543cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik * @return A MediaDescriptionCompat instance. 544cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik */ 545cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik public MediaDescriptionCompat build() { 546cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik return new MediaDescriptionCompat(mMediaId, mTitle, mSubtitle, mDescription, mIcon, 5479cdd87d08a3295f5f973b70008840d6bf8de8aa1Ian Lake mIconUri, mExtras, mMediaUri); 548cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 549cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik } 550cf9daf1b11f55ecb9f4008cd1c7af2c8dac990afRoboErik} 551