package Ġcom . l zx . st arr ys ky . model Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . support . v 4 . media . Media Browser Compat Ċ import Ġandroid . support . v 4 . media . Media Metadata Compat Ċ import Ġandroid . text . TextUtils Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Concurrent Map Ċ import Ġjava . util . concurrent . TimeUnit ĊĊ Ċ /** Ċ Ġ* Ġ åªĴ ä½ĵ ä¿¡æģ¯ æıĲä¾Ľ ç±» Ċ Ġ*/ Ċ class ĠMusic Provider Ġprivate Ġconstructor () Ġ{ ĊĊĠĠĠ Ġ// ä½¿çĶ¨ Map åľ¨ æŁ¥æī¾ æĸ¹ éĿ¢ ä¼ļ æķĪ çİĩ é«ĺ ä¸Ģ çĤ¹ ĊĠĠĠ Ġprivate Ġval Ġm Song InfoList ById : ĠConcurrent Map < String , ĠSong Info > ĊĠĠĠ Ġprivate Ġvar Ġm Music List ById : ĠConcurrent Map < String , ĠMedia Metadata Compat >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ List # Song Info ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® æĴŃæĶ¾ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġsong Infos : ĠList < Song Info > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠArrayList ( m Song InfoList ById . values ) ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized Ġset ( song Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Song InfoList ById . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġsong Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Song InfoList ById [ info . song Id !! ] Ġ= Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Music List ById Ġ= Ġto Media Metadata ( song Infos ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ List # Media Metadata Compat ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmusic List : ĠList < Media Metadata Compat > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠArrayList ( m Music List ById !!. values ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ĠList # Media Browser Compat . Media Item Ġ çĶ¨äºİ ĠonLoad Children Ġ åĽŀè°ĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġchildren Result : ĠList < Media Browser Compat . Media Item > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Items Ġ= ĠArrayList < Media Browser Compat . Media Item >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= ĠArrayList ( m Music List ById !!. values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( metadata Ġin Ġlist ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedia Item Ġ= ĠMedia Browser Compat . Media Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Browser Compat . Media Item . FLAG _ PLAY ABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Items . add ( media Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmedia Items ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġèİ·åıĸ ä¹± åºı åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsh uffled Music : ĠIterable < Media Metadata Compat > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsh uffled Ġ= ĠArrayList < Media Metadata Compat >( m Music List ById !!. size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh uffled . addAll ( m Music List ById !!. values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsh uffled . shuffle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsh uffled ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠSingleton Holder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġs Instance Ġ= ĠMusic Provider () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġm Song InfoList ById Ġ= ĠConcurrent HashMap () ĊĠĠĠĠĠĠĠ Ġm Music List ById Ġ= ĠConcurrent HashMap () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ·»åĬł ä¸Ģ é¦ĸ æŃĮ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġadd Song Info ( song Info : ĠSong Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Song InfoList ById [ song Info . song Id !! ] Ġ= Ġsong Info ĊĠĠĠĠĠĠĠ Ġm Music List ById ! ![ song Info . song Id !! ] Ġ= Ġto Media Metadata ( song Info ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® æ£ĢæŁ¥ æĺ¯åĲ¦ æľī æŁĲ é¦ĸ éŁ³ é¢ĳ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhas Song Info ( song Id : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm Song InfoList ById . containsKey ( song Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® song Id èİ·åıĸ Song Info ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Song Info ( song Id : ĠString ): ĠSong Info ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Song InfoList ById . containsKey ( song Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Song InfoList ById [ song Id ] ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® song Id èİ·åıĸ ç´¢å¼ķ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Index By Song Info ( song Id : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsong Info Ġ= Ġget Song Info ( song Id ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( song Info Ġ!= Ġnull ) Ġsong Infos . indexOf ( song Info ) Ġelse Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® id èİ·åıĸ å¯¹åºĶçļĦ Media Metadata Compat å¯¹è±¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Music ( song Id : ĠString ): ĠMedia Metadata Compat ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( m Music List ById !!. containsKey ( song Id )) Ġm Music List ById ! ![ song Id ] Ġelse Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæĽ´æĸ° å°ģ éĿ¢ art ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġupdate Music Art ( song Id : ĠString , Ġchange Data : ĠMedia Metadata Compat , Ġalbum Art : ĠBitmap , Ġicon : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= ĠMedia Metadata Compat . Builder ( change Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Bitmap ( Media Metadata Compat . METADATA _ KEY _ AL BU M _ ART , Ġalbum Art ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Bitmap ( Media Metadata Compat . METADATA _ KEY _ DISPLAY _ ICON , Ġicon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġm Music List ById ! ![ song Id ] Ġ= Ġmetadata ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġinstance : ĠMusic Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= ĠSingleton Holder . s Instance ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠList < Song Info > Ġ è½¬ ĠConcurrent Map < String ></ String >, ĠMedia Metadata Compat > ĊĠĠĠĠĠĠĠ Ġ</ Song Info > Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġto Media Metadata ( song Infos : ĠList < Song Info >): ĠConcurrent Map < String , ĠMedia Metadata Compat > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠConcurrent HashMap < String , ĠMedia Metadata Compat >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( info Ġin Ġsong Infos ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmetadata Compat Ġ= Ġto Media Metadata ( info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ info . song Id !! ] Ġ= Ġmetadata Compat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSong Info Ġ è½¬ ĠMedia Metadata Compat ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Synchron ized ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġto Media Metadata ( info : ĠSong Info ): ĠMedia Metadata Compat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġalbum Title : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( info . album Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Title Ġ= Ġinfo . album Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! TextUtils . isEmpty ( info . song Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Title Ġ= Ġinfo . song Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsong Cover : ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( info . song Cover )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong Cover Ġ= Ġinfo . song Cover ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! TextUtils . isEmpty ( info . album Cover )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsong Cover Ġ= Ġinfo . album Cover ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠMedia Metadata Compat . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ MEDIA _ ID , Ġinfo . song Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ MEDIA _ URI , Ġinfo . song Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( album Title )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ AL BU M , Ġalbum Title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( info . artist )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ AR TI ST , Ġinfo . artist ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . duration Ġ!= Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ms Ġ= ĠTimeUnit . SECONDS . to Millis ( info . duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Long ( Media Metadata Compat . METADATA _ KEY _ DURATION , Ġduration Ms ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( info . genre )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ GEN RE , Ġinfo . genre ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( song Cover )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ AL BU M _ ART _ URI , Ġsong Cover ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( info . song Name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . putString ( Media Metadata Compat . METADATA _ KEY _ TITLE , Ġinfo . song Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . track Number Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Long ( Media Metadata Compat . METADATA _ KEY _ TRACK _ NUMBER , Ġinfo . track Number . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . put Long ( Media Metadata Compat . METADATA _ KEY _ NUM _ TRACK S , Ġinfo . album Song Count . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ