Suppress webview / checkbox permission dialog

Signed-off-by: Johannes Marbach <johannesm@element.io>
This commit is contained in:
Johannes Marbach 2022-07-07 08:46:47 +02:00 committed by Onuray Sahin
parent fd3b082a2c
commit 5c55263cf6
2 changed files with 37 additions and 15 deletions

View File

@ -298,7 +298,8 @@ class WidgetFragment @Inject constructor(
request = request,
context = requireContext(),
activity = requireActivity(),
activityResultLauncher = permissionResultLauncher
activityResultLauncher = permissionResultLauncher,
autoApprove = fragmentArgs.kind == WidgetKind.ELEMENT_CALL
)
}

View File

@ -41,11 +41,22 @@ class WebviewPermissionUtils @Inject constructor(
request: PermissionRequest,
context: Context,
activity: FragmentActivity,
activityResultLauncher: ActivityResultLauncher<Array<String>>
activityResultLauncher: ActivityResultLauncher<Array<String>>,
autoApprove: Boolean = false
) {
if (autoApprove) {
onPermissionsSelected(
permissions = request.resources.toList(),
request = request,
activity = activity,
activityResultLauncher = activityResultLauncher)
return
}
val allowedPermissions = request.resources.map {
it to false
}.toMutableList()
MaterialAlertDialogBuilder(context)
.setTitle(title)
.setMultiChoiceItems(
@ -54,10 +65,25 @@ class WebviewPermissionUtils @Inject constructor(
allowedPermissions[which] = allowedPermissions[which].first to isChecked
}
.setPositiveButton(R.string.room_widget_resource_grant_permission) { _, _ ->
permissionRequest = request
selectedPermissions = allowedPermissions.mapNotNull { perm ->
val permissions = allowedPermissions.mapNotNull { perm ->
perm.first.takeIf { perm.second }
}
onPermissionsSelected(permissions, request, activity, activityResultLauncher)
}
.setNegativeButton(R.string.room_widget_resource_decline_permission) { _, _ ->
request.deny()
}
.show()
}
private fun onPermissionsSelected(
permissions: List<String>,
request: PermissionRequest,
activity: FragmentActivity,
activityResultLauncher: ActivityResultLauncher<Array<String>>,
) {
permissionRequest = request
selectedPermissions = permissions
val requiredAndroidPermissions = selectedPermissions.mapNotNull { permission ->
webPermissionToAndroidPermission(permission)
@ -70,11 +96,6 @@ class WebviewPermissionUtils @Inject constructor(
reset()
}
}
.setNegativeButton(R.string.room_widget_resource_decline_permission) { _, _ ->
request.deny()
}
.show()
}
fun onPermissionResult(result: Map<String, Boolean>) {
if (permissionRequest == null) {