/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . vm ad al in . eas yper missions . sample Ċ Ċ import Ġandroid . Manifest . permission .* Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . widget . Toast . LENGTH _ LONG Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġcom . vm ad al in . eas yper missions . annotations . After Permission Granted Ċ import Ġcom . vm ad al in . eas yper missions . dialogs . DEFAULT _ SETTINGS _ REQ _ CODE Ċ import Ġcom . vm ad al in . eas yper missions . dialogs . Settings Dialog Ċ import Ġcom . vm ad al in . eas yper missions . Easy Permissions Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " Ċ private Ġconst Ġval ĠREQUEST _ CODE _ CAMERA _ PERMISSION Ġ= Ġ 1 2 3 Ċ private Ġconst Ġval ĠREQUEST _ CODE _ STORAGE _ PERMISSION Ġ= Ġ 1 2 4 Ċ private Ġconst Ġval ĠREQUEST _ CODE _ LOCATION _ AND _ CONTACT S _ PERMISSION Ġ= Ġ 1 2 5 Ċ Ċ @ Suppress (" UNUSED _ PARAMETER ") Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠEasy Permissions . Permission Callbacks , ĠEasy Permissions . R ationale Callbacks Ġ{ ĊĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĠĠĠ Ġ// Ġ ĠActivity ĠLifecycle ĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġbutton _ camera . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Request Permission Camera Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton _ storage . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Request Permission Storage Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbutton _ location _ and _ contacts . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Request Permission Location And Contacts Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠDEFAULT _ SETTINGS _ REQ _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġyes Ġ= ĠgetString ( R . string . yes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġno Ġ= ĠgetString ( R . string . no ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġsomething Ġafter Ġuser Ġreturned Ġfrom Ġapp Ġsettings Ġscreen , Ġlike Ġshowing Ġa ĠToast . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . returned _ from _ app _ settings _ to _ activity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Camera Permission ()) Ġyes Ġelse Ġno , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Location And Contacts Permissions ()) Ġyes Ġelse Ġno , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Sms Permission ()) Ġyes Ġelse Ġno , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Storage Permission ()) Ġyes Ġelse Ġno ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLEN GTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEasy Permissions Ġhandles Ġthe Ġrequest Ġresult . ĊĠĠĠĠĠĠĠ ĠEasy Permissions . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĠĠĠ Ġ// Ġ ĠImplementation ĠPermission ĠCallback s ĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Granted ( request Code : ĠInt , Ġperms : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠgetString ( R . string . log _ permissions _ gr anted , Ġrequest Code , Ġperms . size )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permissions Denied ( request Code : ĠInt , Ġperms : ĠList < String >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠgetString ( R . string . log _ permissions _ den ied , Ġrequest Code , Ġperms . size )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġ( Optional ) ĠCheck Ġwhether Ġthe Ġuser Ġdenied Ġany Ġpermissions Ġand Ġchecked Ġ" NE VER ĠAS K ĠAG AIN ." ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġdisplay Ġa Ġdialog Ġdirect ing Ġthem Ġto Ġenable Ġthe Ġpermission Ġin Ġapp Ġsettings . ĊĠĠĠĠĠĠĠ Ġif Ġ( Easy Permissions . some Permission Per manently Denied ( this , Ġperms )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Dialog . Builder ( this ). build (). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĠĠĠ Ġ// Ġ ĠImplementation ĠR ationale ĠCallback s ĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĊĠĠĠ Ġoverride Ġfun Ġon R ationale Accepted ( request Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠgetString ( R . string . log _ permission _ ration ale _ accepted , Ġrequest Code )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon R ationale Denied ( request Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , ĠgetString ( R . string . log _ permission _ ration ale _ den ied , Ġrequest Code )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĠĠĠ Ġ// Ġ ĠPrivate ĠMethods ĊĠĠĠ Ġ// Ġ================================================================= ================ =========== ĊĊĠĠĠ Ġ@ After Permission Granted ( REQUEST _ CODE _ CAMERA _ PERMISSION ) ĊĠĠĠ Ġprivate Ġfun ĠonClick Request Permission Camera Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Camera Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHave Ġpermission , Ġdo Ġthings ! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" TODO : ĠCamera Ġthings ", ĠLEN GTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAsk Ġfor Ġone Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . permission _ camera _ ration ale _ message ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ CAMERA _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Permission Granted ( REQUEST _ CODE _ STORAGE _ PERMISSION ) ĊĠĠĠ Ġprivate Ġfun ĠonClick Request Permission Storage Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Camera Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHave Ġpermission , Ġdo Ġthings ! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" TODO : ĠStorage Ġthings ", ĠLEN GTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAsk Ġfor Ġone Ġpermission ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . permission _ storage _ ration ale _ message ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ STORAGE _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Permission Granted ( REQUEST _ CODE _ LOCATION _ AND _ CONTACT S _ PERMISSION ) ĊĠĠĠ Ġprivate Ġfun ĠonClick Request Permission Location And Contacts Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( has Location And Contacts Permissions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHave Ġpermissions , Ġdo Ġthings ! ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" TODO : ĠLocation Ġand ĠContact s Ġthings ", ĠLEN GTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAsk Ġfor Ġboth Ġpermissions ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . permission _ location _ and _ contacts _ ration ale _ message ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ LOCATION _ AND _ CONTACT S _ PERMISSION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠACCESS _ F INE _ LOCATION , ĠREAD _ CONTACT S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Camera Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEasy Permissions . has Permissions ( this , ĠCAM ERA ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Location And Contacts Permissions (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEasy Permissions . has Permissions ( this , ĠACCESS _ F INE _ LOCATION , ĠREAD _ CONTACT S ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Sms Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEasy Permissions . has Permissions ( this , ĠREAD _ SMS ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhas Storage Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEasy Permissions . has Permissions ( this , ĠWRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠ Ġ} Ċ } Ċ