/* Ċ Ġ* ĠCreated Ġby ĠKar ic ĠKen an Ġon Ġ 6 . 3 . 2 0 2 1 Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 Ġ. ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġio . ae thi bo . fire share . ui . discovery . view Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . Menu Inflater Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġby . kir ich 1 4 0 9 . view binding delegate . view Binding Ċ import Ġcom . pand ora . bottom navigator . Bottom Navigator Ċ import Ġio . ae thi bo . fire share . R Ċ import Ġio . ae thi bo . fire share . databinding . Fragment Discovery Binding Ċ import Ġio . ae thi bo . fire share . domain . User Ċ import Ġio . ae thi bo . fire share . framework . utils . Resource Ċ import Ġio . ae thi bo . fire share . ui . discovery . adapter . User Adapter Ċ import Ġio . ae thi bo . fire share . ui . discovery . view model . Discovery ViewModel Ċ import Ġio . ae thi bo . fire share . ui . other spro file . view . Others Profile Fragment Ċ import Ġio . ae thi bo . fire share . ui . utils . hide Keyboard Ċ import Ġio . ae thi bo . fire share . ui . utils . sn ackBar Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠDiscovery Fragment Ġ: ĠFragment ( R . layout . fragment _ discovery ), ĠSearch View . On Query Text Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding : ĠFragment Discovery Binding Ġby Ġview Binding () ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠDiscovery ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġprivate Ġval Ġuser Adapter : ĠUser Adapter Ġby Ġlazy Ġ{ ĠUser Adapter () Ġ} ĊĠĠĠ Ġprivate Ġvar Ġsearch Job : ĠJob ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnavigator : ĠBottom Navigator ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠDiscovery Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĊĠĠĠĠĠĠĠ Ġnavigator Ġ= ĠBottom Navigator . provide ( require Activity ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠMenu ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠHide Ġsoft Ġkeyboard ĊĠĠĠĠĠĠĠ Ġhide Keyboard ( require Activity ()) ĊĊĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠĠĠĠĠ Ġsetup Adapter Click Listeners () ĊĠĠĠĠĠĠĠ Ġsubscribe To Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter Click Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġuser Adapter . setOn User ClickListener Ġ{ Ġnavigator . add Fragment ( Others Profile Fragment . newInstance ( it . uid )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe To Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Results . collect Latest Ġ{ Ġvalue : ĠResource < List < User >> Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Init Ġ-> ĠTim ber . d (" Init Ġof Ġuser Ġsearch ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search ProgressBar . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Search Placeholder . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search ProgressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Search Placeholder . isVisible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġvalue . data Ġas ĠList < User > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Adapter . submit List ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Failure Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search ProgressBar . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . tv Search Placeholder . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar ( value . message Ġ?: ĠgetString ( R . string . unknown _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter () Ġ= Ġbinding . rv Search List . apply Ġ{ ĊĠĠĠĠĠĠĠ Ġitem Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġuser Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch For Users ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠMake Ġsure Ġwe Ġcancel Ġthe Ġprevious Ġjob Ġbefore Ġcreating Ġnew Ġone ĊĠĠĠĠĠĠĠ Ġsearch Job ?. cancel () ĊĊĠĠĠĠĠĠĠ Ġsearch Job Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search User ( query ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . search _ menu , Ġmenu ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsearch Ġ= Ġmenu . find Item ( R . id . menu _ search ) ĊĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= Ġsearch . action View Ġas ? ĠSearch View ĊĠĠĠĠĠĠĠ Ġsearch View ?. is Submit Button Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġsearch View ?. setOn Query Text Listener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch For Users ( query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( query : ĠString ?): ĠBoolean Ġ= Ġtrue Ċ }