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, request = request,
context = requireContext(), context = requireContext(),
activity = requireActivity(), activity = requireActivity(),
activityResultLauncher = permissionResultLauncher activityResultLauncher = permissionResultLauncher,
autoApprove = fragmentArgs.kind == WidgetKind.ELEMENT_CALL
) )
} }

View File

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