store clipboard history as strings, fixes GH-1430

This commit is contained in:
Helium314 2025-03-22 19:34:27 +01:00
parent 9e91e7562b
commit efaddf6c51
2 changed files with 4 additions and 20 deletions

View file

@ -2,18 +2,12 @@
package helium314.keyboard.latin package helium314.keyboard.latin
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
@Serializable @Serializable
data class ClipboardHistoryEntry ( data class ClipboardHistoryEntry (
var timeStamp: Long, var timeStamp: Long,
@Serializable(with = CharSequenceStringSerializer::class) val content: String,
val content: CharSequence,
var isPinned: Boolean = false var isPinned: Boolean = false
) : Comparable<ClipboardHistoryEntry> { ) : Comparable<ClipboardHistoryEntry> {
override fun compareTo(other: ClipboardHistoryEntry): Int { override fun compareTo(other: ClipboardHistoryEntry): Int {
@ -21,13 +15,3 @@ data class ClipboardHistoryEntry (
return if (result != 0) result else other.timeStamp.compareTo(timeStamp) return if (result != 0) result else other.timeStamp.compareTo(timeStamp)
} }
} }
class CharSequenceStringSerializer : KSerializer<CharSequence> {
override val descriptor = PrimitiveSerialDescriptor("CharSequence", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: CharSequence) {
encoder.encodeString(value.toString())
}
override fun deserialize(decoder: Decoder) = decoder.decodeString()
}

View file

@ -61,7 +61,7 @@ class ClipboardHistoryManager(
val content = clipItem.coerceToText(latinIME) val content = clipItem.coerceToText(latinIME)
if (TextUtils.isEmpty(content)) return if (TextUtils.isEmpty(content)) return
val duplicateEntryIndex = historyEntries.indexOfFirst { it.content.toString() == content.toString() } val duplicateEntryIndex = historyEntries.indexOfFirst { it.content == content.toString() }
if (duplicateEntryIndex != -1) { if (duplicateEntryIndex != -1) {
val existingEntry = historyEntries[duplicateEntryIndex] val existingEntry = historyEntries[duplicateEntryIndex]
if (existingEntry.timeStamp == timeStamp) return // nothing to change (may occur frequently starting with API 30) if (existingEntry.timeStamp == timeStamp) return // nothing to change (may occur frequently starting with API 30)
@ -74,9 +74,9 @@ class ClipboardHistoryManager(
onHistoryChangeListener?.onClipboardHistoryEntryMoved(duplicateEntryIndex, newIndex) onHistoryChangeListener?.onClipboardHistoryEntryMoved(duplicateEntryIndex, newIndex)
return return
} }
if (historyEntries.any { it.content.toString() == content.toString() }) return if (historyEntries.any { it.content == content.toString() }) return
val entry = ClipboardHistoryEntry(timeStamp, content) val entry = ClipboardHistoryEntry(timeStamp, content.toString())
historyEntries.add(entry) historyEntries.add(entry)
sortHistoryEntries() sortHistoryEntries()
val at = historyEntries.indexOf(entry) val at = historyEntries.indexOf(entry)