package Ġcom . re ky b . j yro . ui . follow Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . flow With Lifecycle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . re ky b . j yro . R Ċ import Ġcom . re ky b . j yro . common . Constants . FRAGMENT _ FOLLOW _ TYPE Ċ import Ġcom . re ky b . j yro . common . Constants . FRAGMENT _ USERNAME Ċ import Ġcom . re ky b . j yro . common . Resources Ċ import Ġcom . re ky b . j yro . databinding . Fragment Follow Binding Ċ import Ġcom . re ky b . j yro . domain . model . User Items Model Ċ import Ġcom . re ky b . j yro . ui . adapter . Discover ListAdapter Ċ import Ġcom . re ky b . j yro . ui . base . Base Fragment Ċ import Ġcom . re ky b . j yro . ui . profile . Profile Fragment Directions Ċ import Ġcom . re ky b . j yro . utils . hide Ċ import Ġcom . re ky b . j yro . utils . navigate To Ċ import Ġcom . re ky b . j yro . utils . show Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ Ċ @ Android EntryPoint Ċ class ĠFollow Fragment Ġ: ĊĠĠĠ ĠBase Fragment < Fragment Follow Binding >( R . layout . fragment _ follow ), ĊĠĠĠ ĠDis cover ListAdapter . Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġusername : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġfollow Type : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġlist Adapter : ĠDis cover ListAdapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġre cyclerView : ĠRecyclerView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠFollow ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Follow Fragment Instance ( userName : ĠString , Ġtype : ĠString ): ĠFollow Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFollow Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( FRAGMENT _ USERNAME , ĠuserName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( FRAGMENT _ FOLLOW _ TYPE , Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġarguments ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= ĠgetString ( FRAGMENT _ USERNAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Type Ġ= ĠgetString ( FRAGMENT _ FOLLOW _ TYPE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Adapter () ĊĊĠĠĠĠĠĠĠ Ġget Follow Data () ĊĠĠĠĠĠĠĠ Ġset Follow ers Data State () ĊĠĠĠĠĠĠĠ Ġset Following Data State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Click ( view : ĠView , Ġdata : ĠUser Items Model ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview . navigate To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProfile Fragment Directions . action Navigate To Self ( data . userName ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Adapter Ġ= ĠDis cover ListAdapter ( this ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġbinding ?. rv Follow List ĊĠĠĠĠĠĠĠ Ġre cyclerView ?. adapter Ġ= Ġlist Adapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Follow Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( follow Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getString ( R . string . label _ following ) Ġ-> Ġusername ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Following List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getString ( R . string . label _ followers ) Ġ-> Ġusername ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Follow ers List ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Follow ers Data State () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . followers State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow With Lifecycle ( view Lifecycle Owner . lifecycle , ĠLifecycle . State . RE SU MED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġstate . result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Loading Ġ-> ĠonLoad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Success Ġ-> ĠonSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Follower Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Result Ġ= Ġresult . data . isEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Error Ġ-> ĠonError ( result . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( view Lifecycle Owner . lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Following Data State () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . following State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flow With Lifecycle ( view Lifecycle Owner . lifecycle , ĠLifecycle . State . RE SU MED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( val Ġresult Ġ= Ġstate . result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Loading Ġ-> ĠonLoad () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Success Ġ-> ĠonSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Follower Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Result Ġ= Ġresult . data . isEmpty (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġresult . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources . Error Ġ-> ĠonError ( result . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. launch In ( view Lifecycle Owner . lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonLoad () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Follow List . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Placeholder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġrequire Context (). getText ( R . string . label _ getting _ data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonSuccess ( ĊĠĠĠĠĠĠĠ Ġis Follower : ĠBoolean , ĊĠĠĠĠĠĠĠ ĠisEmpty Result : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġitems : ĠList < User Items Model >, ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Result Ġ&& Ġis Follower Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ username Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getString ( R . string . error _ empty _ follow er ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisEmpty Result Ġ&& Ġ! is Follower Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ username Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). getString ( R . string . error _ empty _ following ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Adapter ?. render List ( items ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv Follow List . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Placeholder . hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠonError ( errorMessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv Follow List . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv Placeholder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠerrorMessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ