package Ġcom . g iphy . code challenge . search Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . g iphy . code challenge . databinding . Search Frag Binding Ċ import Ġcom . g iphy . code challenge . util . hide Keyboard Ċ import Ġcom . g iphy . code challenge . util . on TextChanged Ċ import Ġcom . g iphy . code challenge . util . setup Snackbar Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ Ċ /** Ċ Ġ* ĠAfter Ġthe Ġuser Ġsearches Ġfor Ġa ĠGIF , Ġdisplays Ġa Ġgrid Ġof ĠGIF s Ġif Ġthere Ġis Ġany . Ċ Ġ*/ Ċ Ċ class ĠSearch Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Data Binding : ĠSearch Frag Binding ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠSearch Fragment () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Search Fragment " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġview Data Binding Ġ= ĠSearch Frag Binding . inflate ( in flater , Ġcontainer , Ġfalse ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model Ġ= Ġ( activity Ġas ĠSearch Activity ). obtain ViewModel () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( false ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview Data Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . view model ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. setup Snackbar ( this , Ġit . sn ackbar Message , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġview Data Binding . lifecycle Owner Ġ= Ġthis . view Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġsetup Search Gif Button () ĊĠĠĠĠĠĠĠ Ġsetup Search Query EditText () ĊĠĠĠĠĠĠĠ Ġsetup ListView () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Search Gif Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Binding . search Gif . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . setOnClickListener Ġ{ Ġview Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . view model ?. search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . hide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Search Query EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Binding . search Query . on TextChanged Ġ{ new Text Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . view model ?. query Changed ( new Text ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ListView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= Ġview Data Binding . view model ĊĠĠĠĠĠĠĠ Ġif Ġ( viewModel Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid LayoutManager Ġ= ĠGrid LayoutManager ( activity , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . results . layout Manager Ġ= Ġgrid LayoutManager ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" ViewModel Ġnot Ġinitialized Ġwhen Ġattempting Ġto Ġset Ġup Ġadapter .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ }