PermissionsEvents -> PermissionsEvent

This commit is contained in:
Benoit Marty 2025-12-10 10:50:10 +01:00
parent fa3274e135
commit 8a7e71b49e
13 changed files with 43 additions and 43 deletions

View file

@ -8,8 +8,8 @@
package io.element.android.libraries.permissions.api
sealed interface PermissionsEvents {
data object RequestPermissions : PermissionsEvents
data object CloseDialog : PermissionsEvents
data object OpenSystemSettingAndCloseDialog : PermissionsEvents
sealed interface PermissionsEvent {
data object RequestPermissions : PermissionsEvent
data object CloseDialog : PermissionsEvent
data object OpenSystemSettingAndCloseDialog : PermissionsEvent
}

View file

@ -17,5 +17,5 @@ data class PermissionsState(
val permissionAlreadyAsked: Boolean,
// If true, there is no need to ask again, the system dialog will not be displayed
val permissionAlreadyDenied: Boolean,
val eventSink: (PermissionsEvents) -> Unit
val eventSink: (PermissionsEvent) -> Unit
)

View file

@ -35,9 +35,9 @@ fun PermissionsView(
content = content ?: state.permission.toDialogContent(),
submitText = stringResource(id = CommonStrings.action_open_settings),
onSubmitClick = {
state.eventSink.invoke(PermissionsEvents.OpenSystemSettingAndCloseDialog)
state.eventSink.invoke(PermissionsEvent.OpenSystemSettingAndCloseDialog)
},
onDismiss = { state.eventSink.invoke(PermissionsEvents.CloseDialog) },
onDismiss = { state.eventSink.invoke(PermissionsEvent.CloseDialog) },
icon = icon,
)
}

View file

@ -28,7 +28,7 @@ import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import dev.zacsweers.metro.ContributesBinding
import io.element.android.libraries.core.log.logger.LoggerTag
import io.element.android.libraries.permissions.api.PermissionsEvents
import io.element.android.libraries.permissions.api.PermissionsEvent
import io.element.android.libraries.permissions.api.PermissionsPresenter
import io.element.android.libraries.permissions.api.PermissionsState
import io.element.android.libraries.permissions.api.PermissionsStore
@ -100,19 +100,19 @@ class DefaultPermissionsPresenter(
val showDialog = rememberSaveable { mutableStateOf(false) }
fun handleEvent(event: PermissionsEvents) {
fun handleEvent(event: PermissionsEvent) {
when (event) {
PermissionsEvents.CloseDialog -> {
PermissionsEvent.CloseDialog -> {
showDialog.value = false
}
PermissionsEvents.RequestPermissions -> {
PermissionsEvent.RequestPermissions -> {
if (permissionState.status !is PermissionStatus.Granted && isAlreadyDenied) {
showDialog.value = true
} else {
permissionState.launchPermissionRequest()
}
}
PermissionsEvents.OpenSystemSettingAndCloseDialog -> {
PermissionsEvent.OpenSystemSettingAndCloseDialog -> {
permissionActions.openSettings(permission)
showDialog.value = false
}

View file

@ -13,7 +13,7 @@ package io.element.android.libraries.permissions.impl
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionStatus
import com.google.common.truth.Truth.assertThat
import io.element.android.libraries.permissions.api.PermissionsEvents
import io.element.android.libraries.permissions.api.PermissionsEvent
import io.element.android.libraries.permissions.api.PermissionsStore
import io.element.android.libraries.permissions.impl.action.FakePermissionActions
import io.element.android.libraries.permissions.impl.action.PermissionActions
@ -64,10 +64,10 @@ class DefaultPermissionsPresenterTest {
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
val withDialogState = awaitItem()
assertThat(withDialogState.showDialog).isTrue()
withDialogState.eventSink.invoke(PermissionsEvents.CloseDialog)
withDialogState.eventSink.invoke(PermissionsEvent.CloseDialog)
assertThat(awaitItem().showDialog).isFalse()
}
}
@ -95,11 +95,11 @@ class DefaultPermissionsPresenterTest {
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
val withDialogState = awaitItem()
assertThat(withDialogState.showDialog).isTrue()
openSettingsAction.assertions().isNeverCalled()
withDialogState.eventSink.invoke(PermissionsEvents.OpenSystemSettingAndCloseDialog)
withDialogState.eventSink.invoke(PermissionsEvent.OpenSystemSettingAndCloseDialog)
assertThat(awaitItem().showDialog).isFalse()
openSettingsAction.assertions().isCalledOnce().with(value(A_PERMISSION))
}
@ -119,7 +119,7 @@ class DefaultPermissionsPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
assertThat(permissionState.launchPermissionRequestCalled).isTrue()
// User does not grant permission
permissionStateProvider.userGiveAnswer(answer = false, firstTime = true)
@ -146,7 +146,7 @@ class DefaultPermissionsPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
assertThat(permissionState.launchPermissionRequestCalled).isTrue()
// User does not grant permission
permissionStateProvider.userGiveAnswer(answer = false, firstTime = false)
@ -178,7 +178,7 @@ class DefaultPermissionsPresenterTest {
presenter.test {
skipItems(1)
val initialState = awaitItem()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
val withDialogState = awaitItem()
assertThat(withDialogState.showDialog).isTrue()
assertThat(withDialogState.permissionGranted).isFalse()
@ -201,7 +201,7 @@ class DefaultPermissionsPresenterTest {
presenter.test {
val initialState = awaitItem()
assertThat(initialState.showDialog).isFalse()
initialState.eventSink.invoke(PermissionsEvents.RequestPermissions)
initialState.eventSink.invoke(PermissionsEvent.RequestPermissions)
assertThat(permissionState.launchPermissionRequestCalled).isTrue()
// User grants permission
permissionStateProvider.userGiveAnswer(answer = true, firstTime = true)

View file

@ -10,7 +10,7 @@ package io.element.android.libraries.permissions.test
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import io.element.android.libraries.permissions.api.PermissionsEvents
import io.element.android.libraries.permissions.api.PermissionsEvent
import io.element.android.libraries.permissions.api.PermissionsPresenter
import io.element.android.libraries.permissions.api.PermissionsState
import io.element.android.libraries.permissions.api.aPermissionsState
@ -18,11 +18,11 @@ import io.element.android.libraries.permissions.api.aPermissionsState
class FakePermissionsPresenter(
private val initialState: PermissionsState = aPermissionsState(showDialog = false),
) : PermissionsPresenter {
private fun handleEvent(event: PermissionsEvents) {
private fun handleEvent(event: PermissionsEvent) {
when (event) {
PermissionsEvents.RequestPermissions -> state.value = state.value.copy(showDialog = true, permissionAlreadyAsked = true)
PermissionsEvents.CloseDialog -> state.value = state.value.copy(showDialog = false)
PermissionsEvents.OpenSystemSettingAndCloseDialog -> state.value = state.value.copy(showDialog = false)
PermissionsEvent.RequestPermissions -> state.value = state.value.copy(showDialog = true, permissionAlreadyAsked = true)
PermissionsEvent.CloseDialog -> state.value = state.value.copy(showDialog = false)
PermissionsEvent.OpenSystemSettingAndCloseDialog -> state.value = state.value.copy(showDialog = false)
}
}