package Ġcom . is met . park ing zon em ad devs . ui . main Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . is met . park ing zon em ad devs . R Ċ import Ġcom . is met . park ing zon em ad devs . data . DataManager Ċ import Ġcom . is met . park ing zon em ad devs . data . model . Current Par king Ċ import Ġcom . is met . park ing zon em ad devs . data . model . Par king Event Ċ import Ġcom . is met . park ing zon em ad devs . data . model . Par king Zone Ċ import Ġcom . is met . park ing zon em ad devs . ui . base . Base ViewModel Ċ import Ġcom . is met . park ing zon em ad devs . utils . rx . Scheduler Provider Ċ import Ġjava . util .* Ċ Ċ class ĠMain ViewModel ( data Manager : ĠData Manager , Ġscheduler Provider : ĠScheduler Provider ) Ġ: ĊĠĠĠ ĠBase ViewModel < Main Navigator >( ĊĠĠĠĠĠĠĠ Ġdata Manager , Ġscheduler Provider ĊĠĠĠ Ġ), ĠZone Finder . On Zone Found Listener Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Par king : ĠMutable LiveData < Current Par king > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġvar Ġpar king Zones : ĠMutable LiveData < List < Par king Zone >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġvar Ġis Stop Par king Shown : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġis Stop Par king Shown . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġload Current Par king () ĊĠĠĠĠĠĠĠ Ġload Par king Zones () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Current Par king () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Par king . value Ġ= ĠgetData Manager (). getCurrent Par king () ĊĠĠĠĠĠĠĠ Ġis Stop Par king Shown . value Ġ= Ġcurrent Par king . value ?. is Par king ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Par king Zones () Ġ{ ĊĠĠĠĠĠĠĠ Ġget Composite Disposable (). add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetData Manager () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. getAll Par king Zones () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( get Scheduler Provider (). io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( get Scheduler Provider (). ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġz Ġ-> Ġif Ġ( z Ġ!= Ġnull ) Ġpar king Zones . value Ġ= Ġz Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġt Ġ-> Ġget Navigator ()?. handle Throwable ( t . message !! ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind Zone By Point ( lt Lng : ĠLat Lng ) Ġ{ ĊĠĠĠĠĠĠĠ ĠZone Finder ( this , Ġlt Lng , Ġpar king Zones . value ). execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Zone Found ( park ing Zone : ĠPark ing Zone ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Navigator ()?. show Par king Zone Fragment ( park ing Zone ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Par king Zones (): ĠLive Data < List < Par king Zone >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpar king Zones ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Stop Par king () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcurr Par k Ġ= ĠgetData Manager (). getCurrent Par king () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! curr Par k . is Par king ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Stop Par king Shown . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġget Navigator ()?. ask To Stop Par king ( curr Par k ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Par king ( current Par king : ĠCurrent Par king ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpar king Event Ġ= ĠPark ing Event ( current Par king . entry Time , ĠDate (). time , Ġcurrent Par king . park ing Zone Name !! ) ĊĠĠĠĠĠĠĠ Ġval Ġcurr Par Ġ= ĠCurrent Par king ( false , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠgetData Manager (). save Current Par king ( curr Par ) ĊĠĠĠĠĠĠĠ ĠgetData Manager (). save Can Ask To Par k ( true ) ĊĠĠĠĠĠĠĠ Ġget Composite Disposable (). add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetData Manager () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. save Par king Event ( park ing Event ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( get Scheduler Provider (). io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( get Scheduler Provider (). ui ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġb Ġ-> Ġif Ġ( b ) Ġget Navigator ()?. on Success ( R . string . stopped _ park ing ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġt Ġ-> Ġget Navigator ()?. handle Throwable ( t . message !! ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Par king ( park ing Zone : ĠPark ing Zone ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Par king Ġ= ĠgetData Manager (). getCurrent Par king () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Par king . is Par king ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Navigator ()?. on Success ( R . string . stop _ park ing _ first ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Par king Ġ= ĠCurrent Par king ( true , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġcurrent Par king . entry Time Ġ= ĠDate (). time ĊĠĠĠĠĠĠĠ Ġcurrent Par king . park ing Zone Name Ġ= Ġpar king Zone . name ĊĠĠĠĠĠĠĠ ĠgetData Manager () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. save Current Par king ( current Par king ) ĊĠĠĠĠĠĠĠ Ġget Navigator ()?. on Success ( R . string . started _ park ing ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Is Stop Par king Shown (): ĠLive Data < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Stop Par king Shown ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Is Location Track Enabled (){ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠgetData Manager (). getIs Track Location Enabled () ĊĠĠĠĠĠĠĠ Ġif Ġ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Navigator ()?. on Track Location Enabled () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Navigator ()?. on Track Location Disabled () ĊĠĠĠ Ġ} Ċ Ċ } Ċ