package Ġhu . sz to mek . wh eres my buddy . presentation . service čĊč Ċ import Ġcom . google . firebase . iid . Firebase InstanceId č Ċ import Ġcom . google . firebase . iid . Firebase InstanceId Service č Ċ import Ġdagger . android . Android Injection č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . action . Action č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . common . App Schedulers č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . model . Boolean Model č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . use case . Has Active User UseCase č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . use case . Update G cm Token UseCase č Ċ import Ġio . reactivex . Observable č Ċ import Ġio . reactivex . dis pos ables . Composite Disposable č Ċ import Ġtim ber . log . Tim ber č Ċ import Ġjava . util .* č Ċ import Ġjava . util . concurrent . TimeUnit č Ċ import Ġjavax . inject . Inject čĊč Ċ class ĠToken Watcher Service Ġ: ĠFirebase InstanceId Service () Ġ{ čĊčĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġuse Case : ĠUpdate G cm Token UseCase čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġapp Schedulers : ĠApp Schedulers čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġhas Active User UseCase : ĠHas Active User UseCase čĊčĊĠĠĠ Ġprivate Ġvar Ġdis pos ables : ĠComposite Disposable Ġ= ĠComposite Disposable () čĊčĊĠĠĠ Ġoverride Ġfun Ġon Token Refresh () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= ĠFirebase InstanceId . getInstance (). token čĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Token Refresh Ġ- Ġnew Ġtoken Ġis Ġ[$ token ]") čĊčĊĠĠĠĠĠĠĠ ĠAndroid Injection . inject ( this ) čĊčĊĠĠĠĠĠĠĠ Ġhas Active User UseCase . execute ( Action . Has Active User Action ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( app Schedulers . io ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( app Schedulers . ui ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Observable () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(( it . data Ġas ĠBoolean Model ). value ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case . execute ( Action . Update G cm Token Action ( token !! )). to Observable () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error < Boolean Model >( NoSuch ElementException ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. retry When Ġ{ error Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . delay ( 1 L , ĠTimeUnit . MIN UTES ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠNoSuch ElementException ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . just ( Unit ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . error ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠTim ber . d (" Successfully Ġupdated ĠF CM Ġtoken Ġ[$ token ]") Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġt Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Failed Ġto Ġupdate ĠF CM Ġtoken Ġ[$ token ]: Ġ[$ t ]") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ čĊĠĠĠĠĠĠĠ Ġdis pos ables . clear () čĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () čĊĠĠĠ Ġ} č Ċ }