package Ġcom . shark ab oi . media hub . modules . anime _ search . ui Ċ Ċ 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 . Input Method Manager Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . paging . Load State Ċ import Ġandroidx . paging . Paging Data Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . shark ab oi . media hub . Bottom Nav Graph Directions Ċ import Ġcom . shark ab oi . media hub . R Ċ import Ġcom . shark ab oi . media hub . common . extensions . de bounce Ċ import Ġcom . shark ab oi . media hub . common . extensions . show Toast Ċ import Ġcom . shark ab oi . media hub . databinding . Fragment An ime Search Binding Ċ import Ġcom . shark ab oi . media hub . modules . anime _ search . adapters . An ime Search ListAdapter Ċ import Ġcom . shark ab oi . media hub . modules . anime _ search . adapters . An ime Search Load State Adapter Ċ import Ġcom . shark ab oi . media hub . modules . anime _ search . vm . An ime Search ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . launch Ċ Ċ @ Android EntryPoint Ċ class ĠAn ime Search Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment An ime Search Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġan ime Search ListAdapter : ĠAn ime Search ListAdapter ĊĠĠĠ Ġprivate Ġval Ġan ime Search ViewModel Ġby Ġview Models < An ime Search ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġnav Controller Ġby Ġlazy Ġ{ Ġfind Nav Controller () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġsearch Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment An ime Search Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġsearch Job Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġbinding . rv SearchResults . adapter Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetUp RecyclerView () ĊĠĠĠĠĠĠĠ Ġset Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . rv SearchResults . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Search ListAdapter Ġ= ĠAn ime Search ListAdapter Ġ{ Ġan ime Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠBottom Nav Graph Directions . open An ime ById ( anime Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġan ime Search ListAdapter . with Load State Footer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfooter Ġ= ĠAn ime Search Load State Adapter () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Search ListAdapter . add Load State Listener Ġ{ Ġload States Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( load States . source . refresh Ġis ĠLoad State . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast (( load States . source . refresh Ġas ĠLoad State . Error ). error . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress . is Showing Ġ= Ġload States . refresh Ġis ĠLoad State . Loading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Empty View . root . isVisible Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload States . refresh Ġis ĠLoad State . Not Loading Ġ&& Ġan ime Search ListAdapter . item Count Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Empty View . tv Hint . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . anime _ search _ no _ result _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdebounce Ġ= Ġdebounce < CharSequence >( scope Ġ= Ġlifecycle Scope ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch An ime ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . sv Search . do On TextChanged Ġ{ Ġquery , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdebounce ( query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch An ime ( query : ĠCharSequence ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġsearch Job Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery ?. toString ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . length Ġ< Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Empty View . root . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search Empty View . tv Hint . text Ġ= ĠgetString ( R . string . anime _ search _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Search ListAdapter . submit Data ( Paging Data . empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Search ViewModel . get An ime ( it . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect Latest Ġ{ Ġpaging Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġan ime Search ListAdapter . submit Data ( paging Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . rv SearchResults . scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm : ĠInput Method Manager ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. getSystem Service ( Activity . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ? ĊĠĠĠĠĠĠĠ Ġimm ?. hide Soft Input From Window ( binding . sv Search . window Token , Ġ 0 ) ĊĠĠĠ Ġ} Ċ } Ċ