package Ġcom . hu anch eng fly . ti eba . post . fragments Ċ Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . RecyclerView . On Child Attach State ChangeListener Ċ import Ġandroidx . swiper ef resh layout . widget . Swipe Refresh Layout Ċ import Ġbutter knife . BindView Ċ import Ġcn . jz vd . Jz vd Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . hu anch eng fly . ti eba . api . Ti eba Api Ċ import Ġcom . hu anch eng fly . ti eba . api . models . Personal ized Bean Ċ import Ġcom . hu anch eng fly . ti eba . api . ret rofit . exception . Ti eba Exception Ċ import Ġcom . hu anch eng fly . ti eba . post . R Ċ import Ġcom . hu anch eng fly . ti eba . post . adapters . Personal ized Feed Adapter Ċ import Ġcom . hu anch eng fly . ti eba . post . components . My Linear LayoutManager Ċ import Ġcom . hu anch eng fly . ti eba . post . components . div iders . Feed Divider Ċ import Ġcom . hu anch eng fly . ti eba . post . interfaces . Refresh able Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . Anim Util Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . Block Util Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . Theme Util Ċ import Ġcom . hu anch eng fly . ti eba . post . utils . Util Ċ import Ġcom . hu anch eng fly . ti eba . widgets . Shadow Layout Ċ import Ġcom . hu anch eng fly . ti eba . widgets . Video Player Standard Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġjava . util .* Ċ Ċ class ĠPersonal ized Feed Fragment Ġ: ĠBase Fragment (), ĠPersonal ized Feed Adapter . On Refresh Listener , ĠRefresh able Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠPersonal ized Feed Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpersonal ized Bean : ĠPersonal ized Bean ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġpage Ġ= Ġ 1 ĊĠĠĠ Ġ@ BindView ( R . id . refresh ) ĊĠĠĠ Ġlateinit Ġvar Ġswipe Refresh Layout : ĠSw ipe Refresh Layout ĊĠĠĠ Ġ@ BindView ( R . id . recycler _ view ) ĊĠĠĠ Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġ@ BindView ( R . id . refresh _ tip ) ĊĠĠĠ Ġlateinit Ġvar Ġrefresh Tip : ĠShadow Layout ĊĠĠĠ Ġ@ BindView ( R . id . refresh _ tip _ text ) ĊĠĠĠ Ġlateinit Ġvar Ġrefresh Tip Text : ĠTextView ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . fragment _ personal ized _ feed ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( content View : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( content View , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTheme Util . set Theme For Swipe Refresh Layout ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Refresh Listener Ġ{ Ġon Refresh () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠPersonal ized Feed Adapter ( attach Context ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnLoad More Listener Ġ{ Ġis Reload : ĠBoolean Ġ-> Ġload More ( is Reload ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Refresh Listener Ġ= Ġthis @ Personal ized Feed Fragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Feed Divider ( attach Context )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! Util . can Load G lide ( attach Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newState Ġ== ĠRecyclerView . SCROLL _ STATE _ IDLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( attach Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. resume Requests () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( attach Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pause Requests () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Child Attach State ChangeListener ( object Ġ: ĠOn Child Attach State ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child View Attached To Window ( view : ĠView ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Child View Detached From Window ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo Player Standard : ĠVideo Player Standard ? Ġ= Ġview . findViewById ( R . id . forum _ item _ content _ video ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video Player Standard Ġ!= Ġnull Ġ&& ĠJ z vd . CURRENT _ JZ VD Ġ!= Ġnull Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Player Standard . jz DataSource . contains The Url ( Jz vd . CURRENT _ JZ VD . jz DataSource . current Url )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Jz vd . CURRENT _ JZ VD Ġ!= Ġnull Ġ&& ĠJ z vd . CURRENT _ JZ VD . screen Ġ!= ĠJ z vd . SCREEN _ FULL SCREEN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJ z vd . release All Videos () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠMy Linear LayoutManager ( attach Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġthis @ Personal ized Feed Fragment . adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġpage Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠTi eba Api . getInstance (). personal ized ( 1 , Ġpage ). enqueue ( object Ġ: ĠCallback < Personal ized Bean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Personal ized Bean >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( t Ġis ĠTi eba Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( attach Context , Ġ"${ t . message }", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtil . show Network Error Snackbar ( re cyclerView ) Ġ{ Ġrefresh () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Personal ized Bean >, Ġresponse : ĠResponse < Personal ized Bean >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpersonal ized Bean Ġ= Ġresponse . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Personal ized Feed Fragment . personal ized Bean Ġ= Ġpersonal ized Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal ized Bean . thread List . forEach Indexed Ġ{ Ġindex , Ġthread Bean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Bean . thread Personal ized Bean Ġ= Ġpersonal ized Bean . thread Personal ized [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Thread Beans : ĠList < Personal ized Bean . Thread Bean > Ġ= Ġpersonal ized Bean . thread List . filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . abstract Beans . size Ġ> Ġ 0 Ġ&& ĠBlock Util . need Block ( it . abstract Beans [ 0 ]. text )) Ġ|| ĠBlock Util . need Block ( it . author . name Show , Ġit . author . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Beans : ĠMutable List < Personal ized Bean . Thread Bean > Ġ= ĠArrayList ( adapter !!. all Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter !!. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( personal ized Bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Position Ġ= Ġnew Thread Beans . size Ġ- Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset New Data ( if Ġ( thread Beans . addAll ( 0 , Ġnew Thread Beans )) Ġthread Beans Ġelse Ġnew Thread Beans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Tip Text . text Ġ= Ġattach Context . getString ( R . string . toast _ feed _ refresh , Ġnew Thread Beans . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnim Util . alpha In ( refresh Tip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Tip . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnim Util . alpha Out ( refresh Tip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Listener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation 1 : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Tip . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload More ( is Reload : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Reload ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpage Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠTi eba Api . getInstance (). personal ized ( 2 , Ġpage ). enqueue ( object Ġ: ĠCallback < Personal ized Bean > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Personal ized Bean >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter !!. load Failed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall < Personal ized Bean >, Ġresponse : ĠResponse < Personal ized Bean >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpersonal ized Bean Ġ= Ġresponse . body () !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Personal ized Feed Fragment . personal ized Bean Ġ= Ġpersonal ized Bean ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal ized Bean . thread List . forEach Indexed Ġ{ Ġindex , Ġthread Bean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthread Bean . thread Personal ized Bean Ġ= Ġpersonal ized Bean . thread Personal ized [ index ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Thread Beans : ĠList < Personal ized Bean . Thread Bean > Ġ= Ġpersonal ized Bean . thread List . filter Not Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . abstract Beans . size Ġ> Ġ 0 Ġ&& ĠBlock Util . need Block ( it . abstract Beans [ 0 ]. text )) Ġ|| ĠBlock Util . need Block ( it . author . name Show , Ġit . author . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter !!. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetData ( personal ized Bean ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Load More Data ( new Thread Beans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh Layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment Visible Change ( isVisible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isVisible Ġ&& Ġpersonal ized Bean Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Fragment First Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( personal ized Bean Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Refresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Fragment Visible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . smooth Scroll To Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersonal ized Bean Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠJ z vd . back Press () ĊĠĠĠ Ġ} Ċ }