package Ġid v . mark ku o . csc ble bridge . service . ant Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Pair Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc . Ant Plus Heart Rate P cc Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc . Ant Plus Stride S dm P cc Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc . Ant Plus Stride S dm P cc .* Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc . defines . Event Flag Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc base . Ant Plugin P cc Ċ import Ġcom . ds i . ant . plugins . an tpl us . p cc base . P cc Release Handle Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . Semaphore Ċ Ċ class ĠSS Connector ( context : ĠContext , Ġlistener : ĠDevice Manager Listener < Ant Device . SS Device >): ĠAnt Device Connector < Ant Plus Stride S dm P cc , ĠAnt Device . SS Device >( context , Ġlistener ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" SS Connector " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Access ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Receiver : ĠAnt Plugin P cc . I Plugin Access Result Receiver < Ant Plus Stride S dm P cc >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Changed Receiver : ĠAnt Plugin P cc . I Device StateChange Receiver , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Number : ĠInt ): ĠP cc Release Handle < Ant Plus Stride S dm P cc > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest Access ( context , Ġdevice Number , Ġ 0 , Ġresult Receiver , Ġstate Changed Receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsubscribe To Events ( p cc : ĠAnt Plus Stride S dm P cc ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġhttps :// www . this is ant . com / developer / ant - plus / device - profiles # 5 2 8 _ tab ĊĠĠĠĠĠĠĠ Ġp cc . subscribe Stride Count Event ( object Ġ: ĠI Stride Count Receiver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠT EN _ SECONDS _ IN _ MS Ġ= Ġ 1 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠF ALL BACK _ MAX _ LIST _ SIZE Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval ĠONE _ MINUTE _ IN _ MS Ġ= Ġ 6 0 0 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġstride List Ġ= ĠLinkedList < Pair < Long , ĠLong >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠSem aphore ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon New Stride Count ( est Timestamp : ĠLong , Ġevent Flags : ĠEnum Set < Event Flag >, Ġcumulative Stride s : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . acquire () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCalculate Ġnumber Ġof Ġstrides Ġper Ġminute , Ġupdates Ġhappen Ġaround Ġevery Ġ 5 0 0 Ġms , Ġthis Ġnumber ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmay Ġbe Ġoff Ġby Ġthat Ġamount Ġbut Ġit Ġisn 't Ġtoo Ġsignificant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstride List . add First ( Pair ( est Timestamp , Ġcumulative Stride s )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstride Count : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġvalue Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġstride List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC ad ence Ġover Ġthe Ġlast Ġ 1 0 Ġseconds ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( est Timestamp Ġ- Ġp . first Ġ>= ĠT EN _ SECONDS _ IN _ MS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstride Count Ġ= Ġcalculate Steps Per Min ( est Timestamp , Ġcumulative Stride s , Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ+ Ġ 1 Ġ== Ġstride List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġvalue Ġwas Ġfound Ġyet , Ġit Ġhas Ġnot Ġbeen Ġ 1 0 Ġseconds . ĠGive Ġan Ġearly Ġrough Ġestimate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstride Count Ġ= Ġcalculate Steps Per Min ( est Timestamp , Ġcumulative Stride s , Ġp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( value Found Ġ&& Ġstride List . size Ġ>= Ġi Ġ+ Ġ 1 Ġ|| Ġstride List . size Ġ> ĠF ALL BACK _ MAX _ LIST _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstride List . remove Last () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġget Device ( p cc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . stride Per Minute Ġ= Ġstride Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . stride Per Minute Timestamp Ġ= Ġest Timestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlock . release () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Data Updated ( device ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInterruptedException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Unable Ġto Ġacquire Ġlock Ġto Ġupdate Ġrunning Ġcad ence ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcalculate Steps Per Min ( est Timestamp : ĠLong , Ġcumulative Stride s : ĠLong , Ġp : ĠPair < Long , ĠLong >): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelapsed Time Ms Ġ= Ġest Timestamp Ġ- Ġp . first . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( elapsed Time Ms Ġ== Ġ 0 f ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ(( cumulative Stride s Ġ- Ġp . second ) Ġ* Ġ( ONE _ MINUTE _ IN _ MS Ġ/ Ġelapsed Time Ms )). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġp cc . subscribe Distance Event Ġ{ Ġest Timestamp , Ġ_, Ġdistance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġget Device ( p cc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . ss Distance Ġ= Ġdistance . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . ss Distance Timestamp Ġ= Ġest Timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Data Updated ( device ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġp cc . subscribe Instant aneous Speed Event Ġ{ Ġest Timestamp , Ġ_, Ġinstant aneous Speed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= Ġget Device ( p cc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . ss Speed Ġ= Ġinstant aneous Speed . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . ss Speed Timestamp Ġ= Ġest Timestamp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Data Updated ( device ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( device Number : ĠInt , Ġdevice Name : ĠString ): ĠAnt Device . SS Device Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAnt Device . SS Device ( device Number , Ġdevice Name , Ġ 0 L , Ġ 0 L , Ġ 0 f , Ġ 0 L , Ġ 0 L , Ġ 0 L ) ĊĠĠĠ Ġ} Ċ Ċ }