package Ġs oko . ek ib un . bang umi . util Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . graphics . drawable . Picture Drawable Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . G lide Builder Ċ import Ġcom . bump tech . glide . Registry Ċ import Ġcom . bump tech . glide . annotation . G lide Module Ċ import Ġcom . bump tech . glide . integration . okhttp 3 . Ok Http Url Loader Ċ import Ġcom . bump tech . glide . load . model . G lide Url Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Bitmap Transition Options Ċ import Ġcom . bump tech . glide . load . resource . drawable . Drawable Transition Options Ċ import Ġcom . bump tech . glide . module . App G lide Module Ċ import Ġcom . bump tech . glide . samples . svg . Svg Decoder Ċ import Ġcom . bump tech . glide . samples . svg . Svg Drawable Trans coder Ċ import Ġcom . ca ver ock . android svg . SVG Ċ import Ġokhttp 3 .* Ċ import Ġok io .* Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Ċ import Ġjava . util .* Ċ Ċ @ G lide Module Ċ class ĠProgress App G lide Module Ġ: ĠApp G lide Module () Ġ{ ĊĠĠĠ Ġ// ĠDisable Ġmanifest Ġparsing Ġto Ġavoid Ġadding Ġsimilar Ġmodules Ġtwice . ĊĠĠĠ Ġoverride Ġfun Ġis Manifest Parsing Enabled (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapply Options ( context : ĠContext , Ġbuilder : ĠG lide Builder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . set LogLevel ( Log . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDefault Transition Options ( Drawable :: class . java , ĠDrawable Transition Options . with Cross Fade ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setDefault Transition Options ( Bitmap :: class . java , ĠBitmap Transition Options . with Cross Fade ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Components ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠ Ġg lide : ĠG lide , ĊĠĠĠĠĠĠĠ Ġregistry : ĠRegistry ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġregistry . register ( SVG :: class . java , ĠPicture Drawable :: class . java , ĠSvg Drawable Trans coder ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( InputStream :: class . java , ĠSVG :: class . java , ĠSvg Decoder ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĠOk HttpClient . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Network Interceptor ( object Ġ: ĠInter ceptor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġintercept ( chain : ĠInter ceptor . Chain ): ĠResponse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener : ĠResponse Progress Listener Ġ= ĠDispatch ing Progress Listener () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( Ok Http Progress ResponseBody ( request . url , Ġresponse . body , Ġlistener )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġregistry . replace ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide Url :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInputStream :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOk Http Url Loader . Factory ( client ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinterface ĠResponse Progress Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( url : ĠHttp Url , Ġbytes Read : ĠLong , Ġcontent Length : ĠLong ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠUI on Progress Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Progress ( bytes Read : ĠLong , Ġexpected Length : ĠLong ) ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠControl Ġhow Ġoften Ġthe Ġlistener Ġneeds Ġan Ġupdate . Ġ 0 % Ġand Ġ 1 0 0 % Ġwill Ġalways Ġbe Ġdis patched . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġin Ġpercentage Ġ( 0 . 2 Ġ= Ġcall Ġ[. on Progress ] Ġaround Ġevery Ġ 0 . 2 Ġpercent Ġof Ġprogress ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġgrad ually Percentage : ĠFloat ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDispatch ing Progress Listener Ġinternal Ġconstructor () Ġ: ĠResponse Progress Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġupdate ( url : ĠHttp Url , Ġbytes Read : ĠLong , Ġcontent Length : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// System . out . printf ("% s : Ġ% d /% d Ġ= Ġ%. 2 f %%% n ", Ġurl , Ġbytes Read , Ġcontent Length , Ġ( 1 0 0 f Ġ* Ġbytes Read ) Ġ/ Ġcontent Length ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġurl . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠLIST EN ERS [ key ] Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Length Ġ<= Ġbytes Read ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforget ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( needs Dispatch ( key , Ġbytes Read , Ġcontent Length , Ġlistener . grad ually Percentage )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Ġ{ Ġlistener . on Progress ( bytes Read , Ġcontent Length ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġneeds Dispatch ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal : ĠLong , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgranularity : ĠFloat ĊĠĠĠĠĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gran ularity Ġ== Ġ 0 f Ġ|| Ġcurrent Ġ== Ġ 0 L Ġ|| Ġtotal Ġ== Ġcurrent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ 1 0 0 f Ġ* Ġcurrent Ġ/ Ġtotal ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Progress Ġ= Ġ( percent Ġ/ Ġgranularity ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Progress Ġ= ĠPRO GRES SES [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( last Progress Ġ== Ġnull Ġ|| Ġcurrent Progress Ġ!= Ġlast Progress ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRO GRES SES [ key ] Ġ= Ġcurrent Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠLIST EN ERS : ĠMutable Map < String , ĠUI on Progress Listener > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠPRO GRES SES : ĠMutable Map < String , ĠLong > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHashMap () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġforget ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLIST EN ERS . remove ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRO GRES SES . remove ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġexpect ( url : ĠString , Ġlistener : ĠUI on Progress Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLIST EN ERS [ url ] Ġ= Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠOk Http Progress ResponseBody Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġurl : ĠHttp Url , Ġprivate Ġval Ġresponse Body : ĠResponse Body ?, ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġprogress Listener : ĠResponse Progress Listener ĊĠĠĠ Ġ) Ġ: ĠResponse Body () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġbuffered Source : ĠBuffered Source ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠcontentType (): ĠMediaType ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse Body !!. contentType () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontent Length (): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresponse Body !!. content Length () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsource (): ĠBuffered Source Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( buffered Source Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered Source Ġ= Ġsource ( response Body !!. source ()). buffer () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbuffered Source !! ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġsource ( source : ĠSource ): ĠSource Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠForward ing Source ( source ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtotal Bytes Read Ġ= Ġ 0 L ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġread ( sink : ĠBuffer , Ġbyte Count : ĠLong ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Read Ġ= Ġsuper . read ( sink , Ġbyte Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfull Length Ġ= Ġresponse Body !!. content Length () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bytes Read Ġ== Ġ- 1 L ) Ġ{ Ġ// Ġthis Ġsource Ġis Ġex hausted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Bytes Read Ġ= Ġfull Length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Bytes Read Ġ+= Ġbytes Read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogress Listener . update ( url , Ġtotal Bytes Read , Ġfull Length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbytes Read ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġforget ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ing Progress Listener . forget ( url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġexpect ( url : ĠString , Ġlistener : ĠUI on Progress Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDispatch ing Progress Listener . expect ( url , Ġlistener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }