package Ġme . ec he ung . mo emo ek yun . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroidx . core . graphics . Color Utils Ċ import Ġandroidx . palette . graphics . Palette Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġme . ec he ung . mo emo ek yun . App Ċ import Ġme . ec he ung . mo emo ek yun . R Ċ import Ġme . ec he ung . mo emo ek yun . client . model . Song Ċ import Ġjava . util . ArrayList Ċ Ċ object ĠAlbum Art Util Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠMAX _ SCREEN _ SIZE Ġ= Ġmax Screen Length ĊĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= ĠArrayList < Callback >() ĊĊĠĠĠ Ġprivate Ġvar Ġdefault Album Art : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġis Default Album Art Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġcurrent Album Art : ĠBitmap ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġvar Ġcurrent Accent Color : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġmax Screen Length : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Metrics Ġ= ĠResources . getSystem (). display Metrics ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMath . max ( display Metrics . width Pixels , Ġdisplay Metrics . height Pixels ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister Listener ( callback : ĠCallback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners . add ( callback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunregister Listener ( callback : ĠCallback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( listeners . contains ( callback )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . remove ( callback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Album Art ( maxSize : ĠInt ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Album Art Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Scaled Bitmap ( current Album Art !! , ĠmaxSize , ĠmaxSize , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTypically ĠOut Of Memory Error Ġor ĠNullPointerException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Album Art ( context : ĠContext , Ġsong : ĠSong ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( App . preference Util !!. should Download Image ( context ) Ġ&& Ġsong Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġalbum Art Url Ġ= Ġsong . album Art Url ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġevent Ġimage Ġif Ġavailable Ġwhen Ġthere 's Ġno Ġregular Ġalbum Ġart ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Art Url Ġ== Ġnull Ġ&& ĠApp . radio ViewModel !!. event Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent ImageUrl Ġ= ĠApp . radio ViewModel !!. event !!. image ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event ImageUrl Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Album Art Bitmap ( context , Ġevent ImageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Art Url Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdownload Album Art Bitmap ( context , Ġalbum Art Url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Listeners ( getDefault Album Art ( context )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Listeners ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Album Art Ġ= Ġbitmap ĊĠĠĠĠĠĠĠ Ġlisteners . forEach Ġ{ Ġit . on Album Art Ready ( bitmap ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdownload Album Art Bitmap ( context : ĠContext ?, Ġurl : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post ( fun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( context . application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Bitmap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. override ( MAX _ SCREEN _ SIZE , ĠMAX _ SCREEN _ SIZE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. dont Animate ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. listener ( object Ġ: ĠRequest Listener < Bitmap > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( e : ĠG lide Exception ?, Ġmodel : ĠAny ?, Ġtarget : ĠTarget < Bitmap > ?, Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( resource : ĠBitmap , Ġmodel : ĠAny , Ġtarget : ĠTarget < Bitmap >, ĠdataSource : ĠDataSource , Ġis First Resource : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Default Album Art Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġextract Accent Color ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Listeners ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. submit () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetDefault Album Art ( context : ĠContext ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( default Album Art Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Album Art Ġ= ĠBitmap Factory . decode Resource ( context . resources , ĠR . drawable . default _ album _ art ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġis Default Album Art Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠsetDefault Colors () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġdefault Album Art !! ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract Accent Color ( resource : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsw atch : ĠPalette . Sw atch ? Ġ= ĠPalette . from ( resource ). generate (). vi br ant Sw atch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sw atch Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsw atch Ġ= ĠPalette . from ( resource ). generate (). muted Sw atch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sw atch Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcolor Ġ= Ġsw atch . rgb ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDar ken Ġif Ġneeded ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Color Utils . calculate L uminance ( color ) Ġ>= Ġ 0 . 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor Utils . blend ARGB ( color , ĠColor . BLACK , Ġ 0 . 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Accent Color Ġ= Ġcolor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIgnore Ġthings Ġlike ĠOut Of Memory Exceptions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetDefault Colors () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetDefault Colors () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Accent Color Ġ= ĠColor . BLACK ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠCallback Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Album Art Ready ( bitmap : ĠBitmap ) ĊĠĠĠ Ġ} Ċ } Ċ