/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 1 ĠT el ny x ĠLLC . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġcom . tel ny x . webrtc . sdk . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . tel ny x . webrtc . sdk .* Ċ import Ġcom . tel ny x . webrtc . sdk . manager . User Manager Ċ import Ġcom . tel ny x . webrtc . sdk . model . Audio Device Ċ import Ġcom . tel ny x . webrtc . sdk . model . Call State Ċ import Ġcom . tel ny x . webrtc . sdk . model . Tx Server Configuration Ċ import Ġcom . tel ny x . webrtc . sdk . ver to . receive . Received Message Body Ċ import Ġcom . tel ny x . webrtc . sdk . ver to . receive . Socket Response Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠMain ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġuser Manager : ĠUser Manager Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġtel ny x Client : ĠT el ny x Client ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcurrent Call : ĠCall ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġprevious Call : ĠCall ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġcalls : ĠMap < UUID , ĠCall > Ġ= Ġmap Of () ĊĊĠĠĠ Ġfun Ġinit Connection ( context : ĠContext , Ġprovided Server Config : ĠTx Server Configuration ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client Ġ= ĠT el ny x Client ( context ) ĊĠĠĠĠĠĠĠ Ġprovided Server Config ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtel ny x Client ?. connect ( it ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtel ny x Client ?. connect () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave UserData ( ĊĠĠĠĠĠĠĠ ĠuserName : ĠString , ĊĠĠĠĠĠĠĠ Ġpassword : ĠString , ĊĠĠĠĠĠĠĠ Ġf cm Token : ĠString ?, ĊĠĠĠĠĠĠĠ Ġcaller Id Name : ĠString , ĊĠĠĠĠĠĠĠ Ġcaller Id Number : ĠString , ĊĠĠĠĠĠĠĠ Ġis Dev : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Manager . is User Login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . is User Login Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . sip Username Ġ= ĠuserName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . sip Pass Ġ= Ġpassword ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . fc m Token Ġ= Ġf cm Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . caller Id Name Ġ= Ġcaller Id Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . caller Id Number Ġ= Ġcaller Id Number ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Manager . is Dev Ġ= Ġis Dev ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Socket Response (): ĠLive Data < Socket Response < Received Message Body >> ? Ġ= ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. get Socket Response () ĊĊĠĠĠ Ġfun ĠsetCurrent Call ( call Id : ĠUUID ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcalls Ġ= Ġtel ny x Client ?. getActive Calls () !! ĊĠĠĠĠĠĠĠ Ġif Ġ( calls . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Call Ġ= Ġcurrent Call ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcurrent Call Ġ= Ġcalls [ call Id ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Call State (): ĠLive Data < Call State >? Ġ= Ġcurrent Call ?. get Call State () ĊĠĠĠ Ġfun Ġget Is Mute Status (): ĠLive Data < Boolean >? Ġ= Ġcurrent Call ?. getIs Mute Status () ĊĠĠĠ Ġfun Ġget Is On Hold Status (): ĠLive Data < Boolean >? Ġ= Ġcurrent Call ?. getIs On Hold Status () ĊĠĠĠ Ġfun Ġget Is On L oud Speaker Status (): ĠLive Data < Boolean >? Ġ= Ġcurrent Call ?. getIs On L oud Speaker Status () ĊĊĠĠĠ Ġfun Ġdo Login With Credentials ( credential Config : ĠCredential Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. credential Login ( credential Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Login With Token ( token Config : ĠToken Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. token Login ( token Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Invite ( ĊĠĠĠĠĠĠĠ Ġcaller Name : ĠString , ĊĠĠĠĠĠĠĠ Ġcaller Number : ĠString , ĊĠĠĠĠĠĠĠ Ġdestination Number : ĠString , ĊĠĠĠĠĠĠĠ Ġclient State : ĠString ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. call ?. new Invite ( caller Name , Ġcaller Number , Ġdestination Number , Ġclient State ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaccept Call ( call Id : ĠUUID , Ġdestination Number : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. call ?. accept Call ( call Id , Ġdestination Number ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġend Call ( call Id : ĠUUID ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall Id ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtel ny x Client ?. call ?. end Call ( call Id ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclient Call Id Ġ= Ġtel ny x Client ?. call ?. call Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient Call Id ?. let Ġ{ Ġtel ny x Client ?. call ?. end Call ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġprevious Call ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Call Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Hold Un hold Pressed ( call Id : ĠUUID ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Call ?. on Hold Un hold Pressed ( call Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Mute Un mute Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Call ?. on Mute Un mute Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon L oud Speaker Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Call ?. on L oud Speaker Pressed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġd tm f Pressed ( call Id : ĠUUID , Ġtone : ĠString ){ ĊĠĠĠĠĠĠĠ Ġcurrent Call ?. dt mf ( call Id , Ġtone ) ĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġfun Ġdisconnect () Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. disconnect () ĊĠĠĠĠĠĠĠ Ġuser Manager . is User Login Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Audio Output ( audio Device : ĠAudio Device ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtel ny x Client ?. set Audio Output Device ( audio Device ) ĊĠĠĠ Ġ} Ċ } Ċ