From cca60ebc3aad6c516eb59db0f7fb2f0fccea4375 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Aug 2026 11:01:54 +0200 Subject: [PATCH 1/2] Limit usage of nullable callback. --- .../api/RoomMemberModerationRenderer.kt | 4 ++-- .../impl/DefaultRoomMemberModerationRenderer.kt | 9 +++++++-- .../impl/RoomMemberModerationView.kt | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/features/roommembermoderation/api/src/main/kotlin/io/element/android/features/roommembermoderation/api/RoomMemberModerationRenderer.kt b/features/roommembermoderation/api/src/main/kotlin/io/element/android/features/roommembermoderation/api/RoomMemberModerationRenderer.kt index 7696f826a1..5a9ba9898d 100644 --- a/features/roommembermoderation/api/src/main/kotlin/io/element/android/features/roommembermoderation/api/RoomMemberModerationRenderer.kt +++ b/features/roommembermoderation/api/src/main/kotlin/io/element/android/features/roommembermoderation/api/RoomMemberModerationRenderer.kt @@ -21,14 +21,14 @@ interface RoomMemberModerationRenderer { * * @param state the state produced by the moderation presenter. * @param onSelectAction called when the user picks an action, so the host screen can navigate if that action needs its own screen. - * @param onAvatarClick called when the user taps the member's avatar, or `null` to make it non-interactive. + * @param onAvatarClick called when the user taps the member's avatar, only if the user has an avatar. * @param modifier layout modifier for the container. */ @Composable fun Render( state: RoomMemberModerationState, onSelectAction: (ModerationAction, MatrixUser) -> Unit, - onAvatarClick: ((MatrixUser) -> Unit)?, + onAvatarClick: (MatrixUser) -> Unit, modifier: Modifier, ) } diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt index 0eeded6434..de941a7970 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/DefaultRoomMemberModerationRenderer.kt @@ -25,11 +25,16 @@ class DefaultRoomMemberModerationRenderer : RoomMemberModerationRenderer { override fun Render( state: RoomMemberModerationState, onSelectAction: (ModerationAction, MatrixUser) -> Unit, - onAvatarClick: ((MatrixUser) -> Unit)?, + onAvatarClick: (MatrixUser) -> Unit, modifier: Modifier ) { if (state is InternalRoomMemberModerationState) { - RoomMemberModerationView(modifier = modifier, state = state, onSelectAction = onSelectAction, onAvatarClick = onAvatarClick) + RoomMemberModerationView( + modifier = modifier, + state = state, + onSelectAction = onSelectAction, + onAvatarClick = onAvatarClick, + ) } else { SideEffect { Timber.d("RoomMemberModerationRenderer: Render called with unsupported state: $state") diff --git a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt index 3ec00fd232..2dd232e9b1 100644 --- a/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt +++ b/features/roommembermoderation/impl/src/main/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationView.kt @@ -66,7 +66,7 @@ import timber.log.Timber fun RoomMemberModerationView( state: InternalRoomMemberModerationState, onSelectAction: (ModerationAction, MatrixUser) -> Unit, - onAvatarClick: ((MatrixUser) -> Unit)?, + onAvatarClick: (MatrixUser) -> Unit, modifier: Modifier = Modifier, ) { Box(modifier = modifier) { @@ -218,7 +218,7 @@ private fun RoomMemberActionsBottomSheet( user: MatrixUser, actions: ImmutableList, onSelectAction: (ModerationAction, MatrixUser) -> Unit, - onAvatarClick: ((MatrixUser) -> Unit)? = null, + onAvatarClick: (MatrixUser) -> Unit, onDismiss: () -> Unit, ) { val coroutineScope = rememberCoroutineScope() @@ -248,10 +248,10 @@ private fun RoomMemberActionsBottomSheet( modifier = Modifier .padding(bottom = 24.dp) .align(Alignment.CenterHorizontally) - .clickable(enabled = user.avatarUrl != null && onAvatarClick != null) { + .clickable(enabled = user.avatarUrl != null) { coroutineScope.launch { bottomSheetState.hide() - onAvatarClick?.invoke(user) + onAvatarClick(user) onDismiss() } } From c4606e59efab49640a18c5e46edef1727242d83f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 28 Aug 2026 19:02:43 +0200 Subject: [PATCH 2/2] Fix test compilation issue. --- .../roommembermoderation/impl/RoomMemberModerationViewTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationViewTest.kt b/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationViewTest.kt index ff7183ed5f..263fb9777c 100644 --- a/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationViewTest.kt +++ b/features/roommembermoderation/impl/src/test/kotlin/io/element/android/features/roommembermoderation/impl/RoomMemberModerationViewTest.kt @@ -218,7 +218,7 @@ class RoomMemberModerationViewTest : RobolectricTest() { private fun AndroidComposeUiTest.setRoomMemberModerationView( state: InternalRoomMemberModerationState, onSelectAction: (ModerationAction, MatrixUser) -> Unit = EnsureNeverCalledWithTwoParams(), - onAvatarClick: ((MatrixUser) -> Unit)? = EnsureNeverCalledWithParam(), + onAvatarClick: (MatrixUser) -> Unit = EnsureNeverCalledWithParam(), ) { setSafeContent { RoomMemberModerationView(