package Ġcom . connect yc ube . flutter . connect yc ube _ flutter _ call _ kit Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Broadcast Receiver Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent Filter Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Nullable Ċ import Ġandroidx . local broadcast manager . content . Local Broadcast Manager ĊĊ Ċ fun Ġcreate Start Incoming Screen Intent ( ĊĠĠĠ Ġcontext : ĠContext , Ġcall Id : ĠString , Ġcall Type : ĠInt , Ġcall Init iator Id : ĠInt , ĊĠĠĠ Ġcall Init iator Name : ĠString , Ġopponent s : ĠArrayList < Int >, ĠuserInfo : ĠString Ċ ): ĠIntent Ġ{ ĊĠĠĠ Ġval Ġintent Ġ= ĠIntent ( context , ĠIncoming Call Activity :: class . java ) ĊĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠ Ġintent . putExtra ( EXTRA _ CALL _ ID , Ġcall Id ) ĊĠĠĠ Ġintent . putExtra ( EXTRA _ CALL _ TYPE , Ġcall Type ) ĊĠĠĠ Ġintent . putExtra ( EXTRA _ CALL _ INIT I ATOR _ ID , Ġcall Init iator Id ) ĊĠĠĠ Ġintent . putExtra ( EXTRA _ CALL _ INIT I ATOR _ NAME , Ġcall Init iator Name ) ĊĠĠĠ Ġintent . put Integer ArrayList Extra ( EXTRA _ CALL _ OP P ONENT S , Ġopponent s ) ĊĠĠĠ Ġintent . putExtra ( EXTRA _ CALL _ USER _ INFO , ĠuserInfo ) ĊĠĠĠ Ġreturn Ġintent Ċ } Ċ Ċ class ĠIncoming Call Activity Ġ: ĠActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcall State Receiver : ĠBroadcast Receiver ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlocal Broadcast Manager : ĠLocal Broadcast Manager ĊĊĠĠĠ Ġprivate Ġvar Ġcall Id : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcall Type Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġcall Init iator Id Ġ= Ġ- 1 ĊĠĠĠ Ġprivate Ġvar Ġcall Init iator Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcall Opp onent s : ĠArrayList < Int >? Ġ= ĠArrayList () ĊĠĠĠ Ġprivate Ġvar Ġcall UserInfo : ĠString ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate (@ Nullable ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( resources . getIdentifier (" activity _ incoming _ call ", Ġ" layout ", ĠpackageName )) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . O _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetShow When Locked ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Turn Screen On ( true ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ SHOW _ WHEN _ LOCK ED Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ T URN _ SCREEN _ ON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprocess Incoming Data ( intent ) ĊĠĠĠĠĠĠĠ Ġinit Ui () ĊĠĠĠĠĠĠĠ Ġinit Call State Receiver () ĊĠĠĠĠĠĠĠ Ġregister Call State Receiver () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Call State Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager Ġ= ĠLocal Broadcast Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġcall State Receiver Ġ= Ġobject Ġ: ĠBroadcast Receiver () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Receive ( context : ĠContext ?, Ġintent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull Ġ|| ĠText Utils . isEmpty ( intent . action )) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction : ĠString ? Ġ= Ġintent . action ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcall Id To Process : ĠString ? Ġ= Ġintent . getString Extra ( EXTRA _ CALL _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( call Id To Process ) Ġ|| Ġcall Id To Process Ġ!= Ġcall Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ CALL _ NOTIFICATION _ C ANCE LED , ĠACTION _ CALL _ RE JECT , ĠACTION _ CALL _ ENDED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish And Remove Task () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACTION _ CALL _ ACCEPT Ġ-> Ġfinish Delayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Delayed () Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish And Remove Task () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister Call State Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Filter Ġ= ĠIntent Filter () ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( ACTION _ CALL _ NOTIFICATION _ C ANCE LED ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( ACTION _ CALL _ RE JECT ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( ACTION _ CALL _ ACCEPT ) ĊĠĠĠĠĠĠĠ Ġintent Filter . addAction ( ACTION _ CALL _ ENDED ) ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager . register Receiver ( call State Receiver , Ġintent Filter ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġun Register Call State Receiver () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal Broadcast Manager . unregister Receiver ( call State Receiver ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġun Register Call State Receiver () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Incoming Data ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcall Id Ġ= Ġintent . getString Extra ( EXTRA _ CALL _ ID ) ĊĠĠĠĠĠĠĠ Ġcall Type Ġ= Ġintent . getInt Extra ( EXTRA _ CALL _ TYPE , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġcall Init iator Id Ġ= Ġintent . getInt Extra ( EXTRA _ CALL _ INIT I ATOR _ ID , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġcall Init iator Name Ġ= Ġintent . getString Extra ( EXTRA _ CALL _ INIT I ATOR _ NAME ) ĊĠĠĠĠĠĠĠ Ġcall Opp onent s Ġ= Ġintent . getInteger ArrayList Extra ( EXTRA _ CALL _ OP P ONENT S ) ĊĠĠĠĠĠĠĠ Ġcall UserInfo Ġ= Ġintent . getString Extra ( EXTRA _ CALL _ USER _ INFO ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Ui () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcall Title Txt : ĠTextView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById ( resources . getIdentifier (" user _ name _ txt ", Ġ" id ", ĠpackageName )) ĊĠĠĠĠĠĠĠ Ġcall Title Txt . text Ġ= Ġcall Init iator Name ĊĠĠĠĠĠĠĠ Ġval Ġcall Sub Title Txt : ĠTextView Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById ( resources . getIdentifier (" call _ type _ txt ", Ġ" id ", ĠpackageName )) ĊĠĠĠĠĠĠĠ Ġcall Sub Title Txt . text Ġ= Ġ( if Ġ( call Type Ġ== Ġ 1 ) Ġ" App el Ġvid Ã© o Ġentr ant " Ġelse Ġ" App el Ġaudio Ġentr ant ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠString . format ( CALL _ TYPE _ PLACE HOLDER , Ġif Ġ( call Type Ġ== Ġ 1 ) Ġ" Video " Ġelse Ġ" Audio ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġcalls Ġfrom Ġlayout Ġfile ĊĠĠĠ Ġfun Ġon End Call ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ ID , Ġcall Id ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( EXTRA _ CALL _ TYPE , Ġcall Type ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( EXTRA _ CALL _ INIT I ATOR _ ID , Ġcall Init iator Id ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ INIT I ATOR _ NAME , Ġcall Init iator Name ) ĊĠĠĠĠĠĠĠ Ġbundle . put Integer ArrayList ( EXTRA _ CALL _ OP P ONENT S , Ġcall Opp onent s ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ USER _ INFO , Ġcall UserInfo ) ĊĊĠĠĠĠĠĠĠ Ġval Ġend Call Intent Ġ= ĠIntent ( this , ĠEvent Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġend Call Intent . action Ġ= ĠACTION _ CALL _ RE JECT ĊĠĠĠĠĠĠĠ Ġend Call Intent . put Extras ( bundle ) ĊĠĠĠĠĠĠĠ Ġapplication Context . send Broadcast ( end Call Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġcalls Ġfrom Ġlayout Ġfile ĊĠĠĠ Ġfun ĠonStart Call ( view : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ ID , Ġcall Id ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( EXTRA _ CALL _ TYPE , Ġcall Type ) ĊĠĠĠĠĠĠĠ Ġbundle . put Int ( EXTRA _ CALL _ INIT I ATOR _ ID , Ġcall Init iator Id ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ INIT I ATOR _ NAME , Ġcall Init iator Name ) ĊĠĠĠĠĠĠĠ Ġbundle . put Integer ArrayList ( EXTRA _ CALL _ OP P ONENT S , Ġcall Opp onent s ) ĊĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ CALL _ USER _ INFO , Ġcall UserInfo ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Call Intent Ġ= ĠIntent ( this , ĠEvent Receiver :: class . java ) ĊĠĠĠĠĠĠĠ Ġstart Call Intent . action Ġ= ĠACTION _ CALL _ ACCEPT ĊĠĠĠĠĠĠĠ Ġstart Call Intent . put Extras ( bundle ) ĊĠĠĠĠĠĠĠ Ġapplication Context . send Broadcast ( start Call Intent ) ĊĠĠĠ Ġ} Ċ } Ċ