package com.amazonaws.ivs.basicbroadcast.activities import android.Manifest import android.annotation.SuppressLint import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.content.PermissionChecker.PERMISSION_GRANTED import java.util.* @SuppressLint("Registered") open class PermissionActivity : AppCompatActivity() { private val permissionRequestHistory = hashMapOf Unit>() private fun hasCameraPermission(): Boolean = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PERMISSION_GRANTED private fun hasRecordAudioPermission(): Boolean = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) == PERMISSION_GRANTED fun arePermissionsGranted(): Boolean = hasCameraPermission() && hasRecordAudioPermission() fun askForPermissions(callback: (granted: Boolean) -> Unit) { run { val permissions = arrayListOf() if (!hasCameraPermission()) { permissions.add(Manifest.permission.CAMERA) } if (!hasRecordAudioPermission()) { permissions.add(Manifest.permission.RECORD_AUDIO) } if (permissions.isNotEmpty()) { val requestCode = Date().time.toInt().low16bits() permissionRequestHistory[requestCode] = callback ActivityCompat.requestPermissions(this, permissions.toTypedArray(), requestCode) } else { callback(true) } } } fun initWithPermissions(callback: () -> Unit) { if (!arePermissionsGranted()) { askForPermissions { success -> if (success) callback.invoke() } } else { callback.invoke() } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { super.onRequestPermissionsResult(requestCode, permissions, grantResults) permissionRequestHistory[requestCode]?.run { this(grantResults.isNotEmpty() && grantResults[0] == PERMISSION_GRANTED) permissionRequestHistory.remove(requestCode) } } private fun Int.low16bits() = this and 0xFFFF }