Skip to content
Snippets Groups Projects
Verified Commit a5f7e89b authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Fixes #117

parent a48008d5
Branches
Tags
No related merge requests found
Pipeline #
......@@ -42,6 +42,7 @@ import de.kuschku.quasseldroid.util.avatars.AvatarHelper
import de.kuschku.quasseldroid.util.helper.styledAttributes
import de.kuschku.quasseldroid.util.helper.visibleIf
import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
import de.kuschku.quasseldroid.util.ui.SpanFormatter
import de.kuschku.quasseldroid.util.ui.TextDrawable
import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage
......@@ -55,7 +56,8 @@ import kotlin.math.roundToInt
class QuasselMessageRenderer @Inject constructor(
context: Context,
private val messageSettings: MessageSettings,
private val contentFormatter: ContentFormatter
private val contentFormatter: ContentFormatter,
private val ircFormatDeserializer: IrcFormatDeserializer
) : MessageRenderer {
private val timeFormatter = DateTimeFormatter.ofPattern(
timePattern(messageSettings.showSeconds, messageSettings.use24hClock)
......@@ -85,6 +87,12 @@ class QuasselMessageRenderer @Inject constructor(
}
}
private val monochromeHighlights = context.theme.styledAttributes(
R.attr.colorForegroundHighlightMonochrome
) {
getBoolean(0, false)
}
private val selfColor: Int = context.theme.styledAttributes(R.attr.colorForegroundSecondary) {
getColor(0, 0)
}
......@@ -111,19 +119,19 @@ class QuasselMessageRenderer @Inject constructor(
isEmoji: Boolean) {
if (hasHighlight) {
viewHolder.itemView.context.theme.styledAttributes(
R.attr.colorForegroundHighlight, R.attr.colorBackgroundHighlight,
R.attr.backgroundMenuItem
R.attr.colorForegroundHighlight, R.attr.colorForegroundHighlightSecondary,
R.attr.colorBackgroundHighlight, R.attr.backgroundMenuItem
) {
viewHolder.timeLeft?.setTextColor(getColor(0, 0))
viewHolder.timeRight?.setTextColor(getColor(0, 0))
viewHolder.name?.setTextColor(getColor(0, 0))
viewHolder.realname?.setTextColor(getColor(0, 0))
viewHolder.timeLeft?.setTextColor(getColor(1, 0))
viewHolder.timeRight?.setTextColor(getColor(1, 0))
viewHolder.name?.setTextColor(getColor(1, 0))
viewHolder.realname?.setTextColor(getColor(1, 0))
viewHolder.combined?.setTextColor(getColor(0, 0))
viewHolder.content?.setTextColor(getColor(0, 0))
viewHolder.itemView.background = LayerDrawable(
arrayOf(
ColorDrawable(getColor(1, 0)),
getDrawable(2)
ColorDrawable(getColor(2, 0)),
getDrawable(3)
)
)
}
......@@ -197,20 +205,22 @@ class QuasselMessageRenderer @Inject constructor(
).roundToInt()
val self = message.content.flag.hasFlag(Message_Flag.Self)
val highlight = message.content.flag.hasFlag(Message_Flag.Highlight)
val highlight__ = message.content.flag.hasFlag(Message_Flag.Highlight)
val monochromeForeground = highlight__ && monochromeHighlights
return when (message.content.type.enabledValues().firstOrNull()) {
Message_Type.Plain -> {
val realName = contentFormatter.formatContent(message.content.realName, highlight)
val realName = ircFormatDeserializer.formatString(message.content.realName,
!monochromeForeground)
val nick = SpannableStringBuilder().apply {
append(contentFormatter.formatPrefix(message.content.senderPrefixes))
append(contentFormatter.formatNick(
message.content.sender,
self,
highlight,
monochromeForeground,
false
))
}
val content = contentFormatter.formatContent(message.content.content, highlight)
val content = contentFormatter.formatContent(message.content.content, monochromeForeground)
val nickName = HostmaskHelper.nick(message.content.sender)
val senderColorIndex = SenderColorUtil.senderColor(nickName)
val rawInitial = nickName.trimStart('-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\')
......@@ -254,8 +264,8 @@ class QuasselMessageRenderer @Inject constructor(
combined = SpanFormatter.format(
context.getString(R.string.message_format_action),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender, self, highlight, false),
contentFormatter.formatContent(message.content.content, highlight)
contentFormatter.formatNick(message.content.sender, self, monochromeForeground, false),
contentFormatter.formatContent(message.content.content, monochromeForeground)
),
hasDayChange = message.hasDayChange,
isMarkerLine = message.isMarkerLine,
......@@ -269,8 +279,8 @@ class QuasselMessageRenderer @Inject constructor(
combined = SpanFormatter.format(
context.getString(R.string.message_format_notice),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender, self, highlight, false),
contentFormatter.formatContent(message.content.content, highlight)
contentFormatter.formatNick(message.content.sender, self, monochromeForeground, false),
contentFormatter.formatContent(message.content.content, monochromeForeground)
),
hasDayChange = message.hasDayChange,
isMarkerLine = message.isMarkerLine,
......@@ -287,15 +297,30 @@ class QuasselMessageRenderer @Inject constructor(
SpanFormatter.format(
context.getString(R.string.message_format_nick_self),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender, nickSelf, highlight, false)
contentFormatter.formatNick(
message.content.sender,
nickSelf,
monochromeForeground,
false
)
)
} else {
SpanFormatter.format(
context.getString(R.string.message_format_nick),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender, nickSelf, highlight, false),
contentFormatter.formatNick(
message.content.sender,
nickSelf,
monochromeForeground,
false
),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.content, nickSelf, highlight, false)
contentFormatter.formatNick(
message.content.content,
nickSelf,
monochromeForeground,
false
)
)
},
hasDayChange = message.hasDayChange,
......@@ -312,7 +337,7 @@ class QuasselMessageRenderer @Inject constructor(
context.getString(R.string.message_format_mode),
message.content.content,
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender, self, highlight, false)
contentFormatter.formatNick(message.content.sender, self, monochromeForeground, false)
),
hasDayChange = message.hasDayChange,
isMarkerLine = message.isMarkerLine,
......@@ -326,10 +351,12 @@ class QuasselMessageRenderer @Inject constructor(
combined = SpanFormatter.format(
context.getString(R.string.message_format_join),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
monochromeForeground,
messageSettings.showHostmaskActions
),
message.content.content
),
hasDayChange = message.hasDayChange,
......@@ -345,20 +372,24 @@ class QuasselMessageRenderer @Inject constructor(
SpanFormatter.format(
context.getString(R.string.message_format_part_1),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions)
monochromeForeground,
messageSettings.showHostmaskActions
)
)
} else {
SpanFormatter.format(
context.getString(R.string.message_format_part_2),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
contentFormatter.formatContent(message.content.content, highlight)
monochromeForeground,
messageSettings.showHostmaskActions
),
contentFormatter.formatContent(message.content.content, monochromeForeground)
)
},
hasDayChange = message.hasDayChange,
......@@ -374,20 +405,24 @@ class QuasselMessageRenderer @Inject constructor(
SpanFormatter.format(
context.getString(R.string.message_format_quit_1),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions)
monochromeForeground,
messageSettings.showHostmaskActions
)
)
} else {
SpanFormatter.format(
context.getString(R.string.message_format_quit_2),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
contentFormatter.formatContent(message.content.content, highlight)
monochromeForeground,
messageSettings.showHostmaskActions
),
contentFormatter.formatContent(message.content.content, monochromeForeground)
)
},
hasDayChange = message.hasDayChange,
......@@ -404,23 +439,27 @@ class QuasselMessageRenderer @Inject constructor(
combined = if (reason.isBlank()) {
SpanFormatter.format(
context.getString(R.string.message_format_kick_1),
contentFormatter.formatNick(user, false, highlight, false),
contentFormatter.formatNick(user, false, monochromeForeground, false),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions)
monochromeForeground,
messageSettings.showHostmaskActions
)
)
} else {
SpanFormatter.format(
context.getString(R.string.message_format_kick_2),
contentFormatter.formatNick(user, false, highlight, false),
contentFormatter.formatNick(user, false, monochromeForeground, false),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
contentFormatter.formatContent(reason, highlight)
monochromeForeground,
messageSettings.showHostmaskActions
),
contentFormatter.formatContent(reason, monochromeForeground)
)
},
hasDayChange = message.hasDayChange,
......@@ -438,23 +477,27 @@ class QuasselMessageRenderer @Inject constructor(
combined = if (reason.isBlank()) {
SpanFormatter.format(
context.getString(R.string.message_format_kill_1),
contentFormatter.formatNick(user, false, highlight, false),
contentFormatter.formatNick(user, false, monochromeForeground, false),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions)
monochromeForeground,
messageSettings.showHostmaskActions
)
)
} else {
SpanFormatter.format(
context.getString(R.string.message_format_kill_2),
contentFormatter.formatNick(user, false, highlight, false),
contentFormatter.formatNick(user, false, monochromeForeground, false),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
contentFormatter.formatContent(reason, highlight)
monochromeForeground,
messageSettings.showHostmaskActions
),
contentFormatter.formatContent(reason, monochromeForeground)
)
},
hasDayChange = message.hasDayChange,
......@@ -503,7 +546,7 @@ class QuasselMessageRenderer @Inject constructor(
id = message.content.messageId,
time = timeFormatter.format(message.content.time.atZone(zoneId)),
dayChange = formatDayChange(message),
combined = contentFormatter.formatContent(message.content.content, highlight),
combined = contentFormatter.formatContent(message.content.content, monochromeForeground),
hasDayChange = message.hasDayChange,
isMarkerLine = message.isMarkerLine,
isExpanded = message.isExpanded,
......@@ -513,7 +556,7 @@ class QuasselMessageRenderer @Inject constructor(
id = message.content.messageId,
time = timeFormatter.format(message.content.time.atZone(zoneId)),
dayChange = formatDayChange(message),
combined = contentFormatter.formatContent(message.content.content, highlight),
combined = contentFormatter.formatContent(message.content.content, monochromeForeground),
hasDayChange = message.hasDayChange,
isMarkerLine = message.isMarkerLine,
isExpanded = message.isExpanded,
......@@ -538,10 +581,12 @@ class QuasselMessageRenderer @Inject constructor(
"[%d] %s%s: %s",
message.content.type.toInt(),
contentFormatter.formatPrefix(message.content.senderPrefixes),
contentFormatter.formatNick(message.content.sender,
contentFormatter.formatNick(
message.content.sender,
self,
highlight,
messageSettings.showHostmaskActions),
monochromeForeground,
messageSettings.showHostmaskActions
),
message.content.content
),
hasDayChange = message.hasDayChange,
......
......@@ -87,7 +87,7 @@
android:layout_gravity="center_vertical"
android:ellipsize="marquee"
android:singleLine="true"
android:textColor="?attr/colorForeground"
android:textColor="?attr/colorForegroundSecondary"
android:visibility="gone"
tools:text="@sample/messages.json/data/sender"
tools:visibility="visible" />
......
......@@ -39,11 +39,14 @@
<!-- Background and foreground colors for UI -->
<attr name="colorForeground" format="color" />
<attr name="colorForegroundHighlight" format="color" />
<attr name="colorForegroundHighlightSecondary" format="color" />
<attr name="colorForegroundSecondary" format="color" />
<attr name="colorForegroundNotice" format="color" />
<attr name="colorForegroundAction" format="color" />
<attr name="colorForegroundError" format="color" />
<attr name="colorForegroundHighlightMonochrome" format="boolean" />
<attr name="colorForegroundMirc" format="integer" />
<attr name="colorTextPrimary" format="color" />
......
......@@ -52,6 +52,7 @@
<item name="colorForeground">#FFFFFF</item>
<item name="colorForegroundHighlight">#FFFFFF</item>
<item name="colorForegroundHighlightSecondary">#B3FFFFFF</item>
<item name="colorForegroundSecondary">#B3FFFFFF</item>
<item name="colorForegroundAction">#7986cb</item>
<item name="colorForegroundNotice">#916409</item>
......
......@@ -101,6 +101,8 @@
<item name="colorDivider">#1FFFFFFF</item>
<item name="android:textColorHint">?colorTextSecondary</item>
<item name="colorForegroundHighlightMonochrome">false</item>
<item name="colorFill">@color/colorFillDark</item>
<item name="colorOffline">@color/colorOfflineDark</item>
<item name="colorAway">@color/colorAwayDark</item>
......@@ -137,6 +139,8 @@
<item name="colorDivider">#1F000000</item>
<item name="android:textColorHint">?colorTextSecondary</item>
<item name="colorForegroundHighlightMonochrome">false</item>
<item name="colorFill">@color/colorFillLight</item>
<item name="colorOffline">@color/colorOfflineLight</item>
<item name="colorAway">@color/colorAwayLight</item>
......
......@@ -46,6 +46,7 @@
<item name="colorForeground">#f8f8f2</item>
<item name="colorForegroundHighlight">#f8f8f2</item>
<item name="colorForegroundHighlightSecondary">#6272a4</item>
<item name="colorForegroundSecondary">#6272a4</item>
<item name="colorForegroundAction">#50fa7b</item>
<item name="colorForegroundNotice">#44475a</item>
......
......@@ -46,6 +46,7 @@
<item name="colorForeground">#3c3836</item>
<item name="colorForegroundHighlight">#3c3836</item>
<item name="colorForegroundHighlightSecondary">#665c54</item>
<item name="colorForegroundSecondary">#665c54</item>
<item name="colorForegroundAction">#076678</item>
<item name="colorForegroundNotice">#b57614</item>
......@@ -106,6 +107,7 @@
<item name="colorForeground">#dbdbb2</item>
<item name="colorForegroundHighlight">#dbdbb2</item>
<item name="colorForegroundHighlightSecondary">#bdae93</item>
<item name="colorForegroundSecondary">#bdae93</item>
<item name="colorForegroundAction">#458588</item>
<item name="colorForegroundNotice">#d79921</item>
......
......@@ -48,6 +48,7 @@
<item name="colorForeground">#DE000000</item>
<item name="colorForegroundHighlight">#DE000000</item>
<item name="colorForegroundHighlightSecondary">#8A000000</item>
<item name="colorForegroundSecondary">#8A000000</item>
<item name="colorForegroundAction">#01579B</item>
<item name="colorForegroundNotice">#B56A00</item>
......@@ -101,6 +102,7 @@
<item name="colorForeground">#FFFFFF</item>
<item name="colorForegroundHighlight">#FFFFFF</item>
<item name="colorForegroundHighlightSecondary">#B3FFFFFF</item>
<item name="colorForegroundSecondary">#B3FFFFFF</item>
<item name="colorForegroundAction">#448AFF</item>
<item name="colorForegroundNotice">#FFD740</item>
......
......@@ -48,11 +48,14 @@
<item name="colorForeground">#DE000000</item>
<item name="colorForegroundHighlight">#DE000000</item>
<item name="colorForegroundHighlightSecondary">#8A000000</item>
<item name="colorForegroundSecondary">#8A000000</item>
<item name="colorForegroundAction">#1a237e</item>
<item name="colorForegroundNotice">#916409</item>
<item name="colorForegroundError">#800000</item>
<item name="colorForegroundHighlightMonochrome">true</item>
<item name="colorForegroundMirc">0x1</item>
<item name="android:windowBackground">@color/quassel_light_background</item>
......@@ -101,11 +104,14 @@
<item name="colorForeground">#FFFFFF</item>
<item name="colorForegroundHighlight">#DE000000</item>
<item name="colorForegroundHighlightSecondary">#8A000000</item>
<item name="colorForegroundSecondary">#B3FFFFFF</item>
<item name="colorForegroundAction">#7986cb</item>
<item name="colorForegroundNotice">#916409</item>
<item name="colorForegroundError">#800000</item>
<item name="colorForegroundHighlightMonochrome">true</item>
<item name="colorForegroundMirc">0x0</item>
<item name="android:windowBackground">@color/quassel_dark_background</item>
......
......@@ -46,6 +46,7 @@
<item name="colorForeground">#586e75</item>
<item name="colorForegroundHighlight">#586e75</item>
<item name="colorForegroundHighlightSecondary">#657b83</item>
<item name="colorForegroundSecondary">#657b83</item>
<item name="colorForegroundAction">#268BD2</item>
<item name="colorForegroundNotice">#B58900</item>
......@@ -106,6 +107,7 @@
<item name="colorForeground">#93a1a1</item>
<item name="colorForegroundHighlight">#93a1a1</item>
<item name="colorForegroundHighlightSecondary">#839496</item>
<item name="colorForegroundSecondary">#839496</item>
<item name="colorForegroundAction">#268BD2</item>
<item name="colorForegroundNotice">#B58900</item>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment