package Ġcom . um air . arch i Template 2 . ui . locate Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . um air . arch i Template 2 . data . repositories . room . Room Repository Ċ import Ġcom . um air . arch i Template 2 . model . access Point . Access Point Ċ import Ġcom . um air . arch i Template 2 . model . room . Room Ċ import Ġcom . um air . arch i Template 2 . utils . In Door Location Helper Ċ import Ġcom . black box . p log . p Logs . P Log Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠLoc ate ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġval Ġrepository : ĠRoom Repository , ĊĠĠĠ Ġval Ġlocation Helper : ĠIn Door Location Helper Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Loc ate ViewModel " ĊĊĠĠĠ Ġprivate Ġval ĠlistOf Rooms Ġ= ĠMutable LiveData < List < Room >>() ĊĠĠĠ Ġprivate Ġval ĠisIn Room Result Ġ= ĠMutable LiveData < Pair < Room , ĠPair < Boolean , ĠString >> >() ĊĊĠĠĠ Ġval Ġrooms : ĠLive Data < List < Room >> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠlistOf Rooms ĊĊĠĠĠ Ġval ĠisIn Room : ĠLive Data < Pair < Room , ĠPair < Boolean , ĠString >>> ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠisIn Room Result ĊĊĠĠĠ Ġfun Ġget Saved Rooms () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved Rooms Ġ= Ġrepository . get Saved Rooms () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( saved Rooms . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( TAG , Ġ" get Saved Rooms ", Ġ" Fetching Ġfrom Ġdb ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . app Database . room Dao (). get Rooms (). observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( TAG , Ġ" get Saved Rooms ", Ġ" F etched Ġfrom Ġdb : Ġ${ it . size }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Rooms ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Rooms . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf Rooms . post Value ( saved Rooms ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Access Points (): ĠLive Data < List < Access Point >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrepository . app Database . access Point Dao (). getAll Access Points () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlocate Me () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . get Saved Rooms ()?. forEach Ġ{ Ġroom Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocation Helper . isIn The Room ( room ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Room Result . post Value ( Pair ( room , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ