package Ġcom . example . my vide oc all app Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġlive . h ms . video . error . H MS Exception Ċ import Ġlive . h ms . video . media . tracks . HM ST rack Ċ import Ġlive . h ms . video . media . tracks . H MS Video Track Ċ import Ġlive . h ms . video . sdk . HM SS DK Ċ import Ġlive . h ms . video . sdk . H MS Update Listener Ċ import Ġlive . h ms . video . sdk . models .* Ċ import Ġlive . h ms . video . sdk . models . enums . HM SP eer Update Ċ import Ġlive . h ms . video . sdk . models . enums . H MS Room Update Ċ import Ġlive . h ms . video . sdk . models . enums . HM ST rack Update Ċ import Ġlive . h ms . video . sdk . models . track ch ang ere quest . H MS Change Track State Request Ċ Ċ data Ġclass ĠTrack Peer Map ( ĊĠĠĠ Ġval Ġvideo Track : ĠH MS Video Track ?, ĊĠĠĠ Ġval Ġpeer : ĠH MSP eer Ċ ) Ċ Ċ class ĠVideo Call Vm ( name : ĠString ?, Ġauth Token : ĠString ?, Ġapplication : ĠApplication ) Ġ: ĊĠĠĠ ĠAndroid ViewModel ( application ), ĊĠĠĠ ĠH MS Update Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ video Call Participants Ġ= ĠMutable LiveData < List < Track Peer Map >>( emptyList ()) ĊĠĠĠ Ġval Ġvideo Call Participants : ĠLive Data < List < Track Peer Map >> Ġ= Ġ_ video Call Participants ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Video Call Vm " ĊĊĠĠĠ Ġprivate Ġval Ġh ms Sdk Ġ= ĠH MSS DK ĊĠĠĠĠĠĠĠ Ġ. Builder ( application ) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( auth Token Ġ!= Ġnull Ġ&& Ġname Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Join ing Ġwith Ġ$ auth Token ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh ms Sdk . join ( H MS Config ( name , Ġauth Token ), Ġthis ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Ne ither Ġauth Ġtoken Ġnor Ġname Ġcan Ġbe Ġnull .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Join ( room : ĠH MS Room ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ video Call Participants . post Value ( getCurrent Participants ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Track Update ( type : ĠH M ST rack Update , Ġtrack : ĠH M ST rack , Ġpeer : ĠH MSP eer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ video Call Participants . post Value ( getCurrent Participants ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Peer Update ( type : ĠH MSP eer Update , Ġpeer : ĠH MSP eer ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ video Call Participants . post Value ( getCurrent Participants ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Message Received ( message : ĠH MS Message ) Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġon Role Change Request ( request : ĠH MS Role Change Request ) Ġ{ ĠTODO (" Not Ġyet Ġimplemented , Ġlook Ġat Ġthe Ġadvanced Ġsample Ġapp Ġfor Ġdetails ") Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Room Update ( type : ĠH MS Room Update , Ġh ms Room : ĠH MS Room ) Ġ{} ĊĠĠĠ Ġoverride Ġfun ĠonChange Track State Request ( details : ĠH MS Change Track State Request ) Ġ{ ĠTODO (" Not Ġyet Ġimplemented , Ġlook Ġat Ġthe Ġadvanced Ġsample Ġapp Ġfor Ġdetails ") Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError ( error : ĠH MS Exception ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Error Ġ$ error ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetCurrent Participants (): ĠList < Track Peer Map > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠConvert Ġall Ġthe Ġpeers Ġinto Ġa Ġmap Ġof Ġthem Ġand Ġtheir Ġtracks . ĊĠĠĠĠĠĠĠ Ġval Ġtrack And Peer Map Ġ= Ġh ms Sdk . get Peers (). flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Share Ġ= Ġit . aux iliary Tracks . find Ġ{ Ġaux Track Ġ-> Ġaux Track Ġis ĠH MS Video Track Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( screen Share Ġis ĠH MS Video Track ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Track Peer Map ( it . video Track , Ġit ), ĠTrack Peer Map ( screen Share , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Track Peer Map ( it . video Track , Ġit )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrack And Peer Map ĊĠĠĠ Ġ} Ċ }