package Ġcom . fort ie 4 0 . movie app . work managers Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . work .* Ċ import Ġcom . fort ie 4 0 . movie app . Build Config Ċ import Ġcom . fort ie 4 0 . movie app . CHECK _ FOR _ LATE ST Ċ import Ġcom . fort ie 4 0 . movie app . LATE ST _ APP _ VERSION Ċ import Ġcom . fort ie 4 0 . movie app . data . models . Check Latest Version Ċ import Ġcom . fort ie 4 0 . movie app . data . ret rofit services . IC heck Latest Version Ċ import Ġcom . fort ie 4 0 . movie app . data . ret rofit services . Ret rofit Builder Ċ import Ġcom . fort ie 4 0 . movie app . data . room database . Movie App Room Database Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers . IO Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠCheck Latest App Version ( private Ġval Ġcontext : ĠContext , Ġworker Params : ĠWorker Parameters ) Ġ: ĊĠĠĠ ĠWorker ( context , Ġworker Params ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlatest Version Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRet rofit Builder . build Service ( IC heck Latest Version :: class . java , ĠL ATE ST _ APP _ VERSION ) ĊĠĠĠĠĠĠĠ Ġval Ġcall Ġ= Ġlatest Version . get Latest Version () ĊĠĠĠĠĠĠĠ Ġcall . enqueue ( object Ġ: ĠCallback < Check Latest Version > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Check Latest Version >, Ġt : ĠThrowable ) Ġ= ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Check Latest Version >, Ġresponse : ĠResponse < Check Latest Version >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck Latest Version Ġ= Ġresponse . body () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġversion Code Ġ= Ġcheck Latest Version ?. success ?. version _ code ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgradle Version Code Ġ= ĠBuild Config . VERSION _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( version Code Ġ!= Ġnull Ġ&& Ġversion Code Ġ> Ġgradle Version Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Latest Version . success . id Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠMovie App Room Database ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdao Ġ= Ġdatabase . check Latest Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCor outine Scope ( IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert Latest Version ( check Latest Version . success ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠCheck For Latest . check For Latest Update ( context ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠCheck For Latest Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcheck For Latest Update ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwork Manager Ġ= ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcheck For Updates Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOne Time Work RequestBuilder < Check Latest App Version >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setInitial Delay ( 2 4 , ĠTimeUnit . HOUR S ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Manager . enqueue Unique Work ( CHECK _ FOR _ LATE ST , ĠExisting Work Policy . REPLACE , Ġcheck For Updates ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }