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