mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-26 22:25:38 +01:00
sort reaction lists
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
2aa7a5eb67
commit
660c3401f2
@ -54,6 +54,8 @@ import io.reactivex.Observer
|
|||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
import io.reactivex.schedulers.Schedulers
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
import java.util.Collections
|
||||||
|
import java.util.Comparator
|
||||||
|
|
||||||
@AutoInjector(NextcloudTalkApplication::class)
|
@AutoInjector(NextcloudTalkApplication::class)
|
||||||
class ShowReactionsDialog(
|
class ShowReactionsDialog(
|
||||||
@ -161,6 +163,8 @@ class ShowReactionsDialog(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.sort(reactionVoters, ReactionComparator(userEntity?.userId))
|
||||||
|
|
||||||
adapter?.list?.addAll(reactionVoters)
|
adapter?.list?.addAll(reactionVoters)
|
||||||
adapter?.notifyDataSetChanged()
|
adapter?.notifyDataSetChanged()
|
||||||
} else {
|
} else {
|
||||||
@ -222,4 +226,122 @@ class ShowReactionsDialog(
|
|||||||
companion object {
|
companion object {
|
||||||
const val TAG = "ShowReactionsDialog"
|
const val TAG = "ShowReactionsDialog"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ReactionComparator(val activeUser: String?) : Comparator<ReactionItem> {
|
||||||
|
override fun compare(reactionItem1: ReactionItem?, reactionItem2: ReactionItem?): Int {
|
||||||
|
// sort by emoji, own account, display-name, timestamp, actor-id
|
||||||
|
|
||||||
|
if (reactionItem1 == null && reactionItem2 == null) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if (reactionItem1 == null) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
if (reactionItem2 == null) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// emoji
|
||||||
|
val reaction = StringComparator().compare(reactionItem1.reaction, reactionItem2.reaction)
|
||||||
|
if (reaction != 0) {
|
||||||
|
return reaction
|
||||||
|
}
|
||||||
|
|
||||||
|
// own account
|
||||||
|
val ownAccount = compareOwnAccount(
|
||||||
|
activeUser,
|
||||||
|
reactionItem1.reactionVoter.actorId,
|
||||||
|
reactionItem2.reactionVoter.actorId
|
||||||
|
)
|
||||||
|
|
||||||
|
if (ownAccount != 0) {
|
||||||
|
return ownAccount
|
||||||
|
}
|
||||||
|
|
||||||
|
// display-name
|
||||||
|
val displayName = StringComparator()
|
||||||
|
.compare(
|
||||||
|
reactionItem1.reactionVoter.actorDisplayName,
|
||||||
|
reactionItem2.reactionVoter.actorDisplayName
|
||||||
|
)
|
||||||
|
|
||||||
|
if (displayName != 0) {
|
||||||
|
return displayName
|
||||||
|
}
|
||||||
|
|
||||||
|
// timestamp
|
||||||
|
val timestamp = LongComparator()
|
||||||
|
.compare(
|
||||||
|
reactionItem1.reactionVoter.timestamp,
|
||||||
|
reactionItem2.reactionVoter.timestamp
|
||||||
|
)
|
||||||
|
|
||||||
|
if (timestamp != 0) {
|
||||||
|
return timestamp
|
||||||
|
}
|
||||||
|
|
||||||
|
// actor-id
|
||||||
|
val actorId = StringComparator()
|
||||||
|
.compare(
|
||||||
|
reactionItem1.reactionVoter.actorId,
|
||||||
|
reactionItem2.reactionVoter.actorId
|
||||||
|
)
|
||||||
|
|
||||||
|
if (actorId != 0) {
|
||||||
|
return actorId
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fun compareOwnAccount(activeUser: String?, actorId1: String?, actorId2: String?): Int {
|
||||||
|
val reactionVote1Active = activeUser == actorId1
|
||||||
|
val reactionVote2Active = activeUser == actorId2
|
||||||
|
|
||||||
|
if (!reactionVote1Active && !reactionVote2Active || reactionVote1Active && reactionVote2Active) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if (activeUser == null) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reactionVote1Active) {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
if (reactionVote2Active) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class StringComparator : Comparator<String?> {
|
||||||
|
override fun compare(obj1: String?, obj2: String?): Int {
|
||||||
|
if (obj1 === obj2) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if (obj1 == null) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return if (obj2 == null) {
|
||||||
|
1
|
||||||
|
} else obj1.lowercase().compareTo(obj2.lowercase())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class LongComparator : Comparator<Long?> {
|
||||||
|
override fun compare(obj1: Long?, obj2: Long?): Int {
|
||||||
|
if (obj1 === obj2) {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
if (obj1 == null) {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
return if (obj2 == null) {
|
||||||
|
1
|
||||||
|
} else obj1.compareTo(obj2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user