package Ġme . mig ue los . sample . presentation . ui . be ers Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . core . widget . do After TextChanged Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġme . mig ue los . base . ui . Base Fragment Ċ import Ġme . mig ue los . base . ui . End less RecyclerView Scroll Listener Ċ import Ġme . mig ue los . base . util . ErrorMessage Factory Ċ import Ġme . mig ue los . base . util . auto Cle ared Ċ import Ġme . mig ue los . base . util . image loader . Image Loader Ċ import Ġme . mig ue los . base . util . observe Ċ import Ġme . mig ue los . base . util . show Snackbar Ċ import Ġme . mig ue los . sample . R Ċ import Ġme . mig ue los . sample . databinding . Fragment Be ers Binding Ċ import Ġme . mig ue los . sample . presentation . model . Be er Ċ import Ġme . mig ue los . sample . presentation . ui . MainActivity Ċ import Ġme . mig ue los . sample . presentation . ui . MainActivity . Companion . ARG _ ID Ċ import Ġme . mig ue los . sample . presentation . ui . be ers . adapter . Be ers Adapter Ċ import Ġjava . net . Unknown Host Exception Ċ import Ġjavax . inject . Inject ĊĊ Ċ @ Android EntryPoint Ċ class ĠBe ers Fragment Ġ: ĠBase Fragment (), ĠBe ers Adapter . Be er Item Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠFragment Be ers Binding Ġby Ġauto Cle ared () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠBe ers ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġimage Loader : ĠImage Loader ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Be ers Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Ui () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġobserve ViewState () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ? ĠMainActivity )?. update Title ( getString ( R . string . title _ fragment _ list )) ĊĊĠĠĠĠĠĠĠ Ġinit Adapter () ĊĠĠĠĠĠĠĠ Ġinit Search () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġload Be ers () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġrv Adapter Ġ= Ġget RV Adapter () ĊĠĠĠĠĠĠĠ Ġif Ġ( rv Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Adapter Ġ= ĠBe ers Adapter ( this , Ġimage Loader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Adapter . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . be ers Rv . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlinear LayoutManager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġlinear LayoutManager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEnd less RecyclerView Scroll Listener ( linear LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonLoad More ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Items Count : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview : ĠRecyclerView ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Be ers ( total Items Count Ġ= Ġtotal Items Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Search () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . search Et . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Id Ġ== ĠEditor Info . IME _ ACTION _ GO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġaction Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Be ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Key Listener Ġ{ Ġ_, ĠkeyCode , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠKeyEvent . ACTION _ DOWN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠkeyCode Ġ== ĠKeyEvent . KEYCODE _ ENTER ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Be ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo After TextChanged Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Be ers () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Be ers () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . be ers Rv . run Ġrun RV @{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscroll To Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . load Be ers ( get Search Query (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget RV Adapter ()?. run Ġrun Adapter @{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ run RV . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyc led View Pool . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Search Query () Ġ= ĊĠĠĠĠĠĠĠ Ġbinding . search Et . text . trim () ĊĊĠĠĠ Ġprivate Ġfun Ġobserve ViewState () Ġ{ ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . view State ) Ġ{ Ġhandle ViewState ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . error State ) Ġ{ Ġhandle Feedback State ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġobserve ( viewModel . be ers State ) Ġ{ Ġhandle Be ers State ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Be ers State ( be ers : ĠList < Be er >) Ġ{ ĊĠĠĠĠĠĠĠ Ġget RV Adapter ()?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Items ( ArrayList ( be ers )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . emptyList Tv . visibility Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG ONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVIS IBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Feedback State ( error : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġis ĠUnknown Host Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( require Activity () Ġas ? ĠMainActivity )?. show Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . dialog _ offline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . be ers Cl . show Snackbar ( ErrorMessage Factory . create ( require Context (), Ġerror )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle ViewState ( view State : ĠBe ers ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . list Pb . visibility Ġ= Ġif Ġ( view State . isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG ONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget RV Adapter () Ġ= Ġ( binding . be ers Rv . adapter Ġas ? ĠBe ers Adapter ) ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ed Be er ( beer : ĠBe er ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ be ers Fragment _ to _ beer Detail Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle Of ( ARG _ ID Ġto Ġbeer . id ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ