/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 . ĠCar los ĠRen Ã© ĠR amos ĠL Ã³ pe z . ĠAll Ġrights Ġreserved . Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . c rr l . beat player . repository Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . provider . Media Store Ċ import Ġcom . c rr l . beat player . extensions . toList Ċ import Ġcom . c rr l . beat player . models . Album Ċ import Ġcom . c rr l . beat player . models . Song Ċ import Ġcom . c rr l . beat player . utils . Player Constants Ċ import Ġcom . c rr l . beat player . utils . Settings Utility Ċ import Ġcom . c rr l . beat player . utils . Sort Modes Ċ Ċ interface ĠAlbum s Repository Interface Ġ{ ĊĠĠĠ Ġfun Ġget Album ( id : ĠLong ): ĠAlbum ĊĠĠĠ Ġfun ĠgetS ongs For Album ( album Id : ĠLong ): ĠList < Song > ĊĠĠĠ Ġfun Ġget Album s (): ĠList < Album > Ċ } Ċ Ċ class ĠAlbum s Repository () Ġ: ĠAlbum s Repository Interface Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Resolver : ĠContent Resolver ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings Utility : ĠSettings Utility ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠAlbum s Repository ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ?): ĠAlbum s Repository ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instance Ġ== Ġnull ) Ġinstance Ġ= ĠAlbum s Repository ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( context : ĠContext ? Ġ= Ġnull ) Ġ: Ġthis () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Resolver Ġ= Ġcontext !!. content Resolver ĊĠĠĠĠĠĠĠ Ġsettings Utility Ġ= ĠSettings Utility . getInstance ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Album ( cursor : ĠCursor ?): ĠAlbum Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcursor ?. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cursor . moveTo First ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlbum . createFrom Cursor ( cursor ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠAlbum () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Album ( id : ĠLong ): ĠAlbum Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Album ( make Album Cursor ("_ id = ?", ĠarrayOf ( id . toString ()))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetS ongs For Album ( album Id : ĠLong ): ĠList < Song > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmake Album Song Cursor ( album Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList ( true ) Ġ{ ĠSong . createFrom Cursor ( this , Ġalbum Id ) Ġ} ĊĠĠĠĠĠĠĠ ĠSort Modes . sort Album Song List ( list ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Album s (): ĠList < Album > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsl Ġ= Ġmake Album Cursor ( null , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList ( true ) Ġ{ ĠAlbum . createFrom Cursor ( this ) Ġ} ĊĠĠĠĠĠĠĠ ĠSort Modes . sort Album List ( sl , Ġsettings Utility . album SortOrder ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsl ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch ( param String : ĠString , Ġlimit : ĠInt ): ĠList < Album > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmake Album Cursor (" album ĠLIKE Ġ?", ĠarrayOf ("$ param String % ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList ( true ) Ġ{ ĠAlbum . createFrom Cursor ( this ) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( result . size Ġ< Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmore Results Ġ= Ġmake Album Cursor (" album ĠLIKE Ġ?", ĠarrayOf ("% _$ param String % ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList ( true ) Ġ{ ĠAlbum . createFrom Cursor ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġmore Results ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( result . size Ġ< Ġlimit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . sub List ( 0 , Ġlimit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Album Cursor ( selection : ĠString ?, Ġparam ArrayOf String : ĠArray < String >? ): ĠCursor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("_ id ", Ġ" album ", Ġ" artist ", Ġ" artist _ id ", Ġ" nums ongs ", Ġ" min year "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam ArrayOf String , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Utility . album SortOrder ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Album Song Cursor ( album ID : ĠLong ): ĠCursor ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġ" is _ music = 1 ĠAND Ġtitle Ġ!= Ġ'' ĠAND Ġalbum _ id =$ album ID " ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Constants . SON G _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ("_ id ", Ġ" title ", Ġ" artist ", Ġ" album ", Ġ" duration ", Ġ" track ", Ġ" artist _ id ", Ġ"_ data "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }