Suppress webview / checkbox permission dialog
Signed-off-by: Johannes Marbach <johannesm@element.io>
This commit is contained in:
parent
fd3b082a2c
commit
5c55263cf6
@ -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
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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,21 +65,10 @@ 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)
|
||||||
val requiredAndroidPermissions = selectedPermissions.mapNotNull { permission ->
|
|
||||||
webPermissionToAndroidPermission(permission)
|
|
||||||
}
|
|
||||||
|
|
||||||
// When checkPermissions returns false, some of the required Android permissions will
|
|
||||||
// have to be requested and the flow completes asynchronously via onPermissionResult
|
|
||||||
if (checkPermissions(requiredAndroidPermissions, activity, activityResultLauncher)) {
|
|
||||||
request.grant(selectedPermissions.toTypedArray())
|
|
||||||
reset()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.setNegativeButton(R.string.room_widget_resource_decline_permission) { _, _ ->
|
.setNegativeButton(R.string.room_widget_resource_decline_permission) { _, _ ->
|
||||||
request.deny()
|
request.deny()
|
||||||
@ -76,6 +76,27 @@ class WebviewPermissionUtils @Inject constructor(
|
|||||||
.show()
|
.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)
|
||||||
|
}
|
||||||
|
|
||||||
|
// When checkPermissions returns false, some of the required Android permissions will
|
||||||
|
// have to be requested and the flow completes asynchronously via onPermissionResult
|
||||||
|
if (checkPermissions(requiredAndroidPermissions, activity, activityResultLauncher)) {
|
||||||
|
request.grant(selectedPermissions.toTypedArray())
|
||||||
|
reset()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun onPermissionResult(result: Map<String, Boolean>) {
|
fun onPermissionResult(result: Map<String, Boolean>) {
|
||||||
if (permissionRequest == null) {
|
if (permissionRequest == null) {
|
||||||
fatalError(
|
fatalError(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user