package Ġio . github . sass y . github re pol ist . ui . repo Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . EditText Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġdagger . android . support . Android Support Injection Ċ import Ġio . github . sass y . github re pol ist . R Ċ import Ġio . github . sass y . github re pol ist . ViewModel Factory Ċ import Ġio . github . sass y . github re pol ist . databinding . Fragment Repo List Binding Ċ import Ġio . github . sass y . github re pol ist . ui . login . Login ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ repo _ list . view .* Ċ Ċ import Ġjavax . inject . Inject ĊĊĊ Ċ /** Ċ Ġ* ĠA Ġfragment Ġrepresenting Ġa Ġlist Ġof ĠItems . Ċ Ġ* ĠActiv ities Ġcontaining Ġthis Ġfragment ĠMUST Ġimplement Ġthe Ċ Ġ* Ġ[ Repo Fragment . On List Fragment Interaction Listener ] Ġinterface . Ċ Ġ*/ Ċ class ĠRepo Fragment Ġ: ĠFragment (), ĠText Watcher Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġcolumn Count Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Repo List Binding ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĠĠĠ Ġval ĠviewModel : ĠRepo ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Factory ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġlistener : ĠOn List Fragment Interaction Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Count Ġ= Ġit . getInt ( ARG _ COLUMN _ COUNT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ repo _ list , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĊĠĠĠĠĠĠĠ Ġval Ġview : ĠView Ġ= Ġbinding . root . root View . list ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġadapter ĊĠĠĠĠĠĠĠ Ġif Ġ( view Ġis ĠRecyclerView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Count Ġ<= Ġ 1 Ġ-> ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠGrid LayoutManager ( context , Ġcolumn Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRepo RecyclerView Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġedit Ġ: ĠEditText Ġ= Ġbinding . root . findViewById ( R . id . ser ch Text ) ĊĠĠĠĠĠĠĠ Ġedit . add TextChanged Listener ( this ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . fetch Repos () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Support Injection . inject ( this ); ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġif Ġ( context Ġis ĠOn List Fragment Interaction Listener ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlistener Ġ= Ġcontext ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ( context . toString () Ġ+ Ġ" Ġmust Ġimplement ĠOn List Fragment Interaction Listener ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Detach () ĊĠĠĠĠĠĠĠ Ġlistener Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġinterface Ġmust Ġbe Ġimplemented Ġby Ġactivities Ġthat Ġcontain Ġthis ĊĠĠĠĠ Ġ* Ġfragment Ġto Ġallow Ġan Ġinteraction Ġin Ġthis Ġfragment Ġto Ġbe Ġcommunic ated ĊĠĠĠĠ Ġ* Ġto Ġthe Ġactivity Ġand Ġpotentially Ġother Ġfragments Ġcontained Ġin Ġthat ĊĠĠĠĠ Ġ* Ġactivity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġthe ĠAndroid ĠTraining Ġlesson ĊĠĠĠĠ Ġ* Ġ[ Com munic ating Ġwith ĠOther ĠF rag ments ]( http :// developer . android . com / training / basics / fragments / com munic ating . html ) ĊĠĠĠĠ Ġ* Ġfor Ġmore Ġinformation . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinterface ĠOn List Fragment Interaction Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠUpdate Ġargument Ġtype Ġand Ġname ĊĠĠĠĠĠĠĠ Ġfun Ġon List Fragment Interaction ( item : ĠString ?) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠCustom ize Ġparameter Ġargument Ġnames ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠARG _ COLUMN _ COUNT Ġ= Ġ" column - count " ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠCustom ize Ġparameter Ġinitialization ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( column Count : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRepo Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( ARG _ COLUMN _ COUNT , Ġcolumn Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . search Request ( s . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠ Ġ} Ċ } Ċ