package Ġcom . quick blo x . sample . video chat . kotlin . activities Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġcom . quick blo x . sample . video chat . kotlin . R Ċ import Ġcom . quick blo x . sample . video chat . kotlin . utils . Shared Prefs Helper Ċ import Ġcom . quick blo x . sample . video chat . kotlin . utils . long Toast Ċ Ċ private Ġconst Ġval ĠPER MISSION _ CODE Ġ= Ġ 0 Ċ private Ġconst Ġval ĠEX TRA _ PERMISSION S Ġ= Ġ" extra _ permissions " Ċ private Ġconst Ġval ĠCHECK _ ONLY _ AUDIO Ġ= Ġ" check _ only _ audio " Ċ Ċ class ĠPermissions Activity Ġ: ĠBase Activity () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġstart For Result ( activity : ĠActivity , Ġcheck Only Audio : ĠBoolean , Ġpermissions : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠPermissions Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ PERMISSION S , Ġpermissions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( CHECK _ ONLY _ AUDIO , Ġcheck Only Audio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , ĠPER MISSION _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġenum Ġclass ĠPermission Features Ġ{ ĊĠĠĠĠĠĠĠ ĠCAM ERA , ĊĠĠĠĠĠĠĠ ĠMIC RO PHONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġrequires Check : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( intent Ġ== Ġnull Ġ|| Ġ! intent . has Extra ( EXTRA _ PERMISSION S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" This ĠActivity Ġneeds Ġto Ġbe Ġlaunched Ġusing Ġthe Ġstatic ĠstartActivity For Result () Ġmethod .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ permissions ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĠĠĠĠĠĠĠ Ġrequires Check Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġif Ġ( requires Check ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġget Permissions () ĊĠĠĠĠĠĠĠ Ġval Ġcheck Only Audio Ġ= Ġget Check Only Audio () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check Only Audio ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission Audio ( permissions [ 1 ]) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission Audio Video ( permissions ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission Audio ( audio Permission : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Permission ( audio Permission )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( audio Permission ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Permissions Granted () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission Audio Video ( permissions : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( check Permissions ( permissions )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions (* permissions ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Permissions Granted () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Permissions (): ĠArray < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġintent . getString Array Extra ( EXTRA _ PERMISSION S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Check Only Audio (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġintent . getBoolean Extra ( CHECK _ ONLY _ AUDIO , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permissions ( var arg Ġpermissions : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , Ġpermissions , ĠPER MISSION _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġall Permissions Granted () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPER MISSION _ CODE Ġ&& Ġhas All Permissions Granted ( grant Results )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Check Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġall Permissions Granted () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( permission Ġin Ġpermissions ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! should Show Request Permission R ationale ( permission )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠShared Prefs Helper . save ( permission , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequires Check Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Denied Response ( grant Results ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Denied Response ( grant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġgrant Results . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ index ] Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong Toast ( getString ( R . string . permission _ un available , ĠPermission Features . values ()[ index ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong Toast ( getString ( R . string . permission _ un available , ĠPermission Features . MICRO PHONE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas All Permissions Granted ( grant Results : ĠInt Array ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( grant Result Ġin Ġgrant Results ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Result Ġ== ĠPackage Manager . PERMISSION _ DEN IED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }