package Ġcontacts . permissions Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . kar umi . dex ter . Dex ter Ċ import Ġcom . kar umi . dex ter . Permission Token Ċ import Ġcom . kar umi . dex ter . listener . Permission Denied Response Ċ import Ġcom . kar umi . dex ter . listener . Permission Granted Response Ċ import Ġcom . kar umi . dex ter . listener . Permission Request Ċ import Ġcom . kar umi . dex ter . listener . single . Composite Permission Listener Ċ import Ġcom . kar umi . dex ter . listener . single . Dialog On Denied Permission Listener Ċ import Ġcom . kar umi . dex ter . listener . single . Permission Listener Ċ import Ġkotlin . coroutines . Continuation Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ internal Ġsuspend Ġfun Ġrequest Permission ( ĊĠĠĠ Ġpermission : ĠString , ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġ// Ġ[ ANDROID ĠX ] Ġ@ String Res Ġ( not Ġusing Ġannotation Ġto Ġavoid Ġdependency Ġon Ġandroidx . annotation ) ĊĠĠĠ Ġpermission Denied Title Res : ĠInt , ĊĠĠĠ Ġpermission Denied Description Res : ĠInt Ċ ): ĠBoolean Ġ= Ġsuspend Coroutine Ġ{ Ġcontinuation Ġ-> ĊĊĠĠĠ ĠDex ter . with Context ( context ) ĊĠĠĠĠĠĠĠ Ġ. with Permission ( permission ) ĊĠĠĠĠĠĠĠ Ġ. with Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComposite Permission Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Dialog On Denied Permission Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Denied Title Res , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpermission Denied Description Res ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCustom Permission Listener ( continu ation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ. check () Ċ } Ċ Ċ private Ġclass ĠCustom Permission Listener ( private Ġval Ġcontinuation : ĠContinu ation < Boolean >) Ġ: ĊĠĠĠ ĠPermission Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Permission Granted ( response : ĠPermission Granted Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinuation . resume ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permission Denied ( response : ĠPermission Denied Response ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcontinuation . resume ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Permission R ationale ShouldBe Shown ( ĊĠĠĠĠĠĠĠ Ġpermission : ĠPermission Request ?, ĊĠĠĠĠĠĠĠ Ġtoken : ĠPermission Token ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoken ?. continue Permission Request () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" FunctionName ") Ċ private Ġfun ĠCustom Dialog On Denied Permission Listener ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġ// Ġ[ ANDROID ĠX ] Ġ@ String Res Ġ( not Ġusing Ġannotation Ġto Ġavoid Ġdependency Ġon Ġandroidx . annotation ) ĊĠĠĠ Ġpermission Denied Title Res : ĠInt , ĊĠĠĠ Ġpermission Denied Description Res : ĠInt Ċ ) Ġ= ĠDialog On Denied Permission Listener . Builder ĊĠĠĠ Ġ. with Context ( context ) ĊĠĠĠ Ġ. with Title ( permission Denied Title Res ) ĊĠĠĠ Ġ. with Message ( permission Denied Description Res ) ĊĠĠĠ Ġ. with ButtonText ( android . R . string . ok ) ĊĠĠĠ Ġ. build ()