diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelRoomMemberComparator.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelRoomMemberComparator.kt deleted file mode 100644 index a14a0205cc..0000000000 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelRoomMemberComparator.kt +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2025 Element Creations Ltd. - * Copyright 2024, 2025 New Vector Ltd. - * - * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial. - * Please see LICENSE files in the repository root for full details. - */ - -package io.element.android.features.roomdetails.impl.members - -import io.element.android.libraries.matrix.api.room.RoomMember -import io.element.android.libraries.matrix.ui.room.sortingName -import java.text.Collator - -// Comparator used to sort room members by power level (descending) and then by name (ascending) -internal class PowerLevelRoomMemberComparator : Comparator { - // Used to simplify and compare unicode and ASCII chars (รก == a) - private val collator = Collator.getInstance().apply { - decomposition = Collator.CANONICAL_DECOMPOSITION - } - override fun compare(o1: RoomMember, o2: RoomMember): Int { - return when { - o1.powerLevel > o2.powerLevel -> return -1 - o1.powerLevel < o2.powerLevel -> return 1 - else -> { - collator.compare(o1.sortingName(), o2.sortingName()) - } - } - } -} diff --git a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt index 92705b1775..aceb5ee095 100644 --- a/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt +++ b/features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/members/RoomMemberListPresenter.kt @@ -33,6 +33,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembersState import io.element.android.libraries.matrix.api.room.RoomMembershipState import io.element.android.libraries.matrix.api.room.roomMembers import io.element.android.libraries.matrix.api.room.toMatrixUser +import io.element.android.libraries.matrix.ui.room.PowerLevelRoomMemberComparator import io.element.android.libraries.matrix.ui.room.canInviteAsState import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange import kotlinx.collections.immutable.ImmutableMap @@ -54,6 +55,8 @@ class RoomMemberListPresenter( ) : Presenter { var roomMembers: AsyncData by mutableStateOf(AsyncData.Loading()) + private val powerLevelRoomMemberComparator = PowerLevelRoomMemberComparator() + @Composable override fun present(): RoomMemberListState { var searchQuery by rememberSaveable { mutableStateOf("") } @@ -103,7 +106,7 @@ class RoomMemberListPresenter( .map { it.withIdentityState(roomMemberIdentityStates) } .toImmutableList(), joined = members.getOrDefault(RoomMembershipState.JOIN, emptyList()) - .sortedWith(PowerLevelRoomMemberComparator()) + .sortedWith(powerLevelRoomMemberComparator) .map { it.withIdentityState(roomMemberIdentityStates) } .toImmutableList(), banned = members.getOrDefault(RoomMembershipState.BAN, emptyList()) @@ -133,7 +136,7 @@ class RoomMemberListPresenter( .map { it.withIdentityState(roomMemberIdentityStates) } .toImmutableList(), joined = results.getOrDefault(RoomMembershipState.JOIN, emptyList()) - .sortedWith(PowerLevelRoomMemberComparator()) + .sortedWith(powerLevelRoomMemberComparator) .map { it.withIdentityState(roomMemberIdentityStates) } .toImmutableList(), banned = results.getOrDefault(RoomMembershipState.BAN, emptyList()) diff --git a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelBaseRoomMemberComparatorTest.kt b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/room/PowerLevelBaseRoomMemberComparatorTest.kt similarity index 96% rename from features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelBaseRoomMemberComparatorTest.kt rename to libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/room/PowerLevelBaseRoomMemberComparatorTest.kt index ce6a21b0e5..c0f345265f 100644 --- a/features/roomdetails/impl/src/test/kotlin/io/element/android/features/roomdetails/impl/members/PowerLevelBaseRoomMemberComparatorTest.kt +++ b/libraries/matrixui/src/test/kotlin/io/element/android/libraries/matrix/ui/room/PowerLevelBaseRoomMemberComparatorTest.kt @@ -6,7 +6,7 @@ * Please see LICENSE files in the repository root for full details. */ -package io.element.android.features.roomdetails.impl.members +package io.element.android.libraries.matrix.ui.room import io.element.android.libraries.matrix.api.core.UserId import io.element.android.libraries.matrix.test.A_USER_ID @@ -14,6 +14,7 @@ import io.element.android.libraries.matrix.test.A_USER_ID_2 import io.element.android.libraries.matrix.test.A_USER_ID_3 import io.element.android.libraries.matrix.test.A_USER_ID_4 import io.element.android.libraries.matrix.test.A_USER_ID_5 +import io.element.android.libraries.matrix.test.room.aRoomMember import org.junit.Test class PowerLevelBaseRoomMemberComparatorTest {