/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// 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 . Ċ Ġ*/ Ċ Ċ @ file : Jvm Name (" G lide Image ") Ċ @ file : Jvm Mult if ile Class Ċ Ċ package Ġdev . chr is ban es . ac comp an ist . glide Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . layout . Box Scope Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . static Composition Local Of Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . Color Filter Ċ import Ġandroidx . compose . ui . graphics . Image Bitmap Ċ import Ġandroidx . compose . ui . graphics . p ainter . Painter Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . unit . Int Size Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . RequestBuilder Ċ import Ġcom . bump tech . glide . Request Manager Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . DataSource Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . Default Ref etch On Size Change Lambda Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . Empty Request Complete Lambda Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . Image Load Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . Image Load State Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . Material Loading Image Ċ import Ġdev . chr is ban es . ac comp an ist . image loading . to Painter Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ Ċ /** Ċ Ġ* ĠComp osition Ġlocal Ġcontaining Ġthe Ġpreferred Ġ[ Request Manager ] Ġto Ġuse Ġin Ġ[ G lide Image ]. Ċ Ġ*/ Ċ val ĠLocal Request Manager Ġ= Ġstatic Composition Local Of < Request Manager ?> Ġ{ Ġnull Ġ} Ċ Ċ /** Ċ Ġ* ĠContains Ġsome Ġdefault Ġvalues Ġused Ġfor Ġ[ G lide Image ]. Ċ Ġ*/ Ċ object ĠG lide Image Defaults Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġdefault Ġ[ Request Manager ] Ġvalue Ġfor Ġthe Ġ` request Manager ` Ġparameter ĊĠĠĠĠ Ġ* Ġin Ġ[ G lide Image ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun Ġdefault Request Manager (): ĠRequest Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLocal Request Manager . current ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBy Ġdefault ĠG lide Ġtries Ġto Ġinstall Ġlifecycle Ġlisteners Ġto Ġautomatically Ġre - trigger ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrequests Ġwhen Ġres umed . ĠWe Ġdon 't Ġwant Ġthat Ġwith ĠCompose , Ġsince Ġwe Ġrely Ġon Ġcomposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġour Ġ' lifecycle '. ĠWe Ġcan Ġstop ĠG lide Ġdoing Ġthis Ġby Ġusing Ġthe Ġapplication Ġcontext . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠG lide . with ( Local Context . current . application Context ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġcomp osable Ġthat Ġwill Ġattempt Ġto Ġload Ġthe Ġgiven Ġ[ data ] Ġusing Ġ[ G lide ], Ġand Ġprovides Ċ Ġ* Ġcomplete Ġcontent Ġof Ġhow Ġthe Ġcurrent Ġstate Ġis Ġdisplayed : Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠG lide Image ( Ċ Ġ* ĠĠ Ġdata Ġ= Ġ" https :// www . image . url ", Ċ Ġ* Ġ) Ġ{ Ġimage State Ġ-> Ċ Ġ* ĠĠ Ġwhen Ġ( image State ) Ġ{ Ċ Ġ* ĠĠĠĠ Ġis ĠImage Load State . Success Ġ-> Ġ// ĠTODO Ċ Ġ* ĠĠĠĠ Ġis ĠImage Load State . Error Ġ-> Ġ// ĠTODO Ċ Ġ* ĠĠĠĠ ĠImage Load State . Loading Ġ-> Ġ// ĠTODO Ċ Ġ* ĠĠĠĠ ĠImage Load State . Empty Ġ-> Ġ// ĠTODO Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġdata ĠThe Ġdata Ġto Ġload . Ċ Ġ* Ġ@ param Ġmodifier Ġ[ Modifier ] Ġused Ġto Ġadjust Ġthe Ġlayout Ġalgorithm Ġor Ġdraw Ġdecoration Ġcontent . Ċ Ġ* Ġ@ param Ġrequest Builder ĠOptional Ġbuilder Ġfor Ġthe Ġ[ RequestBuilder ]. Ċ Ġ* Ġ@ param Ġrequest Manager ĠThe Ġ[ Request Manager ] Ġto Ġuse Ġwhen Ġrequesting Ġthe Ġimage . ĠDefaults Ġto Ġthe Ċ Ġ* Ġcurrent Ġvalue Ġof Ġ[ Local Request Manager ]. Ċ Ġ* Ġ@ param Ġshould Ref etch On Size Change ĠLambda Ġwhich Ġwill Ġbe Ġinvoked Ġwhen Ġthe Ġsize Ġchanges , Ġallowing Ċ Ġ* Ġoptional Ġre - fetch ing Ġof Ġthe Ġimage . ĠReturn Ġtrue Ġto Ġre - fetch Ġthe Ġimage . Ċ Ġ* Ġ@ param Ġon Request Completed ĠListener Ġwhich Ġwill Ġbe Ġcalled Ġwhen Ġthe Ġloading Ġrequest Ġhas Ġfinished . Ċ Ġ* Ġ@ param Ġcontent ĠContent Ġto Ġbe Ġdisplayed Ġfor Ġthe Ġgiven Ġstate . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠG lide Image ( ĊĠĠĠ Ġdata : ĠAny , ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġrequest Builder : Ġ( RequestBuilder < Drawable >. ( size : ĠInt Size ) Ġ-> ĠRequest Builder < Drawable >) ? Ġ= Ġnull , ĊĠĠĠ Ġrequest Manager : ĠRequest Manager Ġ= ĠG lide Image Defaults . default Request Manager (), ĊĠĠĠ Ġshould Ref etch On Size Change : Ġ( current Result : ĠImage Load State , Ġsize : ĠInt Size ) Ġ-> ĠBoolean Ġ= ĠDefault Ref etch On Size Change Lambda , ĊĠĠĠ Ġon Request Completed : Ġ( Image Load State ) Ġ-> ĠUnit Ġ= ĠEmpty Request Complete Lambda , ĊĠĠĠ Ġcontent : Ġ@ Composable ĠBox Scope .( image Load State : ĠImage Load State ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġ@ Opt In ( Experimental Cor outines Api :: class ) ĊĠĠĠ ĠImage Load ( ĊĠĠĠĠĠĠĠ Ġrequest Ġ= Ġrequest Manager . load ( check Data ( data )), ĊĠĠĠĠĠĠĠ Ġrequest Key Ġ= Ġdata , Ġ// ĠG lide ĠRequest Builder Ġdoesn 't Ġsupport Ġequality Ġso Ġwe Ġuse Ġthe Ġdata ĊĠĠĠĠĠĠĠ Ġexecute Request Ġ= Ġ{ Ġ( r , Ġsize ) Ġ-> Ġrequest Manager . execute ( r , Ġsize ) Ġ}, ĊĠĠĠĠĠĠĠ Ġtransform Request For Size Ġ= Ġ{ Ġr , Ġsize Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( request Builder ?. invoke ( r , Ġsize ) Ġ?: Ġr , Ġsize ) ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġshould Ref etch On Size Change Ġ= Ġshould Ref etch On Size Change , ĊĠĠĠĠĠĠĠ Ġon Request Completed Ġ= Ġon Request Completed , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġcontent ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCreates Ġa Ġcomp osable Ġthat Ġwill Ġattempt Ġto Ġload Ġthe Ġgiven Ġ[ data ] Ġusing Ġ[ G lide ], Ġand Ġthen Ċ Ġ* Ġdisplay Ġthe Ġresult Ġin Ġan Ġ[ Image ]. Ċ Ġ* Ċ Ġ* ĠThis Ġversion Ġof Ġthe Ġfunction Ġis Ġmore Ġopinion ated , Ġproviding : Ċ Ġ* Ċ Ġ* Ġ- ĠSupport Ġfor Ġdisplaying Ġalternative Ġcontent Ġwhile Ġthe Ġrequest Ġis Ġ' loading '. Ċ Ġ* ĠĠ ĠSee Ġthe Ġ[ loading ] Ġparameter . Ċ Ġ* Ġ- ĠSupport Ġfor Ġdisplaying Ġalternative Ġcontent Ġif Ġthe Ġrequest Ġwas Ġun successful . Ċ Ġ* ĠĠ ĠSee Ġthe Ġ[ error ] Ġparameter . Ċ Ġ* Ġ- ĠSupport Ġfor Ġautomatically Ġf ading - in Ġthe Ġimage Ġonce Ġloaded . ĠSee Ġthe Ġ[ fadeIn ] Ġparameter . Ċ Ġ* Ċ Ġ* Ġ``` Ċ Ġ* ĠG lide Image ( Ċ Ġ* ĠĠ Ġdata Ġ= Ġ" https :// www . image . url ", Ċ Ġ* ĠĠ ĠfadeIn Ġ= Ġtrue , Ċ Ġ* ĠĠ Ġloading Ġ= Ġ{ Ċ Ġ* ĠĠĠĠ ĠStack ( Modifier . fill MaxSize ()) Ġ{ Ċ Ġ* ĠĠĠĠĠĠ ĠCircular Progress Indicator ( Modifier . align ( Alignment . Center )) Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* ĠĠ Ġ} Ċ Ġ* Ġ) Ċ Ġ* Ġ``` Ċ Ġ* Ċ Ġ* Ġ@ param Ġdata ĠThe Ġdata Ġto Ġload . Ċ Ġ* Ġ@ param Ġcontent Description Ġtext Ġused Ġby Ġaccessibility Ġservices Ġto Ġdescribe Ġwhat Ġthis Ġimage Ċ Ġ* Ġrepresents . ĠThis Ġshould Ġalways Ġbe Ġprovided Ġunless Ġthis Ġimage Ġis Ġused Ġfor Ġdecor ative Ġpurposes , Ċ Ġ* Ġand Ġdoes Ġnot Ġrepresent Ġa Ġmeaningful Ġaction Ġthat Ġa Ġuser Ġcan Ġtake . ĠThis Ġtext Ġshould Ġbe Ċ Ġ* Ġlocalized , Ġsuch Ġas Ġby Ġusing Ġ[ android x . compose . ui . res . string Resource ] Ġor Ġsimilar . Ċ Ġ* Ġ@ param Ġmodifier Ġ[ Modifier ] Ġused Ġto Ġadjust Ġthe Ġlayout Ġalgorithm Ġor Ġdraw Ġdecoration Ġcontent . Ċ Ġ* Ġ@ param Ġalignment ĠOptional Ġalignment Ġparameter Ġused Ġto Ġplace Ġthe Ġloaded Ġ[ Image Bitmap ] Ġin Ġthe Ċ Ġ* Ġgiven Ġbounds Ġdefined Ġby Ġthe Ġwidth Ġand Ġheight . Ċ Ġ* Ġ@ param Ġcontent Scale ĠOptional Ġscale Ġparameter Ġused Ġto Ġdetermine Ġthe Ġaspect Ġratio Ġscaling Ġto Ġbe Ċ Ġ* Ġused Ġif Ġthe Ġbounds Ġare Ġa Ġdifferent Ġsize Ġfrom Ġthe Ġintr insic Ġsize Ġof Ġthe Ġloaded Ġ[ Image Bitmap ]. Ċ Ġ* Ġ@ param Ġcolor Filter ĠOptional Ġcolor Filter Ġto Ġapply Ġfor Ġthe Ġ[ Painter ] Ġwhen Ġit Ġis Ġrendered Ġon screen . Ċ Ġ* Ġ@ param Ġerror ĠContent Ġto Ġbe Ġdisplayed Ġwhen Ġthe Ġrequest Ġfailed . Ċ Ġ* Ġ@ param Ġloading ĠContent Ġto Ġbe Ġdisplayed Ġwhen Ġthe Ġrequest Ġis Ġin Ġprogress . Ċ Ġ* Ġ@ param ĠfadeIn ĠWhether Ġto Ġrun Ġa Ġfade - in Ġanimation Ġwhen Ġimages Ġare Ġsuccessfully Ġloaded . Ċ Ġ* ĠDefault : Ġ` false `. Ċ Ġ* Ġ@ param Ġrequest Builder ĠOptional Ġbuilder Ġfor Ġthe Ġ[ RequestBuilder ]. Ċ Ġ* Ġ@ param Ġrequest Manager ĠThe Ġ[ Request Manager ] Ġto Ġuse Ġwhen Ġrequesting Ġthe Ġimage . ĠDefaults Ġto Ġthe Ċ Ġ* Ġcurrent Ġvalue Ġof Ġ[ Local Request Manager ]. Ċ Ġ* Ġ@ param Ġshould Ref etch On Size Change ĠLambda Ġwhich Ġwill Ġbe Ġinvoked Ġwhen Ġthe Ġsize Ġchanges , Ġallowing Ċ Ġ* Ġoptional Ġre - fetch ing Ġof Ġthe Ġimage . ĠReturn Ġtrue Ġto Ġre - fetch Ġthe Ġimage . Ċ Ġ* Ġ@ param Ġon Request Completed ĠListener Ġwhich Ġwill Ġbe Ġcalled Ġwhen Ġthe Ġloading Ġrequest Ġhas Ġfinished . Ċ Ġ*/ Ċ @ Composable Ċ fun ĠG lide Image ( ĊĠĠĠ Ġdata : ĠAny , ĊĠĠĠ Ġcontent Description : ĠString ?, ĊĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠ Ġalignment : ĠAlignment Ġ= ĠAlignment . Center , ĊĠĠĠ Ġcontent Scale : ĠContent Scale Ġ= ĠContent Scale . Fit , ĊĠĠĠ Ġcolor Filter : ĠColor Filter ? Ġ= Ġnull , ĊĠĠĠ ĠfadeIn : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġrequest Builder : Ġ( RequestBuilder < Drawable >. ( size : ĠInt Size ) Ġ-> ĠRequest Builder < Drawable >) ? Ġ= Ġnull , ĊĠĠĠ Ġrequest Manager : ĠRequest Manager Ġ= ĠG lide Image Defaults . default Request Manager (), ĊĠĠĠ Ġshould Ref etch On Size Change : Ġ( current Result : ĠImage Load State , Ġsize : ĠInt Size ) Ġ-> ĠBoolean Ġ= ĠDefault Ref etch On Size Change Lambda , ĊĠĠĠ Ġon Request Completed : Ġ( Image Load State ) Ġ-> ĠUnit Ġ= ĠEmpty Request Complete Lambda , ĊĠĠĠ Ġerror : Ġ@ Composable Ġ( Box Scope .( Image Load State . Error ) Ġ-> ĠUnit )? Ġ= Ġnull , ĊĠĠĠ Ġloading : Ġ@ Composable Ġ( Box Scope . () Ġ-> ĠUnit )? Ġ= Ġnull , Ċ ) Ġ{ ĊĠĠĠ ĠG lide Image ( ĊĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier , ĊĠĠĠĠĠĠĠ Ġrequest Builder Ġ= Ġrequest Builder , ĊĠĠĠĠĠĠĠ Ġrequest Manager Ġ= Ġrequest Manager , ĊĠĠĠĠĠĠĠ Ġshould Ref etch On Size Change Ġ= Ġshould Ref etch On Size Change , ĊĠĠĠĠĠĠĠ Ġon Request Completed Ġ= Ġon Request Completed , ĊĠĠĠ Ġ) Ġ{ Ġimage State Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( image State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImage Load State . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Loading Image ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġimage State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġcontent Description , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfadeIn Enabled Ġ= ĠfadeIn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Ġ= Ġalignment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= Ġcontent Scale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Filter Ġ= Ġcolor Filter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠImage Load State . Error Ġ-> Ġif Ġ( error Ġ!= Ġnull ) Ġerror ( image State ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Load State . Loading Ġ-> Ġif Ġ( loading Ġ!= Ġnull ) Ġloading () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Load State . Empty Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA ĠCor outines Ġwrapper Ġaround Ġ[ G lide ] Ċ Ġ*/ Ċ @ Opt In ( Experimental Cor outines Api :: class ) Ċ private Ġsuspend Ġfun ĠRequest Manager . execute ( ĊĠĠĠ Ġrequest : ĠRequest Builder < Drawable >, ĊĠĠĠ Ġsize : ĠInt Size Ċ ): ĠImage Load State Ġ= Ġsuspend C ancellable Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠ Ġvar Ġfail Exception : ĠThrowable ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġtarget Ġ= Ġobject Ġ: ĠEmpty Custom Target ( ĊĠĠĠĠĠĠĠ Ġif Ġ( size . width Ġ> Ġ 0 ) Ġsize . width Ġelse ĠTarget . SIZE _ ORIGIN AL , ĊĠĠĠĠĠĠĠ Ġif Ġ( size . height Ġ> Ġ 0 ) Ġsize . height Ġelse ĠTarget . SIZE _ ORIGIN AL ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( error Drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cont . is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe 've Ġalready Ġcompleted , Ġignore Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠImage Load State . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġerror Drawable ?. to Painter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable Ġ= Ġfail Exception ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠIllegalArgumentException (" Error Ġwhile Ġloading Ġ$ request ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġany Ġresources Ġfrom Ġthe Ġtarget Ġif Ġcancelled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġlistener Ġ= Ġobject Ġ: ĠRequest Listener < Drawable > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Resource Ready ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable : ĠDrawable , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable >, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource : Ġcom . bump tech . glide . load . DataSource , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( cont . is Completed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġwe 've Ġalready Ġcompleted , Ġignore Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠImage Load State . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġdrawable . to Painter (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ġ= ĠdataSource . to DataSource () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClear Ġany Ġresources Ġfrom Ġthe Ġtarget Ġif Ġcancelled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear ( target ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġtrue Ġso Ġthat Ġthe Ġtarget Ġdoesn 't Ġreceive Ġthe Ġdrawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad Failed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe : ĠG lide Exception ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel : ĠAny , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget : ĠTarget < Drawable >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis First Resource : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠG lide Ġonly Ġpasses Ġthe Ġexception Ġto Ġthe Ġlistener , Ġso Ġwe Ġstore Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfor Ġthe Ġtarget Ġto Ġuse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail Exception Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReturn Ġfalse , Ġallowing Ġthe Ġtarget Ġto Ġreceive Ġit 's ĠonLoad Failed . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġis Ġneeded Ġso Ġwe Ġcan Ġuse Ġany Ġerror Drawable ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠStart Ġthe Ġimage Ġrequest Ġinto Ġthe Ġtarget ĊĠĠĠ Ġrequest . addListener ( listener ). into ( target ) ĊĊĠĠĠ Ġ// ĠIf Ġwe 're Ġcancelled , Ġclear Ġthe Ġrequest Ġfrom ĠG lide ĊĠĠĠ Ġcont . invoke On Cancellation Ġ{ ĊĠĠĠĠĠĠĠ Ġclear ( target ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcom . bump tech . glide . load . DataSource . to DataSource (): ĠDataSource Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġcom . bump tech . glide . load . DataSource . LOCAL Ġ-> ĠDataSource . DISK ĊĠĠĠ Ġcom . bump tech . glide . load . DataSource . REMOTE Ġ-> ĠDataSource . NETWORK ĊĠĠĠ Ġcom . bump tech . glide . load . DataSource . DATA _ DISK _ CACHE Ġ-> ĠDataSource . DISK ĊĠĠĠ Ġcom . bump tech . glide . load . DataSource . RESOURCE _ DISK _ CACHE Ġ-> ĠDataSource . DISK ĊĠĠĠ Ġcom . bump tech . glide . load . DataSource . MEMORY _ CACHE Ġ-> ĠDataSource . MEMORY Ċ } Ċ Ċ private Ġfun Ġcheck Data ( data : ĠAny ): ĠAny Ġ{ ĊĠĠĠ Ġwhen Ġ( data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠDrawable Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġtype : ĠDrawable ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠIf Ġyou Ġwish Ġto Ġload Ġa Ġdrawable , Ġpass Ġin Ġthe Ġresource ĠID ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠImage Bitmap Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġtype : ĠImage Bitmap ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠIf Ġyou Ġwish Ġto Ġdisplay Ġthis ĠImage Bitmap , Ġuse Ġandroidx . compose . foundation . Image ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠImage Vector Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġtype : ĠImage Vector ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠIf Ġyou Ġwish Ġto Ġdisplay Ġthis ĠImage Vector , Ġuse Ġandroidx . compose . foundation . Image ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠP ainter Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unsupported Ġtype : ĠP ainter ." Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠIf Ġyou Ġwish Ġto Ġdraw Ġthis ĠP ainter , Ġuse Ġandroidx . compose . foundation . Image ()" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġdata Ċ } Ċ