package Ġcom . am ade us . android . demo . fragments . location Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġcom . am ade us . android . demo . R Ċ import Ġcom . am ade us . android . demo . databinding . Fragment Location Binding Ċ import Ġcom . am ade us . android . demo . main Activity Ċ import Ġcom . am ade us . android . demo . utils . g one Ċ import Ġcom . am ade us . android . demo . utils . hide Keyboard Ċ import Ġcom . am ade us . android . demo . utils . visible Ċ import Ġcom . am ade us . android . demo . utils . visible Or G one Ċ Ċ class ĠLocation Fragment Ġ: ĠFragment ( ĊĠĠĠ ĠR . layout . fragment _ location Ċ ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Location ViewModel >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Location Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠLoc ations Adapter ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Location Binding . bind ( view ) ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġsubscribe View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! this :: adapter . isInitialized ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠLoc ations Adapter ( viewModel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmain Activity ()?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . destination Input . edit Text ?. setOn Editor ActionListener Ġ{ Ġv , Ġaction Id , ĠkeyCode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ DONE Ġ|| ĠKeyEvent . KEYCODE _ ENTER Ġ== ĠkeyCode . keyCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Locations ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Editor ActionListener Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġbinding . re cyclerView . addItem Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . divider _ default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe View () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . loading . observe ( view Lifecycle Owner ) Ġ{ Ġloading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Text . g one ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visible Or G one ( loading ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . error . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Text . text Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Text . visible () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . locations . observe ( view Lifecycle Owner ) Ġ{ Ġlocations Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . submit List ( locations ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . visible Or G one ( locations . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locations . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Text . text Ġ= Ġ" No Ġlocations Ġfor Ġthis Ġkeyword " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . no Data Text . visible Or G one ( locations . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }