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