package Ġcom . the wiz rd . simple weather . notifications Ċ Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroidx . work .* Ċ import Ġcom . the wiz rd . shared _ resources . controls . Weather Now ViewModel Ċ import Ġcom . the wiz rd . shared _ resources . utils . Logger Ċ import Ġcom . the wiz rd . shared _ resources . utils . Settings Manager Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather DataLoader Ċ import Ġcom . the wiz rd . shared _ resources . weather data . Weather Request Ċ import Ġcom . the wiz rd . simple weather . R Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ Ċ class ĠWeather Notification Worker ( context : ĠContext , Ġworker Params : ĠWorker Parameters ) Ġ: ĠCor outine Worker ( context , Ġworker Params ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Weather Notification Worker " ĊĊĠĠĠĠĠĠĠ Ġ// ĠActions ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ACTION Ġ= Ġ" action " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ REFRESH NOTIFICATION Ġ= Ġ" Simple Weather . Droid . action . REFRESH _ NOTIFICATION " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠACTION _ RE MO VEN OT IFICATION Ġ= Ġ" Simple Weather . Droid . action . REMOVE _ NOTIFICATION " ĊĊĠĠĠĠĠĠĠ Ġ// ĠEx tras ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ FOR CER EF RESH Ġ= Ġ" Simple Weather . Droid . extra . FORCE _ REFRESH " ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġrefresh Notification ( context : ĠContext , Ġforce Refresh : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Helper . refresh Notification ( context . application Context , Ġforce Refresh ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġremove Notification ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Helper . remove Notification ( context . application Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠĠĠĠĠ Ġfun Ġrequest Refresh Notification ( context : ĠContext , Ġforce Refresh : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Work ( context . application Context , ĠIntent ( ACTION _ REFRESH NOTIFICATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( EXTRA _ FOR CER EF RESH , Ġforce Refresh )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġstart Work ( context : ĠContext , Ġintent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . INFO , Ġ"% s : ĠRequest ing Ġto Ġstart Ġwork ", ĠTAG ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġupdate Request Ġ= ĠOne Time Work Request . Builder ( Weather Notification Worker :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Constraints ( Constraints . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set InputData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putString ( KEY _ ACTION , Ġintent . action ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ( EXTRA _ FOR CER EF RESH , Ġintent . getBoolean Extra ( EXTRA _ FOR CER EF RESH , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWork Manager . getInstance ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue Unique Work ( String . format ( Locale . ROOT , Ġ"% s :% s _ one Time ", ĠTAG , Ġintent . action ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExisting Work Policy . REPLACE , Ġupdate Request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . INFO , Ġ"% s : ĠOne - time Ġwork Ġen queued ", ĠTAG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdo Work (): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . INFO , Ġ"% s : ĠWork Ġstarted ", ĠTAG ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Action Ġ= Ġinput Data . getString ( KEY _ ACTION ) ĊĠĠĠĠĠĠĠ Ġval Ġforce Refresh Ġ= Ġinput Data . getBoolean ( EXTRA _ FOR CER EF RESH , Ġfalse ) ĊĊĠĠĠĠĠĠĠ ĠLogger . write Line ( Log . INFO , Ġ"% s : ĠAction : Ġ% s ", ĠTAG , Ġintent Action ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( ACTION _ REFRESH NOTIFICATION Ġ== Ġintent Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Helper . refresh Notification ( application Context , Ġforce Refresh ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( ACTION _ RE MO VEN OT IFICATION Ġ== Ġintent Action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWeather Notification Helper . remove Notification ( application Context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult . success () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġobject ĠWeather Notification Helper Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSets Ġan ĠID Ġfor Ġthe Ġnotification ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠNOT _ CHANNEL _ ID Ġ= Ġ" Simple Weather . ongo ing weather " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠJOB _ ID Ġ= Ġ 1 0 0 3 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER SIST ENT _ NOT _ ID Ġ= ĠJOB _ ID ĊĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġrefresh Notification ( context : ĠContext , Ġforce Refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag (" Weather Not if Worker ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. d (" Refresh ing Ġnotification Ġ( force Refresh Ġ= Ġ$ force Refresh ) ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Manager Ġ= ĠSettings Manager ( context . application Context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings Manager . is Weather Loaded ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġloc Data Ġ= Ġsettings Manager . get Home Data () Ġ?: Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġw Loader Ġ= ĠWeather DataLoader ( loc Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠWeather Request . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( force Refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . force Refresh ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . force Load Saved Data () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġw Loader . load Weather Data ( request . build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( settings Manager . show O ngo ing Notification () Ġ&& Ġweather Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGets Ġan Ġinstance Ġof Ġthe ĠNotification Manager Ġservice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Notify Mgr Ġ= Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Channel ( context , Ġm Notify Mgr ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġnotification ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Notification Ġ= ĠWeather Notification Builder . update Notification ( NOT _ CHANNEL _ ID , ĠWeather Now ViewModel ( weather )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Mgr . notify ( PER SIST ENT _ NOT _ ID , Ġm Notification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! settings Manager . show O ngo ing Notification ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Notification ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġremove Notification ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Notify Mgr Ġ= Ġcontext . getSystem Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Mgr . cancel ( PER SIST ENT _ NOT _ ID ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġinit Channel ( context : ĠContext , Ġm Notify Mgr : ĠNotification Manager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġm Channel Ġ= Ġm Notify Mgr . get Notification Channel ( NOT _ CHANNEL _ ID ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot channel _ name Ġ= Ġcontext . resources . getString ( R . string . not _ channel _ name _ weather ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnot channel _ desc Ġ= Ġcontext . resources . getString ( R . string . not _ channel _ desc _ weather ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Channel Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel Ġ= ĠNotification Channel ( NOT _ CHANNEL _ ID , Ġnot channel _ name , ĠNotification Manager . IMPORT ANCE _ LOW ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel . name Ġ= Ġnot channel _ name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel . description Ġ= Ġnot channel _ desc ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠConfigure Ġthe Ġnotification Ġchannel . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel . set Show Badge ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel . enable Lights ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Channel . enable V ibration ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Notify Mgr . create Notification Channel ( m Channel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }