package Ġdiv yan sh . tech . kot new reader . ui . fragments Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Abs ListView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . core . widget . add TextChanged Listener Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . Nav Args Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġdiv yan sh . tech . kot new reader . R Ċ import Ġdiv yan sh . tech . kot new reader . adapters . News Adapter Ċ import Ġdiv yan sh . tech . kot new reader . ui . view Models . news ViewModel Ċ import Ġdiv yan sh . tech . kot new reader . utils . Constants Ċ import Ġdiv yan sh . tech . kot new reader . utils . Constants . Companion . SEARCH _ TIME _ DELAY Ċ import Ġdiv yan sh . tech . kot new reader . utils . Resource Ċ import Ġkotlinx . android . synt hetic . main . common _ toolbar . view .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ breaking _ news .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search . pagination ProgressBar Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠSearch Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġnews Adapter : ĠNews Adapter ĊĊĠĠĠ Ġval Ġargs : ĠSearch Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġoverride Ġfun Ġprovide 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 ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠĠĠĠĠ Ġsetup EditText () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġa Ġtime Ġdelay Ġf ot Ġthe Ġuser Ġto Ġtype Ġin Ġthe Ġcomplete Ġquery ĊĠĠĠĠĠĠĠ Ġif Ġ( args . query Ġ!= ĠgetString ( R . string . android )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Search . setText ( args . query ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Search News ( args . query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġjob : ĠJob ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġet Search . add TextChanged Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob ?. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= ĠMain Scope (). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( SEARCH _ TIME _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Search News ( it . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġnews Adapter . setOn ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( getString ( R . string . article Argument ), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ search Fragment _ to _ article Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv Search News . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġnews Adapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ Ġsetup Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . search News . observe ( view Lifecycle Owner , ĠObserver Ġ{ it Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnews Adapter . differ . submit List ( it . articles . toList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . message ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( activity , Ġ"${ getString ( R . string . failed )} Ġ${ it }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalert . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }