package Ġcom . hyper track . android . api Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . fon fon . k geo hash . Geo Hash Ċ import Ġcom . hyper track . android . utils . Injector Ċ import Ġcom . hyper track . android . utils . Mock Data Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġretrofit 2 . Response Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ @ Suppress (" Blocking Method In Non Blocking Context ") Ċ class ĠMock Api ( val Ġremote Api : ĠApi Interface ) Ġ: ĠApi Interface Ġby Ġremote Api Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġf ences Ġ= Ġmutable ListOf < Ge ofence >() ĊĠĠĠĠĠĠĠ Ġ. apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadd All ( Injector . getM oshi (). adapter ( Ge ofence Response :: class . java ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( Mock Data . MOCK _ GE OF ENCES _ JSON ) !!. ge of ences ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcomplete Trip ( trip Id : ĠString ): ĠResponse < Unit > Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Unit ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Ge of ences ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġparams : ĠGe ofence Params ĊĠĠĠ Ġ): ĠResponse < List < Ge ofence >> Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġremote Api . create Ge of ences ( deviceId , Ġparams ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcreated Ġ= ĠGe ofence ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 0 0 0 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 - 0 0 0 0 0 0 0 0 0 0 0 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠZ onedDateTime . now (). format ( DateTime Formatter . ISO _ INST ANT ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . ge of ences . first (). metadata , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . ge of ences . first (). geometry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġf ences . add ( created ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( listOf ( created )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN RE ACH ABLE _ CODE ") ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Device Ge of ences ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġgeo hash : ĠString ?, ĊĠĠĠĠĠĠĠ Ġpagination Token : ĠString ?, ĊĠĠĠĠĠĠĠ Ġinclude Arch ived : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġinclude Markers : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġsort Nearest : ĠBoolean ĊĠĠĠ Ġ): ĠResponse < Ge ofence Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( geo hash Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ordinal Ġpage Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġremote Api . getDevice Ge of ences ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId , Ġgeo hash , Ġpagination Token , Ġinclude Arch ived , Ġinclude Markers , Ġsort Nearest Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGe ofence Response ( f ences , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGe ofence Response ( listOf ( Mock Data . create Ge ofence ( polygon Ġ= Ġtrue )), Ġnull ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInject or . getM oshi (). adapter ( Ge ofence Response :: class . java ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( Mock Data . MOCK _ GE OF ENCES _ JSON ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// map Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Log . v (" hyper track - verbose ", Ġ" getDevice Ge of ences Ġ${ geo hash }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay (( Math . random () Ġ* Ġ 1 0 0 0 ). to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġ( pagination Token ?. split ("/") ?. get ( 0 )?. toInt () Ġ?: Ġ 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Pages Ġ= Ġ 1 Ċ // ĠĠĠĠĠĠĠ Ġval Ġtotal Pages Ġ= Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ( pagination Token ?. split ("/") ?. get ( 1 )?. toInt ()) Ġ?: Ġ( 3 Ġ+ Ġ( Math . random () Ġ* Ġ 3 f ). toInt ()) Ċ Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( Math . random () Ġ> Ġ 0 . 8 f Ġ/* && Ġ* //* page Ġ> Ġ 1 */) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("${ geo hash } Ġ${ page }") Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgh Ġ= ĠGeo Hash ( geo hash ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠGe ofence Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 .. 1 0 0 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Data . create Ge ofence ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Ġ= Ġgh . bounding Box . max Lat Ġ- Ġ 0 . 0 0 5 Ġ* Ġpage , Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlon Ġ= Ġgh . bounding Box . max Lon Ġ- Ġ 0 . 0 0 5 Ġ* Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat Ġ= Ġgh . bounding Box . let Ġ{ Ġit . max Lat Ġ- ĠMath . random () Ġ* Ġ( it . max Lat Ġ- Ġit . min Lat ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlon Ġ= Ġgh . bounding Box . let Ġ{ Ġit . max Lon Ġ- ĠMath . random () Ġ* Ġ( it . max Lon Ġ- Ġit . min Lon ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Ġ< Ġtotal Pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ page }/${ total Pages }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( res ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetAll Ge of ences Vis its ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġpagination Token : ĠString ? ĊĠĠĠ Ġ): ĠResponse < Vis its Response > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġremote Api . getAll Ge of ences Vis its ( deviceId , Ġpagination Token ) Ċ // ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVis its Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMock Data . create Ge ofence Visit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget History ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġday : ĠString , ĊĠĠĠĠĠĠĠ Ġtimezone : ĠString ĊĠĠĠ Ġ): ĠResponse < History Response > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġremote Api . get History ( deviceId , Ġday , Ġtimezone ) Ċ // ĊĠĠĠĠĠĠĠ Ġdelay (( Math . random () Ġ* Ġ 1 0 0 0 Ġ+ Ġ 5 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Mock Data . MOCK _ HISTORY _ RESPONSE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget History For Period ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġfrom : ĠString , ĊĠĠĠĠĠĠĠ Ġto : ĠString ĊĠĠĠ Ġ): ĠResponse < History Response > Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġremote Api . get History For Period ( deviceId , Ġfrom , Ġto ) ĊĊĠĠĠĠĠĠĠ Ġdelay (( Math . random () Ġ* Ġ 1 0 0 0 Ġ+ Ġ 5 0 0 ). to Long ()) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Mock Data . MOCK _ HISTORY _ RESPONSE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Integr ations ( ĊĠĠĠĠĠĠĠ Ġquery : ĠString ?, ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt ? ĊĠĠĠ Ġ): ĠResponse < Integr ations Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhas Integr ations Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( has Integr ations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInject or . getM oshi (). adapter ( Integr ations Response :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( Mock Data . MOCK _ INTEGR ATIONS _ RESPONSE ) !!. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . copy ( data Ġ= Ġit . data . filter Ġ{ Ġit . name ?. contains ( query . toString ()) Ġ== Ġtrue Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Integr ations Response ( listOf ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Tri ps ( ĊĠĠĠĠĠĠĠ ĠdeviceId : ĠString , ĊĠĠĠĠĠĠĠ Ġpagination Token : ĠString ĊĠĠĠ Ġ): ĠResponse < Trip Response > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Trip Response ( listOf ( Mock Data . create Trip ()), Ġnull )) Ċ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠInject or . getM oshi (). adapter ( Trip Response :: class . java ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( Mock Data . MOCK _ TR IPS _ JSON ) Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcomplete Order ( trip Id : ĠString , ĠorderId : ĠString ): ĠResponse < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġcancel Order ( trip Id : ĠString , ĠorderId : ĠString ): ĠResponse < Void > Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Order ( ĊĠĠĠĠĠĠĠ Ġtrip Id : ĠString , ĊĠĠĠĠĠĠĠ ĠorderId : ĠString , ĊĠĠĠĠĠĠĠ Ġorder : ĠOrder Body ĊĠĠĠ Ġ): ĠResponse < Trip > Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġreturn ĠResponse . success ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInject or . getM oshi (). adapter ( Trip Response :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fromJson ( Mock Data . MOCK _ TR IPS _ JSON ) !!. tri ps . first () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }