From 4a43076fc20cad47b8e92790aac370c999bfec31 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 23 Jan 2026 12:11:51 +0100 Subject: [PATCH 1/3] Fix AvatarPickerView touch target and disabled state - Make edit button clickable for better touch accessibility - Hide edit button and erase background when disabled - Extract interactionSource to share between clickable areas --- .../matrix/ui/components/AvatarPickerView.kt | 55 +++++++++++++------ 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarPickerView.kt b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarPickerView.kt index 1c904e891b..68a346ab84 100644 --- a/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarPickerView.kt +++ b/libraries/matrixui/src/main/kotlin/io/element/android/libraries/matrix/ui/components/AvatarPickerView.kt @@ -78,18 +78,19 @@ fun AvatarPickerView( enabled: Boolean = true, ) { val a11yAvatar = stringResource(CommonStrings.a11y_avatar) - - val clickableModifier = Modifier.clickable( - enabled = enabled, - interactionSource = remember { MutableInteractionSource() }, - onClickLabel = onClickLabel, - onClick = onClick, - indication = ripple(bounded = false), - ) - .testTag(TestTags.editAvatar) - .clearAndSetSemantics { - contentDescription = a11yAvatar - } + val interactionSource = remember { MutableInteractionSource() } + val clickableModifier = Modifier + .clickable( + enabled = enabled, + interactionSource = interactionSource, + onClickLabel = onClickLabel, + onClick = onClick, + indication = ripple(bounded = false), + ) + .testTag(TestTags.editAvatar) + .clearAndSetSemantics { + contentDescription = a11yAvatar + } val layoutDirection = LocalLayoutDirection.current @@ -123,18 +124,30 @@ fun AvatarPickerView( buttonSize = state.buttonSize, iconSize = state.iconSize, iconId = state.iconId, - modifier = modifier.padding(state.externalPadding).then(clickableModifier), + modifier = modifier + .padding(state.externalPadding) + .then(clickableModifier), ) } is AvatarPickerState.Selected -> { Box(modifier = modifier) { + val backgroundModifier = if (enabled) { + eraseBackgroundModifier(state.avatarData.size.dp, state.avatarData.size.dp * 0.225f) + } else { + Modifier + } Avatar( avatarData = state.avatarData, avatarType = state.type, - modifier = clickableModifier.then(eraseBackgroundModifier(state.avatarData.size.dp, state.avatarData.size.dp * 0.225f)), + modifier = clickableModifier.then(backgroundModifier), ) - - OverlayEditButton(editButtonSize = state.avatarData.size.dp * 0.44f) + if (enabled) { + OverlayEditButton( + editButtonSize = state.avatarData.size.dp * 0.44f, + onClick = onClick, + interactionSource = interactionSource + ) + } } } } @@ -165,12 +178,18 @@ private fun PickButton( } @Composable -private fun BoxScope.OverlayEditButton(editButtonSize: Dp) { +private fun BoxScope.OverlayEditButton( + editButtonSize: Dp, + onClick: () -> Unit, + interactionSource: MutableInteractionSource +) { Box( - modifier = Modifier.align(Alignment.BottomEnd) + modifier = Modifier + .align(Alignment.BottomEnd) .size(editButtonSize) .offset(x = editButtonSize * 0.266f) .clip(CircleShape) + .clickable(interactionSource = interactionSource, onClick = onClick, indication = null) .background(ElementTheme.colors.bgCanvasDefault) .border(BorderStroke(1.dp, ElementTheme.colors.borderInteractiveSecondary), shape = CircleShape), contentAlignment = Alignment.Center, From a12394a77d003e420f3bb70ae04e70cfcea7c15c Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 23 Jan 2026 12:12:12 +0100 Subject: [PATCH 2/3] Fix RoomDetailsEditView avatar picker for spaces - Use correct AvatarType based on whether editing a space or room - Add roomRawName to remember key to update avatar when name changes - Respect canChangeAvatar state to disable picker when not permitted --- .../features/roomdetailsedit/impl/RoomDetailsEditView.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/features/roomdetailsedit/impl/src/main/kotlin/io/element/android/features/roomdetailsedit/impl/RoomDetailsEditView.kt b/features/roomdetailsedit/impl/src/main/kotlin/io/element/android/features/roomdetailsedit/impl/RoomDetailsEditView.kt index d2de2ba260..3fd9daef3e 100644 --- a/features/roomdetailsedit/impl/src/main/kotlin/io/element/android/features/roomdetailsedit/impl/RoomDetailsEditView.kt +++ b/features/roomdetailsedit/impl/src/main/kotlin/io/element/android/features/roomdetailsedit/impl/RoomDetailsEditView.kt @@ -101,9 +101,9 @@ fun RoomDetailsEditView( .verticalScroll(rememberScrollState()) ) { Spacer(modifier = Modifier.height(24.dp)) - val avatarPickerState = remember(state.roomAvatarUrl) { + val avatarPickerState = remember(state.roomAvatarUrl, state.roomRawName) { val size = AvatarSize.EditRoomDetails - val type = AvatarType.Room() + val type = if (state.isSpace) AvatarType.Space() else AvatarType.Room() AvatarPickerState.Selected( avatarData = AvatarData(id = state.roomId.value, name = state.roomRawName, size = size, url = state.roomAvatarUrl), type = type @@ -112,6 +112,7 @@ fun RoomDetailsEditView( AvatarPickerView( state = avatarPickerState, onClick = ::onAvatarClick, + enabled = state.canChangeAvatar, modifier = Modifier.align(Alignment.CenterHorizontally), ) Spacer(modifier = Modifier.height(32.dp)) From c351256a724e9502f2f11785da6c5d39307e27d2 Mon Sep 17 00:00:00 2001 From: ElementBot Date: Fri, 23 Jan 2026 11:31:45 +0000 Subject: [PATCH 3/3] Update screenshots --- ...ures.roomdetailsedit.impl_RoomDetailsEditView_Day_4_en.png | 4 ++-- ...ures.roomdetailsedit.impl_RoomDetailsEditView_Day_6_en.png | 4 ++-- ...es.roomdetailsedit.impl_RoomDetailsEditView_Night_4_en.png | 4 ++-- ...es.roomdetailsedit.impl_RoomDetailsEditView_Night_6_en.png | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_4_en.png index 596057c7fe..1ed280cd90 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8c00c06c9da1432f196aafa11e529e393f6b03310fa4d9984bf66d4f7faa058 -size 44922 +oid sha256:144ec8da9382f33c7566452515a379eb7fec3e7c1cbd1c6c79a871e12093e6ee +size 48043 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_6_en.png index b4a57f090f..11fb25fb6f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Day_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:13d339ed6e27f32f7820048acf35008f406f7ad2597cf1487a05b0a7e6b1ab5b -size 28289 +oid sha256:fa16dfc8c993212b66a1ac610952bec40ac922bbefae6d69455335e38042aadc +size 26291 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_4_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_4_en.png index eab0932ee8..28b4849ecf 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_4_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_4_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9f9eb9966b578538160a181719f3ea1a22caa0541ccc579f363f9e0f00f5851c -size 43811 +oid sha256:53cf288c75a59cb97d2c0d648273e233b0ac9ba41f04b2cc57f7fe24657cf924 +size 47069 diff --git a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_6_en.png b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_6_en.png index a42d10c37b..45bae9b85f 100644 --- a/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_6_en.png +++ b/tests/uitests/src/test/snapshots/images/features.roomdetailsedit.impl_RoomDetailsEditView_Night_6_en.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0c3abff638ea74e7d2913ce45de920f896b546d705424ea09e10eda4b1ff6072 -size 27467 +oid sha256:992d2a4cafdcfcbf9e1b7517855bad1ec6141152b087012fa32c3da413b98921 +size 25636