package Ġapp . me lon . feed . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġapp . me lon . base . databinding . Fragment E po xy List Binding Ċ import Ġapp . me lon . base . event . Tab Re select Event Ċ import Ġapp . me lon . base . framework . Base Paging List Fragment Ċ import Ġapp . me lon . feed . Feed Page Config Ċ import Ġapp . me lon . feed . R Ċ import Ġapp . me lon . feed . ui . controller . Feed Controller Delegate Ċ import Ġapp . me lon . feed . ui . controller . Feed Page Controller Ċ import Ġapp . me lon . util . extensions . get Drawable Compat Ċ import Ġapp . me lon . util . extensions . show Toast Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . flow . collect Latest Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠCommon Feed Fragment Ġ: ĠBase Paging List Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpage Config Ġget () Ġ= Ġrequire Arguments (). get Serializable ( KEY _ PAGE _ CONFIG ) Ġas ĠFeed Page Config ĊĊĠĠĠ Ġprivate Ġval Ġpage Type Ġget () Ġ= Ġarguments ?. getInt ( KEY _ FEED _ PAGE _ TYPE , Ġ- 1 ) Ġ?: Ġ- 1 ĊĠĠĠ Ġprivate Ġval Ġm Page Name Ġget () Ġ= Ġarguments ?. getString ( KEY _ PAGE _ NAME ) ĊĠĠĠ Ġprivate Ġval ĠitemId Prefix Ġget () Ġ= Ġarguments ?. getString ( KEY _ ID _ PREFIX ) Ġ?: Ġ"" ĊĠĠĠ Ġprivate Ġval Ġis Anonymous Feed Ġget () Ġ= Ġarguments ?. getBoolean ( KEY _ IS _ AN ONY MO US , Ġfalse ) Ġ?: Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġextra Param Ġget () Ġ= Ġarguments ?. get Bundle ( KEY _ EXTRA _ PARAM ) ĊĊĠĠĠ Ġprivate Ġvar Ġtab Re select Event : ĠTab Re select Event ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar Ġdelegate Provider : ĠFeed Controller Delegate . Factory ĊĠĠĠ Ġoverride Ġval Ġcontroller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFeed Page Controller ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġpage Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory Ġ= Ġdelegate Provider , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġif Ġ( is Anonymous Feed ) ĠFeed Page Controller . Type . AN ONY MO US Ġelse ĠFeed Page Controller . Type . NORMAL ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Inject Ġinternal Ġlateinit Ġvar ĠviewModel : ĠFeed List ViewModel ĊĊĠĠĠ Ġprivate Ġvar Ġfetch Job : ĠJob ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Job ?. cancel () ĊĠĠĠĠĠĠĠ Ġfetch Job Ġ= Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . refresh ( page Type , Ġextra Param ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon First Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on First Visible () ĊĠĠĠĠĠĠĠ Ġif Ġ( is Arguments Valid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. show Toast (" Invalid ĠArguments Ġwith Ġpage Index Ġ= Ġ[$ m Page Name ], Ġpage Type Ġ= Ġ[$ page Type ], Ġprefix Ġ= Ġ[$ itemId Prefix ]") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠĠĠĠĠ Ġtab Re select Event Ġ= ĠTab Re select Event ( context ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Name Ġ= Ġit . getString Extra ( Tab Re select Event . PAGE _ NAME ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Name Ġ== Ġm Page Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . smooth Scroll To Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( binding : ĠFragment E po xy List Binding , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( binding , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . re cyclerView . also Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Decorator Ġ= ĠDiv ider Item Decoration ( v . context , ĠDiv ider Item Decoration . VERTICAL ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdrawable Ġ= Ġv . context . get Drawable Compat ( R . drawable . divider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Decorator . set Drawable ( drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . addItem Decoration ( item Decorator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . paging Data . collect Latest Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontroller . submit Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . select Ob serve ( Feed ListView State :: error ). observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġthrowable ?. message Ġ?: Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . context . show Toast ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Re select Event ?. dispose () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Arguments Valid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpage Type Ġ!= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠitemId Prefix . isNotEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PAGE _ CONFIG Ġ= Ġ" KEY _ PAGE _ CONFIG " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ PAGE _ NAME Ġ= Ġ" KEY _ PAGE _ NAME " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ FEED _ PAGE _ TYPE Ġ= Ġ" KEY _ FEED _ PAGE _ TYPE " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ ID _ PREFIX Ġ= Ġ" KEY _ ID _ PREFIX " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ IS _ AN ONY MO US Ġ= Ġ" KEY _ FEED _ IS _ AN ONY MO US " Ġ// ĠTODO Ġmove Ġthis Ġfield Ġto Ġ[ Feed ] ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ EXTRA _ PARAM Ġ= Ġ" KEY _ EXTRA _ PARAM " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Name : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig : ĠFeed Page Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġextra Params : ĠBundle ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ= ĠCommon Feed Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Serializable ( KEY _ PAGE _ CONFIG , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ PAGE _ NAME , Ġpage Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( KEY _ FEED _ PAGE _ TYPE , Ġconfig . page Type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( KEY _ ID _ PREFIX , Ġconfig . id Prefix ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( KEY _ IS _ AN ONY MO US , Ġconfig . is Anonymous Feed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Bundle ( KEY _ EXTRA _ PARAM , Ġextra Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }