From 7ec2b08de074b64efc0d5d97930214672115d36b Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 3 Jun 2019 22:27:31 +0200
Subject: [PATCH] Implement colorful nicknames/idents/hosts

---
 .../service/QuasselNotificationBackend.kt     |  6 ++--
 .../quasseldroid/settings/MessageSettings.kt  |  4 +--
 .../kuschku/quasseldroid/settings/Settings.kt |  2 +-
 .../quasseldroid/ui/chat/ToolbarFragment.kt   |  6 ++--
 .../ui/chat/add/query/QueryCreateFragment.kt  | 33 +++++--------------
 .../ui/chat/archive/ArchiveListAdapter.kt     |  8 ++---
 .../ui/chat/buffers/BufferListAdapter.kt      |  6 ++--
 .../ui/chat/input/AutoCompleteHelper.kt       | 32 ++++--------------
 .../ui/chat/input/ChatlineFragment.kt         |  5 +++
 .../chat/messages/QuasselMessageRenderer.kt   | 12 +++----
 .../ui/chat/nicks/NickListFragment.kt         | 32 +++++-------------
 .../ui/chat/topic/TopicFragment.kt            |  5 +++
 .../aliasitem/AliasItemFragment.kt            |  5 +++
 .../ui/info/user/UserInfoFragment.kt          | 23 +++++++++----
 .../util/irc/format/ContentFormatter.kt       |  6 ++--
 .../util/ui/presenter/BufferPresenter.kt      | 16 +++++++--
 .../viewmodel/data/BufferProps.kt             |  1 +
 17 files changed, 93 insertions(+), 109 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
index 72cc885b0..686616d11 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
@@ -304,11 +304,11 @@ class QuasselNotificationBackend @Inject constructor(
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
         val senderColor = when (messageSettings.colorizeNicknames) {
-          MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
-          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+          MessageSettings.SenderColorMode.ALL          -> senderColors[senderColorIndex]
+          MessageSettings.SenderColorMode.ALL_BUT_MINE ->
             if (self) selfColor
             else senderColors[senderColorIndex]
-          MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+          MessageSettings.SenderColorMode.NONE         -> selfColor
         }
 
         val avatarList = AvatarHelper.avatar(messageSettings, ident, realName, avatarUrl, size)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
index a914d9d42..5e5b90e65 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt
@@ -21,7 +21,7 @@ package de.kuschku.quasseldroid.settings
 
 data class MessageSettings(
   val showPrefix: ShowPrefixMode = ShowPrefixMode.HIGHEST,
-  val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE,
+  val colorizeNicknames: SenderColorMode = SenderColorMode.ALL_BUT_MINE,
   val colorizeMirc: Boolean = true,
   val useMonospace: Boolean = false,
   val textSize: Int = 14,
@@ -41,7 +41,7 @@ data class MessageSettings(
   val replaceEmoji: Boolean = true
 ) {
 
-  enum class ColorizeNicknamesMode {
+  enum class SenderColorMode {
     ALL,
     ALL_BUT_MINE,
     NONE;
diff --git a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
index 69341309b..fd17b1204 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt
@@ -79,7 +79,7 @@ object Settings {
           ""
         ) ?: ""
       ) ?: MessageSettings.DEFAULT.showPrefix,
-      colorizeNicknames = MessageSettings.ColorizeNicknamesMode.of(
+      colorizeNicknames = MessageSettings.SenderColorMode.of(
         getString(
           context.getString(R.string.preference_colorize_nicknames_key),
           ""
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
index f503d82bf..2dfe1990a 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/ToolbarFragment.kt
@@ -114,10 +114,10 @@ class ToolbarFragment : ServiceBoundFragment() {
 
         val nickName = user.nick()
         val useSelfColor = when (messageSettings.colorizeNicknames) {
-          MessageSettings.ColorizeNicknamesMode.ALL          -> false
-          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+          MessageSettings.SenderColorMode.ALL          -> false
+          MessageSettings.SenderColorMode.ALL_BUT_MINE ->
             user.network().isMyNick(nickName)
-          MessageSettings.ColorizeNicknamesMode.NONE         -> true
+          MessageSettings.SenderColorMode.NONE         -> true
         }
 
         val fallbackDrawable = colorContext.buildTextDrawable(user.nick(), useSelfColor)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
index 95c12d4bd..559c2af0d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/add/query/QueryCreateFragment.kt
@@ -19,13 +19,9 @@
 
 package de.kuschku.quasseldroid.ui.chat.add.query
 
-import android.graphics.Typeface
 import android.os.Bundle
 import android.text.Editable
-import android.text.SpannableString
 import android.text.TextWatcher
-import android.text.style.ForegroundColorSpan
-import android.text.style.StyleSpan
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -65,6 +61,7 @@ import de.kuschku.quasseldroid.util.avatars.AvatarHelper
 import de.kuschku.quasseldroid.util.helper.loadWithFallbacks
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.toLiveData
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
 import de.kuschku.quasseldroid.viewmodel.data.Avatar
@@ -98,6 +95,9 @@ class QueryCreateFragment : ServiceBoundFragment() {
   @Inject
   lateinit var modelHelper: QueryCreateViewModelHelper
 
+  @Inject
+  lateinit var contentFormatter: ContentFormatter
+
   private var hasSelectedNetwork = false
   private var networkId = NetworkId(0)
 
@@ -260,30 +260,13 @@ class QueryCreateFragment : ServiceBoundFragment() {
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
         val useSelfColor = when (messageSettings.colorizeNicknames) {
-          MessageSettings.ColorizeNicknamesMode.ALL          -> false
-          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE -> it.self
-          MessageSettings.ColorizeNicknamesMode.NONE         -> true
+          MessageSettings.SenderColorMode.ALL          -> false
+          MessageSettings.SenderColorMode.ALL_BUT_MINE -> it.self
+          MessageSettings.SenderColorMode.NONE         -> true
         }
         val senderColor = if (useSelfColor) selfColor else senderColors[senderColorIndex]
-
-        fun formatNick(nick: CharSequence): CharSequence {
-          val spannableString = SpannableString(nick)
-          spannableString.setSpan(
-            ForegroundColorSpan(senderColor),
-            0,
-            nick.length,
-            SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-          )
-          spannableString.setSpan(
-            StyleSpan(Typeface.BOLD),
-            0,
-            nick.length,
-            SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-          )
-          return spannableString
-        }
         it.copy(
-          displayNick = formatNick(it.nick),
+          displayNick = contentFormatter.formatNick(it.nick),
           fallbackDrawable = colorContext.buildTextDrawable(initial, senderColor),
           initial = initial,
           modes = when (messageSettings.showPrefix) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
index cfd355e21..4b710ec4d 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/archive/ArchiveListAdapter.kt
@@ -297,7 +297,7 @@ class ArchiveListAdapter(
         }
 
         override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
-          name.text = item.props.network.networkName
+          name.text = item.props.name
           bufferId = item.props.info.bufferId
           networkId = item.props.info.networkId
 
@@ -396,7 +396,7 @@ class ArchiveListAdapter(
         override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
           bufferId = item.props.info.bufferId
 
-          name.text = item.props.info.bufferName
+          name.text = item.props.name
           description.text = item.props.description
 
           name.setTextColor(
@@ -487,7 +487,7 @@ class ArchiveListAdapter(
         override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
           bufferId = item.props.info.bufferId
 
-          name.text = item.props.info.bufferName
+          name.text = item.props.name
           description.text = item.props.description
 
           name.setTextColor(
@@ -573,7 +573,7 @@ class ArchiveListAdapter(
         override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
           bufferId = item.props.info.bufferId
 
-          name.text = item.props.info.bufferName
+          name.text = item.props.name
           description.text = item.props.description
 
           name.setTextColor(
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
index 5fd727f29..7ffba7ff2 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/buffers/BufferListAdapter.kt
@@ -218,7 +218,7 @@ class BufferListAdapter(
       }
 
       override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
-        name.text = item.props.network.networkName
+        name.text = item.props.name
         bufferId = item.props.info.bufferId
         networkId = item.props.info.networkId
 
@@ -317,7 +317,7 @@ class BufferListAdapter(
       override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
         bufferId = item.props.info.bufferId
 
-        name.text = item.props.info.bufferName
+        name.text = item.props.name
         description.text = item.props.description
 
         name.setTextColor(
@@ -408,7 +408,7 @@ class BufferListAdapter(
       override fun bind(item: BufferListItem, messageSettings: MessageSettings) {
         bufferId = item.props.info.bufferId
 
-        name.text = item.props.info.bufferName
+        name.text = item.props.name
         description.text = item.props.description
 
         name.setTextColor(
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
index a3250d1de..99b4da160 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/AutoCompleteHelper.kt
@@ -19,10 +19,6 @@
 
 package de.kuschku.quasseldroid.ui.chat.input
 
-import android.graphics.Typeface
-import android.text.SpannableString
-import android.text.style.ForegroundColorSpan
-import android.text.style.StyleSpan
 import androidx.fragment.app.FragmentActivity
 import androidx.lifecycle.Observer
 import de.kuschku.libquassel.protocol.BufferId
@@ -45,6 +41,7 @@ import de.kuschku.quasseldroid.util.avatars.AvatarHelper
 import de.kuschku.quasseldroid.util.emoji.EmojiData
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.toLiveData
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.viewmodel.data.AutoCompleteItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferStatus
@@ -56,6 +53,7 @@ class AutoCompleteHelper(
   private val autoCompleteSettings: AutoCompleteSettings,
   private val messageSettings: MessageSettings,
   private val ircFormatDeserializer: IrcFormatDeserializer,
+  private val contentFormatter: ContentFormatter,
   private val helper: EditorViewModelHelper
 ) {
   private var autocompleteListener: ((AutoCompletionState) -> Unit)? = null
@@ -110,31 +108,13 @@ class AutoCompleteHelper(
                              ?: nickName.firstOrNull()
             val initial = rawInitial?.toUpperCase().toString()
             val useSelfColor = when (messageSettings.colorizeNicknames) {
-              MessageSettings.ColorizeNicknamesMode.ALL          -> false
-              MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE -> it.self
-              MessageSettings.ColorizeNicknamesMode.NONE         -> true
+              MessageSettings.SenderColorMode.ALL          -> false
+              MessageSettings.SenderColorMode.ALL_BUT_MINE -> it.self
+              MessageSettings.SenderColorMode.NONE         -> true
             }
             val senderColor = if (useSelfColor) selfColor else senderColors[senderColorIndex]
-
-            fun formatNick(nick: CharSequence): CharSequence {
-              val spannableString = SpannableString(nick)
-              spannableString.setSpan(
-                ForegroundColorSpan(senderColor),
-                0,
-                nick.length,
-                SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-              )
-              spannableString.setSpan(
-                StyleSpan(Typeface.BOLD),
-                0,
-                nick.length,
-                SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-              )
-              return spannableString
-            }
-
             it.copy(
-              displayNick = formatNick(it.nick),
+              displayNick = contentFormatter.formatNick(it.nick),
               fallbackDrawable = colorContext.buildTextDrawable(initial, senderColor),
               modes = when (messageSettings.showPrefix) {
                 MessageSettings.ShowPrefixMode.ALL ->
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
index 6b5375b9a..6ff86d51b 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/input/ChatlineFragment.kt
@@ -41,6 +41,7 @@ import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.util.emoji.EmojiData
 import de.kuschku.quasseldroid.util.helper.*
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
@@ -87,6 +88,9 @@ class ChatlineFragment : ServiceBoundFragment() {
   @Inject
   lateinit var ircFormatDeserializer: IrcFormatDeserializer
 
+  @Inject
+  lateinit var contentFormatter: ContentFormatter
+
   @Inject
   lateinit var ircFormatSerializer: IrcFormatSerializer
 
@@ -120,6 +124,7 @@ class ChatlineFragment : ServiceBoundFragment() {
       autoCompleteSettings,
       messageSettings,
       ircFormatDeserializer,
+      contentFormatter,
       modelHelper
     )
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
index 38203fe9b..b57c6cda5 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/QuasselMessageRenderer.kt
@@ -266,10 +266,10 @@ class QuasselMessageRenderer @Inject constructor(
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
         val useSelfColor = when (messageSettings.colorizeNicknames) {
-          MessageSettings.ColorizeNicknamesMode.ALL          -> false
-          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+          MessageSettings.SenderColorMode.ALL          -> false
+          MessageSettings.SenderColorMode.ALL_BUT_MINE ->
             message.content.flag.hasFlag(Message_Flag.Self)
-          MessageSettings.ColorizeNicknamesMode.NONE         -> true
+          MessageSettings.SenderColorMode.NONE         -> true
         }
         val senderColor = if (useSelfColor) selfColor else senderColors[senderColorIndex]
 
@@ -301,10 +301,10 @@ class QuasselMessageRenderer @Inject constructor(
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
         val useSelfColor = when (messageSettings.colorizeNicknames) {
-          MessageSettings.ColorizeNicknamesMode.ALL          -> false
-          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+          MessageSettings.SenderColorMode.ALL          -> false
+          MessageSettings.SenderColorMode.ALL_BUT_MINE ->
             message.content.flag.hasFlag(Message_Flag.Self)
-          MessageSettings.ColorizeNicknamesMode.NONE         -> true
+          MessageSettings.SenderColorMode.NONE         -> true
         }
         val senderColor = if (useSelfColor) selfColor else senderColors[senderColorIndex]
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
index db1387923..fa596d38c 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/nicks/NickListFragment.kt
@@ -19,11 +19,7 @@
 
 package de.kuschku.quasseldroid.ui.chat.nicks
 
-import android.graphics.Typeface
 import android.os.Bundle
-import android.text.SpannableString
-import android.text.style.ForegroundColorSpan
-import android.text.style.StyleSpan
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -53,6 +49,7 @@ import de.kuschku.quasseldroid.util.avatars.AvatarHelper
 import de.kuschku.quasseldroid.util.helper.loadWithFallbacks
 import de.kuschku.quasseldroid.util.helper.styledAttributes
 import de.kuschku.quasseldroid.util.helper.toLiveData
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
 import de.kuschku.quasseldroid.viewmodel.data.Avatar
@@ -73,6 +70,9 @@ class NickListFragment : ServiceBoundFragment() {
   @Inject
   lateinit var ircFormatDeserializer: IrcFormatDeserializer
 
+  @Inject
+  lateinit var contentFormatter: ContentFormatter
+
   @Inject
   lateinit var modelHelper: ChatViewModelHelper
 
@@ -115,30 +115,14 @@ class NickListFragment : ServiceBoundFragment() {
                              .firstOrNull() ?: nickName.firstOrNull()
           val initial = rawInitial?.toUpperCase().toString()
           val useSelfColor = when (messageSettings.colorizeNicknames) {
-            MessageSettings.ColorizeNicknamesMode.ALL          -> false
-            MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE -> it.self
-            MessageSettings.ColorizeNicknamesMode.NONE         -> true
+            MessageSettings.SenderColorMode.ALL          -> false
+            MessageSettings.SenderColorMode.ALL_BUT_MINE -> it.self
+            MessageSettings.SenderColorMode.NONE         -> true
           }
           val senderColor = if (useSelfColor) selfColor else senderColors[senderColorIndex]
 
-          fun formatNick(nick: CharSequence): CharSequence {
-            val spannableString = SpannableString(nick)
-            spannableString.setSpan(
-              ForegroundColorSpan(senderColor),
-              0,
-              nick.length,
-              SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-            )
-            spannableString.setSpan(
-              StyleSpan(Typeface.BOLD),
-              0,
-              nick.length,
-              SpannableString.SPAN_INCLUSIVE_EXCLUSIVE
-            )
-            return spannableString
-          }
           it.copy(
-            displayNick = formatNick(it.nick),
+            displayNick = contentFormatter.formatNick(it.nick),
             fallbackDrawable = colorContext.buildTextDrawable(initial, senderColor),
             initial = initial,
             modes = when (messageSettings.showPrefix) {
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
index f13e82e10..6451c31e4 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/topic/TopicFragment.kt
@@ -38,6 +38,7 @@ import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.ui.chat.input.*
 import de.kuschku.quasseldroid.util.helper.toLiveData
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
 import de.kuschku.quasseldroid.util.ui.settings.fragment.Savable
@@ -67,6 +68,9 @@ class TopicFragment : ServiceBoundSettingsFragment(), Savable {
   @Inject
   lateinit var formatDeserializer: IrcFormatDeserializer
 
+  @Inject
+  lateinit var contentFormatter: ContentFormatter
+
   @Inject
   lateinit var formatSerializer: IrcFormatSerializer
 
@@ -88,6 +92,7 @@ class TopicFragment : ServiceBoundSettingsFragment(), Savable {
       autoCompleteSettings,
       messageSettings,
       formatDeserializer,
+      contentFormatter,
       modelHelper
     )
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemFragment.kt
index c47dc3268..bdd711fc1 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/coresettings/aliasitem/AliasItemFragment.kt
@@ -38,6 +38,7 @@ import de.kuschku.quasseldroid.settings.AppearanceSettings
 import de.kuschku.quasseldroid.settings.AutoCompleteSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.ui.chat.input.*
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatSerializer
 import de.kuschku.quasseldroid.util.ui.settings.fragment.Changeable
@@ -71,6 +72,9 @@ class AliasItemFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
   @Inject
   lateinit var formatDeserializer: IrcFormatDeserializer
 
+  @Inject
+  lateinit var contentFormatter: ContentFormatter
+
   @Inject
   lateinit var formatSerializer: IrcFormatSerializer
 
@@ -99,6 +103,7 @@ class AliasItemFragment : ServiceBoundSettingsFragment(), Savable, Changeable {
       autoCompleteSettings,
       messageSettings,
       formatDeserializer,
+      contentFormatter,
       modelHelper
     )
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
index f74eb7a91..10f728033 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/info/user/UserInfoFragment.kt
@@ -61,6 +61,7 @@ import de.kuschku.quasseldroid.util.avatars.MatrixApi
 import de.kuschku.quasseldroid.util.avatars.MatrixAvatarInfo
 import de.kuschku.quasseldroid.util.helper.*
 import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
+import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.util.irc.format.spans.IrcItalicSpan
 import de.kuschku.quasseldroid.util.service.ServiceBoundFragment
 import de.kuschku.quasseldroid.util.ui.BetterLinkMovementMethod
@@ -133,6 +134,9 @@ class UserInfoFragment : ServiceBoundFragment() {
   @Inject
   lateinit var contentFormatter: ContentFormatter
 
+  @Inject
+  lateinit var ircFormatDeserializer: IrcFormatDeserializer
+
   @Inject
   lateinit var messageSettings: MessageSettings
 
@@ -318,8 +322,7 @@ class UserInfoFragment : ServiceBoundFragment() {
             }
           }
         }
-
-        nick.text = user.nick
+        nick.text = ircFormatDeserializer.formatString(user.nick, messageSettings.colorizeMirc)
         val (content, _) = contentFormatter.formatContent(
           user.realName ?: "",
           networkId = user.networkId
@@ -337,11 +340,19 @@ class UserInfoFragment : ServiceBoundFragment() {
         account.text = user.account
         accountContainer.visibleIf(!user.account.isNullOrBlank())
 
-        ident.text = user.user
-        identContainer.visibleIf(!user.user.isNullOrBlank())
+        val (userIdent, _) = contentFormatter.formatContent(
+          user.user ?: "",
+          networkId = user.networkId
+        )
+        ident.text = userIdent
+        identContainer.visibleIf(userIdent.isNotBlank())
 
-        host.text = user.host
-        hostContainer.visibleIf(!user.host.isNullOrBlank())
+        val (userHost, _) = contentFormatter.formatContent(
+          user.host ?: "",
+          networkId = user.networkId
+        )
+        host.text = userHost
+        hostContainer.visibleIf(userHost.isNotBlank())
 
         server.text = user.server
         serverContainer.visibleIf(!user.server.isNullOrBlank())
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt
index 994875db4..f9ce95699 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/irc/format/ContentFormatter.kt
@@ -183,11 +183,11 @@ class ContentFormatter @Inject constructor(
                  showHostmask: Boolean = false, senderColors: IntArray = this.senderColors,
                  @ColorInt selfColor: Int = this.selfColor) =
     when (messageSettings.colorizeNicknames) {
-      MessageSettings.ColorizeNicknamesMode.ALL          ->
+      MessageSettings.SenderColorMode.ALL          ->
         formatNickImpl(sender, false, !highlight, showHostmask, senderColors, selfColor)
-      MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+      MessageSettings.SenderColorMode.ALL_BUT_MINE ->
         formatNickImpl(sender, self, !highlight, showHostmask, senderColors, selfColor)
-      MessageSettings.ColorizeNicknamesMode.NONE         ->
+      MessageSettings.SenderColorMode.NONE         ->
         formatNickImpl(sender, false, false, showHostmask, senderColors, selfColor)
     }
 
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferPresenter.kt b/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferPresenter.kt
index 61c970bd0..d48a10ca6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferPresenter.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/ui/presenter/BufferPresenter.kt
@@ -25,6 +25,7 @@ import de.kuschku.quasseldroid.settings.AppearanceSettings
 import de.kuschku.quasseldroid.settings.MessageSettings
 import de.kuschku.quasseldroid.util.ColorContext
 import de.kuschku.quasseldroid.util.avatars.AvatarHelper
+import de.kuschku.quasseldroid.util.irc.format.ContentFormatter
 import de.kuschku.quasseldroid.util.irc.format.IrcFormatDeserializer
 import de.kuschku.quasseldroid.viewmodel.data.BufferListItem
 import de.kuschku.quasseldroid.viewmodel.data.BufferProps
@@ -35,10 +36,19 @@ class BufferPresenter @Inject constructor(
   val appearanceSettings: AppearanceSettings,
   val messageSettings: MessageSettings,
   val ircFormatDeserializer: IrcFormatDeserializer,
+  val contentFormatter: ContentFormatter,
   val colorContext: ColorContext
 ) {
   fun render(props: BufferProps): BufferProps {
     return props.copy(
+      name = when {
+        props.info.type.hasFlag(Buffer_Type.QueryBuffer)  ->
+          ircFormatDeserializer.formatString(props.info.bufferName, messageSettings.colorizeMirc)
+        props.info.type.hasFlag(Buffer_Type.StatusBuffer) ->
+          props.network.networkName
+        else                                              ->
+          props.info.bufferName ?: ""
+      },
       description = ircFormatDeserializer.formatString(
         props.description.toString(),
         colorize = messageSettings.colorizeMirc
@@ -47,10 +57,10 @@ class BufferPresenter @Inject constructor(
         props.ircUser?.let {
           val nickName = it.nick()
           val useSelfColor = when (messageSettings.colorizeNicknames) {
-            MessageSettings.ColorizeNicknamesMode.ALL          -> false
-            MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+            MessageSettings.SenderColorMode.ALL          -> false
+            MessageSettings.SenderColorMode.ALL_BUT_MINE ->
               props.ircUser?.network()?.isMyNick(nickName) == true
-            MessageSettings.ColorizeNicknamesMode.NONE         -> true
+            MessageSettings.SenderColorMode.NONE         -> true
           }
 
           colorContext.buildTextDrawable(it.nick(), useSelfColor)
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt
index add74fb9b..09ee3a32a 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/BufferProps.kt
@@ -37,6 +37,7 @@ data class BufferProps(
   val bufferActivity: Buffer_Activities = BufferInfo.Activity.of(
     BufferInfo.Activity.NoActivity
   ),
+  val name: CharSequence = "",
   val ircUser: IrcUser? = null,
   val avatarUrls: List<Avatar> = emptyList(),
   val fallbackDrawable: Drawable? = null,
-- 
GitLab