diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatDeserializer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatDeserializer.kt index 1033d005bce7fc658a70871323e80603ea6eea3d..51035256600bbda617cd635e0fa30b07a70b3941 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatDeserializer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/IrcFormatDeserializer.kt @@ -196,16 +196,32 @@ class IrcFormatDeserializer(private val context: Context) { plainText.append(str.substring(i - normalCount, i)) normalCount = 0 - val colorStart = i + 1 - val colorEnd = findEndOfHexNumber(str, colorStart) + val foregroundStart = i + 1 + val foregroundEnd = findEndOfHexNumber(str, foregroundStart) // If we have a foreground element - if (colorEnd > colorStart) { - val foreground = readHexNumber(str, colorStart, colorEnd) + if (foregroundEnd > foregroundStart) { + val foreground = readHexNumber(str, foregroundStart, foregroundEnd) + + var background: Int = -1 + var backgroundEnd = -1 + // If we have a background code, read it + if (str.length > foregroundEnd && str[foregroundEnd] == ',') { + backgroundEnd = findEndOfHexNumber(str, foregroundEnd + 1) + background = readHexNumber(str, foregroundEnd + 1, backgroundEnd) + } + // If previous element was also a color element, try to reuse background + if (hexColor != null) { + // Apply old format + if (colorize) hexColor.apply(plainText, plainText.length) + // Reuse old background, if possible + if (background == -1) + background = hexColor.format.background + } // Add new format - hexColor = FormatDescription(plainText.length, HexIrcFormat(foreground)) + hexColor = FormatDescription(plainText.length, HexIrcFormat(foreground, background)) // i points in front of the next character - i = colorEnd - 1 + i = (if (backgroundEnd == -1) foregroundEnd else backgroundEnd) - 1 // Otherwise assume this is a closing tag } else if (hexColor != null) { @@ -326,13 +342,21 @@ class IrcFormatDeserializer(private val context: Context) { } } - private inner class HexIrcFormat(val color: Int) : IrcFormat { + private inner class HexIrcFormat(val foreground: Int, val background: Int) : IrcFormat { override fun applyTo(editable: SpannableStringBuilder, from: Int, to: Int) { - editable.setSpan( - IrcHexColorSpan(color or 0xFFFFFF.inv()), from, to, - Spanned.SPAN_INCLUSIVE_EXCLUSIVE - ) + if (foreground >= 0) { + editable.setSpan( + IrcHexForegroundColorSpan(foreground or 0xFFFFFF.inv()), from, to, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE + ) + } + if (background >= 0) { + editable.setSpan( + IrcHexBackgroundColorSpan(background or 0xFFFFFF.inv()), from, to, + Spanned.SPAN_INCLUSIVE_EXCLUSIVE + ) + } } } diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexBackgroundColorSpan.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexBackgroundColorSpan.kt new file mode 100644 index 0000000000000000000000000000000000000000..a7b4f87f6f6f8ab10b3b5083257a531705f5cdbd --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexBackgroundColorSpan.kt @@ -0,0 +1,9 @@ +package de.kuschku.quasseldroid_ng.util.irc.format.spans + +import android.support.annotation.ColorInt +import android.text.style.BackgroundColorSpan + +class IrcHexBackgroundColorSpan(@ColorInt color: Int) : BackgroundColorSpan(color), + Copyable<IrcHexBackgroundColorSpan> { + override fun copy() = IrcHexBackgroundColorSpan(backgroundColor) +} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexColorSpan.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexColorSpan.kt deleted file mode 100644 index ef9e33e96ce8ac34c977d515d9f0c829f8ce8530..0000000000000000000000000000000000000000 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexColorSpan.kt +++ /dev/null @@ -1,9 +0,0 @@ -package de.kuschku.quasseldroid_ng.util.irc.format.spans - -import android.support.annotation.ColorInt -import android.text.style.ForegroundColorSpan - -class IrcHexColorSpan(@ColorInt color: Int) : ForegroundColorSpan(color), - Copyable<IrcHexColorSpan> { - override fun copy() = IrcHexColorSpan(foregroundColor) -} diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexForegroundColorSpan.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexForegroundColorSpan.kt new file mode 100644 index 0000000000000000000000000000000000000000..b46ce023c29b0fa75878c8b2271cffbe1949c9e3 --- /dev/null +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/util/irc/format/spans/IrcHexForegroundColorSpan.kt @@ -0,0 +1,9 @@ +package de.kuschku.quasseldroid_ng.util.irc.format.spans + +import android.support.annotation.ColorInt +import android.text.style.ForegroundColorSpan + +class IrcHexForegroundColorSpan(@ColorInt color: Int) : ForegroundColorSpan(color), + Copyable<IrcHexForegroundColorSpan> { + override fun copy() = IrcHexForegroundColorSpan(foregroundColor) +}