package Ġcom . chr is jan usa . random izer . location _ search Ċ Ċ import Ġandroid . animation . Layout Transition Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . chr is jan usa . base . Communication Helper . send Action Ċ import Ġcom . chr is jan usa . base . interfaces . Base Restaurant Fragment Ċ import Ġcom . chr is jan usa . base . interfaces . Feature UI Manager Ċ import Ġcom . chr is jan usa . base . models . Random izer State Ċ import Ġcom . chr is jan usa . base . models . Random izer ViewModel Ċ import Ġcom . chr is jan usa . random izer . location _ search . actions .* Ċ import Ġcom . seat ge ek . places autocomplete . Details Callback Ċ import Ġcom . seat ge ek . places autocomplete . model . Place Details Ċ import Ġkotlinx . android . synt hetic . main . search _ card .* Ċ import Ġkotlinx . android . synt hetic . main . top _ overlay .* Ċ Ċ object ĠSearch UI Manager Ġ: ĠFeature UI Manager Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( random izer ViewModel : ĠRandom izer ViewModel , Ġfragment : ĠBase Restaurant Fragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Open Listeners ( random izer ViewModel , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġinit Close Listeners ( random izer ViewModel , Ġfragment ) ĊĠĠĠĠĠĠĠ Ġinit Transition Listeners ( random izer ViewModel , Ġfragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Open Listeners ( random izer ViewModel : ĠRandom izer ViewModel , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ input . setOn Touch Listener Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Gain Focus Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom izer ViewModel . state . value ?. address Search String Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġrandom izer ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ icon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Gain Focus Action ( random izer ViewModel . state . value ?. address Search String Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom izer ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Close Listeners ( random izer ViewModel : ĠRandom izer ViewModel , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback _ icon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Finished Action ( user _ input . text . toString ()), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ shade . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Finished Action ( user _ input . text . toString ()), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠClose Ġsearch Ġbar Ġif Ġuser Ġhits Ġenter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ input . setOn Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Finished Action ( user _ input . text . toString ()), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ input . setOn Place Selected Listener Ġ{ Ġplace Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Finished Action ( user _ input . text . toString ()), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser _ input . get Details For ( place , Ġobject Ġ: ĠDetails Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( details : ĠPlace Details ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Location Ch osen Action ( details , Ġit ), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( failure : ĠThrowable ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Transition Listeners ( random izer ViewModel : ĠRandom izer ViewModel , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠListen Ġfor Ġwhen Ġthe Ġsearch Ġbar Ġhas Ġfinished Ġopening Ġor Ġclosing Ġto Ġsend Ġoff Ġthat Ġevent ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch _ bar . layout Transition . add Transition Listener ( object Ġ: ĠLayout Transition . Transition Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstart Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition : ĠLayout Transition ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġend Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition : ĠLayout Transition ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠView ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Type : ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view ?. id Ġ== Ġuser _ input . id Ġ&& Ġtransition Type Ġ== ĠLayout Transition . CHANGE _ AP PE AR ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Opened Action (), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view ?. id Ġ== Ġuser _ input . id Ġ&& Ġtransition Type Ġ== ĠLayout Transition . CHANGE _ DIS AP PE AR ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Action ( Search Closed Action (), Ġrandom izer ViewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrender ( state : ĠRandom izer State , Ġfragment : ĠFragment ) Ġ{ ĊĠĠĠ Ġ} Ċ }