1fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang/*
2fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Copyright 2018 The Android Open Source Project
3fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang *
4fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Licensed under the Apache License, Version 2.0 (the "License");
5fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * you may not use this file except in compliance with the License.
6fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * You may obtain a copy of the License at
7fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang *
8fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang *      http://www.apache.org/licenses/LICENSE-2.0
9fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang *
10fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * Unless required by applicable law or agreed to in writing, software
11fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * distributed under the License is distributed on an "AS IS" BASIS,
12fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * See the License for the specific language governing permissions and
14fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang * limitations under the License.
15fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang */
16fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
17fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangpackage androidx.media;
18fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
19fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_DISPLAY_DESCRIPTION;
20fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_DISPLAY_ICON;
21fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_DISPLAY_ICON_URI;
22fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_DISPLAY_SUBTITLE;
23fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_DISPLAY_TITLE;
24fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_EXTRAS;
25fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_MEDIA_ID;
26fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_MEDIA_URI;
27fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport static androidx.media.MediaMetadata2.METADATA_KEY_TITLE;
28fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
29fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.graphics.Bitmap;
30fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.net.Uri;
31fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.os.Bundle;
32fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.os.Parcelable;
33fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.support.v4.media.MediaBrowserCompat.MediaItem;
34fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.support.v4.media.MediaDescriptionCompat;
35fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.support.v4.media.MediaMetadataCompat;
36fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.support.v4.media.RatingCompat;
37fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport android.support.v4.media.session.PlaybackStateCompat;
38fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
39fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport androidx.media.MediaSession2.CommandButton;
40fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
41fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport java.util.ArrayList;
42fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangimport java.util.List;
43fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
44fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kangclass MediaUtils2 {
4503c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon    static final String TAG = "MediaUtils2";
4603c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon
47fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    private MediaUtils2() {
48fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
49fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
50fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
51fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link MediaItem} from the {@link MediaItem2}.
52fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
53fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param item2 an item.
54fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created media item.
55fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
56fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static MediaItem createMediaItem(MediaItem2 item2) {
57fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (item2 == null) {
58fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
59fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
60fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaDescriptionCompat descCompat;
61fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
62fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaMetadata2 metadata = item2.getMetadata();
63fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (metadata == null) {
64fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            descCompat = new MediaDescriptionCompat.Builder()
65fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setMediaId(item2.getMediaId())
66fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .build();
67fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        } else {
68fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            MediaDescriptionCompat.Builder builder = new MediaDescriptionCompat.Builder()
69fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setMediaId(item2.getMediaId())
70fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setSubtitle(metadata.getText(METADATA_KEY_DISPLAY_SUBTITLE))
71fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setDescription(metadata.getText(METADATA_KEY_DISPLAY_DESCRIPTION))
72fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setIconBitmap(metadata.getBitmap(METADATA_KEY_DISPLAY_ICON))
73fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    .setExtras(metadata.getExtras());
74fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
75fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            String title = metadata.getString(METADATA_KEY_TITLE);
76fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (title != null) {
77fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.setTitle(title);
78fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else {
79fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.setTitle(metadata.getString(METADATA_KEY_DISPLAY_TITLE));
80fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
81fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
82fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            String displayIconUri = metadata.getString(METADATA_KEY_DISPLAY_ICON_URI);
83fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (displayIconUri != null) {
84fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.setIconUri(Uri.parse(displayIconUri));
85fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
86fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
87fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            String mediaUri = metadata.getString(METADATA_KEY_MEDIA_URI);
88fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (mediaUri != null) {
89fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.setMediaUri(Uri.parse(mediaUri));
90fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
91fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
92fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            descCompat = builder.build();
93fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
94fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return new MediaItem(descCompat, item2.getFlags());
95fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
96fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
97fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
98fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link MediaItem2} from the {@link MediaItem}.
99fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
100fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param item an item.
101fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created media item.
102fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
103fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static MediaItem2 createMediaItem2(MediaItem item) {
104fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (item == null || item.getMediaId() == null) {
105fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
106fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
107fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
108fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaMetadata2 metadata2 = createMediaMetadata2(item.getDescription());
109fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return new MediaItem2.Builder(item.getFlags())
110fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                .setMediaId(item.getMediaId())
111fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                .setMetadata(metadata2)
112fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                .build();
113fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
114fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
11503c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon    static List<MediaItem> fromMediaItem2List(List<MediaItem2> items) {
11603c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        if (items == null) {
11703c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon            return null;
11803c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        }
11903c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        List<MediaItem> result = new ArrayList<>();
12003c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        for (int i = 0; i < items.size(); i++) {
12103c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon            result.add(createMediaItem(items.get(i)));
12203c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        }
12303c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        return result;
12403c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon    }
12503c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon
12603c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon    static List<MediaItem2> toMediaItem2List(List<MediaItem> items) {
12703c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        if (items == null) {
12803c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon            return null;
12903c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        }
13003c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        List<MediaItem2> result = new ArrayList<>();
13103c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        for (int i = 0; i < items.size(); i++) {
13203c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon            result.add(createMediaItem2(items.get(i)));
13303c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        }
13403c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon        return result;
13503c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon    }
13603c696e779afb0f54668a8f76b0944ab3f1c9a29Hyundo Moon
137fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
138fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link MediaMetadata2} from the {@link MediaDescriptionCompat}.
139fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
140fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param descCompat A {@link MediaDescriptionCompat} object.
141fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created {@link MediaMetadata2} object.
142fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
143fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static MediaMetadata2 createMediaMetadata2(MediaDescriptionCompat descCompat) {
144fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (descCompat == null) {
145fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
146fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
147fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
148fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaMetadata2.Builder metadata2Builder = new MediaMetadata2.Builder();
149fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        metadata2Builder.putString(METADATA_KEY_MEDIA_ID, descCompat.getMediaId());
150fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
151fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        CharSequence title = descCompat.getTitle();
152fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (title != null) {
153fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putText(METADATA_KEY_DISPLAY_TITLE, title);
154fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
155fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
156fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        CharSequence description = descCompat.getDescription();
157fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (description != null) {
158fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putText(METADATA_KEY_DISPLAY_DESCRIPTION, descCompat.getDescription());
159fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
160fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
161fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        CharSequence subtitle = descCompat.getSubtitle();
162fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (subtitle != null) {
163fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putText(METADATA_KEY_DISPLAY_SUBTITLE, subtitle);
164fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
165fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
166fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        Bitmap icon = descCompat.getIconBitmap();
167fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (icon != null) {
168fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putBitmap(METADATA_KEY_DISPLAY_ICON, icon);
169fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
170fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
171fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        Uri iconUri = descCompat.getIconUri();
172fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (iconUri != null) {
173fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putText(METADATA_KEY_DISPLAY_ICON_URI, iconUri.toString());
174fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
175fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
176fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        Bundle bundle = descCompat.getExtras();
177fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (bundle != null) {
178fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.setExtras(descCompat.getExtras());
179fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
180fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
181fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        Uri mediaUri = descCompat.getMediaUri();
182fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (mediaUri != null) {
183fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            metadata2Builder.putText(METADATA_KEY_MEDIA_URI, mediaUri.toString());
184fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
185fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
186fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return metadata2Builder.build();
187fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
188fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
189fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
190fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link MediaMetadata2} from the {@link MediaMetadataCompat}.
191fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
192fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param metadataCompat A {@link MediaMetadataCompat} object.
193fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created {@link MediaMetadata2} object.
194fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
195fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    MediaMetadata2 createMediaMetadata2(MediaMetadataCompat metadataCompat) {
196fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (metadataCompat == null) {
197fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
198fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
199fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return new MediaMetadata2(metadataCompat.getBundle());
200fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
201fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
202fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
203fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link MediaMetadataCompat} from the {@link MediaMetadata2}.
204fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
205fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param metadata2 A {@link MediaMetadata2} object.
206fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created {@link MediaMetadataCompat} object.
207fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
208fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    MediaMetadataCompat createMediaMetadataCompat(MediaMetadata2 metadata2) {
209fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (metadata2 == null) {
210fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
211fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
212fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
213fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder();
214fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
215fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        List<String> skippedKeys = new ArrayList<>();
216fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        Bundle bundle = metadata2.toBundle();
217fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        for (String key : bundle.keySet()) {
218fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            Object value = bundle.get(key);
219fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (value instanceof CharSequence) {
220fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.putText(key, (CharSequence) value);
221fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else if (value instanceof Rating2) {
222fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.putRating(key, createRatingCompat((Rating2) value));
223fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else if (value instanceof Bitmap) {
224fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.putBitmap(key, (Bitmap) value);
225fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else if (value instanceof Long) {
226fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                builder.putLong(key, (Long) value);
227fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else {
228fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                // There is no 'float' or 'bundle' type in MediaMetadataCompat.
229fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                skippedKeys.add(key);
230fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
231fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
232fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
233fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        MediaMetadataCompat result = builder.build();
234fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        for (String key : skippedKeys) {
235fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            Object value = bundle.get(key);
236fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (value instanceof Float) {
237fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                // Compatibility for MediaMetadata2.Builder.putFloat()
238fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                result.getBundle().putFloat(key, (Float) value);
239fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            } else if (METADATA_KEY_EXTRAS.equals(value)) {
240fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                // Compatibility for MediaMetadata2.Builder.setExtras()
241fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                result.getBundle().putBundle(key, (Bundle) value);
242fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
243fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
244fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return result;
245fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
246fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
247fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
248fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link Rating2} from the {@link RatingCompat}.
249fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
250fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param ratingCompat A {@link RatingCompat} object.
251fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created {@link Rating2} object.
252fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
253fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    Rating2 createRating2(RatingCompat ratingCompat) {
254fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (ratingCompat == null) {
255fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
256fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
257fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (!ratingCompat.isRated()) {
258fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return Rating2.newUnratedRating(ratingCompat.getRatingStyle());
259fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
260fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
261fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        switch (ratingCompat.getRatingStyle()) {
262fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_3_STARS:
263fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_4_STARS:
264fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_5_STARS:
265fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return Rating2.newStarRating(
266fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                        ratingCompat.getRatingStyle(), ratingCompat.getStarRating());
267fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_HEART:
268fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return Rating2.newHeartRating(ratingCompat.hasHeart());
269fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_THUMB_UP_DOWN:
270fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return Rating2.newThumbRating(ratingCompat.isThumbUp());
271fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case RatingCompat.RATING_PERCENTAGE:
272fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return Rating2.newPercentageRating(ratingCompat.getPercentRating());
273fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            default:
274fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return null;
275fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
276fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
277fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
278fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    /**
279fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * Creates a {@link RatingCompat} from the {@link Rating2}.
280fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     *
281fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @param rating2 A {@link Rating2} object.
282fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     * @return The newly created {@link RatingCompat} object.
283fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang     */
284fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    RatingCompat createRatingCompat(Rating2 rating2) {
285fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (rating2 == null) {
286fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
287fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
288fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (!rating2.isRated()) {
289fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return RatingCompat.newUnratedRating(rating2.getRatingStyle());
290fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
291fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
292fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        switch (rating2.getRatingStyle()) {
293fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_3_STARS:
294fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_4_STARS:
295fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_5_STARS:
296fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return RatingCompat.newStarRating(
297fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                        rating2.getRatingStyle(), rating2.getStarRating());
298fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_HEART:
299fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return RatingCompat.newHeartRating(rating2.hasHeart());
300fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_THUMB_UP_DOWN:
301fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return RatingCompat.newThumbRating(rating2.isThumbUp());
302fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case Rating2.RATING_PERCENTAGE:
303fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return RatingCompat.newPercentageRating(rating2.getPercentRating());
304fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            default:
305fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return null;
306fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
307fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
308fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
309fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static Parcelable[] toMediaItem2ParcelableArray(List<MediaItem2> playlist) {
310fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (playlist == null) {
311fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
312fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
313fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        List<Parcelable> parcelableList = new ArrayList<>();
314fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        for (int i = 0; i < playlist.size(); i++) {
315fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            final MediaItem2 item = playlist.get(i);
316fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (item != null) {
317fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                final Parcelable itemBundle = item.toBundle();
318fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                if (itemBundle != null) {
319fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    parcelableList.add(itemBundle);
320fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
321fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
322fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
323fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return parcelableList.toArray(new Parcelable[0]);
324fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
325fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
326fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static List<MediaItem2> fromMediaItem2ParcelableArray(Parcelable[] itemParcelableList) {
327fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        List<MediaItem2> playlist = new ArrayList<>();
328fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (itemParcelableList != null) {
329fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            for (int i = 0; i < itemParcelableList.length; i++) {
330fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                if (!(itemParcelableList[i] instanceof Bundle)) {
331fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    continue;
332fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
333fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                MediaItem2 item = MediaItem2.fromBundle((Bundle) itemParcelableList[i]);
334fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                if (item != null) {
335fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    playlist.add(item);
336fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
337fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
338fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
339fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return playlist;
340fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
341fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
342fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static Parcelable[] toCommandButtonParcelableArray(List<CommandButton> layout) {
343fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (layout == null) {
344fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            return null;
345fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
346fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        List<Bundle> layoutBundles = new ArrayList<>();
347fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        for (int i = 0; i < layout.size(); i++) {
348fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            Bundle bundle = layout.get(i).toBundle();
349fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            if (bundle != null) {
350fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                layoutBundles.add(bundle);
351fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
352fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
353fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return layoutBundles.toArray(new Parcelable[0]);
354fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
355fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
356fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static List<CommandButton> fromCommandButtonParcelableArray(Parcelable[] list) {
357fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        List<CommandButton> layout = new ArrayList<>();
358fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        if (layout != null) {
359fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            for (int i = 0; i < list.length; i++) {
360fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                if (!(list[i] instanceof Bundle)) {
361fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    continue;
362fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
363fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                CommandButton button = CommandButton.fromBundle((Bundle) list[i]);
364fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                if (button != null) {
365fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                    layout.add(button);
366fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
367fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            }
368fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
369fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return layout;
370fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
371fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
372fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim    static List<Bundle> toBundleList(Parcelable[] array) {
373fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        if (array == null) {
374fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim            return null;
375fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        }
376fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        List<Bundle> bundleList = new ArrayList<>();
377fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        for (Parcelable p : array) {
378fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim            bundleList.add((Bundle) p);
379fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        }
380fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim        return bundleList;
381fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim    }
382fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim
383fa1b27e361831b01f2d97d816f48c39ccf0ff539Sungsoo Lim    static int createPlaybackStateCompatState(int playerState, int bufferingState) {
384fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        switch (playerState) {
3854c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang            case MediaPlayerInterface.PLAYER_STATE_PLAYING:
386fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                switch (bufferingState) {
3874c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang                    case MediaPlayerInterface.BUFFERING_STATE_BUFFERING_AND_STARVED:
388fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                        return PlaybackStateCompat.STATE_BUFFERING;
389fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                }
390fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return PlaybackStateCompat.STATE_PLAYING;
3914c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang            case MediaPlayerInterface.PLAYER_STATE_PAUSED:
392fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return PlaybackStateCompat.STATE_PAUSED;
3934c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang            case MediaPlayerInterface.PLAYER_STATE_IDLE:
394fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return PlaybackStateCompat.STATE_NONE;
3954c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang            case MediaPlayerInterface.PLAYER_STATE_ERROR:
396fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang                return PlaybackStateCompat.STATE_ERROR;
397fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
398fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        // For unknown value
399fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        return PlaybackStateCompat.STATE_ERROR;
400fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
401fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang
402fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    static int toPlayerState(int playbackStateCompatState) {
403fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        switch (playbackStateCompatState) {
404fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_ERROR:
4054c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang                return MediaPlayerInterface.PLAYER_STATE_ERROR;
406fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_NONE:
4074c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang                return MediaPlayerInterface.PLAYER_STATE_IDLE;
408fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_PAUSED:
409fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_STOPPED:
410fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_BUFFERING: // means paused for buffering.
4114c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang                return MediaPlayerInterface.PLAYER_STATE_PAUSED;
412fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_FAST_FORWARDING:
413fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_PLAYING:
414fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_REWINDING:
415fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_SKIPPING_TO_NEXT:
416fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_SKIPPING_TO_PREVIOUS:
417fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_SKIPPING_TO_QUEUE_ITEM:
418fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang            case PlaybackStateCompat.STATE_CONNECTING: // Note: there's no perfect match for this.
4194c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang                return MediaPlayerInterface.PLAYER_STATE_PLAYING;
420fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang        }
4214c2e24f0a0e63fa260e959395d27b6e0ec95555aDongwon Kang        return MediaPlayerInterface.PLAYER_STATE_ERROR;
422fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang    }
423e57a84cc8a3c62a777d4dcf48d1c7f6e58657bf6Jaewan Kim
424e57a84cc8a3c62a777d4dcf48d1c7f6e58657bf6Jaewan Kim    static boolean isDefaultLibraryRootHint(Bundle bundle) {
425e57a84cc8a3c62a777d4dcf48d1c7f6e58657bf6Jaewan Kim        return bundle != null && bundle.getBoolean(MediaConstants2.ROOT_EXTRA_DEFAULT, false);
426e57a84cc8a3c62a777d4dcf48d1c7f6e58657bf6Jaewan Kim    }
427c000096702ed479f7aa922176851fe98cfa6a154Jaewan Kim
428c000096702ed479f7aa922176851fe98cfa6a154Jaewan Kim    static Bundle createBundle(Bundle bundle) {
429c000096702ed479f7aa922176851fe98cfa6a154Jaewan Kim        return (bundle == null) ? new Bundle() : new Bundle(bundle);
430c000096702ed479f7aa922176851fe98cfa6a154Jaewan Kim    }
431fbbf807584a0fbe7a01a0aa9920330cad45689aaInsun Kang}
432