package Ġcom . high level . flutter _ tw ilio _ voice . flutter _ tw ilio _ voice Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . NOTIFICATION _ SERVICE Ċ import Ġandroid . content . Context . POWER _ SERVICE Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . media . Audio Manager Ċ import Ġandroid . os . Power Manager Ċ import Ġandroidx . annotation . NonNull Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġio . flutter . embedding . engine . plugins . Flutter Plugin Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Aware Ċ import Ġio . flutter . embedding . engine . plugins . activity . Activity Plugin Binding Ċ import Ġio . flutter . plugin . common . MethodCall Ċ import Ġio . flutter . plugin . common . Method Channel Ċ import Ġio . flutter . plugin . common . Method Channel . MethodCall Handler Ċ import Ġio . flutter . plugin . common . Method Channel . Result Ċ import Ġio . flutter . plugin . common . Plugin Registry . Registrar Ċ Ċ public Ġclass ĠFlutter Tw ilio Voice Plugin Ġ: ĠFlutter Plugin , ĠMethod Call Handler , ĠActivity Aware Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchannel : ĠMethod Channel ĊĠĠĠ Ġprivate Ġvar Ġ_ field Ġ= Ġ 0 x 0 0 0 0 0 0 2 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtw ilio Manager : ĠTw ilio Manager ĊĠĠĠ Ġprivate Ġval ĠPER MISSION _ REQUEST _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠĠĠ Ġvar Ġapp Permission Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . RECORD _ AUDIO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Engine (@ NonNull Ġflutter Plugin Binding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . flutter Plugin Binding Ġ= Ġflutter Plugin Binding ĊĠĠĠĠĠĠĠ Ġchannel Ġ= ĠMethod Channel ( flutter Plugin Binding . binary Messenger , Ġ" flutter _ tw ilio _ voice ") ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( this ) ĊĠĠĠĠĠĠĠ Ġcontext Ġ= Ġflutter Plugin Binding . application Context ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġlateinit Ġvar Ġinstance : ĠFlutter Tw ilio Voice Plugin ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġregister With ( regist rar : ĠRegist rar ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance Ġ= ĠFlutter Tw ilio Voice Plugin () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . channel Ġ= ĠMethod Channel ( regist rar . messenger (), Ġ" flutter _ tw ilio _ voice ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . channel . set MethodCall Handler ( instance ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . init Plugin ( regist rar . activity ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstance . context Ġ= Ġregist rar . active Context () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcheck And Request Permission ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlist Permission Needed : ĠMutable List < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( perm Ġin Ġapp Permission ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Context Compat . check Self Permission ( activity , Ġperm ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Permission Needed . add ( perm ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( list Permission Needed . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Permission Needed . to Typed Array (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon MethodCall (@ NonNull Ġcall : ĠMethod Call , Ġ@ NonNull Ġresult : ĠResult ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( call . method ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" call " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠisValid : ĠBoolean Ġ= ĠisValid Drawable Resource ( context , Ġcall . argument < String >(" icon ") Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isValid ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtw ilio Manager . default Icon Ġ= Ġcall . argument < String >(" icon ") Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtw ilio Manager . start Call ( call . argument < String >(" name ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . argument < String >(" accessToken ") Ġas ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall . argument < HashMap < String , String >> (" data ") Ġas ĠHashMap < String , String > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hold " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( tw ilio Manager . toggle Hold ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" speaker " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( tw ilio Manager . toggle Speaker ( call . argument < Boolean >(" speaker ") Ġas ĠBoolean )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" mute " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( tw ilio Manager . toggle Mute ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" key Press " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtw ilio Manager . key Press ( call . argument < String >(" digit ") Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" disconnect " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtw ilio Manager . disconnect Call () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . success ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠisValid Drawable Resource ( context : ĠContext , Ġname : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource Id : ĠInt Ġ= Ġcontext . resources . getIdentifier ( name , Ġ" drawable ", Ġcontext . packageName ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresource Id Ġ!= Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Engine (@ NonNull Ġbinding : ĠFlutter Plugin . Flutter Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . set MethodCall Handler ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Plugin ( activity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck And Request Permission ( activity ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ field Ġ= ĠPower Manager :: class . java . java Class . getField (" PRO X IM ITY _ SCREEN _ OFF _ WAKE _ LOCK "). getInt ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtw ilio Manager Ġ= ĠTw ilio Manager ( context Ġ= Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġactivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Manager Ġ= Ġ( activity . getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ?) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock Ġ= Ġ( activity . getSystem Service ( POWER _ SERVICE ) Ġas ĠPower Manager ). new Wake Lock (_ field , Ġactivity . local ClassName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager Ġ= Ġ( activity . getSystem Service ( NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Ġ= Ġchannel ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġactivity . volume Control Stream Ġ= ĠAudio Manager . STREAM _ VOICE _ CALL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attached To Activity ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck And Request Permission ( binding . activity ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ field Ġ= ĠPower Manager :: class . java . java Class . getField (" PRO X IM ITY _ SCREEN _ OFF _ WAKE _ LOCK "). getInt ( null ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtw ilio Manager Ġ= ĠTw ilio Manager ( context Ġ= Ġbinding . activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġbinding . activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Manager Ġ= Ġ( binding . activity . getSystem Service ( Context . AUDIO _ SERVICE ) Ġas ĠAudio Manager ?) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwake Lock Ġ= Ġ( binding . activity . getSystem Service ( POWER _ SERVICE ) Ġas ĠPower Manager ). new Wake Lock (_ field , Ġbinding . activity . local ClassName ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Manager Ġ= Ġ( binding . activity . getSystem Service ( NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Ġ= Ġchannel ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . activity . volume Control Stream Ġ= ĠAudio Manager . STREAM _ VOICE _ CALL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity For Config Changes () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Re attached To Activity For Config Changes ( binding : ĠActivity Plugin Binding ) Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Detached From Activity () Ġ{ ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ