package Ġcom . bull S alo on . bull . fragments . your Profile Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . drawable . Inset Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . transition . Transition Inflater Ċ import Ġandroid . util . Log Ċ import Ġandroid . util . Typed Value Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . view . menu . Menu Builder Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . bull S alo on . bull . MainActivity Ċ import Ġcom . bull S alo on . bull . R Ċ import Ġcom . bull S alo on . bull . Singleton Instances Ċ import Ġcom . bull S alo on . bull . adapters . Dialog Follow ers RecyclerView Adapter Ċ import Ġcom . bull S alo on . bull . adapters . Your Profile ViewPager Adapter Ċ import Ġcom . bull S alo on . bull . databinding . Fragment Your Profile Binding Ċ import Ġcom . bull S alo on . bull . generic Classes . G lide App Ċ import Ġcom . bull S alo on . bull . generic Classes . Singleton UserData Ċ import Ġcom . bull S alo on . bull . generic Classes . data Classes . UserData Class Ċ import Ġcom . bull S alo on . bull . viewModel . UserData ViewModel Ċ import Ġcom . bump tech . glide . load . engine . Disk Cache Strategy Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ Ċ class ĠYour Profile Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Your Profile Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdata : ĠUser Data Class ĊĊĠĠĠ Ġprivate Ġval Ġstorage Ref Ġ= ĠSingleton Instances . get Storage Reference () ĊĠĠĠ Ġprivate Ġval Ġdb Ġ= ĠSingleton Instances . get Fire Store Instance () ĊĠĠĠ Ġprivate Ġval Ġauth Ġ= ĠSingleton Instances . get Auth Instance () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġinflater Trans Ġ= ĠTransition Inflater . from ( require Context ()) ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= Ġinflater Trans . inflate Transition ( R . transition . slide _ right _ to _ left ) ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= Ġinflater Trans . inflate Transition ( R . transition . fade ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠFragment Your Profile Binding . inflate ( in flater , container , false ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġdata Ġ= ĠSingleton UserData . userData ĊĊĠĠĠĠĠĠĠ Ġbinding . userName Your Profile TextView . text Ġ= Ġdata . user _ name ĊĠĠĠĠĠĠĠ Ġbinding . mobile Number Your Profile TextView . text Ġ= Ġdata . mobile Number ĊĊĠĠĠĠĠĠĠ Ġbinding . user Image Edit Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Pop Up ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . Your Profile Follow ers Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Dialog Box Follow (" Follow ers ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . Your Profile Following Layout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUp Dialog Box Follow (" Following ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Profile Photo () ĊĊĠĠĠĠĠĠĠ Ġset Follow Count () ĊĊĠĠĠĠĠĠĠ Ġval Ġview Pager Adapter Ġ= ĠYour Profile ViewPager Adapter ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . ViewPager Your Profile . adapter Ġ= Ġview Pager Adapter ĊĊĠĠĠĠĠĠĠ ĠTab Layout Mediator ( binding . tab Input Your Profile , Ġbinding . ViewPager Your Profile ){ tab , Ġposition -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( position ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġ" Photos " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . setIcon ( R . drawable . ic _ baseline _ photo _ library _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġ" Comments " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . setIcon ( R . drawable . ic _ baseline _ comment _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġ" N ices " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . setIcon ( R . drawable . ic _ nice _ blank _ icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . text Ġ= Ġ" Reviews " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtab . setIcon ( R . drawable . ic _ baseline _ rate _ review _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. attach () ĊĊĠĠĠĠĠĠĠ Ġbinding . tab Input Your Profile . add On Tab Selected Listener ( object Ġ: ĠTab Layout . On Tab Selected Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . ViewPager Your Profile . register On Page Change Callback ( object Ġ: ĠView Pager 2 . On Page Change Callback (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġset Profile Photo () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Restricted Api ") ĊĠĠĠ Ġprivate Ġfun Ġshow Pop Up ( v : ĠView ){ ĊĠĠĠĠĠĠĠ Ġval Ġpop Up Ġ= ĠPopup Menu ( require Context (), Ġv ) ĊĠĠĠĠĠĠĠ Ġpop Up . menu Inflater . inflate ( R . menu . popup _ user _ picture _ edit _ menu , Ġpop Up . menu ) ĊĊĠĠĠĠĠĠĠ Ġpop Up . setOn MenuItem ClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it . itemId ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . pop Up MenuItem Take Picture Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Host Fragment Ġ= Ġthis . parent Fragment ?. child FragmentManager ?. find Fragment ById ( R . id . fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġnav Host Fragment ?. find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller ?. navigate ( R . id . action _ your Profile Fragment _ to _ camera Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . pop Up MenuItem Remove Photo Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove Photo () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( pop Up . menu Ġis ĠMenu Builder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmenu Builder Ġ= Ġpop Up . menu Ġas ĠMenu Builder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu Builder . set Optional Icons Visible ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġmenu Builder . visible Items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Margin Px Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . apply Dimension ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ DIP , Ġ 1 0 F Ġ, resources . display Metrics ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( item . icon Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . icon Ġ= ĠIn set Drawable ( item . icon , Ġicon Margin Px , Ġ 0 , Ġicon Margin Px , 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpop Up . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Profile Photo (){ ĊĊĠĠĠĠĠĠĠ Ġval Ġdata V ie Model Ġ= ĠViewModel Provider ( require Activity ()). get ( UserData ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġdata V ie Model . get Profile Pic (). observe ( view Lifecycle Owner ,{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġit ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠBitmap Factory . decode Resource ( this . resources , ĠR . drawable . ic _ baseline _ person _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG Profile ", Ġ" user Ġprofile Ġupdated Ġfragment Ġ: Ġ$ data ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide App . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disk Cache Strategy ( Disk Cache Strategy . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. skip Memory Cache ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. placeholder ( R . drawable . ic _ baseline _ person _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fallback ( R . drawable . ic _ baseline _ person _ 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( binding . user Photo Your Profile TextView ) ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Photo (){ ĊĊĠĠĠĠĠĠĠ Ġval ĠuserData 2 Ġ= Ġmap Of (" user _ name " Ġto Ġdata . user _ name . replace ("\\ s ". to Regex (), Ġ"_ "), Ġ" id " Ġto Ġdata . user _ id ) ĊĠĠĠĠĠĠĠ Ġval ĠimageUrl 2 Ġ= Ġ" User _ Images /${ data . user _ id }/${ userData 2 [" user _ name "] }_ profile Picture . jpg " ĊĊĠĠĠĠĠĠĠ Ġval Ġimage Ref Ġ= Ġstorage Ref . child ( imageUrl 2 ) ĊĊĠĠĠĠĠĠĠ Ġimage Ref . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG "," profile Ġpic Ġis Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context ," Profile ĠPicture Ġis Ġdeleted . ĠRestart ĠApp Ġto ĠUpdate ĠProfile ĠPic ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠMainActivity ). update Profile Pic Outside Main () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Profile Photo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG "," Error Ġ: Ġ${ it . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context ," Error Ġoccurred . ĠPlease Ġtry Ġagain Ġafter Ġsome time Ġor Ġcheck Ġyour Ġinternet Ġconnection ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Follow Count (){ ĊĠĠĠĠĠĠĠ Ġdb . collection (" Users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( auth . currentUser ?. uid !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Snapshot Listener Ġ{ Ġvalue , Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value ?. exists () !! ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollowing Ġ= Ġif Ġ( value . get (" following ") Ġ!= Ġnull ) Ġvalue . get (" following ") Ġas Ġ ĠArrayList < String > Ġelse Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollowing Count Ġ= Ġfollowing . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow ers Ġ= Ġif Ġ( value . get (" followers ") Ġ!= Ġnull ) Ġvalue . get (" followers ") Ġas Ġ ĠArrayList < String > Ġelse Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow er Count Ġ= Ġfollow ers . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . Your Profile Follow ers Text . text Ġ= Ġfollow er Count . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . Your Profile Following Text . text Ġ= Ġfollowing Count . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG ", Ġ" Error Ġin Ġgetting Ġfollow Ġcount : Ġ$ error ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠsetUp Dialog Box Follow (_ dataType : ĠString ){ ĊĊĠĠĠĠĠĠĠ Ġvar Ġuser Lists : ĠMutable List < String > ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠDialog ( this . require Context ()) ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( R . layout . dialog _ box _ followers _ list ) ĊĠĠĠĠĠĠĠ Ġval Ġclose Button Ġ= Ġdialog . findViewById < ImageView >( R . id . dialog Follow Pop Close Button ) ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġdialog . findViewById < RecyclerView >( R . id . dialog Follow Pop Up Recycler ) ĊĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġdialog . findViewById < TextView >( R . id . dialog Follow Pop Up Text ) ĊĊĠĠĠĠĠĠĠ Ġtitle . text Ġ= Ġ_ dataType ĊĊĠĠĠĠĠĠĠ Ġclose Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this . context ) ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĊĠĠĠĠĠĠĠ Ġval ĠdataType Ġ= Ġif Ġ(_ dataType Ġ== Ġ" Follow ers "){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" followers " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" following " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdb . collection (" Users ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( auth . currentUser ?. uid !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . exists ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow List Ġ= Ġif Ġ( it . get ( dataType ) Ġ!= Ġ Ġnull ) Ġit . get ( dataType ) Ġ Ġas ĠArrayList < String > Ġelse Ġarray ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Lists Ġ= Ġfollow List ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= ĠDialog Follow ers RecyclerView Adapter ( user Lists , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ Ġe -> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" TAG ", Ġ" Error Ġin Ġretrieving Ġfollow Ġdata Ġ: Ġ${ e . message }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }