1 /*
2  * Copyright 2019 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.bluetooth.avrcpcontroller;
18 
19 import android.bluetooth.BluetoothAdapter;
20 import android.bluetooth.BluetoothDevice;
21 import android.content.Context;
22 import android.net.Uri;
23 import android.support.v4.media.MediaBrowserCompat.MediaItem;
24 import android.support.v4.media.MediaDescriptionCompat;
25 import android.support.v4.media.MediaMetadataCompat;
26 
27 import androidx.test.InstrumentationRegistry;
28 import androidx.test.runner.AndroidJUnit4;
29 
30 import org.junit.After;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.junit.runner.RunWith;
35 
36 /**
37  * A test suite for the AvrcpItem class.
38  */
39 @RunWith(AndroidJUnit4.class)
40 public final class AvrcpItemTest {
41 
42     private BluetoothDevice mDevice;
43     private static final String UUID = "AVRCP-ITEM-TEST-UUID";
44 
45      // Attribute ID Values from AVRCP Specification
46     private static final int MEDIA_ATTRIBUTE_TITLE = 0x01;
47     private static final int MEDIA_ATTRIBUTE_ARTIST_NAME = 0x02;
48     private static final int MEDIA_ATTRIBUTE_ALBUM_NAME = 0x03;
49     private static final int MEDIA_ATTRIBUTE_TRACK_NUMBER = 0x04;
50     private static final int MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER = 0x05;
51     private static final int MEDIA_ATTRIBUTE_GENRE = 0x06;
52     private static final int MEDIA_ATTRIBUTE_PLAYING_TIME = 0x07;
53     private static final int MEDIA_ATTRIBUTE_COVER_ART_HANDLE = 0x08;
54 
55     @Before
setUp()56     public void setUp() {
57         Context context = InstrumentationRegistry.getTargetContext();
58         mDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice("AA:BB:CC:DD:EE:FF");
59     }
60 
61     @After
tearDown()62     public void tearDown() {
63         mDevice = null;
64     }
65 
66     @Test
buildAvrcpItem()67     public void buildAvrcpItem() {
68         String title = "Aaaaargh";
69         String artist = "Bluetooth";
70         String album = "The Best Protocol";
71         long trackNumber = 1;
72         long totalTracks = 12;
73         String genre = "Viking Metal";
74         long playingTime = 301;
75         String artHandle = "0000001";
76         Uri uri = Uri.parse("content://somewhere");
77         Uri uri2 = Uri.parse("content://somewhereelse");
78 
79         AvrcpItem.Builder builder = new AvrcpItem.Builder();
80         builder.setItemType(AvrcpItem.TYPE_MEDIA);
81         builder.setType(AvrcpItem.MEDIA_AUDIO);
82         builder.setDevice(mDevice);
83         builder.setPlayable(true);
84         builder.setUid(0);
85         builder.setUuid(UUID);
86         builder.setTitle(title);
87         builder.setArtistName(artist);
88         builder.setAlbumName(album);
89         builder.setTrackNumber(trackNumber);
90         builder.setTotalNumberOfTracks(totalTracks);
91         builder.setGenre(genre);
92         builder.setPlayingTime(playingTime);
93         builder.setCoverArtHandle(artHandle);
94         builder.setCoverArtLocation(uri);
95 
96         AvrcpItem item = builder.build();
97 
98         Assert.assertEquals(mDevice, item.getDevice());
99         Assert.assertEquals(true, item.isPlayable());
100         Assert.assertEquals(false, item.isBrowsable());
101         Assert.assertEquals(0, item.getUid());
102         Assert.assertEquals(UUID, item.getUuid());
103         Assert.assertEquals(null, item.getDisplayableName());
104         Assert.assertEquals(title, item.getTitle());
105         Assert.assertEquals(artist, item.getArtistName());
106         Assert.assertEquals(album, item.getAlbumName());
107         Assert.assertEquals(trackNumber, item.getTrackNumber());
108         Assert.assertEquals(totalTracks, item.getTotalNumberOfTracks());
109         Assert.assertEquals(artHandle, item.getCoverArtHandle());
110         Assert.assertEquals(uri, item.getCoverArtLocation());
111     }
112 
113     @Test
buildAvrcpItemFromAvrcpAttributes()114     public void buildAvrcpItemFromAvrcpAttributes() {
115         String title = "Aaaaargh";
116         String artist = "Bluetooth";
117         String album = "The Best Protocol";
118         String trackNumber = "1";
119         String totalTracks = "12";
120         String genre = "Viking Metal";
121         String playingTime = "301";
122         String artHandle = "0000001";
123 
124         int[] attrIds = new int[]{
125             MEDIA_ATTRIBUTE_TITLE,
126             MEDIA_ATTRIBUTE_ARTIST_NAME,
127             MEDIA_ATTRIBUTE_ALBUM_NAME,
128             MEDIA_ATTRIBUTE_TRACK_NUMBER,
129             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
130             MEDIA_ATTRIBUTE_GENRE,
131             MEDIA_ATTRIBUTE_PLAYING_TIME,
132             MEDIA_ATTRIBUTE_COVER_ART_HANDLE
133         };
134 
135         String[] attrMap = new String[]{
136             title,
137             artist,
138             album,
139             trackNumber,
140             totalTracks,
141             genre,
142             playingTime,
143             artHandle
144         };
145 
146         AvrcpItem.Builder builder = new AvrcpItem.Builder();
147         builder.fromAvrcpAttributeArray(attrIds, attrMap);
148         AvrcpItem item = builder.build();
149 
150         Assert.assertEquals(null, item.getDevice());
151         Assert.assertEquals(false, item.isPlayable());
152         Assert.assertEquals(false, item.isBrowsable());
153         Assert.assertEquals(0, item.getUid());
154         Assert.assertEquals(null, item.getUuid());
155         Assert.assertEquals(null, item.getDisplayableName());
156         Assert.assertEquals(title, item.getTitle());
157         Assert.assertEquals(artist, item.getArtistName());
158         Assert.assertEquals(album, item.getAlbumName());
159         Assert.assertEquals(1, item.getTrackNumber());
160         Assert.assertEquals(12, item.getTotalNumberOfTracks());
161         Assert.assertEquals(artHandle, item.getCoverArtHandle());
162         Assert.assertEquals(null, item.getCoverArtLocation());
163     }
164 
165     @Test
buildAvrcpItemFromAvrcpAttributesWithBadIds_badIdsIgnored()166     public void buildAvrcpItemFromAvrcpAttributesWithBadIds_badIdsIgnored() {
167         String title = "Aaaaargh";
168         String artist = "Bluetooth";
169         String album = "The Best Protocol";
170         String trackNumber = "1";
171         String totalTracks = "12";
172         String genre = "Viking Metal";
173         String playingTime = "301";
174         String artHandle = "0000001";
175 
176         int[] attrIds = new int[]{
177             MEDIA_ATTRIBUTE_TITLE,
178             MEDIA_ATTRIBUTE_ARTIST_NAME,
179             MEDIA_ATTRIBUTE_ALBUM_NAME,
180             MEDIA_ATTRIBUTE_TRACK_NUMBER,
181             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
182             MEDIA_ATTRIBUTE_GENRE,
183             MEDIA_ATTRIBUTE_PLAYING_TIME,
184             MEDIA_ATTRIBUTE_COVER_ART_HANDLE,
185             75,
186             76,
187             77,
188             78
189         };
190 
191         String[] attrMap = new String[]{
192             title,
193             artist,
194             album,
195             trackNumber,
196             totalTracks,
197             genre,
198             playingTime,
199             artHandle,
200             "ignore me",
201             "ignore me",
202             "ignore me",
203             "ignore me"
204         };
205 
206         AvrcpItem.Builder builder = new AvrcpItem.Builder();
207         builder.fromAvrcpAttributeArray(attrIds, attrMap);
208         AvrcpItem item = builder.build();
209 
210         Assert.assertEquals(null, item.getDevice());
211         Assert.assertEquals(false, item.isPlayable());
212         Assert.assertEquals(false, item.isBrowsable());
213         Assert.assertEquals(0, item.getUid());
214         Assert.assertEquals(null, item.getUuid());
215         Assert.assertEquals(null, item.getDisplayableName());
216         Assert.assertEquals(title, item.getTitle());
217         Assert.assertEquals(artist, item.getArtistName());
218         Assert.assertEquals(album, item.getAlbumName());
219         Assert.assertEquals(1, item.getTrackNumber());
220         Assert.assertEquals(12, item.getTotalNumberOfTracks());
221         Assert.assertEquals(artHandle, item.getCoverArtHandle());
222         Assert.assertEquals(null, item.getCoverArtLocation());
223     }
224 
225     @Test
buildAvrcpItemFromAvrcpAttributes_imageHandleTooShort()226     public void buildAvrcpItemFromAvrcpAttributes_imageHandleTooShort() {
227         String title = "Aaaaargh";
228         String artist = "Bluetooth";
229         String album = "The Best Protocol";
230         String trackNumber = "1";
231         String totalTracks = "12";
232         String genre = "Viking Metal";
233         String playingTime = "301";
234         String artHandle = "000001"; // length 6 and not 7
235 
236         int[] attrIds = new int[]{
237             MEDIA_ATTRIBUTE_TITLE,
238             MEDIA_ATTRIBUTE_ARTIST_NAME,
239             MEDIA_ATTRIBUTE_ALBUM_NAME,
240             MEDIA_ATTRIBUTE_TRACK_NUMBER,
241             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
242             MEDIA_ATTRIBUTE_GENRE,
243             MEDIA_ATTRIBUTE_PLAYING_TIME,
244             MEDIA_ATTRIBUTE_COVER_ART_HANDLE
245         };
246 
247         String[] attrMap = new String[]{
248             title,
249             artist,
250             album,
251             trackNumber,
252             totalTracks,
253             genre,
254             playingTime,
255             artHandle
256         };
257 
258         AvrcpItem.Builder builder = new AvrcpItem.Builder();
259         builder.fromAvrcpAttributeArray(attrIds, attrMap);
260         AvrcpItem item = builder.build();
261 
262         Assert.assertEquals(null, item.getDevice());
263         Assert.assertEquals(false, item.isPlayable());
264         Assert.assertEquals(false, item.isBrowsable());
265         Assert.assertEquals(0, item.getUid());
266         Assert.assertEquals(null, item.getUuid());
267         Assert.assertEquals(null, item.getDisplayableName());
268         Assert.assertEquals(title, item.getTitle());
269         Assert.assertEquals(artist, item.getArtistName());
270         Assert.assertEquals(album, item.getAlbumName());
271         Assert.assertEquals(1, item.getTrackNumber());
272         Assert.assertEquals(12, item.getTotalNumberOfTracks());
273         Assert.assertEquals(null, item.getCoverArtHandle());
274         Assert.assertEquals(null, item.getCoverArtLocation());
275     }
276 
277     @Test
buildAvrcpItemFromAvrcpAttributes_imageHandleEmpty()278     public void buildAvrcpItemFromAvrcpAttributes_imageHandleEmpty() {
279         String title = "Aaaaargh";
280         String artist = "Bluetooth";
281         String album = "The Best Protocol";
282         String trackNumber = "1";
283         String totalTracks = "12";
284         String genre = "Viking Metal";
285         String playingTime = "301";
286         String artHandle = "";
287 
288         int[] attrIds = new int[]{
289             MEDIA_ATTRIBUTE_TITLE,
290             MEDIA_ATTRIBUTE_ARTIST_NAME,
291             MEDIA_ATTRIBUTE_ALBUM_NAME,
292             MEDIA_ATTRIBUTE_TRACK_NUMBER,
293             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
294             MEDIA_ATTRIBUTE_GENRE,
295             MEDIA_ATTRIBUTE_PLAYING_TIME,
296             MEDIA_ATTRIBUTE_COVER_ART_HANDLE
297         };
298 
299         String[] attrMap = new String[]{
300             title,
301             artist,
302             album,
303             trackNumber,
304             totalTracks,
305             genre,
306             playingTime,
307             artHandle
308         };
309 
310         AvrcpItem.Builder builder = new AvrcpItem.Builder();
311         builder.fromAvrcpAttributeArray(attrIds, attrMap);
312         AvrcpItem item = builder.build();
313 
314         Assert.assertEquals(null, item.getDevice());
315         Assert.assertEquals(false, item.isPlayable());
316         Assert.assertEquals(false, item.isBrowsable());
317         Assert.assertEquals(0, item.getUid());
318         Assert.assertEquals(null, item.getUuid());
319         Assert.assertEquals(null, item.getDisplayableName());
320         Assert.assertEquals(title, item.getTitle());
321         Assert.assertEquals(artist, item.getArtistName());
322         Assert.assertEquals(album, item.getAlbumName());
323         Assert.assertEquals(1, item.getTrackNumber());
324         Assert.assertEquals(12, item.getTotalNumberOfTracks());
325         Assert.assertEquals(null, item.getCoverArtHandle());
326         Assert.assertEquals(null, item.getCoverArtLocation());
327     }
328 
329     @Test
buildAvrcpItemFromAvrcpAttributes_imageHandleNull()330     public void buildAvrcpItemFromAvrcpAttributes_imageHandleNull() {
331         String title = "Aaaaargh";
332         String artist = "Bluetooth";
333         String album = "The Best Protocol";
334         String trackNumber = "1";
335         String totalTracks = "12";
336         String genre = "Viking Metal";
337         String playingTime = "301";
338         String artHandle = null;
339 
340         int[] attrIds = new int[]{
341             MEDIA_ATTRIBUTE_TITLE,
342             MEDIA_ATTRIBUTE_ARTIST_NAME,
343             MEDIA_ATTRIBUTE_ALBUM_NAME,
344             MEDIA_ATTRIBUTE_TRACK_NUMBER,
345             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
346             MEDIA_ATTRIBUTE_GENRE,
347             MEDIA_ATTRIBUTE_PLAYING_TIME,
348             MEDIA_ATTRIBUTE_COVER_ART_HANDLE
349         };
350 
351         String[] attrMap = new String[]{
352             title,
353             artist,
354             album,
355             trackNumber,
356             totalTracks,
357             genre,
358             playingTime,
359             artHandle
360         };
361 
362         AvrcpItem.Builder builder = new AvrcpItem.Builder();
363         builder.fromAvrcpAttributeArray(attrIds, attrMap);
364         AvrcpItem item = builder.build();
365 
366         Assert.assertEquals(null, item.getDevice());
367         Assert.assertEquals(false, item.isPlayable());
368         Assert.assertEquals(false, item.isBrowsable());
369         Assert.assertEquals(0, item.getUid());
370         Assert.assertEquals(null, item.getUuid());
371         Assert.assertEquals(null, item.getDisplayableName());
372         Assert.assertEquals(title, item.getTitle());
373         Assert.assertEquals(artist, item.getArtistName());
374         Assert.assertEquals(album, item.getAlbumName());
375         Assert.assertEquals(1, item.getTrackNumber());
376         Assert.assertEquals(12, item.getTotalNumberOfTracks());
377         Assert.assertEquals(null, item.getCoverArtHandle());
378         Assert.assertEquals(null, item.getCoverArtLocation());
379     }
380 
381     @Test
buildAvrcpItemFromAvrcpAttributes_imageHandleNotDigits()382     public void buildAvrcpItemFromAvrcpAttributes_imageHandleNotDigits() {
383         String title = "Aaaaargh";
384         String artist = "Bluetooth";
385         String album = "The Best Protocol";
386         String trackNumber = "1";
387         String totalTracks = "12";
388         String genre = "Viking Metal";
389         String playingTime = "301";
390         String artHandle = "123abcd";
391 
392         int[] attrIds = new int[]{
393             MEDIA_ATTRIBUTE_TITLE,
394             MEDIA_ATTRIBUTE_ARTIST_NAME,
395             MEDIA_ATTRIBUTE_ALBUM_NAME,
396             MEDIA_ATTRIBUTE_TRACK_NUMBER,
397             MEDIA_ATTRIBUTE_TOTAL_TRACK_NUMBER,
398             MEDIA_ATTRIBUTE_GENRE,
399             MEDIA_ATTRIBUTE_PLAYING_TIME,
400             MEDIA_ATTRIBUTE_COVER_ART_HANDLE
401         };
402 
403         String[] attrMap = new String[]{
404             title,
405             artist,
406             album,
407             trackNumber,
408             totalTracks,
409             genre,
410             playingTime,
411             artHandle
412         };
413 
414         AvrcpItem.Builder builder = new AvrcpItem.Builder();
415         builder.fromAvrcpAttributeArray(attrIds, attrMap);
416         AvrcpItem item = builder.build();
417 
418         Assert.assertEquals(null, item.getDevice());
419         Assert.assertEquals(false, item.isPlayable());
420         Assert.assertEquals(false, item.isBrowsable());
421         Assert.assertEquals(0, item.getUid());
422         Assert.assertEquals(null, item.getUuid());
423         Assert.assertEquals(null, item.getDisplayableName());
424         Assert.assertEquals(title, item.getTitle());
425         Assert.assertEquals(artist, item.getArtistName());
426         Assert.assertEquals(album, item.getAlbumName());
427         Assert.assertEquals(1, item.getTrackNumber());
428         Assert.assertEquals(12, item.getTotalNumberOfTracks());
429         Assert.assertEquals(null, item.getCoverArtHandle());
430         Assert.assertEquals(null, item.getCoverArtLocation());
431     }
432 
433     @Test
updateCoverArtLocation()434     public void updateCoverArtLocation() {
435         Uri uri = Uri.parse("content://somewhere");
436         Uri uri2 = Uri.parse("content://somewhereelse");
437 
438         AvrcpItem.Builder builder = new AvrcpItem.Builder();
439         builder.setCoverArtLocation(uri);
440 
441         AvrcpItem item = builder.build();
442         Assert.assertEquals(uri, item.getCoverArtLocation());
443 
444         item.setCoverArtLocation(uri2);
445         Assert.assertEquals(uri2, item.getCoverArtLocation());
446     }
447 
448     @Test
avrcpMediaItem_toMediaMetadata()449     public void avrcpMediaItem_toMediaMetadata() {
450         String title = "Aaaaargh";
451         String artist = "Bluetooth";
452         String album = "The Best Protocol";
453         long trackNumber = 1;
454         long totalTracks = 12;
455         String genre = "Viking Metal";
456         long playingTime = 301;
457         String artHandle = "0000001";
458         Uri uri = Uri.parse("content://somewhere");
459 
460         AvrcpItem.Builder builder = new AvrcpItem.Builder();
461         builder.setItemType(AvrcpItem.TYPE_MEDIA);
462         builder.setType(AvrcpItem.MEDIA_AUDIO);
463         builder.setDevice(mDevice);
464         builder.setPlayable(true);
465         builder.setUid(0);
466         builder.setUuid(UUID);
467         builder.setDisplayableName(title);
468         builder.setTitle(title);
469         builder.setArtistName(artist);
470         builder.setAlbumName(album);
471         builder.setTrackNumber(trackNumber);
472         builder.setTotalNumberOfTracks(totalTracks);
473         builder.setGenre(genre);
474         builder.setPlayingTime(playingTime);
475         builder.setCoverArtHandle(artHandle);
476         builder.setCoverArtLocation(uri);
477 
478         AvrcpItem item = builder.build();
479         MediaMetadataCompat metadata = item.toMediaMetadata();
480 
481         Assert.assertEquals(UUID, metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID));
482         Assert.assertEquals(title,
483                 metadata.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE));
484         Assert.assertEquals(title, metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE));
485         Assert.assertEquals(artist, metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST));
486         Assert.assertEquals(album, metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM));
487         Assert.assertEquals(trackNumber,
488                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER));
489         Assert.assertEquals(totalTracks,
490                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS));
491         Assert.assertEquals(genre, metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE));
492         Assert.assertEquals(playingTime,
493                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_DURATION));
494         Assert.assertEquals(uri,
495                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI)));
496         Assert.assertEquals(uri,
497                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_ART_URI)));
498         Assert.assertEquals(uri,
499                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI)));
500         Assert.assertEquals(null,
501                 metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
502         Assert.assertEquals(null, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ART));
503         Assert.assertEquals(null, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART));
504         Assert.assertFalse(metadata.containsKey(MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE));
505     }
506 
507     @Test
avrcpFolderItem_toMediaMetadata()508     public void avrcpFolderItem_toMediaMetadata() {
509         String title = "Bluetooth Playlist";
510         String artist = "Many";
511         long totalTracks = 12;
512         String genre = "Viking Metal";
513         long playingTime = 301;
514         String artHandle = "0000001";
515         Uri uri = Uri.parse("content://somewhere");
516         int type = AvrcpItem.FOLDER_TITLES;
517 
518         AvrcpItem.Builder builder = new AvrcpItem.Builder();
519         builder.setItemType(AvrcpItem.TYPE_FOLDER);
520         builder.setType(type);
521         builder.setDevice(mDevice);
522         builder.setUuid(UUID);
523         builder.setDisplayableName(title);
524         builder.setTitle(title);
525         builder.setArtistName(artist);
526         builder.setTotalNumberOfTracks(totalTracks);
527         builder.setGenre(genre);
528         builder.setPlayingTime(playingTime);
529         builder.setCoverArtHandle(artHandle);
530         builder.setCoverArtLocation(uri);
531 
532         AvrcpItem item = builder.build();
533         MediaMetadataCompat metadata = item.toMediaMetadata();
534 
535         Assert.assertEquals(UUID, metadata.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID));
536         Assert.assertEquals(title,
537                 metadata.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE));
538         Assert.assertEquals(title, metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE));
539         Assert.assertEquals(artist, metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST));
540         Assert.assertEquals(null, metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM));
541         Assert.assertEquals(totalTracks,
542                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS));
543         Assert.assertEquals(genre, metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE));
544         Assert.assertEquals(playingTime,
545                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_DURATION));
546         Assert.assertEquals(uri,
547                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI)));
548         Assert.assertEquals(uri,
549                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_ART_URI)));
550         Assert.assertEquals(uri,
551                 Uri.parse(metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI)));
552         Assert.assertEquals(null,
553                 metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON));
554         Assert.assertEquals(null, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ART));
555         Assert.assertEquals(null, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART));
556         Assert.assertEquals(type,
557                 metadata.getLong(MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE));
558     }
559 
560     @Test
avrcpItemNoDisplayName_toMediaItem()561     public void avrcpItemNoDisplayName_toMediaItem() {
562         String title = "Aaaaargh";
563         Uri uri = Uri.parse("content://somewhere");
564 
565         AvrcpItem.Builder builder = new AvrcpItem.Builder();
566         builder.setPlayable(true);
567         builder.setUuid(UUID);
568         builder.setTitle(title);
569         builder.setCoverArtLocation(uri);
570 
571         AvrcpItem item = builder.build();
572         MediaItem mediaItem = item.toMediaItem();
573         MediaDescriptionCompat desc = mediaItem.getDescription();
574 
575         Assert.assertTrue(mediaItem.isPlayable());
576         Assert.assertFalse(mediaItem.isBrowsable());
577         Assert.assertEquals(UUID, mediaItem.getMediaId());
578 
579         Assert.assertEquals(UUID, desc.getMediaId());
580         Assert.assertEquals(null, desc.getMediaUri());
581         Assert.assertEquals(title, desc.getTitle().toString());
582         Assert.assertEquals(desc.getSubtitle(), null);
583         Assert.assertEquals(uri, desc.getIconUri());
584         Assert.assertEquals(null, desc.getIconBitmap());
585     }
586 
587     @Test
avrcpItemWithDisplayName_toMediaItem()588     public void avrcpItemWithDisplayName_toMediaItem() {
589         String title = "Aaaaargh";
590         String displayName = "A Different Type of Aaaaargh";
591         Uri uri = Uri.parse("content://somewhere");
592 
593         AvrcpItem.Builder builder = new AvrcpItem.Builder();
594         builder.setPlayable(true);
595         builder.setUuid(UUID);
596         builder.setDisplayableName(displayName);
597         builder.setTitle(title);
598         builder.setCoverArtLocation(uri);
599 
600         AvrcpItem item = builder.build();
601         MediaItem mediaItem = item.toMediaItem();
602         MediaDescriptionCompat desc = mediaItem.getDescription();
603 
604         Assert.assertTrue(mediaItem.isPlayable());
605         Assert.assertFalse(mediaItem.isBrowsable());
606         Assert.assertEquals(UUID, mediaItem.getMediaId());
607 
608         Assert.assertEquals(UUID, desc.getMediaId());
609         Assert.assertEquals(null, desc.getMediaUri());
610         Assert.assertEquals(displayName, desc.getTitle().toString());
611         Assert.assertEquals(desc.getSubtitle(), null);
612         Assert.assertEquals(uri, desc.getIconUri());
613         Assert.assertEquals(null, desc.getIconBitmap());
614     }
615 
616     @Test
avrcpItemBrowsable_toMediaItem()617     public void avrcpItemBrowsable_toMediaItem() {
618         String title = "Aaaaargh";
619         Uri uri = Uri.parse("content://somewhere");
620 
621         AvrcpItem.Builder builder = new AvrcpItem.Builder();
622         builder.setBrowsable(true);
623         builder.setUuid(UUID);
624         builder.setTitle(title);
625         builder.setCoverArtLocation(uri);
626 
627         AvrcpItem item = builder.build();
628         MediaItem mediaItem = item.toMediaItem();
629         MediaDescriptionCompat desc = mediaItem.getDescription();
630 
631         Assert.assertFalse(mediaItem.isPlayable());
632         Assert.assertTrue(mediaItem.isBrowsable());
633         Assert.assertEquals(UUID, mediaItem.getMediaId());
634 
635         Assert.assertEquals(UUID, desc.getMediaId());
636         Assert.assertEquals(null, desc.getMediaUri());
637         Assert.assertEquals(title, desc.getTitle().toString());
638         Assert.assertEquals(desc.getSubtitle(), null);
639         Assert.assertEquals(uri, desc.getIconUri());
640         Assert.assertEquals(null, desc.getIconBitmap());
641     }
642 }
643