package Ġcom . wil ly . met u . user Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . wil ly . met u . Navigation Directions Ċ import Ġcom . wil ly . met u . R Ċ import Ġcom . wil ly . met u . data . User Ċ import Ġcom . wil ly . met u . databinding . Fragment User Detail Binding Ċ import Ġcom . wil ly . met u . ext . get Vm Factory Ċ import Ġcom . wil ly . met u . login . User Manager Ċ import Ġcom . wil ly . met u . network . Load Api Status Ċ Ċ class ĠUser Detail Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < User Detail ViewModel > Ġ{ ĊĠĠĠĠĠĠĠ Ġget Vm Factory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser Detail Fragment Args . from Bundle ( require Arguments ()). user Email ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment User Detail Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment User Detail Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġvar Ġfirst Time Entry Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġback Ġbutton ĊĠĠĠĠĠĠĠ Ġbinding . button Back . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate Up () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . userInfo . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( first Time Entry ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Layout ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Time Entry Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġuser Ġarticle Ġto Ġset Ġcount Ġon Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . my Articles . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . text Posts . text Ġ= Ġlist . size . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġif Ġthe Ġuser Ġis Ġin Ġmy Ġfollow Ġlist Ġalready , Ġand Ġsetup Ġfollow Ġbutton Ġbase Ġon Ġthe Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . my Info . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġmy Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( my . following Email . contains ( it . email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Follow Button ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Follow Button ( true , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Follow Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Follow Button ( false , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ ĠviewModel . status . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Api Status . LOADING Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLoad Api Status . DONE , ĠLoad Api Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġsetup Layout ( user : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchip Group Ġ= Ġbinding . chip Group ĊĠĠĠĠĠĠĠ Ġval Ġgen res Ġ= Ġuser . tag ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( genre Ġin Ġgen res ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= ĠCh ip ( context , Ġnull , ĠR . attr . Custom Chip Choice ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip . text Ġ= Ġgenre ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchip Group . addView ( chip ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Message . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . create Chat Room ( viewModel . get Chat Room ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ Ġfind Nav Controller (). navigate ( Navigation Directions . navigate To Chat Room ( user . email , Ġuser . name )) Ġ}, Ġ 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Follow Button ( show : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Follow . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Un follow . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Un follow . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Follow . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Follow Button ( contains : ĠBoolean , Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( contains ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Un follow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Follow Button ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . remove User From Follow ( User Manager . user . email , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get My UserInfo ( User Manager . user . email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getUser ( viewModel . selected User Email ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Follow . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Follow Button ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . post User To Follow ( User Manager . user . email , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get My UserInfo ( User Manager . user . email ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getUser ( viewModel . selected User Email ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }