package Ġexamples . animal . forest . chat . fragments ĊĊ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . recyclerview . widget . Default Item Animator Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġexamples . animal . forest . chat . adapters . User Adapter Ċ import Ġexamples . animal . forest . chat . model . Users Ċ import Ġexamples . animal . forest . chat . pub n ub . User Ċ import Ġexamples . animal . forest . chat . util . PNG lide Module Ċ import Ġexamples . animal . forest . chat . view . Empty View Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . example . chat example . R Ċ import Ġcom . pub n ub . api . Pub N ub Ċ import Ġcom . pub n ub . api . callbacks . Subscribe Callback Ċ import Ġcom . pub n ub . api . models . consumer . PN Status Ċ import Ġcom . pub n ub . api . models . consumer . presence . PN Here Now Channel Data Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . PN Message Result Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . PN Presence Event Result Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . P NS ign al Result Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . message _ actions . PN Message ActionResult Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . objects . PN Membership Result Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . objects . PN Space Result Ċ import Ġcom . pub n ub . api . models . consumer . pubsub . objects . PN User Result Ċ import Ġkotlinx . android . synt hetic . main . fragment _ chat _ info .* Ċ import Ġjava . util .* ĊĊ Ċ class ĠChat Info Fragment Ġ: ĠParent Fragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar ĠimageView : ĠImageView ĊĊĠĠĠ Ġlateinit Ġvar Ġdescription : ĠTextView ĊĊĠĠĠ Ġlateinit Ġvar Ġusers RecyclerView : ĠRecyclerView ĊĊĠĠĠ Ġlateinit Ġvar Ġempty View : ĠEmpty View ĊĠĠĠ Ġlateinit Ġvar Ġuser Adapter : ĠUser Adapter ĊĠĠĠ Ġvar Ġusers : ĠMutable List < User > Ġ= ĠArrayList < User >() ĊĠĠĠ Ġprivate Ġvar Ġchannel : ĠString Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġvar Ġpub N ub Listener : ĠSubscribe Callback Ġ= Ġobject Ġ: ĠSubscribe Callback () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmembership ( pub n ub : ĠPub N ub , Ġpn Membership Result : ĠP N Membership Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmessage ( pub n ub : ĠPub N ub , Ġpn Message Result : ĠP N Message Result ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmessage Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpub n ub : ĠPub N ub , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpn Message ActionResult : ĠP N Message ActionResult ĊĠĠĠĠĠĠĠ Ġ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpresence ( pub n ub : ĠPub N ub , Ġpn Presence Event Result : ĠP N Presence Event Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pn Presence Event Result . uuid Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( pn Presence Event Result . event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" join " Ġ-> Ġusers . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser . Builder . newBuilder (). user ( Users . getUser ById ( pn Presence Event Result . uuid )). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" leave ", Ġ" timeout " Ġ-> Ġusers . remove ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser . Builder . newBuilder (). user ( Users . getUser ById ( pn Presence Event Result . uuid )). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" interval " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uuid Ġin Ġpn Presence Event Result . join ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers . add ( User . Builder . newBuilder (). user ( Users . getUser ById ( uuid )). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uuid Ġin Ġpn Presence Event Result . leave ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers . remove ( User . Builder . newBuilder (). user ( Users . getUser ById ( uuid )). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( uuid Ġin Ġpn Presence Event Result . timeout ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers . remove ( User . Builder . newBuilder (). user ( Users . getUser ById ( uuid )). build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" state - change " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Ui Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ Ġuser Adapter . update ( users ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsignal ( pub n ub : ĠPub N ub , Ġpn Signal Result : ĠP NS ign al Result ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġspace ( pub n ub : ĠPub N ub , Ġpn Space Result : ĠP N Space Result ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġstatus ( pub n ub : ĠPub N ub , Ġstatus : ĠP N Status ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġuser ( pub n ub : ĠPub N ub , Ġpn User Result : ĠP N User Result ) Ġ{} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠimageView Ġ= Ġinfo _ image ĊĠĠĠĠĠĠĠ Ġdescription Ġ= Ġinfo _ description ĊĠĠĠĠĠĠĠ Ġusers RecyclerView Ġ= Ġinfo _ recycler _ view ĊĠĠĠĠĠĠĠ Ġempty View Ġ= Ġinfo _ empty _ view ĊĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Ready () Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġprovide Layout ResourceId (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . fragment _ chat _ info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset View Behaviour ( view From Cache : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġusers RecyclerView . layout Manager Ġ= ĠLinearLayoutManager ( fragment Context ) ĊĠĠĠĠĠĠĠ Ġusers RecyclerView . item Animator Ġ= ĠDefault Item Animator () ĊĠĠĠĠĠĠĠ Ġuser Adapter Ġ= ĠUser Adapter ( channel ) ĊĠĠĠĠĠĠĠ Ġusers RecyclerView . adapter Ġ= Ġuser Adapter ĊĠĠĠĠĠĠĠ ĠG lide . with ( fragment Context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( R . drawable . chat _ logo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . circle Crop Transform ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( imageView ) ĊĠĠĠĠĠĠĠ Ġfetch Available Users () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Screen Title (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġhost Activity . enable Back Button ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġchannel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend :: L IS - 1 [] ĊĠĠĠ Ġ@ Suppress Lint (" Wrong Constant ") ĊĠĠĠ Ġprivate Ġfun Ġhandle Ui Visibility () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġview State Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġif Ġ( users . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( empty View . visibility Ġ!= ĠView . GONE ) Ġview State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( empty View . visibility Ġ!= ĠView . VISIBLE ) Ġview State Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( view State Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfinal ViewState Ġ= Ġview State ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ Ġempty View . visibility Ġ= Ġfinal ViewState Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġextract Arguments () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . extract Arguments () ĊĠĠĠĠĠĠĠ Ġchannel Ġ= Ġarguments ?. getString ( ARGS _ CHANNEL ) Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġtag :: ON L - 1 [] ĊĠĠĠ Ġprivate Ġfun Ġfetch Available Users () Ġ{ ĊĠĠĠĠĠĠĠ Ġhost Activity . pub N ub ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. here Now () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. channels ( listOf ( channel )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. include UUID s ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. include State ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. async Ġ{ Ġresult , Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! status . isError Ġ&& Ġresult Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhere Now Channel Data : ĠP N Here Now Channel Data ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . channels [ channel ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhere Now Channel Data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . occup ants . map Ġ{ Ġoccup ant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusers . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUser . Builder . newBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. user ( Users . getUser ById ( occup ant . uuid )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Adapter . update ( users ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Occup ancy : ĠInt ? Ġ= Ġhere Now Channel Data ?. occup ancy ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend :: ON L - 1 [] ĊĠĠĠ Ġoverride Ġfun Ġprovide Listener (): ĠSubscribe Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpub N ub Listener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠARGS _ CHANNEL Ġ= Ġ" ARGS _ CHANNEL " ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( channel : ĠString ?): ĠChat Info Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . putString ( ARGS _ CHANNEL , Ġchannel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠChat Info Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ