лучший способ найти, адаптировав решение здесь - это во-первых, создать такой интерфейс
interface RunExpression{
fun expression()}
затем использовать интерфейс в сигнатуре функции
fun permissionExecution(childFragment: Fragment, permission : String, runExpression: RunExpression) {
Dexter.withActivity(childFragment.requireActivity())
.withPermission(permission)
.withListener(object : PermissionListener {
override fun onPermissionGranted(response: PermissionGrantedResponse?) {
runExpression.expression()
}
override fun onPermissionRationaleShouldBeShown(
permission: PermissionRequest?,
token: PermissionToken
) {
token.continuePermissionRequest()
}
override fun onPermissionDenied(response: PermissionDeniedResponse) {
if(response.isPermanentlyDenied) {
openSettings(childFragment)
}
}
}).check()}
затем, где бы я ни хотел вызвать функцию, я сохраняю анонимный объект, реализующий интерфейс, в переменную
val startMyActivity = object : RunExpression {
override fun expression() {
startActivityForResult(intent, PICK_CONTACT)
}
}
, затем вызываю функцию с переменной
permissionExecution(this, Manifest.permission.READ_CONTACTS, startMyActivity)