package Ġedu . gate ch . ver a . ver a . model Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Handler Ċ import Ġandroid . util . Log Ċ import Ġedu . gate ch . ver a . ver a . model . device . W ear able Device Ċ import Ġedu . gate ch . ver a . ver a . model . device . devices . Null Device Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . json . JSONObject Ċ import Ġcom . android . vol ley . Request Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . Vol ley Error Ċ import Ġcom . android . vol ley . toolbox . JsonObject Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġkotlinx . serialization . json . Json Configuration ĊĊ Ċ /** Ċ Ġ* ĠThis Ġis Ġa Ġsingleton ĠMonitor Ġclass Ġthat Ġhandles Ġthe ĠMonitoring Ġof Ġall Ġdata Ċ Ġ* Ġto Ġand Ġfrom Ġthe ĠW ear able Device Ġconnected Ġto ĠVER A . ĠThe Ġmain Ġwork Ġof Ġthe Ġclass Ċ Ġ* Ġis Ġdone Ġby Ġthe Ġupdate Ġloop Ġwhich Ġalso Ġqueues Ġitself Ġto Ġrun Ġevery Ġdelay Ġms . Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġinteract s Ġwith Ġthe Ġviews Ġthrough Ġthe Ġcontroller Ġclass Ċ Ġ* ĠMonitoring . kt . Ċ Ġ* Ċ Ġ* Ġ@ see ĠW ear able Device Ċ Ġ* Ġ@ see ĠMonitoring Ċ Ġ*/ Ċ object ĠMonitor Ġ{ ĊĊĠĠĠ Ġ/** ĠThe ĠW ear able Device ĠMonitor Ġis Ġmonitoring Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfit bit : ĠW ear able Device Ġ= ĠNull Device () ĊĊĠĠĠ Ġ/** ĠThe Ġdelay Ġin Ġhandler Ġcalls Ġin Ġmilliseconds Ġ*/ ĊĠĠĠ Ġprivate Ġconst Ġval Ġdelay Ġ: ĠLong Ġ= Ġ 5 0 0 0 ĊĊĠĠĠ Ġ/** ĠThe Ġhandler Ġthat Ġruns Ġthe Ġupdate Ġloop Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġhandler : ĠHandler Ġ= ĠHandler () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġcurrent Ġhealth Ġdata Ġheld Ġby Ġthe ĠMonitor . ĠCustom Ġsetter Ġnot ifies Ġthe ĊĠĠĠĠ Ġ* Ġlistener . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġhealth Data : ĠHealth Data Ġ= ĠHealth Data (- 1 ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . listener ( value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠThe Ġlistener Ġthat Ġis Ġcalled Ġwhen ĠHealth Data Ġis Ġchanged Ġ*/ ĊĠĠĠ Ġvar Ġlistener : Ġ(( value : ĠHealth Data ) Ġ-> ĠUnit ) Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" Monitor ", Ġ" listener Ġneeds Ġto Ġbe Ġimplemented ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġis Ġused Ġby ĠDevice Factory Ġto Ġset Ġthe ĠMonitor 's Ġwe arable ĊĠĠĠĠ Ġ* Ġdevice . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdevice Ġthe Ġbuilt Ġwe arable Ġdevice Ġoffered Ġto Ġthe ĠMonitor ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġoffer Device ( device : ĠW ear able Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . fit bit Ġ= Ġdevice ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠUpdate Ġloop Ġrequests Ġhealth Ġdata Ġfrom Ġthe ĠW ear able Device Ġevery Ġdelay . ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġsets Ġthe ĠMonitor 's Ġhealth Data Ġvariable . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġupdate ( context : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhealth Data Ġ= Ġfit bit . get Health Data () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġb pm Ġ= Ġhealth Data . bpm ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" BPM ", Ġhealth Data . bpm . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJson ( Json Configuration . Stable . copy ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠJSONObject ( json . stringify ( Health Data . serializer (), ĠHealth Data ( bpm ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// aque ous - f alls - 6 0 9 2 0 . herokuapp . com / hb /" Ġ+ ĠBadge . number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠJsonObject Request ( Request . Method . POST , url , data , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġthe Ġjson ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Success ", Ġresponse . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠResponse . Error Listener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠError Ġin Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ERROR ", Ġ" Post ĠRequest ĠError ĠResponse ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Queue Ġ= ĠVol ley . new Request Queue ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Queue . add ( request ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġhandler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ( context ) ĊĠĠĠĠĠĠĠ Ġ}, Ġdelay ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEnd s Ġthe ĠMonitoring Ġby Ġtelling Ġthe ĠW ear able Device Ġto Ġend Ġthe Ġconnection ĊĠĠĠĠ Ġ* Ġand Ġcancel Ġthe Ġhandler . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġend Monitoring () Ġ{ ĊĠĠĠĠĠĠĠ Ġfit bit . end Connection () ĊĊĠĠĠĠĠĠĠ Ġ// remove Ġall ĠCallback s Ġand ĠMessages Ġfrom Ġthe Ġhandler ĊĠĠĠĠĠĠĠ Ġhandler . remove Callbacks And Messages ( null ) ĊĠĠĠ Ġ} ĊĊ Ċ }