package Ġcom . tel ny x . meet . ui Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . kar umi . dex ter . Dex ter Ċ import Ġcom . kar umi . dex ter . Multiple Permissions Report Ċ import Ġcom . kar umi . dex ter . Permission Token Ċ import Ġcom . kar umi . dex ter . listener . Permission Request Ċ import Ġcom . kar umi . dex ter . listener . multi . Multiple Permissions Listener Ċ import Ġcom . tel ny x . meet . Base ViewModel Ċ import Ġcom . tel ny x . meet . data . Room Service Ċ import Ġcom . tel ny x . meet . data . model . RefreshToken Info Ċ import Ġcom . tel ny x . meet . data . model . Room Details Ċ import Ġcom . tel ny x . meet . data . model . Token Info Ċ import Ġcom . tel ny x . meet . data . model . request . Create Room Request Ċ import Ġcom . tel ny x . meet . data . model . request . Create Token Request Ċ import Ġcom . tel ny x . meet . data . model . request . RefreshToken Request Ċ import Ġcom . tel ny x . meet . data . model . response .* Ċ import Ġcom . tel ny x . meet . ui . models . Message UI Ċ import Ġcom . tel ny x . meet . ui . utilities . getCurrent Time HH mm Ċ import Ġcom . tel ny x . meet . ui . utilities . random Int Ċ import Ġcom . tel ny x . video . sdk . Event Ċ import Ġcom . tel ny x . video . sdk . Room Ċ import Ġcom . tel ny x . video . sdk . web Socket . model . ui .* Ċ import Ġcom . tel ny x . video . sdk . model . Audio Device Ċ import Ġcom . tel ny x . video . sdk . utilities . Publish Config Helper Ċ import Ġcom . tel ny x . video . sdk . utilities . State Ċ import Ġcom . tel ny x . video . sdk . web Socket . model . send . External Data Ċ import Ġcom . tel ny x . video . sdk . web Socket . model . ui .* Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġorg . webrtc . RTC Stats Collector Callback Ċ import Ġorg . webrtc . Surface View Renderer Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ enum Ġclass ĠMedia On Start Ġ{ ĊĠĠĠ ĠENABLE D , ĊĠĠĠ ĠDISABLE D Ċ } Ċ Ċ @ H ilt ViewModel Ċ class ĠRoom s ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġroom Service : ĠRoom Service , ĊĠĠĠ Ġprivate Ġval Ġgson : ĠGson , ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext Ċ ) Ġ: ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġmessage History : ĠMutable List < Message UI >? Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġvar Ġm Total Pages : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Last Retrie ved Page : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġrooms List Retrie ved : ĠMutable LiveData < List < Room Details >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġroom Created : ĠMutable LiveData < Room Details > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġtoken Created : ĠMutable LiveData < Event < Token Info >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġtoken Ref reshed : ĠMutable LiveData < Event < RefreshToken Info >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġloading : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġprivate Ġval Ġtoken Creation Error : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġpermission Request Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġvar Ġmic InitialState : ĠMedia On Start Ġ= ĠMedia On Start . DISABLED ĊĠĠĠ Ġvar Ġcamera InitialState : ĠMedia On Start Ġ= ĠMedia On Start . DISABLED ĊĠĠĠ Ġprivate Ġvar Ġcamera Current State : ĠMedia On Start Ġ= ĠMedia On Start . DISABLED ĊĠĠĠ Ġprivate Ġvar Ġmic Current State : ĠMedia On Start Ġ= ĠMedia On Start . DISABLED ĊĊĠĠĠ Ġprivate Ġval Ġerror Mutable : ĠMutable LiveData < Event < Create Room ErrorResponse >> Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Event < Create Room ErrorResponse >>() ĊĊĠĠĠ Ġprivate Ġval Ġdeleted Mutable : ĠMutable LiveData < Event < Boolean >> Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Event < Boolean >>() ĊĊĠĠĠ Ġfun Ġerror (): ĠLive Data < Event < Create Room ErrorResponse >> Ġ= Ġerror Mutable ĊĠĠĠ Ġfun Ġdeleted (): ĠLive Data < Event < Boolean >> Ġ= Ġdeleted Mutable ĊĊĠĠĠ Ġlateinit Ġvar Ġroom : ĠRoom ĊĊĠĠĠ Ġfun Ġloading (): ĠLive Data < Boolean > Ġ= Ġloading ĊĊĠĠĠ Ġfun Ġroom List Observable (): ĠLive Data < List < Room Details >> Ġ= Ġrooms List Retrie ved ĊĊĠĠĠ Ġfun Ġroom Created Observable (): ĠLive Data < Room Details > Ġ= Ġroom Created ĊĊĠĠĠ Ġfun Ġtoken Created Observable (): ĠLive Data < Event < Token Info >> Ġ= Ġtoken Created ĊĊĠĠĠ Ġfun Ġtoken Ref reshed Observable (): ĠLive Data < Event < RefreshToken Info >> Ġ= Ġtoken Ref reshed ĊĊĠĠĠ Ġfun Ġtoken Creation Error Observable () Ġ= Ġtoken Creation Error ĊĊĠĠĠ Ġfun Ġconnected To Room Observable (): ĠLive Data < Boolean > Ġ= Ġroom . getConnection Status () ĊĊĠĠĠ Ġfun Ġget Participants (): ĠMutable LiveData < Mutable List < Participant >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Participants Observable () ĊĊĠĠĠ Ġfun ĠgetText Room Le aving Participant (): ĠMutable LiveData < Event < Participant >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Participant Left Text Room Observable () ĊĊĠĠĠ Ġfun ĠgetText Room Message Delivery Success (): ĠMutable LiveData < Event < Message >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . getText Room Message Delivery Success () ĊĊĠĠĠ Ġfun ĠgetText Room Message Delivery Failed (): ĠMutable LiveData < Event < Message >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . getText Room Message Delivery Failed () ĊĊĠĠĠ Ġfun ĠgetText Room Message Received (): ĠMutable LiveData < Event < Pair < String , ĠMessage >>> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . getText Room Message Received () ĊĊĠĠĠ Ġfun ĠgetState Change (): ĠMutable LiveData < State > Ġ= Ġroom . getState Observable () ĊĊĠĠĠ Ġfun Ġget Joined Room (): ĠMutable LiveData < Event < Room UI >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Joined Room Observable () ĊĊĠĠĠ Ġfun Ġget Joined Participant (): ĠMutable LiveData < Event < Participant >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Joined Participant () ĊĊĠĠĠ Ġfun Ġget Le aving Participant Id (): ĠMutable LiveData < Pair < Long , ĠString >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Le aving Participant Id () ĊĊĠĠĠ Ġfun Ġget Spe aking Participant (): ĠMutable LiveData < Pair < Participant , ĠString ? >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Participant Talk ing () ĊĊĠĠĠ Ġfun Ġget Participant Stream Changed (): ĠMutable LiveData < Event < Participant >> Ġ= ĊĠĠĠĠĠĠĠ Ġroom . get Participant Stream Changed () ĊĊĠĠĠ Ġfun ĠgetLast Retrie ved Page (): ĠInt Ġ= Ġm Last Retrie ved Page ĊĊĠĠĠ Ġfun Ġcreate Token For Room ( roomId : ĠString , Ġparticipant Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . post Value ( true ) ĊĠĠĠĠĠĠĠ Ġroom Service . create Client Token ( roomId , ĠCreate Token Request ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < Create Token Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Create Token Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Create Token Response > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. token Info ?. let Ġ{ Ġtoken Info Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġroom . set Client Token ( it . token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Created . post Value ( Event ( token Info )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠI Ġhave Ġa Ġtoken , ĠI Ġcan Ġcreate Ġa Ġroom Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Ġ= ĠRoom ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Id Ġ= ĠUUID . fromString ( roomId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Token Ġ= Ġtoken Info . token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Data Ġ= ĠExternal Data ( random Int ( 7 ), Ġparticipant Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Messages Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Creation Error . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e (" Failed Ġto Ġcreate Ġtoken Ġfor Ġspecified ĠRoom ĠID ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Creation Error . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Create Token Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t , Ġ" on Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrefresh Token For Room ( roomId : ĠString , Ġrefresh Token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . post Value ( true ) ĊĠĠĠĠĠĠĠ Ġroom Service . refresh Client Token ( roomId , ĠRefresh Token Request ( refresh Token )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < RefreshToken Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < RefreshToken Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < RefreshToken Response > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. refresh Token Info ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . set Client Token ( it . token ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ref reshed . post Value ( Event ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < RefreshToken Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t , Ġ" on Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate New Room ( room Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . post Value ( true ) ĊĠĠĠĠĠĠĠ Ġroom Service . create Room ( Create Room Request ( unique _ name Ġ= Ġroom Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < Create Room Response > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Create Room Response >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Create Room Response > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. room Details ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom Created . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ĠTODO Ġenhance Ġthis Ġclass Ġafter ĠAPI Ġvideo Ġteam Ġworks Ġon ĠError Ġstructure ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . error Body ()?. string (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson . fromJson ( it , ĠCreate Room ErrorResponse :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Mutable . value Ġ= ĠEvent ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Create Room Response >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t , Ġ" on Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget More Rooms () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Last Retrie ved Page Ġ< Ġm Total Pages ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Room List ( m Last Retrie ved Page Ġ+ Ġ 1 ) Ġ// ĠGet Ġone Ġmore Ġpage ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Room List ( page : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloading . post Value ( true ) ĊĠĠĠĠĠĠĠ Ġroom Service . get Room List ( page ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < Rooms ListResponse > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Rooms ListResponse >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Rooms ListResponse > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. meta ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Total Pages Ġ= Ġit . total _ pages ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Last Retrie ved Page Ġ= Ġit . page _ number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. room Details . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrooms List Retrie ved . post Value ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Rooms ListResponse >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t , Ġ" on Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Permissions ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDex ter . with Context ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . RECORD _ AUDIO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . INTER NET , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Listener ( object Ġ: ĠMultiple Permissions Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permissions Checked ( report : ĠMultiple Permissions Report ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( report !!. are All Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Request . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( report . is Any Permission Per manently Denied ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Camera Ġand ĠAudio Ġpermissions Ġare Ġrequired Ġto Ġcontinue ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Request . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permission R ationale ShouldBe Shown ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission : ĠMutable List < Permission Request > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken : ĠPermission Token ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken ?. continue Permission Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}). check () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . disconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpublish ( publish Config Helper : ĠPublish Config Helper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . add Stream ( publish Config Helper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Stream ( publish Config Helper : ĠPublish Config Helper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . update Stream ( publish Config Helper ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconnect To Room () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . connect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Audio Output Selection Dialog ( room Fragment : ĠRoom Fragment ): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom Fragment . activity . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Output List Ġ= ĠarrayOf (" Phone ", Ġ" Bluetooth ", Ġ" L oud ĠS peaker ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( room Fragment . require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġdefault Ġto Ġphone ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroom . set Audio Output Device ( Audio Device . PHONE _ EAR PI E CE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Select ĠAudio ĠOutput ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Single Choice Items ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Output List , Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( which ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . set Audio Output Device ( Audio Device . PHONE _ EAR PI E CE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . set Audio Output Device ( Audio Device . BL U ETO OTH ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroom . set Audio Output Device ( Audio Device . LO UD SPE AK ER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġaction Ġbuttons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Neutral Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ok " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠIllegalStateException (" Activity Ġcannot Ġbe Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Audio Output ( audio Device : ĠAudio Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . set Audio Output Device ( audio Device ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Room ( roomId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom Service . delete Room ( roomId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < Void > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Void >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Void > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Room Ġwas Ġdeleted ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Void >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( t , Ġ" on Failure ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Participant Surface ( ĊĠĠĠĠĠĠĠ Ġparticipant Id : ĠString , ĊĠĠĠĠĠĠĠ Ġparticipant Surface : ĠSurface View Renderer , ĊĠĠĠĠĠĠĠ Ġstream Key : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . set Participant Surface ( participant Id , Ġparticipant Surface , Ġstream Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Chat History ( messages : ĠMutable List < Message UI > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage History Ġ= Ġmessages ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Chat History () Ġ= Ġmessage History ĊĊĠĠĠ Ġfun Ġsend Text Room Message ( message : ĠMessage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . send Text Room Message ( message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Ob serve Room Created Value () Ġ{ ĊĠĠĠĠĠĠĠ Ġroom Created . post Value ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Admin Message ( admin Message Text : ĠString ) Ġ= ĠMessage UI ( ĊĠĠĠĠĠĠĠ Ġdate Ġ= ĠgetCurrent Time HH mm (), ĊĠĠĠĠĠĠĠ Ġsender Ġ= Ġ" ADMIN ", ĊĠĠĠĠĠĠĠ Ġfull Message Ġ= ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= ĠMessage Content ( type Ġ= ĠMessageType . TEXT . type , Ġpayload Ġ= Ġadmin Message Text , Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecipients Ġ= Ġempty List () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġis Ġto Ġsave Ġmessage Ġon Ġthe Ġmessage History Ġwhen Ġchat Ġis Ġnot Ġdisplayed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Message To History ( message For History : ĠMessage UI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage History ?. add ( message For History ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetState Text File (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġroom . getState Text File () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsubscribe ( ĊĠĠĠĠĠĠĠ Ġparticipant Id : ĠString , ĊĠĠĠĠĠĠĠ Ġstream Key : ĠString , ĊĠĠĠĠĠĠĠ Ġstream Config : ĠStream Config ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . add Subscription ( participant Id , Ġstream Key , Ġstream Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġunsubscribe ( participant Id : ĠString , Ġstream Key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . remove Subscription ( participant Id , Ġstream Key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Chat History () Ġ{ ĊĠĠĠĠĠĠĠ Ġmessage History ?. clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Web RTC Stats For Stream ( ĊĠĠĠĠĠĠĠ Ġparticipant Id : ĠString , ĊĠĠĠĠĠĠĠ Ġstream Key : ĠString , ĊĠĠĠĠĠĠĠ Ġcallback : ĠRTC Stats Collector Callback ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . get Web RTC Stats For Stream ( participant Id , Ġstream Key , Ġcallback ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġenable Network Metrics Report ( participants List : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . enable Network Metrics Report ( participants List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisable Network Metrics Report ( participants List : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġroom . disable Network Metrics Report ( participants List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Camera State ( media : ĠMedia On Start ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera Current State Ġ= Ġmedia ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Camera State (): ĠMedia On Start Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcamera Current State ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Mic State ( media : ĠMedia On Start ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmic Current State Ġ= Ġmedia ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Mic State (): ĠMedia On Start Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmic Current State ĊĠĠĠ Ġ} Ċ } Ċ