package Ġcom . ru u vi . station . bluetooth Ċ Ċ import Ġcom . ru u vi . station . alarm . domain . Alarm Check Interactor Ċ import Ġcom . ru u vi . station . app . preferences . Global Settings Ċ import Ġcom . ru u vi . station . app . preferences . Preferences Repository Ċ import Ġcom . ru u vi . station . bluetooth . domain . Location Interactor Ċ import Ġcom . ru u vi . station . database . domain . Sensor History Repository Ċ import Ġcom . ru u vi . station . database . domain . Sensor Settings Repository Ċ import Ġcom . ru u vi . station . database . domain . Tag Repository Ċ import Ġcom . ru u vi . station . database . tables . R uu vi Tag Entity Ċ import Ġcom . ru u vi . station . database . tables . Sensor Settings Ċ import Ġcom . ru u vi . station . database . tables . Tag Sensor Reading Ċ import Ġcom . ru u vi . station . gateway . Gateway Sender Ċ import Ġcom . ru u vi . station . util . extensions . log Data Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util . Calendar Ċ import Ġjava . util . Date Ċ import Ġjava . util . HashMap Ċ Ċ @ Suppress (" NAME _ SH ADO WING ") Ċ class ĠDefault On Tag Found Listener ( ĊĠĠĠ Ġprivate Ġval Ġpreferences Repository : ĠPreferences Repository , ĊĠĠĠ Ġprivate Ġval Ġgateway Sender : ĠGateway Sender , ĊĠĠĠ Ġprivate Ġval Ġrepository : ĠTag Repository , ĊĠĠĠ Ġprivate Ġval Ġalarm Check Interactor : ĠAlarm Check Interactor , ĊĠĠĠ Ġprivate Ġval Ġsensor Settings Repository : ĠSensor Settings Repository , ĊĠĠĠ Ġprivate Ġval Ġsensor History Repository : ĠSensor History Repository Ċ ) Ġ: ĠIR uu vi Tag Scanner . On Tag Found Listener Ġ{ ĊĊĠĠĠ Ġvar Ġis Foreground Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġlast Logged : ĠMutable Map < String , ĠLong > Ġ= ĠHashMap () ĊĠĠĠ Ġprivate Ġvar Ġlast Clean ed Date : ĠLong Ġ= ĠDate (). time ĊĠĠĠ Ġprivate Ġval Ġio Scope Ġ= ĠCor outine Scope ( Dispatch ers . IO ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Tag Found ( tag : ĠFound R uu vi Tag ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" on Tag Found : Ġ${ tag . log Data () }") ĊĠĠĠĠĠĠĠ Ġsave Reading ( R uu vi Tag Entity ( tag )) ĊĠĠĠĠĠĠĠ Ġclean Up Old Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Reading ( ru u vi Tag : ĠR uu vi Tag Entity ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" save Reading Ġfor Ġtag (${ ru u vi Tag . id }) ") ĊĠĠĠĠĠĠĠ Ġio Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr uu vi Tag . id ?. let Ġ{ Ġsensor Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdb Tag Ġ= Ġrepository . getTag ById ( sensor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Tag Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr uu vi Tag Ġ= Ġdb Tag . preserve Data ( ru u vi Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Settings Ġ= Ġsensor Settings Repository . get Sensor Settings ( sensor Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Settings ?. cal ibrate Sensor ( ru u vi Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . update Tag ( ru u vi Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Tag . favorite Ġ== Ġtrue Ġ&& Ġsensor Settings Ġ!= Ġnull ) Ġsave Favorite Reading ( ru u vi Tag , Ġsensor Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr uu vi Tag . update At Ġ= ĠDate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . save Tag ( ru u vi Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Favorite Reading ( ru u vi Tag : ĠR uu vi Tag Entity , Ġsensor Settings : ĠSensor Settings ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterval Ġ= Ġif Ġ( is Foreground ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDATA _ LOG _ INTERVAL ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreferences Repository . get Background Scan Interval () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTim ber . d (" save Favorite Reading Ġ( interval Ġ= Ġ$ interval )") ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . SECOND , Ġ- interval ) ĊĠĠĠĠĠĠĠ Ġval Ġlogging Threshold Ġ= Ġcalendar . time . time ĊĠĠĠĠĠĠĠ Ġval Ġlast Logged Date Ġ= Ġlast Logged [ ru u vi Tag . id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( last Logged Date Ġ== Ġnull Ġ|| Ġlast Logged Date Ġ<= Ġlogging Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr uu vi Tag . id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" save Favorite Reading Ġactual ĠS AV ING Ġfor Ġ${ ru u vi Tag . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Logged [ it ] Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreading Ġ= ĠTag Sensor Reading ( ru u vi Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreading . save () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgateway Sender . send Data ( ru u vi Tag , Ġsensor Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" save Favorite Reading ĠSKIP PED Ġ${ ru u vi Tag . id } Ġlast Logged Ġ= Ġ${ Date ( last Logged Date )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalarm Check Interactor . check ( ru u vi Tag , Ġsensor Settings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclean Up Old Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . MINUTE , Ġ- 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġcleaning Threshold Ġ= Ġcalendar . time . time ĊĠĠĠĠĠĠĠ Ġif Ġ( last Clean ed Date Ġ< Ġcleaning Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Clean ing ĠDB Ġfrom Ġold Ġtag Ġread ings ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor History Repository . remove Ol der Than ( Global Settings . history Length Hours ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Clean ed Date Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠDATA _ LOG _ INTERVAL Ġ= Ġ 0 ĊĠĠĠ Ġ} Ċ }