package Ġio . so gn . dial er Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . tele com . Tele com Manager Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠView . OnClickListener Ġ{ ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġbutton Call . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcheck Default Dial er () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ SET _ DEFAULT _ DI AL ER ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck SetDefault Dial er Result ( result Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( REQUEST _ CODE _ GRANT _ PERMISSION S Ġ== Ġrequest Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcheck Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġgrant Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ+= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" need Ġmore Ġpermissions ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( v . id Ġ== ĠR . id . button Call ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Ġ= Ġtext Number . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( number . length Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCall Manager . get (). place Call ( number ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġê¸°ë³¸ ĠD ial er ë¥¼ Ġì² ´ íģ¬ íķĺê³ł Ġë³Ģê²½ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Default Dial er () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtele com Manager Ġ= Ġget System Service ( Context . TELE COM _ SERVICE ) Ġas ĠTele com Manager ĊĠĠĠĠĠĠĠ Ġvar Ġis Already Default Dial er : ĠBoolean ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Already Default Dial er Ġ= Ġtele com Manager . default Dial er Package Ġ== ĠpackageName ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Already Default Dial er Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( is Already Default Dial er ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Tele com Manager . ACTION _ CHANGE _ DEFAULT _ DI AL ER ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Tele com Manager . EXTRA _ CHANGE _ DEFAULT _ DI AL ER _ PACKAGE _ NAME , ĠpackageName ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠREQUEST _ CODE _ SET _ DEFAULT _ DI AL ER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck SetDefault Dial er Result ( result Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġmessage Ġ= Ġ" ê¸° ë³¸ ĠìłĦ íĻĶ Ġìķ ± ìľ¼ë¡ľ ĠìĦ¤ìłķ íķĺ ìĺ Ģ ìĬµëĭĪëĭ¤ ." ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ C ANCE LED Ġ-> Ġmessage Ġ= Ġ" ê¸° ë³¸ ĠìłĦ íĻĶ Ġìķ ± ìľ¼ë¡ľ ĠìĦ¤ìłķ íķĺì§Ģ ĠìķĬ ìķ ĺ ìĬµëĭĪëĭ¤ ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmessage Ġ= Ġ" Unexpected Ġresult Ġcode Ġ$ result Code " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( if Needed Request Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , Ġs Required Permissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ GRANT _ PERMISSION S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġif Needed Request Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcheck Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠíķĺëĤĺ ëĿ¼ ëıĦ Ġpermission ìĿ´ ĠìĹĨ ìľ¼ ë©´ Ġcheck ëĬĶ ĠìĿ Į ìĪĺ ê°Ģ ĠëĲ ¨ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin Ġs Required Permissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Ġ+= ĠActivity Compat . check Self Permission ( this , Ġpermission ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcheck Ġ< Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ SET _ DEFAULT _ DI AL ER Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠREQUEST _ CODE _ GRANT _ PERMISSION S Ġ= Ġ 2 0 0 ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġs Required Permissions Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ PHONE _ STATE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CALL _ PHONE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . MANAGE _ OWN _ CALL S ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ