/* Ċ Ġ* Ġ***************************************************************** ******* Ċ Ġ* Ġ ĠMedia Session Browser . kt Ċ Ġ* Ġ************************************************************************* Ċ Ġ* Ġ ĠCopyright ĠÂ© Ġ 2 0 1 6 - 2 0 2 0 ĠV LC Ġauthors Ġand ĠVideo LAN Ċ Ġ* Ġ ĠAuthor : ĠGe off rey ĠM Ã© ta is Ċ Ġ* Ċ Ġ* Ġ ĠThis Ġprogram Ġis Ġfree Ġsoftware ; Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġ Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġ Ġthe ĠFree ĠSoftware ĠFoundation ; Ġeither Ġversion Ġ 2 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* Ġ ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġ Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* Ġ ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* Ġ ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* Ġ ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġ Ġalong Ġwith Ġthis Ġprogram ; Ġif Ġnot , Ġwrite Ġto Ġthe ĠFree ĠSoftware Ċ Ġ* Ġ ĠFoundation , ĠInc ., Ġ 5 1 ĠFranklin ĠStreet , ĠFifth ĠFloor , ĠBoston ĠMA Ġ 0 2 1 1 0 - 1 3 0 1 , ĠUSA . Ċ Ġ* Ċ Ġ* Ġ Ġ************************************************************************* Ċ Ġ*/ Ċ package Ġorg . vide ol an . v lc . media Ċ Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . support . v 4 . media . Media Browser Compat Ċ import Ġandroid . support . v 4 . media . Media Description Compat Ċ import Ġandroidx . annotation . Worker Thread Ċ import Ġandroidx . core . net . to Uri Ċ import Ġorg . vide ol an . med iali brary . interfaces . Med iali brary Ċ import Ġorg . vide ol an . med iali brary . interfaces . media . Media Wrapper Ċ import Ġorg . vide ol an . med iali brary . media . Media Library Item Ċ import Ġorg . vide ol an . resources .* Ċ import Ġorg . vide ol an . resources . AppContext Provider . app Context Ċ import Ġorg . vide ol an . tools . KEY _ AR TI STS _ SHOW _ ALL Ċ import Ġorg . vide ol an . tools . PLAY BACK _ HISTORY Ċ import Ġorg . vide ol an . tools . Settings Ċ import Ġorg . vide ol an . v lc . Artwork Provider Ċ import Ġorg . vide ol an . v lc . Build Config Ċ import Ġorg . vide ol an . v lc . R Ċ import Ġorg . vide ol an . v lc . extensions . Extension Manager Service Ċ import Ġorg . vide ol an . v lc . extensions . Extension Manager Service . Extension Manager Activity Ċ import Ġorg . vide ol an . v lc . extensions . Extensions Manager Ċ import Ġorg . vide ol an . v lc . extensions . api . VL C Extension Item Ċ import Ġorg . vide ol an . v lc . gui . helpers . Ui Tools . getDefault Audio Drawable Ċ import Ġorg . vide ol an . v lc . gui . helpers . get Bitmap From Drawable Ċ import Ġorg . vide ol an . v lc . is Path Valid Ċ import Ġorg . vide ol an . v lc . media . Media Utils . get Media Album Ċ import Ġorg . vide ol an . v lc . media . Media Utils . get Media Artist Ċ import Ġorg . vide ol an . v lc . media . Media Utils . get Media Description Ċ import Ġorg . vide ol an . v lc . media . Media Utils . get Media Subtitle Ċ import Ġorg . vide ol an . v lc . util . Thumb nails Provider Ċ import Ġorg . vide ol an . v lc . util . is Scheme Streaming Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Semaphore Ċ Ċ class ĠMedia Session Browser Ġ: ĠExtension Manager Activity Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdisplay Extension Items ( extension Id : ĠInt , Ġtitle : ĠString , Ġitems : ĠList < VL C Extension Item >, Ġshow Params : ĠBoolean , Ġis Refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Params Ġ&& Ġitems . size Ġ== Ġ 1 Ġ&& Ġitems [ 0 ]. getType () Ġ== ĠV LC Extension Item . TYPE _ DIRECTORY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service ?. browse ( items [ 0 ]. string Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmedia Item : ĠMedia Description Compat . Builder ĊĠĠĠĠĠĠĠ Ġvar Ġextension Item : ĠV LC Extension Item ĊĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġextension Item ) Ġin Ġitems . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Item . getType () Ġ!= ĠV LC Extension Item . TYPE _ AUDIO Ġ&& Ġextension Item . getType () Ġ!= ĠV LC Extension Item . TYPE _ DIRECTORY ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Item Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcover Uri Ġ= Ġextension Item . getImage Uri () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cover Uri Ġ== Ġnull ) Ġmedia Item . setIcon Bitmap ( getDefault Audio Drawable ( app Context ). bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġmedia Item . setIcon Uri ( cover Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Item . setTitle ( extension Item . getTitle ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Item . set Subtitle ( extension Item . getSub Title ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay able Ġ= Ġextension Item . getType () Ġ== ĠV LC Extension Item . TYPE _ AUDIO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( play able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Item . set Media Id ("${ Extensions Manager . EXTENSION _ PREFIX }_${ extension Id }_${ extension Item . get Link () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Items . add ( Media Browser Compat . Media Item ( media Item . build (), ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Item . set Media Id ("${ Extensions Manager . EXTENSION _ PREFIX }_${ extension Id }_${ extension Item . string Id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Items . add ( Media Browser Compat . Media Item ( media Item . build (), ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== ĠMAX _ EXTENSION _ SIZE Ġ- Ġ 1 ) Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġextension Lock . release () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" VL C / Media Session Browser " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠBASE _ DRAW ABLE _ URI Ġ= Ġ" android . resource ://${ Build Config . APP _ ID }/ drawable " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ AL BU M _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ album _ unknown }". to Uri () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ AR TI ST _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ artist _ unknown }". to Uri () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ STREAM _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ stream _ unknown }". to Uri () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ PLAY LIST _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ playlist _ unknown }". to Uri () ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠDEFAULT _ PLAY ALL _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ play all }". to Uri () ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ TRACK _ ICON Ġ= Ġ"${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ no thumb }". to Uri () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġinstance Ġ= ĠMedia Session Browser () ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ ROOT Ġ= Ġ" ID _ ROOT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ AR TI STS Ġ= Ġ" ID _ AR TI STS " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ AL BU MS Ġ= Ġ" ID _ AL BU MS " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ TRACK S Ġ= Ġ" ID _ TRACK S " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ GEN RES Ġ= Ġ" ID _ GEN RES " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ PLAY LIST S Ġ= Ġ" ID _ PLAY LIST S " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ HOME Ġ= Ġ" ID _ HOME " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ HISTORY Ġ= Ġ" ID _ HISTORY " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ LAST _ AD DED Ġ= Ġ" ID _ REC ENT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ STREAM S Ġ= Ġ" ID _ STREAM S " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠID _ LIBRARY Ġ= Ġ" ID _ LIBRARY " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ SH UFF LE _ ALL Ġ= Ġ" ID _ SH UFF LE _ ALL " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ NO _ MEDIA Ġ= Ġ" ID _ NO _ MEDIA " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠID _ NO _ PLAY LIST Ġ= Ġ" ID _ NO _ PLAY LIST " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAL BU M _ PREFIX Ġ= Ġ" album " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠAR TI ST _ PREFIX Ġ= Ġ" artist " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGEN RE _ PREFIX Ġ= Ġ" genre " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠP LAY LIST _ PREFIX Ġ= Ġ" playlist " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSEARCH _ PREFIX Ġ= Ġ" search " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ HISTORY _ SIZE Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ COVER _ ART _ ITEMS Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ EXTENSION _ SIZE Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMAX _ RESULT _ SIZE Ġ= Ġ 8 0 0 ĊĊĠĠĠĠĠĠĠ Ġ// ĠExtensions Ġmanagement ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġextension Service Connection : ĠService Connection ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġextension Manager Service : ĠExtension Manager Service ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġextension Items : ĠArrayList < Media Browser Compat . Media Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġextension Lock Ġ= ĠSem aphore ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġfun Ġbrowse ( context : ĠContext , ĠparentId : ĠString ): ĠList < Media Browser Compat . Media Item >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresults : ĠArrayList < Media Browser Compat . Media Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlist : ĠArray < out ĠMedia Library Item >? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlimit Size Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcontext . resources ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Extensions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parentId . startsWith ( Extensions Manager . EXTENSION _ PREFIX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Service Connection Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Extension Service Connection ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Lock . acquire () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Service Connection Ġ== Ġnull ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠparentId . split ("_ "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= ĠInteger . valueOf ( data [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Items . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . size Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// case Ġextension Ġroot ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service ?. connect Service ( index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// case Ġsub - directory ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstring Id Ġ= ĠparentId . replace ("${ Extensions Manager . EXTENSION _ PREFIX }_${ index }_ ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service ?. browse ( string Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Lock . acquire () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults Ġ= Ġextension Items ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġml Ġ= ĠMed iali brary . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parentId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ ROOT Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// List Ġof ĠExtensions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextensions Ġ= ĠExtensions Manager . getInstance (). get Extensions ( context , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( i , Ġextension ) Ġin Ġextensions . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġitem Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension . android Auto Enabled () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠSettings . getInstance ( context ). getBoolean ( Extensions Manager . EXTENSION _ PREFIX Ġ+ Ġ"_" Ġ+ Ġextension . component Name (). packageName Ġ+ Ġ"_" Ġ+ ĠExtensions Manager . ANDROID _ AUTO _ SUFFIX , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Media Id ( Extensions Manager . EXTENSION _ PREFIX Ġ+ Ġ"_" Ġ+ Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( extension . title ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Res Ġ= Ġextension . menu Icon () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġextension Res : ĠResources ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( icon Res Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Res Ġ= Ġcontext . package Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getResources For Application ( extension . component Name (). packageName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= ĠBitmap Factory . decode Resource ( extension Res , Ġicon Res ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( b Ġ!= Ġnull ) Ġitem . setIcon Bitmap ( b ) Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġ( context . package Manager . getApplication Icon ( extension . component Name (). packageName ) Ġas ĠBitmap Drawable ). bitmap ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Bitmap ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb Ġ= Ġcontext . get Bitmap From Drawable ( R . drawable . icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Bitmap ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( item . build (), ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Home ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhome Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ HOME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . auto _ home )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ home }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extras ( getContent Style ( CONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE , ĠCONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( home Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Play lists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplaylist Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ PLAY LIST S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . play lists )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ playlist }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extras ( getContent Style ( CONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE , ĠCONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( playlist Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// My Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ LIBRARY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . auto _ my _ library )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ audio }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( library Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Streams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstreams Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ STREAM S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . streams )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ stream }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( streams Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ HOME Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSh uffle ĠAll Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Count Ġ= Ġml . audio Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshuffle All Path Ġ= Ġif Ġ( audio Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . SH UFF LE _ ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . compute Expiration ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("$ audio Count ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshuffle All Media Desc Ġ= Ġget Play All Builder ( res , ĠID _ SH UFF LE _ ALL , Ġaudio Count , Ġshuffle All Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . shuffle _ all _ title )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( shuffle All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠLast ĠAdded Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecent Audio Ġ= Ġml . get Paged Audio ( Med iali brary . SORT _ INSERT ION DATE , Ġtrue , ĠMAX _ HISTORY _ SIZE , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecent Audio Size Ġ= Ġrecent Audio . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Added Path Ġ= Ġif Ġ( recent Audio Size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . LAST _ AD DED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ Artwork Provider . compute Checksum ( recent Audio . toList ()) }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("$ recent Audio Size ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Added Media Desc Ġ= Ġget Play All Builder ( res , ĠID _ LAST _ AD DED , Ġrecent Audio Size , Ġlast Added Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . auto _ last _ added _ media )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( last Added Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠHistory Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Settings . getInstance ( context ). getBoolean ( PLAY BACK _ HISTORY , Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Media Play ed Ġ= Ġml . last Media Play ed ()?. toList ()?. filter Ġ{ Ġis Media Audio ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! last Media Play ed . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Media Size Ġ= Ġlast Media Play ed . size . coerce At Most ( MAX _ HISTORY _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhistory Path Ġ= ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . HISTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ Artwork Provider . compute Checksum ( last Media Play ed )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("$ last Media Size ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhistory Media Desc Ġ= Ġget Play All Builder ( res , ĠID _ HISTORY , Ġlast Media Size , Ġhistory Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . history )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( history Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ LIBRARY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Art ists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartists Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ AR TI STS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . artists )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ artist }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( artists Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Album s ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum s Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ AL BU MS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . albums )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ album }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extras ( getContent Style ( CONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE , ĠCONTENT _ STYLE _ LIST _ ITEM _ HINT _ VALUE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( albums Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Tracks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtracks Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ TRACK S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . tracks )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ audio }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( tracks Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Gen res ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgen res Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ GEN RES ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . genres )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ("${ BASE _ DRAW ABLE _ URI }/${ R . drawable . ic _ auto _ genre }". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( genres Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ AR TI STS Ġ-> Ġlist Ġ= Ġml . get Art ists ( Settings . getInstance ( context ). getBoolean ( KEY _ AR TI STS _ SHOW _ ALL , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ AL BU MS Ġ-> Ġlist Ġ= Ġml . albums ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ GEN RES Ġ-> Ġlist Ġ= Ġml . genres ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ TRACK S Ġ-> Ġlist Ġ= Ġml . audio ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ PLAY LIST S Ġ-> Ġlist Ġ= Ġml . play lists ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ STREAM S Ġ-> Ġlist Ġ= Ġml . last Streams Play ed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ LAST _ AD DED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Size Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġml . get Paged Audio ( Med iali brary . SORT _ INSERT ION DATE , Ġtrue , ĠMAX _ HISTORY _ SIZE , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠparentId , Ġlist . size ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ HISTORY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlimit Size Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġml . last Media Play ed ()?. toList ()?. filter Ġ{ Ġis Media Audio ( it ) Ġ} ?. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠparentId , Ġlist . size . coerce At Most ( MAX _ HISTORY _ SIZE )). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Sections Ġ= ĠparentId . split ("_ "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġid Sections [ 1 ]. to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( id Sections [ 0 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAL BU M _ PREFIX Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġml . get Album ( id ). tracks ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠparentId , Ġlist . size ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAR TI ST _ PREFIX Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Ġ= Ġml . get Artist ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġartist . albums ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Artwork Ġ= Ġlist . any Ġ{ Ġ! it . art work M rl . isNull OrEmpty () Ġ&& Ġis Path Valid ( it . art work M rl ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Path Ġ= Ġif Ġ( has Artwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . PLAY _ ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . AR TI ST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ artist . tracks Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠparentId , Ġartist . tracks Count , Ġplay All Path ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGEN RE _ PREFIX Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgenre Ġ= Ġml . get Genre ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Ġ= Ġgenre . albums ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Path Ġ= ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . PLAY _ ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . GEN RE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ genre . tracks Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("$ id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠparentId , Ġgenre . tracks Count , Ġplay All Path ). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . addAll ( build Media Items ( context , ĠparentId , Ġlist , Ġnull , Ġlimit Size )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ NO _ MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ( DEFAULT _ TRACK _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( context . getString ( R . string . search _ no _ result )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( parentId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ AR TI STS Ġ-> Ġempty Media Desc . setIcon Uri ( DEFAULT _ AR TI ST _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ AL BU MS Ġ-> Ġempty Media Desc . setIcon Uri ( DEFAULT _ AL BU M _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ GEN RES Ġ-> Ġempty Media Desc . setIcon Uri ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ PLAY LIST S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Media Desc . set Media Id ( ID _ NO _ PLAY LIST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty Media Desc . setTitle ( context . getString ( R . string . nop lay list )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠID _ STREAM S Ġ-> Ġempty Media Desc . setIcon Uri ( DEFAULT _ STREAM _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( empty Media Desc . build (), ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġsearch Ġmethod Ġis Ġpassed Ġa Ġsimple Ġquery Ġstring Ġabsent Ġmetadata Ġindicating ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġuser 's Ġintent Ġto Ġload Ġa Ġplaylist , Ġalbum , Ġartist , Ġor Ġsong . ĠThis Ġis Ġslightly Ġdifferent ĊĠĠĠĠĠĠĠĠ Ġ* Ġthan ĠPlay back Service . on Play From Search Ġ( which Ġis Ġalso Ġinvoked Ġby Ġvoice Ġsearch ) Ġand Ġallows ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġuser Ġto Ġnavigate Ġto Ġother Ġcontent Ġvia Ġon - screen Ġmenus . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Worker Thread ĊĠĠĠĠĠĠĠ Ġfun Ġsearch ( context : ĠContext , Ġquery : ĠString ): ĠList < Media Browser Compat . Media Item >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults : ĠMutable List < Media Browser Compat . Media Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Aggregate Ġ= ĠMed iali brary . getInstance (). search ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . addAll ( build Media Items ( context , ĠID _ PLAY LIST S , Ġsearch Aggregate . play lists , Ġres . getString ( R . string . play lists ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . addAll ( build Media Items ( context , ĠAR TI ST _ PREFIX , Ġsearch Aggregate . artists , Ġres . getString ( R . string . artists ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . addAll ( build Media Items ( context , ĠAL BU M _ PREFIX , Ġsearch Aggregate . albums , Ġres . getString ( R . string . albums ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Lst Ġ= Ġbuild Media Items ( context , ĠID _ TRACK S , Ġsearch Aggregate . tracks , Ġres . getString ( R . string . tracks )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Lst . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextras Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( EXTRA _ CONTENT _ STYLE _ GROUP _ TITLE _ HINT , Ġres . getString ( R . string . tracks )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Media Desc Ġ= Ġget Play All Builder ( res , ĠSEARCH _ PREFIX Ġ+ Ġ"_ $ query ", Ġtrack Lst . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Extras ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( play All Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Lst . isNotEmpty ()) Ġresults . addAll ( track Lst ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġempty Media Desc Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( ID _ NO _ MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ( DEFAULT _ TRACK _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( context . getString ( R . string . search _ no _ result )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( empty Media Desc , ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThis Ġfunction Ġconstructs Ġa Ġcollection Ġof ĠMedia Browser Compat . Media Items Ġfor Ġeach Ġapplicable ĊĠĠĠĠĠĠĠĠ Ġ* Ġarray Ġelement Ġin Ġthe ĠMedia Library Items Ġlist Ġpassed Ġfrom Ġeither Ġthe Ġbrowse Ġor Ġsearch Ġmethods . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠApplication Ġcontext Ġto Ġresolve Ġstring Ġresources ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠparentId ĠIdent ifies Ġthe Ġposition Ġin Ġthe Ġmenu Ġhierarchy . ĠThe Ġbrowse Ġfunction ĊĠĠĠĠĠĠĠĠ Ġ* Ġwill Ġpass Ġthe Ġargument Ġfrom Ġthe Ġcalling Ġapplication . ĠThe Ġsearch Ġfunction Ġwill Ġuse Ġa ĊĠĠĠĠĠĠĠĠ Ġ* Ġplaceholder Ġvalue Ġto Ġact Ġas Ġif Ġthe Ġuser Ġnavig ated Ġto Ġthe Ġlocation . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlist ĠMedia Library Items Ġto Ġprocess Ġinto ĠMedia Browser Compat . Media Items ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgroup Title ĠCommon Ġheading Ġto Ġgroup Ġitems Ġ( unused Ġif Ġnull ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġlimit Size ĠLimit Ġthe Ġnumber Ġof Ġitems Ġreturned Ġ( default Ġis Ġfalse ) ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠList Ġcontaining Ġfully Ġconstructed ĠMedia Browser ĠMedia Item ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Media Items ( context : ĠContext , ĠparentId : ĠString , Ġlist : ĠArray < out ĠMedia Library Item > ?, Ġgroup Title : ĠString ?, Ġlimit Size : ĠBoolean Ġ= Ġfalse ): ĠList < Media Browser Compat . Media Item > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isNull OrEmpty ()) Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġart work To Uri Cache Ġ= ĠHashMap < String , ĠUri >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresults : ĠArrayList < Media Browser Compat . Media Item > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresults . ensure Capacity ( list . size . coerce At Most ( MAX _ RESULT _ SIZE )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIterate Ġover Ġlist Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( library Item Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library Item . item Type Ġ== ĠMedia Library Item . TYPE _ MEDIA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ(( library Item Ġas ĠMedia Wrapper ). type Ġ== ĠMedia Wrapper . TYPE _ STREAM Ġ|| Ġis Scheme Streaming ( library Item . uri . scheme ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Item . type Ġ= ĠMedia Wrapper . TYPE _ STREAM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( library Item . item Type Ġ== ĠMedia Library Item . TYPE _ MEDIA Ġ&& Ġ( library Item Ġas ĠMedia Wrapper ). type Ġ!= ĠMedia Wrapper . TYPE _ AUDIO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( library Item . title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( generate Media Id ( library Item )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet ĠSub titles Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ MEDIA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Ġ= Ġlibrary Item Ġas ĠMedia Wrapper ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Media Uri (( library Item Ġas ĠMedia Wrapper ). uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( when Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia . type Ġ== ĠMedia Wrapper . TYPE _ STREAM Ġ-> Ġmedia . uri . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠparentId . startsWith ( AL BU M _ PREFIX ) Ġ-> Ġget Media Subtitle ( media ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġget Media Description ( get Media Artist ( context , Ġmedia ), Ġget Media Album ( context , Ġmedia )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ PLAY LIST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( res . getString ( R . string . track _ number , Ġlibrary Item . tracks Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AR TI ST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum s Count Ġ= ĠMed iali brary . getInstance (). get Artist ( library Item . id ). albums Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( res . get Quantity String ( R . plurals . albums _ quantity , Ġalbum s Count , Ġalbum s Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ GEN RE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum s Count Ġ= ĠMed iali brary . getInstance (). get Genre ( library Item . id ). albums Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( res . get Quantity String ( R . plurals . albums _ quantity , Ġalbum s Count , Ġalbum s Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AL BU M Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parentId . startsWith ( AR TI ST _ PREFIX )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( res . getString ( R . string . track _ number , Ġlibrary Item . tracks Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Subtitle ( library Item . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġitem . set Subtitle ( library Item . description ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet ĠIcons Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( library Item . item Type Ġ!= ĠMedia Library Item . TYPE _ PLAY LIST Ġ&& Ġ! library Item . art work M rl . isNull OrEmpty () Ġ&& Ġis Path Valid ( library Item . art work M rl )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Uri Ġ= ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AR TI ST Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ( Artwork Provider . AR TI ST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ("${ library Item . tracks Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AL BU M Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ( Artwork Provider . AL BU M ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ("${ library Item . tracks Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ( Artwork Provider . MEDIA ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( library Item Ġas ? ĠMedia Wrapper )?. let Ġ{ Ġicon Uri . append Path ("${ it . lastModified }") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . append Path ("${ library Item . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Uri ( art work To Uri Cache . get Or Put ( library Item . art work M rl , Ġ{ ĠArt work Provider . build Uri ( icon Uri . build ()) Ġ})) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( library Item . item Type Ġ== ĠMedia Library Item . TYPE _ MEDIA Ġ&& Ġ( library Item Ġas ĠMedia Wrapper ). type Ġ== ĠMedia Wrapper . TYPE _ STREAM ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Uri ( DEFAULT _ STREAM _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AR TI ST Ġ-> Ġitem . setIcon Uri ( DEFAULT _ AR TI ST _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AL BU M Ġ-> Ġitem . setIcon Uri ( DEFAULT _ AL BU M _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ GEN RE Ġ-> Ġitem . setIcon Uri ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ PLAY LIST Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack List Ġ= Ġlibrary Item . tracks . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Artwork Ġ= Ġtrack List . any Ġ{ Ġ( Thumb nails Provider . is Media Video ( it ) Ġ|| Ġ(! it . art work M rl . isNull OrEmpty () Ġ&& Ġis Path Valid ( it . art work M rl ))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Artwork ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplay All Playlist Ġ= ĠUri . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . PLAY _ ALL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ( Artwork Provider . PLAY LIST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ Artwork Provider . compute Checksum ( track List , Ġtrue )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ library Item . tracks Count }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append Path ("${ library Item . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Uri ( Artwork Provider . build Uri ( play All Playlist )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . setIcon Uri ( DEFAULT _ PLAY LIST _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġitem . setIcon Uri ( DEFAULT _ TRACK _ ICON ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet ĠEx tras Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextras Ġ= Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AR TI ST , ĠMedia Library Item . TYPE _ GEN RE Ġ-> ĠgetContent Style ( CONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE , ĠCONTENT _ STYLE _ GRID _ ITEM _ HINT _ VALUE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( group Title Ġ!= Ġnull ) Ġextras . putString ( EXTRA _ CONTENT _ STYLE _ GROUP _ TITLE _ HINT , Ġgroup Title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . set Extras ( extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠSet ĠFlags Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġflags Ġ= Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ MEDIA , ĠMedia Library Item . TYPE _ PLAY LIST Ġ-> ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠMedia Browser Compat . Media Item . FLAG _ BRO WS ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresults . add ( Media Browser Compat . Media Item ( item . build (), Ġflags )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( limit Size Ġ&& Ġresults . size Ġ== ĠMAX _ HISTORY _ SIZE ) Ġ|| Ġresults . size Ġ== ĠMAX _ RESULT _ SIZE ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġart work To Uri Cache . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresults ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetContent Style ( b rowsable Hint : ĠInt , Ġplay able Hint : ĠInt ): ĠBundle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( CONTENT _ STYLE _ SUPPORTED , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( CONTENT _ STYLE _ BRO WS ABLE _ HINT , Ġb rowsable Hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( CONTENT _ STYLE _ PLAY ABLE _ HINT , Ġplay able Hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġgenerate Media Id ( library Item : ĠMedia Library Item ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġwhen Ġ( library Item . item Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AL BU M Ġ-> ĠAL BU M _ PREFIX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ AR TI ST Ġ-> ĠAR TI ST _ PREFIX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ GEN RE Ġ-> ĠGEN RE _ PREFIX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Library Item . TYPE _ PLAY LIST Ġ-> ĠP LAY LIST _ PREFIX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġlibrary Item . id . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ prefix }_${ library Item . id }" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġis Media Audio ( library Item : ĠMedia Library Item ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlibrary Item . item Type Ġ== ĠMedia Library Item . TYPE _ MEDIA Ġ&& Ġ( library Item Ġas ĠMedia Wrapper ). type Ġ== ĠMedia Wrapper . TYPE _ AUDIO ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Play All Builder ( res : ĠResources , Ġmedia Id : ĠString , Ġtrack Count : ĠInt , Ġuri : ĠUri ? Ġ= Ġnull ): ĠMedia Description Compat . Builder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMedia Description Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Id ( media Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( res . getString ( R . string . play _ all )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Subtitle ( res . getString ( R . string . track _ number , Ġtrack Count )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon Uri ( if Ġ( uri Ġ!= Ġnull ) ĠArt work Provider . build Uri ( uri ) Ġelse ĠDEFAULT _ PLAY ALL _ ICON ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Extension Service Connection ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Service Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name , Ġservice : ĠI Binder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service Ġ= Ġ( service Ġas ĠExtension Manager Service . Local Binder ). service . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Extension Manager Activity ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Lock . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . unbind Service ( extension Service Connection !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Service Connection Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service !!. stop Self () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Service Connection ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠExtension Manager Service :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! context . bind Service ( intent , Ġit , ĠContext . BIND _ AUTO _ CREATE )) Ġextension Service Connection Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġun bind Extension Connection () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Manager Service ?. disconnect () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ