package Ġco . project . client . ui . compass Ċ Ċ import Ġandroid . hardware . Sensor Ċ import Ġandroid . hardware . Sensor Event Ċ import Ġandroid . hardware . Sensor Manager Ċ import Ġandroid . location . Location Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġjavax . inject . Inject Ċ Ċ import Ġco . project . client . data . DataManager Ċ import Ġco . project . client . data . model . Response Ċ import Ġco . project . client . data . model . Update Param Ċ import Ġco . project . client . injection . Config Persistent Ċ import Ġco . project . client . ui . base . Base Presenter Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ @ Config Persistent Ċ class ĠComp ass Presenter < V Ġ: ĠComp ass M vp . View > Ġ@ Inject Ċ constructor ( private Ġval Ġdata Manager Ġ: ĠData Manager ) Ġ: ĠBase Presenter < V >(), ĠComp ass M vp . Presenter < V > Ġ{ ĊĊĠĠĠ Ġoverride Ġvar Ġlat : ĠDouble ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġvar Ġlong : ĠDouble ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġpost ( id : ĠString , Ġr ssi : ĠArrayList < Int >, Ġss id : ĠString , Ġb ssid : String , Ġlat : ĠDouble , Ġlong : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . show Loading () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata Manager . server Service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. update ( Update Param ( id , Ġss id , Ġr ssi , Ġlat , Ġlong , Ġb ssid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. onError Return Ġ{ Ġerr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse ("", Ġ"", Ġ 0 , Ġ" 0 . 0 ", Ġ" 0 . 0 ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( view . getContext (), Ġ" SENT ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . on Receive Destination ( response . lat ?. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ 0 . 0 , Ġresponse . long ?. toDouble () Ġ?: Ġ 0 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġview . on Receive Destination ( response . lat , Ġresponse . long ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// view . on Receive Destination ( Double ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerr Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerr . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Loading () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . showMessage ( err . message Ġ?: Ġ" NO PE !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠ Ġ// ĠĠ Ġ} ĊĠĠ Ġ// Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġalpha Ġ= Ġ 0 . 9 7 f ĊĊĠĠĠ Ġprivate Ġval Ġm Gravity Ġ= ĠFloat Array ( 3 ) ĊĠĠĠ Ġprivate Ġval Ġm Geom ag netic Ġ= ĠFloat Array ( 3 ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Accuracy Changed ( p 0 : ĠSensor ?, Ġp 1 : ĠInt ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Sensor Changed ( event : ĠSensor Event ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġaz imuth : ĠFloat ĊĠĠĠĠĠĠĠ Ġval Ġaz imuth Fix : ĠFloat Ġ= Ġ 0 . toFloat () ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( event ?. sensor ?. type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ AC CEL ERO METER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Gravity [ 0 ] Ġ= Ġalpha Ġ* Ġm Gravity [ 0 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Gravity [ 1 ] Ġ= Ġalpha Ġ* Ġm Gravity [ 1 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Gravity [ 2 ] Ġ= Ġalpha Ġ* Ġm Gravity [ 2 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor . TYPE _ MAG NET IC _ FIELD Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Geom ag netic [ 0 ] Ġ= Ġalpha Ġ* Ġm Geom ag netic [ 0 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Geom ag netic [ 1 ] Ġ= Ġalpha Ġ* Ġm Geom ag netic [ 1 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Geom ag netic [ 2 ] Ġ= Ġalpha Ġ* Ġm Geom ag netic [ 2 ] Ġ+ Ġ( 1 Ġ- Ġalpha ) Ġ* Ġevent . values [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġarr R Ġ= ĠFloat Array ( 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġarr I Ġ= ĠFloat Array ( 9 ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Sensor Manager . get Rotation Matrix ( arr R , Ġarr I , Ġm Gravity , Ġm Geom ag netic )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= ĠFloat Array ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSensor Manager . get Orientation ( arr R , Ġorientation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong ?. let Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Ġ= ĠMath . to Degrees ( orientation [ 0 ]. toDouble ()). toFloat () Ġ// Ġorientation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Ġ= Ġ( az imuth Ġ+ Ġaz imuth Fix Ġ+ Ġ 3 6 0 f ) Ġ% Ġ 3 6 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaz imuth Ġ-= Ġget Be aring ( it , Ġit , Ġ 1 3 . 7 8 7 2 4 6 , Ġ 1 0 0 . 2 7 6 1 0 6 ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . adjust Arrow ( az imuth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Be aring ( start Lat : ĠDouble , Ġstart Lng : ĠDouble , Ġend Lat : ĠDouble , Ġend Lng : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlatitude 1 Ġ= ĠMath . to Radians ( start Lat ) ĊĠĠĠĠĠĠĠ Ġval Ġlatitude 2 Ġ= ĠMath . to Radians ( end Lat ) ĊĠĠĠĠĠĠĠ Ġval Ġlong Diff Ġ= ĠMath . to Radians ( end Lng Ġ- Ġstart Lng ) ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĠMath . sin ( long Diff ) Ġ* ĠMath . cos ( latitude 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĠMath . cos ( latitude 1 ) Ġ* ĠMath . sin ( latitude 2 ) Ġ- ĠMath . sin ( latitude 1 ) Ġ* ĠMath . cos ( latitude 2 ) Ġ* ĠMath . cos ( long Diff ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ( Math . to Degrees ( Math . atan 2 ( y , Ġx )) Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 ĊĠĠĠ Ġ} ĊĊĊ Ċ }