Properly handle multiple permissions requests (#3411)

* Properly handle multiple permissions requests

* Removed empty newline at the beginning of the block
This commit is contained in:
Stefano Semeraro 2023-03-10 19:16:23 +01:00 committed by GitHub
parent 52c2f3a8c5
commit e63d8b33f3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -140,9 +140,11 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
}
private val ioScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job())
private val requestPermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) {
webView.reload()
private val requestPermissions =
registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
if (it.any { it.value }) {
webView.reload()
}
}
private val requestStoragePermission =
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted ->
@ -499,6 +501,8 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
override fun onPermissionRequest(request: PermissionRequest?) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val alreadyGranted = ArrayList<String>()
val toBeGranted = ArrayList<String>()
request?.resources?.forEach {
if (it == PermissionRequest.RESOURCE_VIDEO_CAPTURE) {
if (ActivityCompat.checkSelfPermission(
@ -506,9 +510,9 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
android.Manifest.permission.CAMERA
) == PackageManager.PERMISSION_GRANTED
) {
request.grant(arrayOf(it))
alreadyGranted.add(it)
} else {
requestPermission.launch(android.Manifest.permission.CAMERA)
toBeGranted.add(android.Manifest.permission.CAMERA)
}
} else if (it == PermissionRequest.RESOURCE_AUDIO_CAPTURE) {
if (ActivityCompat.checkSelfPermission(
@ -516,22 +520,20 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi
android.Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED
) {
request.grant(arrayOf(it))
alreadyGranted.add(it)
} else {
requestPermission.launch(
android.Manifest.permission.RECORD_AUDIO
)
}
} else if (it == PermissionRequest.RESOURCE_AUDIO_CAPTURE) {
if (ActivityCompat.checkSelfPermission(
context,
android.Manifest.permission.MODIFY_AUDIO_SETTINGS
) == PackageManager.PERMISSION_GRANTED
) {
request.grant(arrayOf(it))
toBeGranted.add(android.Manifest.permission.RECORD_AUDIO)
}
}
}
if (alreadyGranted.size > 0) {
request?.grant(alreadyGranted.toTypedArray())
}
if (toBeGranted.size > 0) {
requestPermissions.launch(
toBeGranted.toTypedArray()
)
}
} else {
// If we are before M we already have permission, just grant it.
request?.grant(request.resources)