/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠThe ĠMatrix . org ĠFoundation ĠC . I . C . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . w orm hole . android . sdk . internal . session . download Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġorg . w orm hole . android . sdk . api . extensions . try OrNull Ċ import Ġorg . w orm hole . android . sdk . api . session . file . Content Download State Tracker Ċ import Ġorg . w orm hole . android . sdk . internal . session . Session Scope Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ @ Session Scope Ċ internal Ġclass ĠDefault Content Download State Tracker Ġ@ Inject Ġconstructor () Ġ: ĠProgress Listener , ĠContent Download State Tracker Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmain Handler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠ Ġprivate Ġval Ġstates Ġ= Ġmutable Map Of < String , ĠContent Download State Tracker . State >() ĊĠĠĠ Ġprivate Ġval Ġlisteners Ġ= Ġmutable Map Of < String , ĠMutable List < Content Download State Tracker . Update Listener >>() ĊĊĠĠĠ Ġoverride Ġfun Ġtrack ( key : ĠString , Ġupdate Listener : ĠContent Download State Tracker . Update Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlisteners Ġ= Ġlisteners . get Or Put ( key ) Ġ{ ĠArrayList () Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! listeners . contains ( update Listener )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners . add ( update Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcurrent State Ġ= Ġstates [ key ] Ġ?: ĠContent Download State Tracker . State . Idle ĊĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Listener . on Download State Update ( currentState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( e , Ġ" ## ĠContent Upload State Tracker . on Update () Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġun Track ( key : ĠString , Ġupdate Listener : ĠContent Download State Tracker . Update Listener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlisteners [ key ]?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove ( update Listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear () Ġ{ ĊĠĠĠĠĠĠĠ Ġstates . clear () ĊĠĠĠĠĠĠĠ Ġlisteners . clear () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġprivate Ġfun ĠURL . to Key () Ġ= ĠtoString () ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( url : ĠString , Ġbytes Read : ĠLong , Ġcontent Length : ĠLong , Ġdone : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" ## ĠDL ĠProgress Ġurl :$ url Ġread :$ bytes Read Ġtotal :$ content Length Ġdone :$ done ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( url , ĠContent Download State Tracker . State . Success ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( url , ĠContent Download State Tracker . State . Downloading ( bytes Read , Ġcontent Length , Ġcontent Length Ġ== Ġ- 1 L )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġerror ( url : ĠString , ĠerrorCode : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmain Handler . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" ## ĠDL ĠProgress ĠError Ġcode :$ errorCode ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate State ( url , ĠContent Download State Tracker . State . Failure ( errorCode )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlisteners [ url ]?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry OrNull Ġ{ Ġit . on Download State Update ( Content Download State Tracker . State . Failure ( errorCode )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate State ( url : ĠString , Ġstate : ĠContent Download State Tracker . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstates [ url ] Ġ= Ġstate ĊĠĠĠĠĠĠĠ Ġlisteners [ url ]?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry OrNull Ġ{ Ġit . on Download State Update ( state ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ