package Ġcom . example . quiz . ui . questions Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Search View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . ui . Navigation UI Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . example . quiz . R Ċ import Ġcom . example . quiz . data . entities . Search Item Ċ import Ġcom . example . quiz . databinding . Search ItemList Fragment Binding Ċ import Ġcom . example . quiz . ui . Question An sw ere . Item Detail ViewModel Ċ import Ġcom . example . quiz . utils . Resource Ċ import Ġcom . example . quiz . utils . auto Cle ared Ċ import Ġcom . example . quiz . utils . dismiss Keyboard Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġcom . github . d hav al 2 4 0 4 . image picker . Image Picker Ċ Ċ const Ġval ĠPRO FILE _ IMAGE _ REQ _ CODE Ġ= Ġ 1 0 1 Ċ Ċ @ Android EntryPoint Ċ class ĠSearch ItemList Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġbinding : ĠSearch ItemList Fragment Binding Ġby Ġauto Cle ared () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠSearch ItemList ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch View : ĠSearch View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠSearch ItemList Adapter ĊĠĠĠ Ġprivate Ġvar Ġimg Preview Uri : ĠUri ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠSearch ItemList Fragment Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġsetup RecyclerView () ĊĠĠĠĠĠĠĠ Ġsetup Observer s () ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) Ċ // ĠĠĠĠĠĠĠ Ġbinding . submit Btn . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . getItems ()?. let Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate Question Answers ( it ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . search , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġsearch View Ġ= Ġmenu . find Item ( R . id . search ). action View Ġas ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Hint Ġ= Ġ" Search " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Submit Button Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Action View Expanded () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsearch ( search View ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} Ċ // ĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠNavigation UI . on Nav Destination Selected ( item !! , Ċ // ĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġsuper . on Options ItemSelected ( item ) Ċ // ĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġsearch ( search View : ĠSearch View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. dismiss Keyboard ( search View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch View . clear Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . query = query ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . questions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠSearch ItemList Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġadapter . listener Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick ed Submit Question ( it . title ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestions Rv . layout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestions Rv . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquestions Rv . item Animator !!. change Duration Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Observer s () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . questions . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . data . isNull OrEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpopulate RecyclerView ( ArrayList ( it . data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . ERROR Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġit . message , ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . LOADING Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress Bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpopulate RecyclerView ( questions : ĠArrayList < Search Item >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( questions . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . set Items ( questions ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUri Ġobject Ġwill Ġnot Ġbe Ġnull Ġfor ĠRESULT _ OK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri Ġ= Ġdata ?. data !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPRO FILE _ IMAGE _ REQ _ CODE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Preview Uri Ġ= Ġuri Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Preview . visibility = View . VISIBLE Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Preview . set Local Image ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠImage Picker . RESULT _ ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this . context , ĠImage Picker . getError ( data ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this . context , Ġ" Task ĠCancel led ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun ĠonClick ed Submit Question ( title : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ search ItemList Fragment _ to _ item Detail Fragment , Ġbundle Of (" title " Ġto Ġtitle ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ