package Ġcom . smp . cover ar tp ro vider Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . provider . Media Store Ċ import Ġjava . util .* Ċ Ċ class ĠAlbum Ġconstructor ( ĊĠĠĠ Ġval Ġalbum Id : ĠLong Ġ= Ġ 0 L , ĊĠĠĠ Ġval Ġalbum Name : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġartist Id : ĠLong Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġartist Name : ĠString Ġ= Ġ"", ĊĠĠĠ Ġval Ġyear : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġval Ġart Uri : ĠString Ġ= Ġ"" Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinterface ĠAlbum SortOrder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠAL BU M _ A _ Z Ġ= ĠMedia Store . Audio . Album s . DEFAULT _ SORT _ ORDER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconst Ġval ĠAL BU M _ Z _ A Ġ= ĠMedia Store . Audio . Album s . DEFAULT _ SORT _ ORDER Ġ+ Ġ" ĠDESC " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠS ONG _ PRO JECTION Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . TITLE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media ._ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AR TI ST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AL BU M , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DURATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DATA , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . YEAR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DATE _ AD DED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AL BU M _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AR TI ST _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . TRACK , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . DATE _ MODI FIED , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . IS _ ALARM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . IS _ RING T ONE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . IS _ POD CAST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . IS _ NOTIFICATION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . IS _ M US IC ) ĊĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAL BU M _ PRO JECTION Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s ._ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . AL BU M , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . AR TI ST _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . AR TI ST , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . LAST _ YEAR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . AL BU M _ ART ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Album S ongs ( context : ĠContext , Ġalbum Id : ĠLong ): ĠList < Media Track > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Selection Ġ= ĠMedia Store . Audio . Media . IS _ M US IC Ġ+ Ġ" Ġ!= Ġ 0 " Ġ+ Ġ" ĠAND Ġ" Ġ+ ĠMedia Store . Audio . Audio Columns . AL BU M _ ID Ġ+ Ġ" Ġ= Ġ" Ġ+ Ġalbum Id Ġ+ Ġ" ĠAND Ġ" Ġ+ ĠMedia Store . Audio . Audio Columns . TITLE Ġ+ Ġ" Ġ!= Ġ'' " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Cur Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠS ONG _ PRO JECTION , Ġaudio Selection , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Cur . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMedia Track . build Audio List ( context , Ġaudio Cur , Ġcontext . resources ). sorted By Ġ{ Ġit . track Number Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetAll Album s ( context : ĠContext , Ġsort Order : ĠString Ġ= ĠAlbum SortOrder . AL BU M _ A _ Z ): ĠList < Album > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAL BU M _ PRO JECTION , Ġnull , Ġnull , Ġsort Order ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Album List ( cur , Ġcontext . resources ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfun Ġget Album From Id ( context : ĠContext , Ġalbum Id : ĠLong ): ĠList < Album > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum Selection Ġ= ĠMedia Store . Audio . Album s ._ ID Ġ+ Ġ" Ġ= Ġ" Ġ+ Ġalbum Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Ġ= Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Audio . Album s . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAL BU M _ PRO JECTION , Ġalbum Selection , Ġnull , ĠAlbum SortOrder . AL BU M _ A _ Z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn Ġempty List () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcur . use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuild Album List ( cur , Ġcontext . resources ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġbuild Album List ( cur : ĠCursor , Ġres : ĠResources , Ġartist Id : ĠLong Ġ= Ġ- 1 L ): ĠList < Album > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum s Ġ= ĠArrayList < Album >( cur . count ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum Idx Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Album s . AL BU M _ ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Index Ġ= Ġif Ġ( album Idx Ġ!= Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Idx ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur . getColumnIndex ( Media Store . Audio . Album s ._ ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum Index Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Album s . AL BU M ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Index Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Album s . AR TI ST ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Id Index Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Media . AR TI ST _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyear Index Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Album s . LAST _ YEAR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġart Index Ġ= Ġcur . getColumnIndex ( Media Store . Audio . Album s . AL BU M _ ART ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunknown Album Ġ= Ġres . getString ( R . string . label _ unknown _ artist _ or _ album ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunknown Artist Ġ= Ġres . getString ( R . string . label _ unknown _ artist _ or _ album ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunknown Art Uri Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcur . count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur . moveTo Position ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= ĠAlbum ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Id Ġ= Ġcur . getLong ( id Index ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Name Ġ= Ġparse Unknown ( cur . getString ( album Index ), Ġunknown Album ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Name Ġ= Ġparse Unknown ( cur . getString ( artist Index ), Ġunknown Artist ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Id Ġ= Ġif Ġ( artist Id Ġ== Ġ- 1 L ) Ġcur . getLong ( artist Id Index ) Ġelse Ġartist Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġcur . getInt ( year Index ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġart Uri Ġ= Ġparse Unknown ( cur . getString ( art Index ), Ġunknown Art Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum s . add ( next ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġalbum s ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġ=== Ġother Ġ|| Ġother Ġ!= Ġnull Ġ&& Ġother Ġis ĠAlbum Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Id Ġ== Ġother . album Id Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalbum Name Ġ== Ġother . album Name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Id Ġ== Ġother . artist Id Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartist Name Ġ== Ġother . artist Name Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ== Ġother . year Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġart Uri Ġ== Ġother . art Uri ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġalbum Name ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġparse Unknown ( value : ĠString ?, Ġconvert Value : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġif Ġ( value Ġ== Ġnull Ġ|| Ġvalue Ġ== ĠMedia Store . UNKNOWN _ STRING ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconvert Value ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠ Ġ} Ċ }