package Ġorg . j ug end hack t . bl inde ye čĊč Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . os . Strict Mode č Ċ import Ġandroid . support . v 7 . app . AppCompatActivity č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . view . Window č Ċ import Ġandroid . view . WindowManager č Ċ import Ġcom . android . vol ley . Request č Ċ import Ġcom . android . vol ley . Response č Ċ import Ġcom . android . vol ley . toolbox . String Request č Ċ import Ġcom . android . vol ley . toolbox . Vol ley č Ċ import Ġcom . google . android . gms . location . Location Request č Ċ import Ġorg . json . JSONArray č Ċ import Ġorg . json . JSONObject č Ċ import Ġpl . char mas . android . reactive location 2 . Reactive Location Provider čĊčĊč Ċ class ĠBl ind Activity Ġ: ĠAppCompatActivity () Ġ{ čĊĠĠĠ Ġprivate Ġval Ġdescriptions : ĠArrayList < String > Ġ= ĠArrayList () čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġrequest Window Feature ( Window . FEATURE _ NO _ TITLE ) čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġwindow . set Flags ( WindowManager . LayoutParams . FLAG _ FULL SCREEN , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ bl ind ) čĊĠĠĠĠĠĠĠ Ġget Location () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ// define Ġthe Ġlistener čĊĠĠĠ Ġ@ Suppress Lint (" Missing Permission ") čĊĠĠĠ Ġprivate Ġfun Ġget Location () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġrequest : ĠLocation Request Ġ= ĠLocation Request . create () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Priority ( Location Request . PRIORITY _ HIGH _ AC CUR ACY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interval ( 1 0 0 0 ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġlocation Provider Ġ= ĠReactive Location Provider ( this ) čĊĠĠĠĠĠĠĠ Ġlocation Provider . get Updated Location ( request ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat Ġ= Ġit . latitude čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġit . longitude čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Get (" ob stacles ? lat _ like =${ lat . toInt ()} & long _ like =${ long . toInt () }", Ġlat , Ġlong ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġsend Get ( path : ĠString , Ġlat : ĠDouble , Ġlong : ĠDouble ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġpolicy Ġ= ĠStrict Mode . Thread Policy . Builder (). permit All (). build () čĊĠĠĠĠĠĠĠ ĠStrict Mode . set Thread Policy ( policy ) čĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" http :// 1 9 2 . 1 6 8 . 1 3 7 . 1 : 4 2 4 2 /$ path " Ġ// ĠTODO : ĠNo Ġhardcoded ĠIP čĊĠĠĠĠĠĠĠ Ġval Ġqueue Ġ= ĠVol ley . new Request Queue ( this ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġstring Req Ġ= ĠString Request ( Request . Method . GET , Ġurl , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstring Response Ġ= Ġresponse . toString () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Array Ġ= ĠJSONArray ( string Response ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġjson Array . length ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġjson Inner : ĠJSONObject Ġ= Ġjson Array . getJSONObject ( i ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġjson Inner . get (" description ") Ġas ĠString čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Lat Ġ= Ġjson Inner . get (" lat ") Ġas ĠDouble čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Long Ġ= Ġjson Inner . get (" long ") Ġas ĠDouble čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġget Distance ( lat . toFloat (), Ġlong . toFloat (), Ġresponse Lat . toFloat (), Ġresponse Long . toFloat ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( description Ġ! in Ġdescriptions Ġ&& Ġdistance Ġ< Ġ 5 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescriptions . add ( description ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT TS ( this , Ġ"$ description Ġin Ġ${ distance . toInt ()} ĠMet ern ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Error Listener Ġ{ ĠLog . e (" HTTP ", Ġ" Error Ġin Ġresolving !") Ġ}) čĊĠĠĠĠĠĠĠ Ġqueue . add ( string Req ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġget Distance ( lat _ a : ĠFloat , Ġlng _ a : ĠFloat , Ġlat _ b : ĠFloat , Ġlng _ b : ĠFloat ): ĠDouble Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġpk Ġ= Ġ( 1 8 0 f Ġ/ ĠMath . PI ). toFloat () čĊčĊĠĠĠĠĠĠĠ Ġval Ġa 1 Ġ= Ġlat _ a Ġ/ Ġpk čĊĠĠĠĠĠĠĠ Ġval Ġa 2 Ġ= Ġlng _ a Ġ/ Ġpk čĊĠĠĠĠĠĠĠ Ġval Ġb 1 Ġ= Ġlat _ b Ġ/ Ġpk čĊĠĠĠĠĠĠĠ Ġval Ġb 2 Ġ= Ġlng _ b Ġ/ Ġpk čĊčĊĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= ĠMath . cos ( a 1 . toDouble ()) Ġ* ĠMath . cos ( a 2 . toDouble ()) Ġ* ĠMath . cos ( b 1 . toDouble ()) Ġ* ĠMath . cos ( b 2 . toDouble ()) čĊĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= ĠMath . cos ( a 1 . toDouble ()) Ġ* ĠMath . sin ( a 2 . toDouble ()) Ġ* ĠMath . cos ( b 1 . toDouble ()) Ġ* ĠMath . sin ( b 2 . toDouble ()) čĊĠĠĠĠĠĠĠ Ġval Ġt 3 Ġ= ĠMath . sin ( a 1 . toDouble ()) Ġ* ĠMath . sin ( b 1 . toDouble ()) čĊĠĠĠĠĠĠĠ Ġval Ġtt Ġ= ĠMath . acos ( t 1 Ġ+ Ġt 2 Ġ+ Ġt 3 ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġ 6 3 6 6 0 0 0 Ġ* Ġtt čĊĠĠĠ Ġ} č Ċ } čĊ