package Ġcom . and or . watch it . screens . tv list . view Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . paging . Paged List Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġcom . and or . watch it . core . extensions . g one Ċ import Ġcom . and or . watch it . core . extensions . visible Ċ import Ġcom . and or . watch it . databinding . Tv List Fragment Binding Ċ import Ġcom . and or . watch it . screens . common . View Mvc Factory Ċ import Ġcom . and or . watch it . screens . common . helper . Screen Utils Ċ import Ġcom . and or . watch it . screens . common . mvc . Base Observable View Mvc Ċ import Ġcom . and or . watch it . screens . common . mvc . Observable View Mvc Ċ import Ġcom . and or . watch it . screens . tv list . controller . Tv ListAdapter Ċ import Ġcom . and or . watch it . screens . tv list . model . Tv List Event Ċ import Ġcom . and or . watch it . use case . common . model . Tv Ui Model Ċ Ċ interface ĠT v ListView Mvc Ġ: ĠObservable View Mvc < Tv List Event > Ġ{ ĊĠĠĠ Ġfun Ġupdate List ( listOf Tv Ui Model : ĠP aged List < Tv Ui Model >) ĊĠĠĠ Ġfun Ġshow Loader () ĊĠĠĠ Ġfun Ġhide Loader () ĊĠĠĠ Ġfun Ġshow List Loading Error () ĊĠĠĠ Ġfun Ġshow List Loading Completed () ĊĠĠĠ Ġfun Ġshow List Loading () Ċ } Ċ Ċ class ĠT v ListView Mvc Impl ( ĊĠĠĠ Ġparent : ĠViewGroup ?, ĊĠĠĠ Ġlayout Inflater : ĠLayoutInflater , ĊĠĠĠ Ġview Mvc Factory : ĠView Mvc Factory Ċ ) Ġ: ĠT v ListView Mvc , ĠBase Observable View Mvc < Tv List Event >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġ= ĠT v List Fragment Binding . inflate ( layout Inflater , Ġparent , Ġfalse ) ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠT v ListAdapter ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġset Root View ( binding . root ) ĊĠĠĠĠĠĠĠ ĠsetUp RecyclerView ( view Mvc Factory ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp RecyclerView ( view Mvc Factory : ĠView Mvc Factory ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv RecyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Tv ListView Mvc Impl . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠT v ListAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Mvc Factory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Event Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġthis @ Tv ListView Mvc Impl . adapter ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrid Count Ġ= ĠScreen Utils . get Possible Grid Count ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġgrid Count ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loader . shim mer RecyclerView . layout Manager Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( context , Ġgrid Count ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Tv ListView Mvc Impl . adapter Ġ= Ġadapter Ġas ĠT v ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate List ( listOf Tv Ui Model : ĠP aged List < Tv Ui Model >) Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . submit List ( listOf Tv Ui Model ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Loader () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loader . root . visible () ĊĠĠĠĠĠĠĠ Ġbinding . loader . shim mer RecyclerView . show Sh im mer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhide Loader () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loader . root . g one () ĊĠĠĠĠĠĠĠ Ġbinding . loader . shim mer RecyclerView . hide Sh im mer () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow List Loading Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . set List Loading State ( Tv ListAdapter . List Loading . Error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow List Loading Completed () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . set List Loading State ( Tv ListAdapter . List Loading . Completed ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow List Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġadapter . set List Loading State ( Tv ListAdapter . List Loading . Loading ) ĊĠĠĠ Ġ} Ċ } Ċ