Replace PriorityQueue with CopyOnWriteArrayList in FcitxRemoteService

PriorityQueue's iterator does not guarantee the traverse order
https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html#iterator--
This commit is contained in:
Rocka 2026-06-26 22:25:22 +08:00
parent 736d782bd8
commit e1371c95c5
No known key found for this signature in database
GPG Key ID: 28031158FFDD6853

View File

@ -1,6 +1,6 @@
/*
* SPDX-License-Identifier: LGPL-2.1-or-later
* SPDX-FileCopyrightText: Copyright 2021-2023 Fcitx5 for Android Contributors
* SPDX-FileCopyrightText: Copyright 2021-2026 Fcitx5 for Android Contributors
*/
package org.fcitx.fcitx5.android
@ -27,7 +27,7 @@ import org.fcitx.fcitx5.android.utils.Const
import org.fcitx.fcitx5.android.utils.desc
import org.fcitx.fcitx5.android.utils.descEquals
import timber.log.Timber
import java.util.PriorityQueue
import java.util.concurrent.CopyOnWriteArrayList
class FcitxRemoteService : Service() {
@ -35,8 +35,7 @@ class FcitxRemoteService : Service() {
private val scope = MainScope() + CoroutineName("FcitxRemoteService")
private val clipboardTransformers =
PriorityQueue<IClipboardEntryTransformer>(3, compareByDescending { it.priority })
private val clipboardTransformers = CopyOnWriteArrayList<IClipboardEntryTransformer>()
private fun transformClipboard(source: String): String {
var result = source
@ -75,6 +74,7 @@ class FcitxRemoteService : Service() {
Timber.d("registerClipboardEntryTransformer: ${transformer.desc}")
if (transformer.description.isNullOrBlank()) {
Timber.w("Cannot register ClipboardEntryTransformer of null or empty description")
return
}
if (clipboardTransformers.any { it.descEquals(transformer) }) {
Timber.w("ClipboardEntryTransformer ${transformer.desc} has already been registered")
@ -85,6 +85,7 @@ class FcitxRemoteService : Service() {
unregisterClipboardEntryTransformer(transformer)
}, 0)
clipboardTransformers.add(transformer)
clipboardTransformers.sortByDescending { it.priority }
updateClipboardManager()
}
}