package Ġcom . send bird . calls . quickstart . group call . room Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . send bird . calls .* Ċ import Ġcom . send bird . calls . handler . Completion Handler Ċ import Ġcom . send bird . calls . quickstart . group call . util . Resource Ċ Ċ class ĠGroup Call ViewModel ( ĊĠĠĠ Ġroom Id : ĠString Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ participants : ĠMutable LiveData < List < Participant >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġparticipants : ĠLive Data < List < Participant >> Ġ= Ġ_ participants ĊĊĠĠĠ Ġprivate Ġval Ġ_ local Participant : ĠMutable LiveData < Local Participant > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġlocal Participant : ĠLive Data < Local Participant > Ġ= Ġ_ local Participant ĊĊĠĠĠ Ġprivate Ġval Ġ_ is Exit ed : ĠMutable LiveData < Resource < Boolean >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġis Exit ed : ĠLive Data < Resource < Boolean >> Ġ= Ġ_ is Exit ed ĊĊĠĠĠ Ġprivate Ġval Ġ_ current Audio Device : ĠMutable LiveData < Audio Device > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġcurrent Audio Device : ĠLive Data < Audio Device > Ġ= Ġ_ current Audio Device ĊĊĠĠĠ Ġprivate Ġval Ġroom : ĠRoom ? Ġ= ĠSend B ird Call . get Cached Room ById ( roomId ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠĠĠĠĠ Ġroom ?. addListener ( TAG , ĠRoom Listener Impl ()) ĊĠĠĠĠĠĠĠ Ġ_ current Audio Device . value Ġ= Ġroom ?. current Audio Device ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexit () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Exit ed . post Value ( Resource . loading ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . exit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Exit ed . post Value ( Resource . success ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSend B ird Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ is Exit ed . post Value ( Resource . error ( e . message , Ġe . code , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmute Micro phone () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. local Participant ?. mute Micro phone () ĊĠĠĠĠĠĠĠ Ġ_ local Participant . post Value ( room ?. local Participant ) ĊĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġun mute Micro phone () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. local Participant ?. un mute Micro phone () ĊĠĠĠĠĠĠĠ Ġ_ local Participant . post Value ( room ?. local Participant ) ĊĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Local Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. local Participant ?. stop Video () ĊĠĠĠĠĠĠĠ Ġ_ local Participant . post Value ( room ?. local Participant ) ĊĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart Local Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. local Participant ?. start Video () ĊĠĠĠĠĠĠĠ Ġ_ local Participant . post Value ( room ?. local Participant ) ĊĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġswitch Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. local Participant ?. switch Camera ( object Ġ: ĠCompletion Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( e : ĠSend B ird Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" switch Camera () Ġresult : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Audio Device ( audio Device : ĠAudio Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom ?. select Audio Device ( audio Device , Ġobject Ġ: ĠCompletion Handler Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Result ( e : ĠSend B ird Exception ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" select Audio Device () Ġresult : Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Available Audio Devices (): ĠSet < Audio Device > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom ?. available Audio Devices Ġ?: Ġset Of () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġsorted Participants : ĠList < Participant > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( room Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġroom . participants . sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠLocal Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . enter ed At ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠRoom Listener Impl Ġ: ĠRoom Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Audio Device Changed ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Audio Device : ĠAudio Device ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Audio Devices : ĠSet < Audio Device > ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" on Audio Device Changed () Ġcalled Ġwith : Ġcurrent Audio Device Ġ= Ġ$ current Audio Device , Ġavailable Audio Devices Ġ= Ġ$ available Audio Devices " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Audio Device . post Value ( current Audio Device ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Custom Items Deleted ( deleted Keys : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Custom Items Updated ( updated Keys : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠSend B ird Exception , Ġparticipant : ĠPart icipant ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" onError () Ġcalled Ġwith : Ġe Ġ= Ġ$ e , Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e . code Ġ== ĠSend B ird Error . ERR _ LOCAL _ P ARTIC IP ANT _ LO ST _ CONNECTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġre connection Ġfailed . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remote Audio Settings Changed ( participant : ĠRemote Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Remote Audio Settings Changed () Ġcalled Ġwith : Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ participants . post Value (_ participants . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remote Participant Entered ( participant : ĠRemote Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Remote Participant Entered () Ġcalled Ġwith : Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remote Participant Exit ed ( participant : ĠRemote Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Remote Participant Exit ed () Ġcalled Ġwith : Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remote Participant Stream Started ( participant : ĠRemote Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Remote Participant Stream Started () Ġcalled Ġwith : Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ participants . post Value ( sorted Participants ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Remote Video Settings Changed ( participant : ĠRemote Participant ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" on Remote Video Settings Changed () Ġcalled Ġwith : Ġparticipant Ġ= Ġ$ participant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ participants . post Value (_ participants . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG : ĠString Ġ= ĠGroup Call ViewModel :: class . java . simple Name ĊĠĠĠ Ġ} Ċ }