/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 ĠNew ĠVector ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġim . vector . app . features . call Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . core . view . isVisible Ċ import Ġim . vector . app . R Ċ import Ġim . vector . app . databinding . View Call Controls Binding Ċ import Ġorg . matrix . android . sdk . api . session . call . Call State Ċ import Ġorg . matrix . android . sdk . api . session . call . Mx Peer Connection State Ċ Ċ class ĠCall Controls View Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġcontext : ĠContext , Ġattrs : ĠAttributeSet ? Ġ= Ġnull , Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠFrame Layout ( context , Ġattrs , Ġdef Style Attr ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġviews : ĠView Call Controls Binding ĊĊĠĠĠ Ġvar Ġinteraction Listener : ĠInteraction Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinf late ( context , ĠR . layout . view _ call _ controls , Ġthis ) ĊĠĠĠĠĠĠĠ Ġviews Ġ= ĠView Call Controls Binding . bind ( this ) ĊĠĠĠĠĠĠĠ Ġviews . audio Settings Icon . setOnClickListener Ġ{ Ġdid Tap Audio Settings () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . ring ing Control Accept . setOnClickListener Ġ{ Ġaccept Incoming Call () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . ring ing Control Decl ine . setOnClickListener Ġ{ Ġdecl ine Incoming Call () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . end Call Icon . setOnClickListener Ġ{ Ġend O ngo ing Call () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . mute Icon . setOnClickListener Ġ{ Ġtoggle Mute () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . setOnClickListener Ġ{ Ġtoggle Video () Ġ} ĊĠĠĠĠĠĠĠ Ġviews . more Icon . setOnClickListener Ġ{ Ġmore Control Option () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdid Tap Audio Settings () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Tap Audio Settings () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġaccept Incoming Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Accept Incoming Call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecl ine Incoming Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Decl ine Incoming Call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġend O ngo ing Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did End Call () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Mute () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Tap Toggle Mute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Video () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Tap Toggle Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmore Control Option () Ġ{ ĊĠĠĠĠĠĠĠ Ġinteraction Listener ?. did Tap More () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate For State ( state : ĠVector Call ViewState ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall State Ġ= Ġstate . call State . invoke () ĊĠĠĠĠĠĠĠ Ġif Ġ( state . is Audio Mut ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mute Icon . setImage Resource ( R . drawable . ic _ mic _ off ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mute Icon . content Description Ġ= Ġresources . getString ( R . string . a 1 1 y _ un mute _ micro phone ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mute Icon . setImage Resource ( R . drawable . ic _ mic _ on ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . mute Icon . content Description Ġ= Ġresources . getString ( R . string . a 1 1 y _ mute _ micro phone ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( state . is Video Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . setImage Resource ( R . drawable . ic _ video ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . content Description Ġ= Ġresources . getString ( R . string . a 1 1 y _ stop _ camera ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . setImage Resource ( R . drawable . ic _ video _ off ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . content Description Ġ= Ġresources . getString ( R . string . a 1 1 y _ start _ camera ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( call State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall State . Local Ring ing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . ring ing Controls . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . ring ing Control Accept . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . ring ing Control Decl ine . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . connected Controls . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall State . Create Offer , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCall State . Idle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall State . Connected , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall State . Dial ing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall State . Answer ing ĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . ring ing Controls . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . connected Controls . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . video Toggle Icon . isVisible Ġ= Ġstate . is Video Call ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . more Icon . isVisible Ġ= Ġcall State Ġis ĠCall State . Connected Ġ&& Ġcall State . ice Connection State Ġ== ĠM x Peer Connection State . CONNECTED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠCall State . Ended ĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . ring ing Controls . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġviews . connected Controls . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠInteraction Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdid Tap Audio Settings () ĊĠĠĠĠĠĠĠ Ġfun Ġdid Accept Incoming Call () ĊĠĠĠĠĠĠĠ Ġfun Ġdid Decl ine Incoming Call () ĊĠĠĠĠĠĠĠ Ġfun Ġdid End Call () ĊĠĠĠĠĠĠĠ Ġfun Ġdid Tap Toggle Mute () ĊĠĠĠĠĠĠĠ Ġfun Ġdid Tap Toggle Video () ĊĠĠĠĠĠĠĠ Ġfun Ġdid Tap More () ĊĠĠĠ Ġ} Ċ } Ċ