package Ġme . sh ks ch ne ider . skeleton Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . work . Constraints Ċ import Ġandroidx . work . Data Ċ import Ġandroidx . work . Existing Periodic Work Policy Ċ import Ġandroidx . work . Existing Work Policy Ċ import Ġandroidx . work . One Time Work Request Ċ import Ġandroidx . work . Periodic Work Request Ċ import Ġandroidx . work . Work Info Ċ import Ġandroidx . work . Work Manager Ċ import Ġandroidx . work . Worker Ċ import Ġme . sh ks ch ne ider . skeleton . helper x . Logger Ċ import Ġjava . util . UUID Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġ" Work Manager Ġis Ġlike Ġa ĠJob Manager Compat ." Ċ Ġ* ĠWork Manager Ġis Ġa Ġlibrary Ġused Ġto Ġenqueue Ġwork Ġthat Ġis Ġguaranteed Ġto Ġexecute Ġafter Ġits Ġconstraints Ċ Ġ* Ġ( or Ġnone ) Ġare Ġmet . Ċ Ġ* Ċ Ġ* ĠWork Manager Ġuses Ġan Ġunderlying Ġjob Ġdispatch ing Ġservice Ġwhen Ġavailable : Ċ Ġ* Ġ Ġ- ĠUses ĠJob Scheduler Ġfor ĠAPI Ġ 2 3 + Ċ Ġ* Ġ Ġ- ĠFor ĠAPI Ġ 1 4 - 2 2 : Ċ Ġ* ĠĠĠ Ġ- ĠIf Ġusing ĠFirebase ĠJob Dispatcher Ġin Ġthe Ġapp Ġand Ġthe Ġoptional ĠFirebase Ġdependency , Ġuses ĠFirebase ĠJob Dispatcher Ċ Ġ* ĠĠĠ Ġ- ĠOtherwise , Ġuses Ġa Ġcustom ĠAlarm Manager Ġ+ ĠBroadcast Receiver Ġimplementation Ċ Ġ* Ċ Ġ* Ġ@ see Ġ< https :// developer . android . com / reference / android x / work / Work Manager > Ċ Ġ*/ Ċ object ĠS keleton Worker Ġ{ ĊĊĠĠĠ Ġfun Ġmanager (): ĠWork Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠWork Manager . getInstance () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠSingle - Shot ĊĊĠĠĠ Ġfun Ġ< T : ĠWorker > Ġenqueue ( tag : ĠString , Ġworker : ĠClass < T >, Ġconstraints : ĠConstraints ? Ġ= Ġnull , Ġdata : ĠData ? Ġ= Ġnull ): ĠUUID Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwork Builder Ġ= ĠOne Time Work Request . Builder ( worker ). add Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġconstraints ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set Constraints ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set InputData ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Ġ= Ġwork Builder . build () ĊĠĠĠĠĠĠĠ Ġmanager (). enqueue ( work ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwork . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T : ĠWorker > Ġunique Work ( tag : ĠString , Ġworker : ĠClass < T >, Ġconstraints : ĠConstraints ? Ġ= Ġnull , Ġdata : ĠData ? Ġ= Ġnull ): ĠUUID Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwork Builder Ġ= ĠOne Time Work Request . Builder ( worker ). add Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġconstraints ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set Constraints ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set InputData ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Ġ= Ġwork Builder . build () ĊĠĠĠĠĠĠĠ Ġmanager (). begin Unique Work ( tag , ĠExisting Work Policy . REPLACE , Ġwork ). enqueue () ĊĠĠĠĠĠĠĠ Ġreturn Ġwork . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠMulti - Shot ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIt Ġmay Ġrun Ġimmediately , Ġat Ġthe Ġend Ġof Ġthe Ġperiod , Ġor Ġany Ġtime Ġin Ġbetween Ġso Ġlong Ġas Ġthe ĊĠĠĠĠ Ġ* Ġother Ġconditions Ġare Ġsatisfied Ġat Ġthe Ġtime . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T : ĠWorker > Ġunique Periodic Work ( tag : ĠString , Ġworker : ĠClass < T >, Ġrepeat Interval : ĠLong , Ġtime Unit : ĠTimeUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints : ĠConstraints ? Ġ= Ġnull , Ġdata : ĠData ? Ġ= Ġnull ): ĠUUID ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( time Unit . to Millis ( repeat Interval ) Ġ< ĠPeriod ic Work Request . MIN _ PERIOD IC _ INTERVAL _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warning (" The Ġinterval Millis Ġmust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto : Ġ${ Periodic Work Request . MIN _ PERIOD IC _ INTERVAL _ M ILL IS }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Builder Ġ= ĠPeriod ic Work Request . Builder ( worker , Ġrepeat Interval , Ġtime Unit ). add Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġconstraints ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set Constraints ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set InputData ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Ġ= Ġwork Builder . build () ĊĠĠĠĠĠĠĠ Ġmanager (). enqueue Unique Periodic Work ( tag , ĠExisting Periodic Work Policy . REPLACE , Ġwork ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwork . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa ĠPeriod ic Work Request Ġto Ġrun Ġperiodically Ġonce Ġwithin Ġthe Ġflex Ġperiod Ġof Ġevery ĊĠĠĠĠ Ġ* Ġinterval Ġperiod . ĠThe Ġflex Ġperiod Ġbegins Ġat Ġ( interval Millis Ġ- Ġflex Millis ) Ġto Ġthe Ġend Ġof ĊĠĠĠĠ Ġ* Ġthe Ġinterval . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T : ĠWorker > Ġenqueue Unique Periodic Work ( tag : ĠString , Ġworker : ĠClass < T >, Ġrepeat Interval : ĠLong , Ġtime Unit : ĠTimeUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġflex Interval : ĠLong , Ġflex Interval TimeUnit : ĠTimeUnit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints : ĠConstraints ? Ġ= Ġnull , Ġdata : ĠData ? Ġ= Ġnull ): ĠUUID ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( time Unit . to Millis ( repeat Interval ) Ġ< ĠPeriod ic Work Request . MIN _ PERIOD IC _ INTERVAL _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warning (" interval Millis Ġmust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto : Ġ${ Periodic Work Request . MIN _ PERIOD IC _ INTERVAL _ M ILL IS }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( flex Interval TimeUnit . to Millis ( flex Interval ) Ġ< ĠPeriod ic Work Request . MIN _ PERIOD IC _ FLEX _ M ILL IS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . warning (" flex Millis Ġmust Ġbe Ġgreater Ġthan Ġor Ġequal Ġto : Ġ${ Periodic Work Request . MIN _ PERIOD IC _ FLEX _ M ILL IS }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Builder Ġ= ĠPeriod ic Work Request . Builder ( worker , Ġrepeat Interval , Ġtime Unit , Ġflex Interval , Ġflex Interval TimeUnit ). add Tag ( tag ) ĊĠĠĠĠĠĠĠ Ġconstraints ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set Constraints ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwork Builder . set InputData ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġwork Ġ= Ġwork Builder . build () ĊĠĠĠĠĠĠĠ Ġmanager (). enqueue Unique Periodic Work ( tag , ĠExisting Periodic Work Policy . REPLACE , Ġwork ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwork . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEN QUE U ED ĊĠĠĠĠ Ġ* ĠRUN NING ĊĠĠĠĠ Ġ* ĠSU CCEEDED ĊĠĠĠĠ Ġ* ĠFAILED ĊĠĠĠĠ Ġ* ĠBLOCK ED ĊĠĠĠĠ Ġ* ĠCANCEL LED ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġfun Ġget Work Info ById ( id : ĠUUID ): ĠLive Data < Work Info > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager (). get Work Info ById LiveData ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Work Infos By Tag ( tag : ĠString ): ĠLive Data < List < Work Info >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager (). get Work Infos By Tag LiveData ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Work Infos For Unique Work ( tag : ĠString ): ĠLive Data < List < Work Info >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager (). get Work Infos For Unique Work LiveData ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel All Work () Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager (). cancel All Work () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel All Work By Tag ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager (). cancel All Work By Tag ( tag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Unique Work ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmanager (). cancel Unique Work ( tag ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ