package Ġdigital . lamp . lamp _ kotlin . sensor _ core Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content .* Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Event Ċ import Ġandroid . hardware . Sensor EventListener Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Power Manager Ċ import Ġandroid . util . Log Ċ import Ġdigital . lamp . lamp _ kotlin . sensor _ core . utils . L amp Constants Ċ Ċ /** Ċ Ġ* ĠService Ġthat Ġlogs Ġgyro scope Ġread ings Ġfrom Ġthe Ġdevice Ċ Ġ* Ċ Ġ* Ġ@ author Ġdf Ċ Ġ*/ Ċ class ĠG yro scope Ġ: ĠService (), ĠSensor EventListener Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Accuracy Changed ( sensor : ĠSensor , Ġaccuracy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// we Ġlog Ġaccuracy Ġon Ġthe Ġsensor Ġchanged Ġvalues ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sensor Changed ( event : ĠSensor Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurrent TimeStamp Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġif Ġ( currentTime Stamp Ġ- ĠLAST _ TS Ġ< ĠL amp Constants . INTERVAL ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġrow Data Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġrow Data . put ( TIMESTAMP , Ġcurrent TimeStamp ) ĊĠĠĠĠĠĠĠ Ġrow Data . put ( VALUES _ 0 , Ġevent . values [ 0 ]) ĊĠĠĠĠĠĠĠ Ġrow Data . put ( VALUES _ 1 , Ġevent . values [ 1 ]) ĊĠĠĠĠĠĠĠ Ġrow Data . put ( VALUES _ 2 , Ġevent . values [ 2 ]) ĊĠĠĠĠĠĠĠ Ġrow Data . put ( AC CUR ACY , Ġevent . accuracy ) ĊĊĠĠĠĠĠĠĠ Ġcallback ( rowData ) ĊĠĠĠĠĠĠĠ ĠLAST _ TS Ġ= Ġcurrent TimeStamp ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġm Sensor Manager Ġ= Ġget System Service ( SENSOR _ SERVICE ) Ġas ĠSensor Manager ĊĠĠĠĠĠĠĠ Ġm G yro scope Ġ= Ġm Sensor Manager !!. getDefault Sensor ( Sensor . TYPE _ GYRO SCOPE ) ĊĠĠĠĠĠĠĠ Ġsensor Thread Ġ= ĠHandler Thread ( Companion . TAG ) ĊĠĠĠĠĠĠĠ Ġsensor Thread !!. start () ĊĠĠĠĠĠĠĠ Ġval Ġpower Manager Ġ= Ġget System Service ( POWER _ SERVICE ) Ġas ĠPower Manager ĊĠĠĠĠĠĠĠ Ġwake Lock Ġ= Ġpower Manager . new Wake Lock ( Power Manager . PAR TIAL _ WAKE _ LOCK , TAG ) ĊĠĠĠĠĠĠĠ Ġwake Lock ?. acquire () ĊĠĠĠĠĠĠĠ Ġsensor Handler Ġ= ĠHandler ( sensor Thread !!. lo oper ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( L amp . DEBUG ) ĠLog . d ( TAG , Ġ" G yro scope Ġservice Ġcreated !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġsensor Handler !!. remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġm Sensor Manager !!. unregister Listener ( this , Ġm G yro scope ) ĊĠĠĠĠĠĠĠ Ġsensor Thread !!. quit () ĊĠĠĠĠĠĠĠ Ġwake Lock !!. release () ĊĠĠĠĠĠĠĠ Ġif Ġ( L amp . DEBUG ) ĠLog . d ( TAG , Ġ" G yro scope Ġservice Ġterminated ...") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent , Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart Command ( intent , Ġflags , Ġstart Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m G yro scope Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Self () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Frequency Ġ= ĠL amp Constants . FREQ UENCY _ GYRO SCOPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Threshold Ġ= ĠL amp Constants . THRESHOLD _ GYRO SCOPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( FREQ UENCY Ġ!= Ġnew Frequency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| ĠTH RESH OLD Ġ!= Ġnew Threshold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Handler !!. remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sensor Manager !!. unregister Listener ( this , Ġm G yro scope ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠF REQ UENCY Ġ= Ġnew Frequency ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTH RESH OLD Ġ= Ġnew Threshold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Sensor Manager !!. register Listener ( this , Ġm G yro scope , Ġnew Frequency , Ġsensor Handler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( L amp . DEBUG ) ĠLog . d ( TAG , Ġ" G yro scope Ġservice Ġactive : Ġ" Ġ+ ĠF REQ UENCY Ġ+ Ġ" ms ") ĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ( intent : ĠIntent ): ĠI Binder ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTIMESTAMP Ġ= Ġ" timestamp " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVALUES _ 0 Ġ= Ġ" double _ values _ 0 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVALUES _ 1 Ġ= Ġ" double _ values _ 1 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠVALUES _ 2 Ġ= Ġ" double _ values _ 2 " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACC UR ACY Ġ= Ġ" accuracy " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" LA MP :: G yro scope " ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm Sensor Manager : ĠSensor Manager ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġm G yro scope : ĠSensor ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsensor Thread : ĠHandler Thread ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġsensor Handler : ĠHandler ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġwake Lock : ĠPower Manager . Wake Lock ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠLAST _ TS : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠF REQ UENCY Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠTH RESH OLD Ġ= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġcallback Ġ: Ġ( Content Values ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġset Sensor Observer ( listener : Ġ( Content Values ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }