package Ġk nie z rec . com . flight info . cards . route Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Service Connection Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Messenger Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . H aptic Feedback Constants Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration . VERTICAL Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġk nie z rec . com . flight info . R Ċ import Ġk nie z rec . com . flight info . base . Base Activity Ċ import Ġk nie z rec . com . flight info . common . Constants Ċ import Ġk nie z rec . com . flight info . common . Dialog Utils Ċ import Ġk nie z rec . com . flight info . common . Navigation Ċ import Ġk nie z rec . com . flight info . common . set Custom Marker Ċ import Ġk nie z rec . com . flight info . databinding . Activity Find City Binding Ċ import Ġk nie z rec . com . flight info . db . C ities DataSource Ċ import Ġk nie z rec . com . flight info . db . City Ċ import Ġk nie z rec . com . flight info . settings . Flight App Preferences Ċ import Ġorg . os md roid . api . I Map Controller Ċ import Ġorg . os md roid . events . Map Events Receiver Ċ import Ġorg . os md roid . util . Geo Point Ċ import Ġorg . os md roid . views . overlay . Map Events Overlay Ċ import Ġorg . os md roid . views . overlay . Marker Ċ Ċ /** Ċ Ġ* ĠCopyright Ġby ĠK amil ĠN ie z re ck i Ċ Ġ*/ Ċ Ċ private Ġconst Ġval ĠDEFAULT _ ZO OM Ġ= Ġ 3 Ċ Ċ class ĠFind City Activity Ġ: ĠBase Activity (), ĠFind City Presenter . View Contract , ĠMap Events Receiver Ġ{ ĊĠ Ġprivate Ġval Ġm Adapter Ġ= ĠDis amb ig uation Adapter ( object Ġ: ĠDis amb ig uation Adapter . ClickListener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon City Clicked ( city : ĠCity ) Ġ{ ĊĠĠĠĠĠ Ġm Presenter . on City Clicked ( city ) ĊĠĠĠ Ġ} ĊĠ Ġ}) ĊĊĠ Ġprivate Ġval Ġm Center Ġ= ĠGeo Point ( 0 . 0 , Ġ- 3 2 . 0 ) ĊĊĠ Ġprivate Ġlateinit Ġvar Ġm Presenter : ĠFind City Presenter ĊĠ Ġprivate Ġlateinit Ġvar Ġm Input Manager : ĠInput Method Manager ĊĠ Ġprivate Ġlateinit Ġvar Ġm Map Controller : ĠI Map Controller ĊĠ Ġprivate Ġlateinit Ġvar Ġm City Marker : ĠMarker ĊĠ Ġprivate Ġlateinit Ġvar Ġm Binding Ġ: ĠActivity Find City Binding ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġm Binding Ġ= ĠActivity Find City Binding . inflate ( layout Inflater ) ĊĠĠĠ ĠsetContentView ( m Binding . root ) ĊĊĠĠĠ Ġm Presenter Ġ= ĠFind City Presenter ( C ities DataSource ( this ), ĠFlight App Preferences ( this )) ĊĊĠĠĠ Ġsupport ActionBar ?. apply Ġ{ ĊĠĠĠĠĠ Ġset Display Home As Up Enabled ( true ) ĊĠĠĠĠĠ ĠsetTitle ( intent . getInt Extra ( Constants . TITLE _ EXTRA _ KEY , ĠR . string . app _ name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġm Input Manager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĊĠĠĠ Ġval Ġitem Decor Ġ= ĠDiv ider Item Decoration ( this , ĠV ERT ICAL ) ĊĠĠĠ Ġm Binding . rv Dis amb ig uation C ities . apply Ġ{ ĊĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠ Ġadapter Ġ= Ġm Adapter ĊĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Find City Activity ) ĊĠĠĠĠĠ Ġadd Item Decoration ( item Decor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġm Map Controller Ġ= Ġm Binding . map View . controller ĊĠĠĠ Ġm Binding . confirm Button . setOnClickListener Ġ{ Ġm Presenter . on Confirm Clicked () Ġ} ĊĠĠĠ Ġm Binding . city Name EditText . apply Ġ{ ĊĠĠĠĠĠ Ġadd TextChanged Listener ( m Text Watcher ) ĊĠĠĠĠĠ Ġset On Editor ActionListener ( m Editor ActionListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġm Binding . search Button . setOnClickListener Ġ{ Ġprepare City Search () Ġ} ĊĊĠĠĠ Ġm City Marker Ġ= ĠMarker ( m Binding . map View ) ĊĠĠĠ Ġinit MapView () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġinit MapView () Ġ{ ĊĠĠĠ Ġm City Marker . let Ġ{ ĊĠĠĠĠĠ Ġit . set Anchor ( Marker . AN CH OR _ CENTER , ĠMarker . AN CH OR _ BOTTOM ) ĊĠĠĠĠĠ Ġit . set Custom Marker ( this , ĠR . drawable . ic _ city _ found _ marker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġm Map Controller . let Ġ{ ĊĠĠĠĠĠ Ġit . set Center ( m Center ) ĊĠĠĠĠĠ Ġit . set Zoom ( DEFAULT _ ZO OM ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġevent Overlay Ġ= ĠMap Events Overlay ( this ) ĊĠĠĠ Ġm Binding . map View . let Ġ{ ĊĠĠĠĠĠ Ġit . overlay s . add ( event Overlay ) ĊĠĠĠĠĠ Ġit . invalidate () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġhide Dis amb ig uation () Ġ{ ĊĠĠĠ Ġm Binding . rv Dis amb ig uation C ities . visibility Ġ= ĠView . GONE ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġconnect To City Finder () Ġ{ ĊĠĠĠ ĠNavigation . bind To Find City Service ( this , Ġm Find City Service Connection ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdisconnect From City Finder () Ġ{ ĊĠĠĠ ĠNavigation . unbind From Service ( this , Ġm Find City Service Connection ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠ ĠNavigation . exit Zoom In Fade Out ( this ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠ Ġon Back Pressed () ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsend Results ( city : ĠCity ) Ġ{ ĊĠĠĠ Ġval Ġaction From Intent Ġ= Ġintent . action ĊĊĠĠĠ Ġval Ġreturn Intent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠ Ġaction Ġ= Ġaction From Intent ĊĠĠĠĠĠ Ġput Extra ( Constants . C ITY _ EXTRA _ KEY , Ġcity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġreturn Intent ) ĊĠĠĠ Ġfinish () ĊĠĠĠ ĠNavigation . exit Zoom In Fade Out ( this ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠ Ġsuper . onStart () ĊĠĠĠ Ġm Presenter . attach View ( this ) ĊĠĠĠ Ġintent . get Parcelable Extra < City >( Constants . C ITY _ EXTRA _ KEY )?. let Ġ{ ĊĠĠĠĠĠ Ġm Presenter . on City Found ( it ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġm Presenter . detach View () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġm City Marker . on Detach ( m Binding . map View ) ĊĠĠĠ Ġm Binding . map View . overlay s ?. clear () ĊĠĠĠ ĠMarker . clean Defaults () ĊĠĠĠ Ġsuper . on Destroy () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdisplay Found C ities ( cities : ĠList < City >) Ġ{ ĊĠĠĠ Ġm Adapter . addAll ( cities ) ĊĠĠĠ Ġm Binding . rv Dis amb ig uation C ities . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġm Binding . map View . overlay s . remove ( m City Marker ) ĊĠĠĠ Ġm Map Controller . apply Ġ{ ĊĠĠĠĠĠ Ġset Zoom ( DEFAULT _ ZO OM ) ĊĠĠĠĠĠ Ġanimate To ( m Center ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Orientation ( orientation : ĠInt ) Ġ{ ĊĠĠĠ Ġrequested Orientation Ġ= Ġorientation ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdisplay Dis amb ig uation Info () Ġ{ ĊĠĠĠ Ġm Binding . info Label . setText ( R . string . more _ than _ one _ city _ title ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġshow No City Found Dialog () Ġ{ ĊĠĠĠ ĠDialog Utils . show Error Dialog ( this , ĠR . string . no _ city _ found _ title , ĠR . string . no _ city _ body ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġlong Press Helper ( point : ĠGeo Point ?): ĠBoolean Ġ{ ĊĠĠĠ Ġm Presenter . on Long Press ( point ) ĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġsingle Tap Confirmed Helper ( p : ĠGeo Point ?) Ġ= Ġfalse ĊĊĠ Ġoverride Ġfun Ġset Confirm Button Enabled ( isEnabled : ĠBoolean ) Ġ{ ĊĠĠĠ Ġm Binding . confirm Button . isEnabled Ġ= Ġis Enabled ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġset Search Button Enabled ( isEnabled : ĠBoolean ) Ġ{ ĊĠĠĠ Ġm Binding . search Button . isEnabled Ġ= Ġis Enabled ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdisplay City ( city : ĠCity ) Ġ{ ĊĠĠĠ Ġm Binding . city Name EditText . setText ( city . name ) ĊĠĠĠ Ġm Binding . info Label . apply Ġ{ ĊĠĠĠĠĠ Ġtext Ġ= Ġget Formatted Text ( city ) ĊĠĠĠĠĠ Ġset TextColor ( Context Compat . getColor ( this @ Find City Activity , ĠR . color . text _ color _ light )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġgeo Point Ġ= ĠGeo Point ( city . latitude , Ġcity . longitude ) ĊĠĠĠ Ġm City Marker . position Ġ= Ġgeo Point ĊĠĠĠ Ġm Map Controller . animate To ( geo Point ) ĊĊĠĠĠ Ġm Binding . map View . apply Ġ{ ĊĠĠĠĠĠ Ġif Ġ( overlay s . contains ( m City Marker )) Ġ{ ĊĠĠĠĠĠĠĠ Ġoverlay s . remove ( m City Marker ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġm Binding . map View . apply Ġ{ ĊĠĠĠĠĠ Ġoverlay s ?. add ( 0 , Ġm City Marker ) ĊĠĠĠĠĠ Ġinvalidate () ĊĠĠĠĠĠ Ġperform H aptic Feedback ( H aptic Feedback Constants . LONG _ PRESS ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprepare City Search () Ġ{ ĊĠĠĠ Ġm Presenter . on Search Button Clicked ( m Binding . city Name EditText . text . toString ()) ĊĠĠĠ Ġhide Keyboard () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠ Ġval Ġtoken : ĠI Binder Ġ= Ġcurrent Focus ?. window Token Ġ?: Ġm Binding . map View . window Token Ġ?: Ġreturn ĊĠĠĠ Ġm Input Manager . hide Soft Input From Window ( token , ĠInput Method Manager . HIDE _ NOT _ ALWAYS ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Formatted Text ( city : ĠCity ): ĠCharSequence Ġ{ ĊĠĠĠ Ġreturn Ġ"${ city . name }, Ġ${ city . country }" ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġm Editor ActionListener Ġ= ĠTextView . On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠ Ġprepare City Search () ĊĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġm Find City Service Connection : ĠService Connection Ġ= Ġobject Ġ: ĠService Connection Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Service Disconnected ( name : ĠComponent Name ?) Ġ{ ĊĠĠĠĠĠ Ġm Presenter . on City Finder Disconnected () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Service Connected ( name : ĠComponent Name ?, Ġservice : ĠI Binder ?) Ġ{ ĊĠĠĠĠĠ Ġm Presenter . on City Finder Connected ( Messenger ( service )) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġm Text Watcher Ġ= Ġobject Ġ: ĠText Watcher Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠ Ġm Presenter . on City TextChanged ( s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĠ Ġ} Ċ } Ċ