package Ġcom . raz ew are . emit ron . ui . player . workers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . h ilt . Ass isted Ċ import Ġandroidx . h ilt . work . Worker Inject Ċ import Ġandroidx . work .* Ċ import Ġcom . raz ew are . emit ron . data . progress ions . Progress ion Repository Ċ import Ġcom . raz ew are . emit ron . model . Contents Ċ import Ġretrofit 2 . HttpException Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* Ġ ĠWorker Ġfor Ġupdating Ġoffline Ġprogress ion Ċ Ġ* Ċ Ġ*/ Ċ class ĠUpdate Offline Progress Worker Ġ@ Worker Inject Ġconstructor ( ĊĠ Ġ@ Ass isted Ġapp Context : ĠContext , ĊĠ Ġ@ Ass isted Ġworker Parameters : ĠWorker Parameters , ĊĠ Ġ/** ĊĠĠ Ġ* ĠPro gression Ġrepository ĊĠĠ Ġ*/ ĊĠ Ġval Ġprogress ion Repository : ĠPro gression Repository Ċ ) Ġ: ĠCor outine Worker ( app Context , Ġworker Parameters ) Ġ{ ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSee Ġ[ Worker . do Work ] ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠ Ġupdate Progress () ĊĠĠĠ Ġupdate Watch Stats () ĊĠĠĠ Ġreturn ĠResult . success () ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġupdate Progress () Ġ{ ĊĠĠĠ Ġval Ġprogress ions Ġ= Ġprogress ion Repository . getLocal Progress ions () ĊĊĠĠĠ Ġif Ġ( progress ions . isEmpty () Ġ|| Ġprogress ions . all Ġ{ Ġit . sync ed Ġ}) Ġ{ ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcontents Ġ= ĠContents . from (*( progress ions . map Ġ{ ĊĠĠĠĠĠ Ġit . to Data () ĊĠĠĠ Ġ}. to Typed Array ())) ĊĊĠĠĠ Ġval Ġresponse Ġ= ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġprogress ion Repository . update Progress ions ( contents ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠHttp Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġresponse Ġ?: ĠResult . failure () ĊĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse ?. datum ĊĠĠĠ Ġresponse Body Ġ?: ĠResult . failure () ĊĊĠĠĠ Ġif Ġ( response Body . isNull OrEmpty ()) Ġ{ ĊĊĠĠĠĠĠ Ġ// ĠMark Ġlocal Ġprogress ions Ġsynced ĊĠĠĠĠĠ Ġprogress ion Repository . update Local Progress ions ( progress ions . map Ġ{ ĊĠĠĠĠĠĠĠ Ġit . copy ( sync ed Ġ= Ġtrue ) ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠ Ġ// ĠUpdate Ġlocal Ġwith Ġserver Ġresponse ĊĠĠĠĠĠ Ġprogress ion Repository . update Local Progress ions ( ĊĠĠĠĠĠĠĠ Ġresponse Body . map Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġit . to Progress ion () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġsuspend Ġfun Ġupdate Watch Stats () Ġ{ ĊĠĠĠ Ġval Ġwatch Stats Ġ= Ġprogress ion Repository . get Watch Stats () ĊĠĠĠ Ġval Ġcontents Ġ= ĠContents . from (*( watch Stats . map Ġ{ ĊĠĠĠĠĠ Ġit . to Data () ĊĠĠĠ Ġ}. to Typed Array ())) ĊĠĠĠ Ġval Ġresponse Ġ= Ġprogress ion Repository . update Watch Stats ( contents ) ĊĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠ Ġprogress ion Repository . delete Watch Stats () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠPROG RESS _ WORK ER _ TAG : ĠString Ġ= Ġ" offline _ progress " ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠPROG RESS _ WORK ER _ NAME : ĠString Ġ= Ġ" sync _ offline _ progress " ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠQueue Ġverify Ġdownload Ġworker ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġwork Manager ĠWork Manager ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġenqueue ( work Manager : ĠWork Manager ) Ġ{ ĊĊĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠConstraints . Builder () ĊĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġval Ġupdate Offline Progress Request Ġ= ĊĠĠĠĠĠĠĠ ĠOne Time Work RequestBuilder < Update Offline Progress Worker >() ĊĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠ Ġ. add Tag ( PROGRESS _ WORK ER _ TAG ) ĊĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠ Ġwork Manager ĊĠĠĠĠĠĠĠ Ġ. enqueue Unique Work ( ĊĠĠĠĠĠĠĠĠĠ ĠPROG RESS _ WORK ER _ NAME , ĊĠĠĠĠĠĠĠĠĠ ĠExisting Work Policy . REPLACE , ĊĠĠĠĠĠĠĠĠĠ Ġupdate Offline Progress Request ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ