package Ġcom . da im ler . mb logger kit . shake Ċ Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Event Ċ import Ġandroid . hardware . Sensor EventListener Ċ import Ġandroid . hardware . Sensor Manager Ċ Ċ class ĠSh ake Detector ( required Sh ake Count : ĠInt ) Ġ: ĠSensor EventListener , ĠSh ake Producer Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrequired Count Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġrequired Sh ake Count Ġ< Ġ 1 Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġrequired Sh ake Count ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠSHA KE _ THRESHOLD _ GR AV ITY Ġ= Ġ 2 . 7 F ĊĊĠĠĠ Ġprivate Ġval ĠSHA KE _ S LO P _ TIME _ MS Ġ= Ġ 5 0 0 ĊĠĠĠ Ġprivate Ġval ĠSHA KE _ COUNT _ RESET _ TIME _ MS Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġprivate Ġvar Ġsh ake Count Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġm Sh ake Timestamp : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠ Ġvar Ġsh ake Listener : ĠSh ake Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsh ake Cons umed : ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġfun Ġon Accuracy Changed ( sensor : ĠSensor ?, Ġaccuracy : ĠInt ) Ġ= ĠUnit ĊĊĠĠĠ Ġoverride Ġfun Ġcontinue Sh aking () Ġ{ ĊĠĠĠĠĠĠĠ Ġsh ake Cons umed Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sensor Changed ( event : ĠSensor Event ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Accel er ating ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Sh ake Timestamp Ġ+ ĠSHA KE _ S LO P _ TIME _ MS Ġ> Ġnow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġreset Ġthe Ġsh ake Ġcount Ġafter Ġ 3 Ġseconds Ġof Ġno Ġsh akes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Sh ake Timestamp Ġ+ ĠSHA KE _ COUNT _ RESET _ TIME _ MS Ġ< Ġnow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sh ake Timestamp Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Count ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shake Cons umed . and ( shake Count Ġ>= Ġrequired Count )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Listener ?. let Ġ{ Ġsh ake Listener Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Cons umed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsh ake Listener . on Sh ake ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Accel er ating ( event : ĠSensor Event ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . values [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . values [ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġz Ġ= Ġevent . values [ 2 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġg X Ġ= Ġx Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ĊĠĠĠĠĠĠĠ Ġval Ġg Y Ġ= Ġy Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ĊĠĠĠĠĠĠĠ Ġval Ġg Z Ġ= Ġz Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ĊĊĠĠĠĠĠĠĠ Ġ// Ġg Force Ġwill Ġbe Ġclose Ġto Ġ 1 Ġwhen Ġthere Ġis Ġno Ġmovement . ĊĠĠĠĠĠĠĠ Ġval Ġg Force Ġ= ĠMath . sqrt (( g X Ġ* Ġg X Ġ+ Ġg Y Ġ* Ġg Y Ġ+ Ġg Z Ġ* Ġg Z ). toDouble ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġg Force Ġ> ĠSHA KE _ THRESHOLD _ GR AV ITY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠSh ake Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Sh ake ( sh aker : ĠSh ake Producer ) ĊĠĠĠ Ġ} Ċ }