package Ġinfo . k rie se . birthday reminder Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġinfo . k rie se . birthday reminder . fragments . Contacts Fragment ĊĊ Ċ const Ġval ĠPER MISSION _ REQUEST _ READ _ CONTACT S Ġ= Ġ 7 9 ; Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( check Self Permission ( Manifest . permission . READ _ CONTACT S ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Contacts (); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permission (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPER MISSION _ REQUEST _ READ _ CONTACT S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequest Ġfor Ġcamera Ġpermission . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ== Ġ 1 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġhas Ġbeen Ġgranted . ĠStart Ġcamera Ġpreview ĠActivity . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget View (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . contacts _ permission _ gr anted , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Contacts () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġrequest Ġwas Ġdenied . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( getView (), ĠR . string . contacts _ permission _ den ied , ĠSn ackbar . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Show Request Permission R ationale ( Manifest . permission . READ _ CONTACT S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget View (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . contact _ access _ required , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). setAction ( R . string . ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . READ _ CONTACT S ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ READ _ CONTACT S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget View (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . contact _ permission _ not _ available , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show (); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . READ _ CONTACT S ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ REQUEST _ READ _ CONTACT S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturn Ġthe Ġinstance Ġof ĠView ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠCoord inator Layout ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget View (): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfindViewById ( android . R . id . content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Contacts () Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( R . id . container , ĠContact s Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} Ċ } Ċ