package Ġcom . lo bo . rep og it . presentation . home . adapter Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . annotation . Nullable Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . DataSource Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . bump tech . glide . load . engine . G lide Exception Ċ import Ġcom . bump tech . glide . request . RequestListener Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . bump tech . glide . request . target . Target Ċ import Ġcom . lo bo . rep og it . R Ċ import Ġcom . lo bo . rep og it . core . Repo Git Constants Ċ import Ġcom . lo bo . rep og it . core . extension . g one Ċ import Ġcom . lo bo . rep og it . core . extension . load From Url Ċ import Ġcom . lo bo . rep og it . core . extension . visible Ċ import Ġcom . lo bo . rep og it . databinding . Item Progress Binding Ċ import Ġcom . lo bo . rep og it . databinding . Repo Item Layout Binding Ċ import Ġcom . lo bo . rep og it . presentation . model . Item Presentation Ċ import Ġkotlinx . android . synt hetic . main . repo _ item _ layout . view .* Ċ Ċ class ĠGitHub Repos Adapter ( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ: ĠRecyclerView . Adapter < RecyclerView . ViewHolder >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrepo List Ġ= Ġarray ListOf < Item Presentation >() ĊĠĠĠ Ġprivate Ġval Ġview Type Item Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġview Type Loading Ġ= Ġ 1 ĊĊĠĠĠ Ġvar ĠisLoading Ġ= Ġfalse ĊĠĠĠ Ġvar Ġis Fully Loaded Ġ= Ġfalse ĊĊĠĠĠ Ġfun Ġupdate List ( list : ĠList < Item Presentation >) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo List . addAll ( list ) ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ): ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( view Type Ġ== Ġview Type Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPopulate ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . repo _ item _ layout , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoading ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . item _ progress , Ġparent , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( holder Ġis ĠPopulate ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( repo List [ position ]) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( holder Ġis ĠLoading ViewHolder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . bind ( is Fully Loaded ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġif Ġ( repo List . isNotEmpty ()) Ġrepo List . size Ġ+ Ġ 1 ĊĠĠĠ Ġelse ĠRepo Git Constants . NO _ VALUE _ INT ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ== Ġrepo List . size ) Ġview Type Loading Ġelse Ġview Type Item ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( getItem ViewType ( position ) Ġ== Ġview Type Item ) Ġposition . to Long () ĊĠĠĠĠĠĠĠ Ġelse Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠPopulate ViewHolder Ġinternal Ġconstructor ( item View : ĠView ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġbinding : ĠRepo Item Layout Binding ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( item : ĠItem Presentation ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . bind ( item View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. repo Ġ= Ġitem ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem ?. owner ?. avatar _ url ?. let Ġ{ Ġbinding ?. profile Image Post er ?. load From Url ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLoading ViewHolder Ġinternal Ġconstructor ( item View : ĠView ) Ġ: ĊĠĠĠĠĠĠĠ ĠRecyclerView . ViewHolder ( item View ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġbinding : ĠItem Progress Binding ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġfun Ġbind ( is Fully Loaded : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . bind ( item View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Fully Loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. load More Progress ?. g one () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding ?. tv Fully Loaded ?. visible () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }