/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠThe ĠL ittle ĠD rops Ġof ĠR ain ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// opensource . org / licenses / MIT Ċ Ġ* Ċ Ġ* Ġ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 Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . presentation . ui . reload _ products Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . text . method . Scrolling Movement Method Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Compound Button Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . ActionBar Drawer Toggle Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . work .* Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . R Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . databinding . Fragment Reload Products Binding Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . domain . helpers . is Safe To Access ViewModel Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . domain . helpers . run On Ui Thread Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . domain . workers . Update Products Work Ċ import Ġapp . web . die g of lass a _ site . lit tled rop so fr ain . presentation . helper . view Lifecycle Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . jo anz ap ata . icon ify . Icon Drawable Ċ import Ġcom . jo anz ap ata . icon ify . fonts . Simple Line Icons Icons Ċ import Ġorg . k oin . android x . view model . ext . android . state ViewModel Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ class ĠRe load Products Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġwas Show ed : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġobserver : ĠObserver < Work Info > ĊĠĠĠ Ġprivate Ġvar Ġis Stopped : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġval ĠviewModel : ĠRe load Products ViewModel Ġby Ġstate ViewModel () ĊĠĠĠ Ġvar Ġbinding : ĠFragment Reload Products Binding Ġby Ġview Lifecycle () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtoggle : ĠAction Bar Drawer Toggle ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠRe load Products Fragment () ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġworker : ĠOne Time Work Request ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠDEL AY _ JOB _ COMPLETED : ĠLong Ġ= Ġ 9 0 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Reload Products Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . movement Method Ġ= ĠScroll ing Movement Method () ĊĠĠĠĠĠĠĠ Ġbinding . chk bx Remove NotFound Products . isChecked Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . chk bx Remove NotFound Products . setOn Checked ChangeListener Ġ{ Ġ_: ĠCompound Button , Ġchecked : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . un publish NotFound Products Ġ= Ġchecked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . chk bx Un publish NotFound Products . isChecked Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . chk bx Remove NotFound Products . setOn Checked ChangeListener Ġ{ Ġ_: ĠCompound Button , Ġchecked : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove NotFound Products Ġ= Ġchecked ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . fab Reload Products . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( worker Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreload Products () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= Ġactivity ?. findViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġtoolbar ?. set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Layout Ġ= Ġactivity ?. findViewById < Drawer Layout >( R . id . drawer _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle Ġ= ĠAction Bar Drawer Toggle ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoolbar , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ open , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . navigation _ drawer _ close ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout ?. add Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawer Layout Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle . sync State () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. find Nav Controller ( R . id . nav _ host _ fragment )?. navigate Up () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Observer () ĊĠĠĠĠĠĠĠ Ġif Ġ( worker Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). get Work Info ById LiveData ( worker !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( view Lifecycle Owner , Ġobserver ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreload Products ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Screen () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . fab Reload Products . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Line Icons Icons . icon _ refresh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this :: toggle . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawer Layout : ĠDraw er Layout Ġ= Ġrequire Activity (). findViewById ( R . id . drawer _ layout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . remove Drawer Listener ( toggle ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserver Ġ= ĠObserver < Work Info > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWork Info . State . SUCCEEDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork State Suc ceed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWork Info . State . RUNNING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwork State Running ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwork State Suc ceed () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . progress . append (" Writing Ġvalues Ġto ĠFire store . ĠPlease Ġwait " Ġ+ ĠSystem . line Separator ()) ĊĠĠĠĠĠĠĠ Ġupdate UI ( viewModel ) ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . finished ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDEL AY _ JOB _ COMPLETED ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwork State Running ( work Info : ĠWork Info ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress Ġ= Ġwork Info . progress ĊĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġprogress . getString ( Update Products Work . KEY _ PROGRESS ) ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . progress . append ( value Ġ+ ĠSystem . line Separator ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠproductId Ġ= Ġprogress . getString ( Update Products Work . KEY _ PRODUCT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( productId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . progress . append (" Inser ting Ġproduct Ġ$ productId " Ġ+ ĠSystem . line Separator ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġproducts Ġ= Ġprogress . getString ( Update Products Work . KEY _ PRODUCT S ) ĊĠĠĠĠĠĠĠ Ġif Ġ( products Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . progress . append (" Successfully Ġinserted Ġall Ġ$ products Ġproducts " Ġ+ ĠSystem . line Separator ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading Screen () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġupdate UI ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreload Products ( execute Fetch : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( execute Fetch Ġ&& Ġ! was Show ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwas Show ed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), ĠgetString ( R . string . be _ patient ), ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( execute Fetch ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Products () ĊĠĠĠĠĠĠĠ Ġbinding . fab Reload Products . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Line Icons Icons . icon _ close ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( worker Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). cancel Work ById ( worker !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġworker Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . progress . clear () ĊĠĠĠĠĠĠĠ Ġbinding . fab Reload Products . setImage Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Line Icons Icons . icon _ refresh ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġhide Loading Screen () ĊĠĠĠĠĠĠĠ Ġupdate UI ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( worker Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). get Work Info ById LiveData ( worker !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. remove Observer ( observer ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). cancel Work ById ( worker !!. id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Stopped Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon ViewState Restore d ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on ViewState Restore d ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġupdate UI ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġis Stopped Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġupdate UI ( viewModel ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġis Stopped Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . reload Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . reload Progress . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . reload Progress . invalidate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI ( view State : ĠRe load Products ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Safe To Access ViewModel () Ġ&& Ġ! is Stopped ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe ĠUI ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . text Ġ= ĠviewModel . progress . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . chk bx Remove NotFound Products . isChecked Ġ= Ġview State . remove NotFound Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . chk bx Un publish NotFound Products . isChecked Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview State . un publish NotFound Products ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscroll Amount Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . layout . getLine Top ( binding . ml Txt Vw Progress . line Count ) Ġ- Ġbinding . ml Txt Vw Progress . height ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . ml Txt Vw Progress . scrollTo ( 0 , Ġscroll Amount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġb nv Ġ= Ġactivity ?. findViewById < Bottom Navigation View >( R . id . nav _ bottom ) ĊĠĠĠĠĠĠĠ Ġb nv ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġfab Ġ= Ġactivity ?. findViewById < Floating ActionButton >( R . id . fab ) ĊĠĠĠĠĠĠĠ Ġfab ?. visibility Ġ= ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfetch Products () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Loading Screen () ĊĠĠĠĠĠĠĠ Ġworker Ġ= Ġsetup Worker () ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). enqueue ( worker !! ) ĊĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( require Context ()). get Work Info ById LiveData ( worker !!. id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( view Lifecycle Owner , Ġobserver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Worker (): ĠOne Time Work Request Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconstraints Ġ= ĠConstraints . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Required Network Type ( Network Type . CONNECTED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Requires Battery Not Low ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġremove NotFound Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Data Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Products Work . KEY _ IN _ REMOVE _ NOT _ FOUND Ġto ĠviewModel . remove NotFound Products , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate Products Work . KEY _ IN _ UN PUBL ISH _ NOT _ FOUND Ġto ĠviewModel . un publish NotFound Products ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠOne Time Work Request . Builder ( Update Products Work :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( remove NotFound ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Backoff Criteria ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBack off Policy . LINEAR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOne Time Work Request . MIN _ BACK OFF _ M ILL IS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} Ċ } Ċ