mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 06:55:41 +00:00
Add ForceRequestPermissions event to bypass soft-denial intercept
This commit is contained in:
+16
@@ -9,7 +9,23 @@
|
|||||||
package io.element.android.libraries.permissions.api
|
package io.element.android.libraries.permissions.api
|
||||||
|
|
||||||
sealed interface PermissionsEvent {
|
sealed interface PermissionsEvent {
|
||||||
|
/**
|
||||||
|
* Request the runtime permission. If the app has already recorded a soft denial for this
|
||||||
|
* permission, this event is intercepted to raise [PermissionsState.showDialog] instead of
|
||||||
|
* hitting the OS — the intent is for the caller to render `PermissionsView` to prompt the
|
||||||
|
* user to open system settings.
|
||||||
|
*
|
||||||
|
* If the caller renders its own "already denied" UI and wants the OS prompt regardless,
|
||||||
|
* use [ForceRequestPermissions].
|
||||||
|
*/
|
||||||
data object RequestPermissions : PermissionsEvent
|
data object RequestPermissions : PermissionsEvent
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as [RequestPermissions] but bypasses the soft-denial intercept — always launches
|
||||||
|
* the OS permission dialog. The OS may still auto-deny for permanently-denied permissions.
|
||||||
|
*/
|
||||||
|
data object ForceRequestPermissions : PermissionsEvent
|
||||||
|
|
||||||
data object CloseDialog : PermissionsEvent
|
data object CloseDialog : PermissionsEvent
|
||||||
data object OpenSystemSettingAndCloseDialog : PermissionsEvent
|
data object OpenSystemSettingAndCloseDialog : PermissionsEvent
|
||||||
}
|
}
|
||||||
|
|||||||
+3
@@ -112,6 +112,9 @@ class DefaultPermissionsPresenter(
|
|||||||
permissionState.launchPermissionRequest()
|
permissionState.launchPermissionRequest()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
PermissionsEvent.ForceRequestPermissions -> {
|
||||||
|
permissionState.launchPermissionRequest()
|
||||||
|
}
|
||||||
PermissionsEvent.OpenSystemSettingAndCloseDialog -> {
|
PermissionsEvent.OpenSystemSettingAndCloseDialog -> {
|
||||||
permissionActions.openSettings(permission)
|
permissionActions.openSettings(permission)
|
||||||
showDialog.value = false
|
showDialog.value = false
|
||||||
|
|||||||
+1
@@ -21,6 +21,7 @@ class FakePermissionsPresenter(
|
|||||||
private fun handleEvent(event: PermissionsEvent) {
|
private fun handleEvent(event: PermissionsEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
PermissionsEvent.RequestPermissions -> state.value = state.value.copy(showDialog = true, permissionAlreadyAsked = true)
|
PermissionsEvent.RequestPermissions -> state.value = state.value.copy(showDialog = true, permissionAlreadyAsked = true)
|
||||||
|
PermissionsEvent.ForceRequestPermissions -> state.value = state.value.copy(permissionAlreadyAsked = true)
|
||||||
PermissionsEvent.CloseDialog -> state.value = state.value.copy(showDialog = false)
|
PermissionsEvent.CloseDialog -> state.value = state.value.copy(showDialog = false)
|
||||||
PermissionsEvent.OpenSystemSettingAndCloseDialog -> state.value = state.value.copy(showDialog = false)
|
PermissionsEvent.OpenSystemSettingAndCloseDialog -> state.value = state.value.copy(showDialog = false)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user