package Ġcom . mz uk ic . super hero . ui . search Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . TextView . On Editor ActionListener Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . mz uk ic . super hero . R Ċ import Ġcom . mz uk ic . super hero . data . model . Super Hero Ċ import Ġcom . mz uk ic . super hero . databinding . Fragment Search Binding Ċ import Ġcom . mz uk ic . super hero . ui . base . Base Fragment Ċ import Ġcom . mz uk ic . super hero . util . hide Ċ import Ġcom . mz uk ic . super hero . util . show Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel ĊĊ Ċ class ĠSearch Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsuper Hero Adapter : ĠSuper Hero Adapter ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠSearch ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Search Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ search , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Search Binding . bind ( view ) ĊĊĠĠĠĠĠĠĠ Ġsuper Hero Adapter Ġ= ĠSuper Hero Adapter ( require Context ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Super Hero Item Click ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġsuper Hero Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Empty State Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Search . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Search . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Submit . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Search () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Search . setOn Editor ActionListener ( On Editor ActionListener Ġ{ Ġv , Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperform Search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Retry . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġedit Text Search . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . enter _ super hero _ name _ label ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Hero es ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Empty State Screen () ĊĊĠĠĠĠĠĠĠ ĠviewModel . isLoading . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading Screen () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . search Super Hero Result . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch ViewModel . Search Super Hero Result . Endpoint Failed Error , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch ViewModel . Search Super Hero Result . No Connection Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Error Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch ViewModel . Search Super Hero Result . No Hero es Found Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow No Result Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSearch ViewModel . Search Super Hero Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Result Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Hero Adapter . submit List ( it . hero es ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFragment Search Binding . perform Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġedit Text Search . text . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( query . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . enter _ super hero _ name _ label ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Hero es ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit Text Search . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Error Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Empty . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Error . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer No Result . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Result Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Empty . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Error . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer No Result . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow No Result Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Empty . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Error . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer No Result . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Empty State Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Empty . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Error . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer No Result . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Empty . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer Error . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer No Result . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Clear . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . progress Bar . hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Super Hero Item Click ( super Hero : ĠSuper Hero ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch Fragment Directions . action Search Fragment To Detail Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper Hero ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠH ides Ġthe Ġkeyboard Ġform Ġthe Ġscreen . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . hide Soft Input From Window ( view ?. root View ?. window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ