package Ġorg . sage b ion etwork s . assessment model . pass ived ata . recorder . motion Ċ Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . hardware . Sensor Event Ċ import Ġandroid . os . Build . VERSION Ċ import Ġandroid . os . Build . VERSION _ CODES Ċ import Ġandroid . os . System Clock Ċ import Ġkotlinx . datetime . Clock Ċ import Ġkotlinx . datetime . DateTime Unit Ċ import Ġkotlinx . datetime . Instant Ċ import Ġkotlinx . datetime . minus Ċ import Ġkotlinx . serialization . Experimental Serialization Api Ċ import Ġkotlinx . serialization . json . JsonObject Ċ import Ġorg . sage b ion etwork s . assessment model . pass ived ata . recorder . sensor .* Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Experimental Time ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠThe MD P Ġon Ġ 2 / 5 / 1 7 . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThe ĠDevice Motion Util Ġincorpor ates Ġa Ġbunch Ġof Ġsensor Ġfusion Ġsensor Ġread ings Ġtogether Ġto Ġpaint Ġa Ġbroad Ġpicture Ġof Ġthe Ċ Ġ* Ġdevice 's Ġorientation Ġand Ġmovement Ġover Ġtime . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis Ġclass Ġis Ġan Ġattempt Ġat Ġrecording Ġdata Ġin Ġa Ġsimilar Ġway Ġas ĠiOS ' Ġdevice Ġmotion Ġrecorder . Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Ċ Ġ* ĠSensor Ġvalues ]( https :// developer . android . com / reference / android / hardware / Sensor Event . html . values ) Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Sensor ĠTypes ]( https :// source . android . com / devices / sensors / sensor - type ) Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Ċ Ġ* ĠPosition ĠS ensors ]( https :// developer . android . com / guide / topics / sensors / sensors _ position . html ) Ċ Ġ* Ċ Ġ* Ġ@ see Ġ[ Ċ Ġ* ĠMotion ĠS ensors ]( https :// developer . android . com / guide / topics / sensors / sensors _ motion . html ) Ċ Ġ*/ Ċ class ĠDevice Motion Util Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠGR AV ITY _ SI _ CONVERSION Ġ= ĠSensor Manager . GR AV ITY _ EAR TH ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS ENSOR _ DATA _ TYPE _ KEY Ġ= Ġ" sensor Type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS ENSOR _ DATA _ SUB TYPE _ KEY Ġ= Ġ" sensor Android Type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠS ENSOR _ EVENT _ AC CUR ACY _ KEY Ġ= Ġ" event Accuracy " ĊĠĠĠĠĠĠĠ Ġval ĠS ENSOR _ TYPE _ TO _ DATA _ TYPE : ĠMap < Int , ĠString > ĊĠĠĠĠĠĠĠ Ġval ĠROT ATION _ VECTOR _ TYPES : ĠSet < Int > ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠROT ATION _ REFERENCE _ COORD IN ATE _ KEY Ġ= Ġ" reference Coordinate " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠX _ KEY Ġ= Ġ" x " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠY _ KEY Ġ= Ġ" y " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠZ _ KEY Ġ= Ġ" z " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠW _ KEY Ġ= Ġ" w " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠACC UR ACY _ KEY Ġ= Ġ" estimated Accuracy " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠX _ UN CAL IB R ATED _ KEY Ġ= Ġ" x Un cal ibr ated " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠY _ UN CAL IB R ATED _ KEY Ġ= Ġ" y Un cal ibr ated " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠZ _ UN CAL IB R ATED _ KEY Ġ= Ġ" z Un cal ibr ated " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠX _ BI AS _ KEY Ġ= Ġ" xB ias " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠY _ BI AS _ KEY Ġ= Ġ" y Bias " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠZ _ BI AS _ KEY Ġ= Ġ" z Bias " ĊĠĠĠĠĠĠĠ Ġval ĠS ENSOR _ TYPE _ TO _ EVENT _ PO JO : ĠMap < Int , ĠClass < out ĠSensor Event PO JO >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ AC CEL ERO METER Ġto ĠAccel eration Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GR AV ITY Ġto ĠAccel eration Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ LINEAR _ AC CELER ATION Ġto ĠAccel eration Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GYRO SCOPE Ġto ĠG yro scope Event PO JO :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ MAG NET IC _ FIELD Ġto ĠMag netic Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED Ġto ĠUn cal ibr ated Event PO JO :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED Ġto ĠUn cal ibr ated Event PO JO :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED Ġto ĠUn cal ibr ated Event PO JO :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GAME _ ROT ATION _ VECTOR Ġto ĠRotation Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR Ġto ĠRotation Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ ROT ATION _ VECTOR Ġto ĠRotation Event Po jo :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠĠĠĠĠ Ġval ĠS ENSOR _ TYPE _ TO _ FACTORY : ĠMap < Int , Ġ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) ĊĠĠĠĠĠĠĠ Ġ-> ĠSensor Event PO JO > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ AC CEL ERO METER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccel eration Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GR AV ITY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccel eration Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ LINEAR _ AC CELER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAccel eration Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GYRO SCOPE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG yro scope Event PO JO . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ MAG NET IC _ FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMag netic Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn cal ibr ated Event PO JO . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn cal ibr ated Event PO JO . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUn cal ibr ated Event PO JO . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GAME _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRotation Event Po jo . create ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ Experimental Serialization Api ĊĠĠĠĠĠĠĠ Ġ@ Experimental Std lib Api ĊĠĠĠĠĠĠĠ Ġval ĠS ENSOR _ TYPE _ TO _ RECORD _ FACTORY : ĠMap < Int , Ġ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠLong ) ĊĠĠĠĠĠĠĠ Ġ-> ĠSensor Record > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ AC CEL ERO METER ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Acceleration Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GR AV ITY ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Acceleration Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ LINEAR _ AC CELER ATION ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Acceleration Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GYRO SCOPE ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create G yro scope Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ MAG NET IC _ FIELD ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Mag netic Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Un cal ibr ated Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Un cal ibr ated Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Un cal ibr ated Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GAME _ ROT ATION _ VECTOR ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Rotation Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Rotation Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Sensor . TYPE _ ROT ATION _ VECTOR ) Ġ{ Ġevent , Ġreference Timestamp Nan os Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevent . create Rotation Record ( reference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġavailable Sensor List ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġlist Ġof Ġavailable Ġsensors ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsensor Type ĊĠĠĠĠĠĠĠĠ Ġ* Ġthe Ġsensor Ġtype Ġto Ġcheck Ġif Ġit Ġis Ġcontained Ġin Ġthe Ġlist ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthat Ġsensor Ġtype Ġis Ġavailable , Ġfalse Ġif Ġit Ġis Ġnot ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġhas Available Type ( available Sensor List : ĠList < Sensor >, Ġsensor Type : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( sensor Ġin Ġavailable Sensor List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sensor . type Ġ== Ġsensor Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Sensor TypeList ( available Sensor List : ĠList < Sensor >): ĠList < Int > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor TypeList : ĠMutable List < Int > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġadd Ġthese Ġsensors Ġif Ġthe Ġdevice Ġhas Ġthem ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ AC CEL ERO METER )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ AC CEL ERO METER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . O ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġhas Available Type ( available Sensor List , ĠSensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ GR AV ITY )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ GR AV ITY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ LINEAR _ AC CELER ATION )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ LINEAR _ AC CELER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ GYRO SCOPE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ GYRO SCOPE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . J EL LY _ BE AN _ MR 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġhas Available Type ( available Sensor List , ĠSensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ MAG NET IC _ FIELD )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ MAG NET IC _ FIELD ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . J EL LY _ BE AN _ MR 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġhas Available Type ( available Sensor List , ĠSensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ ROT ATION _ VECTOR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . J EL LY _ BE AN _ MR 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( available Sensor List , ĠSensor . TYPE _ GAME _ ROT ATION _ VECTOR )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ GAME _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Available Type ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Sensor List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor TypeList . add ( Sensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsensor TypeList ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbuild Ġmapping Ġfor Ġsensor Ġtype Ġand Ġits Ġdata Ġtype Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Map Type Ġ= Ġmutable Map Of < Int , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrotation / gyro scope ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GYRO SCOPE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" rotation Rate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GYRO SCOPE _ UN CAL IB R ATED , Ġ" rotation Rate Un cal ibr ated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġaccel erometer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ AC CEL ERO METER , Ġ" acceleration " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ AC CEL ERO METER _ UN CAL IB R ATED , Ġ" acceleration Un cal ibr ated " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgravity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GR AV ITY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" gravity " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġacceleration Ġwithout Ġgravity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ LINEAR _ AC CELER ATION , Ġ" user Acceleration " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmagnetic Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ MAG NET IC _ FIELD , Ġ" mag netic Field " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ MAG NET IC _ FIELD _ UN CAL IB R ATED , Ġ" mag netic Field Un cal ibr ated " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġatt itude ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ ROT ATION _ VECTOR , Ġ" att itude " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Map Type . put ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR , Ġ" att itude " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS ENSOR _ TYPE _ TO _ DATA _ TYPE Ġ= Ġsensor Map Type ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbuild Ġmapping Ġfor Ġrotation Ġtype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrotation Type Builder Ġ= Ġmutable Set Of < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Type Builder . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ ROT ATION _ VECTOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Type Builder . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GAME _ ROT ATION _ VECTOR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . KIT K AT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrotation Type Builder . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠROT ATION _ VECTOR _ TYPES Ġ= Ġrotation Type Builder ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠSensor Event PO JO Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsensor : ĠSensor ? ĊĊĠĠĠĠĠĠĠ Ġ// ĠISO - 8 6 0 1 Ġfor Ġthe Ġfirst Ġsensor Event 's Ġtimestamp , Ġwhich Ġis Ġthen Ġused Ġas Ġthe Ġzero Ġfor Ġthe Ġrelative Ġtimestamp ĊĠĠĠĠĠĠĠ Ġ// Ġof Ġsubsequent ĠSensor Event Po jo ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp Date : ĠInstant ? ĊĠĠĠĠĠĠĠ Ġval Ġsensor Type : ĠString ? ĊĊĠĠĠĠĠĠĠ Ġ// Ġrelative Ġtimestamp Ġin Ġseconds . Ġseconds Ġelapsed Ġsince Ġfirst Ġrecorded Ġevent ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp : ĠDouble ĊĊĠĠĠĠĠĠĠ Ġ// Ġsystem Ġu ptime Ġin Ġseconds ĊĠĠĠĠĠĠĠ Ġval Ġu ptime : ĠDouble ĊĠĠĠĠĠĠĠ Ġvar Ġevent Accuracy Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġevent ĊĠĠĠĠĠĠĠĠ Ġ* Ġsensor Ġevent ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġreference U ptime Seconds ĊĠĠĠĠĠĠĠĠ Ġ* Ġu ptime Ġzero Ġin Ġnan os Ġfrom Ġepoch ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġconstructor ( event : ĠSensor Event , Ġreference U ptime Seconds : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġu ptime Ġ= Ġevent . timestamp . toDouble () Ġ/ ĠSE CON DS _ TO _ NAN OS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġu ptime Ġ- Ġreference U ptime Seconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Type Ġ= ĠS ENSOR _ TYPE _ TO _ DATA _ TYPE ! ![ event . sensor . type ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Date Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġused Ġto Ġlog Ġinitial Ġevent , Ġcontains Ġmore Ġdata Ġabout Ġsensor Ġand Ġreference Ġfor Ġsubsequent Ġevents ĊĠĠĠĠĠĠĠ Ġ@ Opt In ( Experimental Time :: class ) ĊĠĠĠĠĠĠĠ Ġconstructor ( event : ĠSensor Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġu ptime Ġ= Ġevent . timestamp . toDouble () Ġ/ ĠSE CON DS _ TO _ NAN OS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Date Ġ= Ġinstant Of ( event . timestamp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Type Ġ= ĠS ENSOR _ TYPE _ TO _ DATA _ TYPE ! ![ event . sensor . type ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Ġ= Ġevent . sensor ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠSE CON DS _ TO _ NAN OS Ġ= Ġ 1 0 0 0 0 0 0 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġto Nan os ( timestamp : ĠInstant ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtimestamp . epoch Seconds Ġ* ĠSE CON DS _ TO _ NAN OS Ġ+ Ġtimestamp . nan oseconds Of Second ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġsensor Timestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġsensor Ġtimestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġinstant Ġcorresponding Ġto Ġsensor Ġtimestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġinstant Of ( sensor Timestamp : ĠLong ): ĠInstant Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠClock . System . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. minus ( DateTime Unit . Time Based ( System Clock . elapsed Realtime Nan os () Ġ- Ġsensor Timestamp )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠAccel eration Event Po jo ( sensor Event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) Ġ: ĊĠĠĠĠĠĠĠ ĠSensor Event PO JO ( sensor Event , Ġreference Timestamp Nan os ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġ" g " ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ): ĠAccel eration Event Po jo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠAccel eration Event Po jo ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġ( sensor Event . values [ 0 ] Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġ( sensor Event . values [ 1 ] Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġ( sensor Event . values [ 2 ] Ġ/ ĠSensor Manager . GR AV ITY _ EAR TH ). toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠG yro scope Event PO JO ( sensor Event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) Ġ: ĊĠĠĠĠĠĠĠ ĠSensor Event PO JO ( sensor Event , Ġreference Timestamp Nan os ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġ" rad / s " ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ): ĠG yro scope Event PO JO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠG yro scope Event PO JO ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġsensor Event . values [ 0 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġsensor Event . values [ 1 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġsensor Event . values [ 2 ]. toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMag netic Event Po jo ( sensor Event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) Ġ: ĊĠĠĠĠĠĠĠ ĠSensor Event PO JO ( sensor Event , Ġreference Timestamp Nan os ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġunit Ġ= Ġ" u T " ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ): ĠMag netic Event Po jo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠMag netic Event Po jo ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġsensor Event . values [ 0 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġsensor Event . values [ 1 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġsensor Event . values [ 2 ]. toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠRotation Event Po jo ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) Ġ: ĊĠĠĠĠĠĠĠ ĠSensor Event PO JO ( event , Ġreference Timestamp Nan os ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġreference Coordinate : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġsensor Android Type : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġx : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġw : ĠDouble ĊĠĠĠĠĠĠĠ Ġvar Ġestimated Accuracy : ĠDouble ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ): ĠRotation Event Po jo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠRotation Event Po jo ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrot _ axis . x Ġ* Ġsin ( theta / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Ġ= Ġevent . values [ 0 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrot _ axis . y Ġ* Ġsin ( theta / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Ġ= Ġevent . values [ 1 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrot _ axis . z Ġ* Ġsin ( theta / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Ġ= Ġevent . values [ 2 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcos ( theta / 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġw Ġ= Ġevent . values [ 3 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġestimated Accuracy Ġ= Ġevent . values [ 4 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsensor Type Ġ= Ġevent . sensor . type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Sensor . TYPE _ ROT ATION _ VECTOR Ġ== Ġsensor Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Android Type Ġ= Ġ" rotation Vector " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Coordinate Ġ= Ġ" East - Up - North " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . J EL LY _ BE AN _ MR 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠSensor . TYPE _ GAME _ ROT ATION _ VECTOR Ġ== Ġsensor Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Android Type Ġ= Ġ" game Rotation Vector " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Coordinate Ġ= Ġ" z Up " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( VERSION . SDK _ INT Ġ>= ĠVERSION _ CODES . KIT K AT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠSensor . TYPE _ GEO MAG NET IC _ ROT ATION _ VECTOR Ġ== Ġsensor Type ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Android Type Ġ= Ġ" geom ag netic Rotation Vector " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Coordinate Ġ= Ġ" East - Up - North " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsensor Android Type Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreference Coordinate Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠUn cal ibr ated Event PO JO ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ) Ġ: ĊĠĠĠĠĠĠĠ ĠSensor Event PO JO ( event , Ġreference Timestamp Nan os ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġx Un cal ibr ated : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġx Bias : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy Un cal ibr ated : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġy Bias : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz Un cal ibr ated : ĠDouble ĊĠĠĠĠĠĠĠ Ġval Ġz Bias : ĠDouble ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate ( event : ĠSensor Event , Ġreference Timestamp Nan os : ĠDouble ): ĠUn cal ibr ated Event PO JO Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠUn cal ibr ated Event PO JO ( event , Ġreference Timestamp Nan os ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Un cal ibr ated Ġ= Ġevent . values [ 0 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Un cal ibr ated Ġ= Ġevent . values [ 1 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Un cal ibr ated Ġ= Ġevent . values [ 2 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx Bias Ġ= Ġevent . values [ 3 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġy Bias Ġ= Ġevent . values [ 4 ]. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġz Bias Ġ= Ġevent . values [ 5 ]. toDouble () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }