package Ġcom . re vol gen x . an ilib . common . ui . fragment Ċ Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . otal i ast ud ios . elements . Adapter Ċ import Ġcom . otal i ast ud ios . elements . Presenter Ċ import Ġcom . otal i ast ud ios . elements . Source Ċ import Ġcom . otal i ast ud ios . elements . pag ers . PageSize Pager Ċ import Ġcom . re vol gen x . an ilib . R Ċ import Ġcom . re vol gen x . an ilib . databinding . Base Presenter Fragment Layout Binding ĊĊ Ċ /** Ċ Ġ* ĠBase Presenter Ġclass Ġcontains Ġ@ property Ġbase RecyclerView Ġ@ property Ġlayout Manager Ċ Ġ* Ċ Ġ* Ġ*/ Ċ abstract Ġclass ĠBase Presenter Fragment < M Ġ: ĠAny >() Ġ: ĊĠĠĠ ĠBase Layout Fragment < Base Presenter Fragment Layout Binding >() Ġ{ ĊĠĠĠ Ġabstract Ġval Ġbase Presenter : ĠPres enter < M > ĊĠĠĠ Ġabstract Ġval Ġbase Source : ĠSource < M > ĊĊĊĠĠĠ Ġvar Ġadapter : ĠAdapter ? Ġ= Ġnull ĊĊĠĠĠ Ġprotected Ġopen Ġval Ġloading Presenter : ĠPres enter < Unit > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠPres enter . for Loading Indicator ( require Context (), ĠR . layout . loading _ layout ) ĊĊĠĠĠ Ġprivate Ġval Ġerror Presenter : ĠPres enter < Unit > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPres enter . for Error Indicator ( require Context (), ĠR . layout . error _ layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġempty Presenter : ĠPres enter < Unit > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPres enter . for Empty Indicator ( require Context (), ĠR . layout . empty _ layout ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġbase RecyclerView Ġget () Ġ= Ġbinding . base Presenter RecyclerView ĊĠĠĠ Ġval Ġbase Swipe Refresh Layout Ġget () Ġ= Ġbinding . base Swipe To Refresh ĊĊĠĠĠ Ġlateinit Ġvar Ġlayout Manager : ĠRecyclerView . LayoutManager ĊĊĠĠĠ Ġopen Ġprotected Ġvar Ġgrid Min Span Ġ= Ġ 1 ĊĠĠĠ Ġopen Ġprotected Ġvar Ġgrid Max Span Ġ= Ġ 2 ĊĠĠĠ Ġopen Ġprotected Ġvar Ġself Add LayoutManager Ġ= Ġtrue ĊĊĠĠĠ Ġvar Ġspan : ĠInt Ġ= Ġ 1 ĊĊĠĠĠ Ġoverride Ġfun Ġbind View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġparent : ĠViewGroup ? ĊĠĠĠ Ġ): ĠBase Presenter Fragment Layout Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBase Presenter Fragment Layout Binding . inflate ( in flater , Ġparent , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( self Add LayoutManager ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġspan Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( require Context (). resources . configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ) Ġgrid Max Span Ġelse Ġgrid Min Span ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( this . context , Ġspan ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . span Size Lookup Ġ= Ġobject Ġ: ĠGrid LayoutManager . Span Size Lookup () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Span Size ( position : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( adapter ?. getItem ViewType ( position ) Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġreload LayoutManager () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase RecyclerView . layout Manager Ġ= Ġlayout Manager ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġreload LayoutManager () ĊĊĠĠĠĠĠĠĠ Ġbase Swipe Refresh Layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Source () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Swipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinvalidate Adapter () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ(! visible To User ) Ġinvalidate Adapter () ĊĠĠĠĠĠĠĠ Ġvisible To User Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġvisible To User Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġfun Ġcreate Source (): ĠSource < M > ĊĊĠĠĠ Ġ/** Ġcall Ġthis Ġmethod Ġto Ġload Ġinto Ġre cycler view */ ĊĠĠĠ Ġprotected Ġfun Ġinvalidate Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter Ġ= Ġadapter Builder (). into ( base RecyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġopen Ġfun Ġadapter Builder (): ĠAdapter . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠAdapter . builder ( this , Ġ 1 0 ). set Pager ( PageSize Pager ( 1 0 )). add Source ( base Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Presenter ( base Presenter ). add Presenter ( loading Presenter ). add Presenter ( error Presenter ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Presenter ( empty Presenter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġnotify DataSet Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter ?. notify DataSet Changed () ĊĠĠĠ Ġ} Ċ Ċ }