/* Ċ Ġ* ĠCopyright Ġ 2 0 1 4 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . example . mu ze i . watch face Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Content Observer Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Size Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . google . android . apps . mu ze i . api . Mu ze i Contract Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . util . concurrent . ExecutorService Ċ import Ġjava . util . concurrent . Executors Ċ import Ġjava . util . concurrent . Future Ċ Ċ /** Ċ Ġ* ĠAsync Task Loader Ġwhich Ġprovides Ġaccess Ġto Ġthe Ġcurrent ĠMu ze i Ġart work Ġimage . ĠIt Ġalso Ċ Ġ* Ġregisters Ġa ĠContent Observer Ġto Ġensure Ġthe Ġimage Ġstays Ġup Ġto Ġdate Ċ Ġ*/ Ċ class ĠArt work Image Loader ( private Ġval Ġcontext : ĠContext ) Ġ: ĠMutable LiveData < Bitmap >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance : ĠArt work Image Loader ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance ( context : ĠContext ): ĠArt work Image Loader Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Context Ġ= Ġcontext . application Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ġ?: Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ?: ĠArt work Image Loader ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġexecutor : ĠExecutor Service Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠExec utors . new Single Thread Executor () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġcontent Observer : ĠContent Observer Ġ= Ġobject Ġ: ĠContent Observer ( null ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonChange ( self Change : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload In Background () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġfuture : ĠFuture < *> ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġrequested Size : ĠSize ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Active Observer s ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload In Background () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Active () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . register Content Observer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMu ze i Contract . Artwork . CONTENT _ URI , Ġtrue , Ġcontent Observer ) ĊĠĠĠĠĠĠĠ Ġload In Background () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload In Background () Ġ{ ĊĠĠĠĠĠĠĠ Ġfuture ?. cancel ( true ) ĊĠĠĠĠĠĠĠ Ġfuture Ġ= Ġexecutor . submit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġrequested Size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMu ze i Contract . Artwork . getCurrent Artwork Bitmap ( context )?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ== Ġnull Ġ-> Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ> Ġheight Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaling Factor Ġ= Ġsize . height Ġ* Ġ 1 f Ġ/ Ġheight ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Scaled Bitmap ( this , Ġ( scaling Factor Ġ* Ġwidth ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize . height , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscaling Factor Ġ= Ġsize . width Ġ* Ġ 1 f Ġ/ Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Scaled Bitmap ( this , Ġsize . width , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( scaling Factor Ġ* Ġheight ). toInt (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Value ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Artwork Image Loader ", Ġ" Error Ġgetting Ġart work Ġimage ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Inactive () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . unregister Content Observer ( content Observer ) ĊĠĠĠ Ġ} Ċ } Ċ