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