package Ġcom . r ab t man . ex img loader . glide . progress Ċ Ċ import Ġandroid . text . TextUtils Ċ import Ġokhttp 3 . Call Ċ import Ġokhttp 3 . Interceptor Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġ è¿Ľ åº¦ çĽĳåĲ¬ åĻ¨ ç®¡çĲĨ ç±» Ċ Ġ* Ġ åĬłåħ¥ åĽ¾çīĩ åĬłè½½ è¿Ľ åº¦ çĽĳåĲ¬ ï¼Į åĬłåħ¥ Https æĶ¯æĮģ Ċ Ġ* Ġ@ author Ġ: ĠB ao Z hou Ċ Ġ* Ġ@ date Ġ: Ġ 2 0 1 9 / 3 / 1 7 Ġ 1 : 4 9 Ċ Ġ*/ Ċ object ĠProgress Manager Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlisteners Map Ġ= ĠConcurrent HashMap < String , ĠOn Progress Listener >() ĊĠĠĠ Ġvar Ġok HttpClient : ĠCall . Factory Ġ= ĠOk HttpClient . Builder (). add Network Interceptor Ġ{ Ġchain : ĠInter ceptor . Chain Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= Ġchain . request () ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchain . proceed ( request ) ĊĠĠĠĠĠĠĠ Ġresponse . newBuilder (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbody Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( body Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . body ( Progress ResponseBody ( request . url (). toString (), ĠLIST ENER , Ġbody )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. build () ĊĊĠĠĠ Ġprivate Ġval ĠLIST ENER Ġ= Ġobject Ġ: ĠProgress ResponseBody . Internal Progress Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress ( url : ĠString , Ġbytes Read : ĠLong , Ġtotal Bytes : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġon Progress Listener Ġ= Ġget Progress Listener ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( on Progress Listener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpercentage Ġ= Ġ( bytes Read Ġ* Ġ 1 f Ġ/ Ġtotal Bytes Ġ* Ġ 1 0 0 f ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Complete Ġ= Ġpercentage Ġ>= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Progress Listener . on Progress ( is Complete , Ġpercentage , Ġbytes Read , Ġtotal Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Complete ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Listener ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Listener ( url : ĠString , Ġlistener : ĠOn Progress Listener ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( url ) Ġ&& Ġlistener Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners Map [ url ] Ġ= Ġlistener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Progress ( false , Ġ 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Listener ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners Map . remove ( url ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Progress Listener ( url : ĠString ): ĠOn Progress Listener ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( TextUtils . isEmpty ( url ) Ġ|| Ġlisteners Map . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġlisteners Map [ url ] ĊĠĠĠ Ġ} Ċ }