package Ġintel lib itz . int ell id roid Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . content . Permission Checker Ċ import Ġintel lib itz . int ell id roid . util . Main Application Singleton Ċ Ċ open Ġclass ĠIntel lib itz Permission Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġfun Ġmay Request Read Contacts ( view : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . is Read Contacts Permission Granted ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . should Show Contacts R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexp an ation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read Contacts Permissions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . show Read Contacts Sn ack ( view , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read Contacts Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmay Request Read Phone State ( view : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . is Read Phone State Permission Granted ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . should Show Read Phone State R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexp an ation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read Phone State Permissions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . show Read Phone State Sn ack ( view , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read Phone State Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmay Request Camera ( view : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . is Camera Permission Granted ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . should Show Camera R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexp an ation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Camera Permissions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . show Camera Sn ack ( view , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Camera Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmay Request Read External Storage ( view : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . is Read External Storage Permission Granted ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . should Show Read Storage R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexp an ation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read External Storage Permissions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . show Read External Storage Sn ack ( view , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Read External Storage Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmay Request Write External Storage ( view : ĠView ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . is Write External Storage Permission Granted ( application Context )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Intel lib itz Activity Fragment . should Show Write Storage R ationale ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġview ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġan Ġexp an ation Ġto Ġthe Ġuser Ġ* as ynchronously * Ġ-- Ġdon 't Ġblock ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġthread Ġwaiting Ġfor Ġthe Ġuser 's Ġresponse ! ĠAfter Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsees Ġthe Ġexplanation , Ġtry Ġagain Ġto Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Write External Storage Permissions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . show Write External Storage Sn ack ( view , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġexplanation Ġneeded , Ġwe Ġcan Ġrequest Ġthe Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntel lib itz Activity Fragment . request Write External Storage Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Read External Storage Permissions Granted () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Write External Storage Permissions Granted () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Contacts Permissions Granted () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Phone State Permissions Granted () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Camera Permissions Granted () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Read External Storage Permissions Denied () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Write External Storage Permissions Denied () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Contacts Permissions Denied () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Phone State Permissions Denied () Ġ{} ĊĠĠĠ Ġprotected Ġfun Ġon Camera Permissions Denied () Ġ{} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġreceived Ġwhen Ġa Ġpermissions Ġrequest Ġhas Ġbeen Ġcompleted . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠMain Application Singleton . PERM _ READ _ PHONE _ STATE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Phone State Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Phone State Permissions Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġ' case ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠMain Application Singleton . PERM _ READ _ CONTACT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Contacts Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Contacts Permissions Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġ' case ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠMain Application Singleton . PERM _ CAMERA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Camera Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Camera Permissions Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġ' case ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠMain Application Singleton . PERM _ READ _ EXTERNAL _ STORAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Read External Storage Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Read External Storage Permissions Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġ' case ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠMain Application Singleton . PERM _ WRITE _ EXTERNAL _ STORAGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġwas Ġgranted , Ġy ay ! ĠDo Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontacts - related Ġtask Ġyou Ġneed Ġto Ġdo . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Write External Storage Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermission Ġdenied , Ġb oo ! ĠDisable Ġthe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Write External Storage Permissions Denied () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġother Ġ' case ' Ġlines Ġto Ġcheck Ġfor Ġother ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpermissions Ġthis Ġapp Ġmight Ġrequest ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Intel lib itz Permission " ĊĠĠĠ Ġ} Ċ }