mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-04 20:01:55 +00:00
Remove class duplication.
This commit is contained in:
-30
@@ -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<RoomMember> {
|
|
||||||
// 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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+5
-2
@@ -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.RoomMembershipState
|
||||||
import io.element.android.libraries.matrix.api.room.roomMembers
|
import io.element.android.libraries.matrix.api.room.roomMembers
|
||||||
import io.element.android.libraries.matrix.api.room.toMatrixUser
|
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.canInviteAsState
|
||||||
import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange
|
import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange
|
||||||
import kotlinx.collections.immutable.ImmutableMap
|
import kotlinx.collections.immutable.ImmutableMap
|
||||||
@@ -54,6 +55,8 @@ class RoomMemberListPresenter(
|
|||||||
) : Presenter<RoomMemberListState> {
|
) : Presenter<RoomMemberListState> {
|
||||||
var roomMembers: AsyncData<RoomMembers> by mutableStateOf(AsyncData.Loading())
|
var roomMembers: AsyncData<RoomMembers> by mutableStateOf(AsyncData.Loading())
|
||||||
|
|
||||||
|
private val powerLevelRoomMemberComparator = PowerLevelRoomMemberComparator()
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): RoomMemberListState {
|
override fun present(): RoomMemberListState {
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
@@ -103,7 +106,7 @@ class RoomMemberListPresenter(
|
|||||||
.map { it.withIdentityState(roomMemberIdentityStates) }
|
.map { it.withIdentityState(roomMemberIdentityStates) }
|
||||||
.toImmutableList(),
|
.toImmutableList(),
|
||||||
joined = members.getOrDefault(RoomMembershipState.JOIN, emptyList())
|
joined = members.getOrDefault(RoomMembershipState.JOIN, emptyList())
|
||||||
.sortedWith(PowerLevelRoomMemberComparator())
|
.sortedWith(powerLevelRoomMemberComparator)
|
||||||
.map { it.withIdentityState(roomMemberIdentityStates) }
|
.map { it.withIdentityState(roomMemberIdentityStates) }
|
||||||
.toImmutableList(),
|
.toImmutableList(),
|
||||||
banned = members.getOrDefault(RoomMembershipState.BAN, emptyList())
|
banned = members.getOrDefault(RoomMembershipState.BAN, emptyList())
|
||||||
@@ -133,7 +136,7 @@ class RoomMemberListPresenter(
|
|||||||
.map { it.withIdentityState(roomMemberIdentityStates) }
|
.map { it.withIdentityState(roomMemberIdentityStates) }
|
||||||
.toImmutableList(),
|
.toImmutableList(),
|
||||||
joined = results.getOrDefault(RoomMembershipState.JOIN, emptyList())
|
joined = results.getOrDefault(RoomMembershipState.JOIN, emptyList())
|
||||||
.sortedWith(PowerLevelRoomMemberComparator())
|
.sortedWith(powerLevelRoomMemberComparator)
|
||||||
.map { it.withIdentityState(roomMemberIdentityStates) }
|
.map { it.withIdentityState(roomMemberIdentityStates) }
|
||||||
.toImmutableList(),
|
.toImmutableList(),
|
||||||
banned = results.getOrDefault(RoomMembershipState.BAN, emptyList())
|
banned = results.getOrDefault(RoomMembershipState.BAN, emptyList())
|
||||||
|
|||||||
+2
-1
@@ -6,7 +6,7 @@
|
|||||||
* Please see LICENSE files in the repository root for full details.
|
* 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.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
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_3
|
||||||
import io.element.android.libraries.matrix.test.A_USER_ID_4
|
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.A_USER_ID_5
|
||||||
|
import io.element.android.libraries.matrix.test.room.aRoomMember
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class PowerLevelBaseRoomMemberComparatorTest {
|
class PowerLevelBaseRoomMemberComparatorTest {
|
||||||
Reference in New Issue
Block a user