package Ġcom . high level . flutter _ tw ilio _ voice . flutter _ tw ilio _ voice Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . app . Pending Intent Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Power Manager Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . app . Notification Manager Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġio . flutter . plugin . common . Method Channel Ċ Ċ class ĠTw ilio Manager ( context : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity : ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock : ĠPower Manager . Wake Lock , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Manager : ĠAudio Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager : ĠNotification Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel : ĠMethod Channel ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Voice Activity " ĊĊĠĠĠ Ġprivate Ġval Ġ_ wake Lock : ĠPower Manager . Wake Lock Ġ= Ġwake Lock ĊĠĠĠ Ġprivate Ġval Ġ_ audio Manager : ĠAudio Manager Ġ= Ġaudio Manager ĊĠĠĠ Ġprivate Ġval Ġ_ notification Manager : ĠNotification Manager Ġ= Ġnotification Manager ĊĠĠĠ Ġprivate Ġval Ġ_ context : ĠContext Ġ= Ġcontext ĊĠĠĠ Ġprivate Ġval ĠPER MISSION _ REQUEST _ CODE : ĠInt Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġnotification Id : ĠInt Ġ= Ġ 1 2 3 ĊĠĠĠ Ġprivate Ġval ĠCHAN NEL _ ID : ĠString Ġ= Ġ"$ TAG / NOTIFICATION _ CHANNEL _ ID "; ĊĠĠĠ Ġprivate Ġvar Ġis Showing Notification : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġ_ activity : ĠActivity Ġ= Ġactivity ĊĠĠĠ Ġprivate Ġvar Ġtw ilio Android : ĠTw ilio Android ĊĠĠĠ Ġlateinit Ġvar Ġdefault Icon : ĠString ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcreate Notification Channel () ĊĠĠĠĠĠĠĠ Ġcheck And Request Permission () ĊĠĠĠĠĠĠĠ Ġtw ilio Android Ġ= ĠTw ilio Android (_ context , Ġ_ wake Lock , Ġ_ audio Manager , Ġchannel , Ġcancel Notification Ġ= Ġ{ Ġcancel Notification () Ġ}) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Notification Channel () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname : ĠCharSequence Ġ= Ġ" notification _ channel "; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimportance : ĠInt Ġ= ĠNotification Manager . IMPORT ANCE _ DEFAULT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel : ĠNotification Channel Ġ= ĠNotification Channel ( CHANNEL _ ID , Ġname , Ġimportance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ notification Manager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcancel Notification () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Showing Notification ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Compat Ġ= ĠNotification Manager Compat . from (_ context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager . cancel ( notification Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Showing Notification Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck And Request Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Permission Needed : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( perm Ġin Ġlist Permission Needed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission (_ context , Ġperm ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Permission Needed . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! list Permission Needed . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions (_ activity , Ġlist Permission Needed . to Typed Array (), ĠPER MISSION _ REQUEST _ CODE ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Drawable ResourceId ( context : ĠContext , Ġname : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . resources . getIdentifier ( name , Ġ" drawable ", Ġcontext . packageName ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck Permission For Micro phone (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Mic : ĠInt Ġ= ĠContext Compat . check Self Permission (_ context , ĠManifest . permission . RECORD _ AUDIO ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Mic Ġ== ĠPackage Manager . PERMISSION _ DEN IED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuild Call Notification ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent Ġ= ĠIntent (_ context , Ġ_ activity . java Class ) ĊĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ BRO UG HT _ TO _ FRONT ĊĠĠĠĠĠĠĠ Ġval Ġpending Intent : ĠPending Intent Ġ= ĠPending Intent . getActivity (_ activity , Ġ 0 , Ġintent , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġbuilder : ĠNotification Compat . Builder Ġ= ĠNotification Compat . Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ context , ĠCHAN NEL _ ID ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( get Drawable ResourceId ( context Ġ= Ġ_ context , Ġname Ġ= Ġdefault Icon )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Text (" Outbound Ġcall ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Intent ( pending Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set O ngo ing ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Uses Ch ron ometer ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġnotification Manager : ĠNotification Manager Compat Ġ= ĠNotification Manager Compat . from (_ context ) ĊĠĠĠĠĠĠĠ Ġnotification Manager . notify ( notification Id , Ġbuilder . build ()) ĊĠĠĠĠĠĠĠ Ġis Showing Notification Ġ= Ġtrue ĊĠĠĠ Ġ} ĠĠĠĠĠĠĠ ĊĊĠĠĠ Ġfun Ġstart Call ( name : ĠString , ĠaccessToken : ĠString , Ġdata : ĠHashMap < String , ĠString >) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuild Call Notification ( name ) ĊĠĠĠĠĠĠĠ Ġtw ilio Android . invoke Call ( accessToken , data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Hold (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtw ilio Android . hold () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Speaker ( speaker : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtw ilio Android . speaker ( speaker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtoggle Mute (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtw ilio Android . mute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdisconnect Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġtw ilio Android . disconnect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġkey Press ( digit : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtw ilio Android . key Press ( digit ) ĊĠĠĠ Ġ} Ċ }