package Ġcom . j osh ual ore tt . heter ogeneous recyclerview adapter page ds ample Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . paging . DataSource Ċ import Ġandroidx . paging . Position al DataSource Ċ import Ġcom . j osh ual ore tt . heter ogeneous recyclerview adapter . paging . Paged ViewHolder Binder Ċ Ċ /** Ċ Ġ* Ġ[ Position al DataSource ] Ġfor Ġthe ĠFeed . Ċ Ġ* ĠCreated Ġby ĠJ osh ua Ġon Ġ 6 / 1 1 / 2 0 2 0 . Ċ Ġ*/ Ċ class ĠFeed DataSource ( private Ġval Ġfeed Repository : ĠFeed Repository ): ĠPosition al DataSource < Paged ViewHolder Binder < Any >>() Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġoffset : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġoverride Ġfun Ġload Range ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Range Params , ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Range Callback < Paged ViewHolder Binder < Any >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġparams . load Size ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġfeed Repository . getData () ĊĠĠĠĠĠĠĠ Ġcallback . on Result ( data . sub List ( offset , Ġdata . size ). take ( limit )) ĊĠĠĠĠĠĠĠ Ġoffset Ġ= Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Initial ( ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Initial Params , ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Initial Callback < Paged ViewHolder Binder < Any >> ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġoffset Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġparams . requested Load Size ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġfeed Repository . getData () ĊĠĠĠĠĠĠĠ Ġcallback . on Result ( data . take ( limit ), Ġoffset , Ġdata . size ) ĊĠĠĠĠĠĠĠ Ġoffset Ġ= Ġdata . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠFactory ( private Ġval Ġfeed Repository : ĠFeed Repository ) Ġ: ĠDataSource . Factory < Int , ĠP aged ViewHolder Binder < out ĠAny >> Ġ() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠMutable LiveData < Feed DataSource >() ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate (): ĠDataSource < Int , ĠP aged ViewHolder Binder < out ĠAny >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠFeed DataSource ( feed Repository ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . post Value ( source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsource ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }