package Ġdev . ha en ara . github search . ui . search Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġdev . ha en ara . github search . R Ċ import Ġdev . ha en ara . github search . model . User Ċ import Ġdev . ha en ara . github search . repo . github . Github User Repo Ċ import Ġdev . ha en ara . github search . repo . github . Github User Repo Impl Ċ import Ġdev . ha en ara . github search . ui . User ListAdapter Ċ import Ġdev . ha en ara . github search . ui . add Scroll Finished Listener Ċ import Ġdev . ha en ara . github search . ui . show If Ċ import Ġkotlinx . android . synt hetic . main . fragment _ search .* Ċ import Ġandroid . net . Uri ĊĊ Ċ class ĠSearch Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsearch ViewModel : ĠSearch ViewModel ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsearch ViewModel Ġ= ĠSearch ViewModel Factory ( Github User Repo Impl ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( Search ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġsearch ViewModel . users . observe ( this , ĠObserver Ġ{ data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ user _ list . adapter ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it Ġas ĠUser ListAdapter ). users Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcl _ empty . show If ( data . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ search , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval ĠonClick Listener Ġ: Ġ( User )-> Unit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse ( it . html _ url )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( browser Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv _ user _ list . adapter Ġ= ĠUser ListAdapter ( search ViewModel . users . value !! , ĠonClick Listener ) ĊĠĠĠĠĠĠĠ Ġrv _ user _ list . layout Manager Ġ= ĠLinearLayoutManager ( context ) Ġas ĠRecyclerView . LayoutManager ? ĊĠĠĠĠĠĠĠ Ġrv _ user _ list . add Scroll Finished Listener { Ġsearch ViewModel . on Scroll Finished () Ġ} ĊĠĠĠĠĠĠĠ Ġed t _ search . initialize () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠEditText . initialize () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 0 ?. trim ()?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeyword Ġ= Ġp 0 . trim (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ViewModel . getUser List ( keyword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ViewModel . clear List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠSearch ViewModel Factory ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġgithub Repo Ġ: ĠGithub User Repo ) Ġ: ĠViewModel Provider . New Instance Factory () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSearch ViewModel ( github Repo ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }