package Ġcom . ag abo ard i . par ch int as ca . map Ċ Ċ import Ġandroid . os . Handler Ċ import Ġcom . ag abo ard i . par ch int as ca . common . base . UseCase Ċ import Ġcom . ag abo ard i . par ch int as ca . common . base . UseCase Handler Ċ import Ġcom . ag abo ard i . par ch int as ca . data . source . local . db . models . Par k Ċ import Ġcom . ag abo ard i . par ch int as ca . map . domain . filter . Par k Filter Type Ċ import Ġcom . ag abo ard i . par ch int as ca . map . domain . model . Par k Category Ċ import Ġcom . ag abo ard i . par ch int as ca . map . domain . model . Par k Cluster Item Ċ import Ġcom . ag abo ard i . par ch int as ca . map . domain . use case . Get Par k Ċ import Ġcom . ag abo ard i . par ch int as ca . map . domain . use case . Get Par ks Ċ import Ġcom . cla udi ode gio . ms v . model . Filter Ċ import Ġcom . google . android . gms . maps . Google Map Ċ import Ġcom . google . android . gms . maps . model . LatLng Ċ import Ġcom . google . android . gms . maps . model . LatLng Bounds Ċ import Ġcom . google . maps . android . clustering . Cluster Ċ Ċ class ĠMap Presenter ( ĊĠĠĠĠĠĠĠ Ġval Ġview : ĠMap Contract . View , ĊĠĠĠĠĠĠĠ Ġval Ġuse Case Handler : ĠUse Case Handler , ĊĠĠĠĠĠĠĠ Ġval Ġget Par ks : ĠGet Par ks , ĊĠĠĠĠĠĠĠ Ġval Ġget Par k : ĠGet Par k Ċ ) Ġ: ĠMap Contract . Presenter Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmap : ĠGoogle Map ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġfilter Types : ĠMutable List < Par k Category > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġhandler : ĠHandler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Filter : ĠPark Filter Type ? Ġ= ĠPark Filter Type . FILTER _ ALL ĊĠĠĠ Ġprivate Ġvar Ġcurrent Query : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġb erg amo Ġ= ĠLat Lng Bounds ( LatLng ( 4 5 . 6 5 6 2 6 9 , Ġ 9 . 5 8 9 4 2 6 ), ĠLat Lng ( 4 5 . 7 4 4 2 1 2 , Ġ 9 . 7 7 2 7 4 6 )) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview . set Presenter ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġview . initialize Bottom Sheet () ĊĠĠĠĠĠĠĠ Ġview . setup Tag Adapter () ĊĠĠĠĠĠĠĠ Ġview . setup UI Interaction () ĊĠĠĠĠĠĠĠ Ġview . init Map () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Map Ready ( map : ĠGoogle Map ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . map Ġ= Ġmap ĊĠĠĠĠĠĠĠ Ġview . setUp Cluster er ( map ) ĊĠĠĠĠĠĠĠ Ġload Par ks ( false ) ĊĠĠĠĠĠĠĠ Ġview . customize Map ( map ) ĊĠĠĠĠĠĠĠ Ġview . center Map On ( map , Ġb erg amo , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Par ks ( force Update : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Par ks ( force Update , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Par ks ( force Update : ĠBoolean , Ġshow Loading UI : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġhandler ?. remove Callbacks And Messages ( null ) ĊĠĠĠĠĠĠĠ Ġhandler Ġ= ĠHandler () ĊĠĠĠĠĠĠĠ Ġhandler ?. post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading UI ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Values Ġ= ĠGet Par ks . Request Values ( force Update , Ġfilter Types , Ġcurrent Filter , Ġcurrent Query ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġuse Case Handler . execute ( get Par ks , Ġrequest Values , Ġobject Ġ: ĠUse Case . UseCase Callback < Get Par ks . Response Value > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠGet Par ks . Response Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading UI ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Par ks ( response . par ks ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading UI ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Loading Error () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cluster Click ( cluster : ĠCluster < Par k Cluster Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠLat Lng Bounds . builder () ĊĠĠĠĠĠĠĠ Ġcluster . items . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . include ( it . position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmap ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . center Map On ( it , Ġbuilder . build ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Cluster Item Click ( park Cluster Item : ĠPark Cluster Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Par k ( park Cluster Item . park Id , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Filter Added ( filter : ĠFilter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Types . add ( Par k Category . from ( filter . id )) ĊĠĠĠĠĠĠĠ Ġcurrent Filter Ġ= ĠPark Filter Type . FILTER _ TYPE ĊĠĠĠĠĠĠĠ Ġload Par ks ( false , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Filter Changed ( filters : ĠMutable List < Filter >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* filter Types . clear () ĊĠĠĠĠĠĠĠ Ġfilter Types . addAll ( filters . map Ġ{ ĠPark Category . from ( it . id ) Ġ}) */ ĊĠĠĠĠĠĠĠ Ġcurrent Filter Ġ= Ġif ( filter Types . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPark Filter Type . FILTER _ ALL ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPark Filter Type . FILTER _ TYPE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Filter Removed ( filter : ĠFilter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Types . removeAll Ġ{ Ġit . value Ġ== Ġfilter . id Ġ} ĊĠĠĠĠĠĠĠ Ġload Par ks ( false , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġcurrent Filter Ġ= Ġif ( filter Types . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPark Filter Type . FILTER _ ALL ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPark Filter Type . FILTER _ TYPE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query TextChanged ( new Text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Query Ġ= Ġnew Text ĊĠĠĠĠĠĠĠ Ġload Par ks ( false , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Search View Closed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfilter Types . clear () ĊĠĠĠĠĠĠĠ Ġcurrent Filter Ġ= ĠPark Filter Type . FILTER _ ALL ĊĠĠĠĠĠĠĠ Ġcurrent Query Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġload Par ks ( false , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Search View Shown () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Par k Click ( park : ĠPark ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . open Par k Detail ( park . id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Par k ( park Id : ĠInt , Ġforce Update : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġload Par k ( park Id , Ġforce Update , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Par k ( park Id : ĠInt , Ġforce Update : ĠBoolean , Ġshow Loading UI : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading Par k UI ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrequest Values Ġ= ĠGet Par k . Request Values ( park Id ) ĊĊĠĠĠĠĠĠĠ Ġuse Case Handler . execute ( get Par k , Ġrequest Values , Ġobject Ġ: ĠUse Case . UseCase Callback < Get Par k . Response Value > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( response : ĠGet Par k . Response Value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading Par k UI ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Par k ( response . park ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Loading UI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . set Loading Par k UI ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . show Loading Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }