From d877b4ac20ef23f8e45c506bbf6345a8952c9ae7 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Mon, 7 May 2018 21:40:13 +0200
Subject: [PATCH] =?UTF-8?q?Fixes=20issue=20where=20nick=20coloring=20setti?=
 =?UTF-8?q?ng=20wasn=E2=80=99t=20correctly=20applied?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Janne Koschinski <janne@kuschku.de>
---
 .../service/QuasselNotificationBackend.kt           | 11 +++++++----
 .../ui/chat/info/user/UserInfoFragment.kt           | 12 +++++++++++-
 .../ui/chat/input/AutoCompleteHelper.kt             | 13 ++++++++++++-
 .../ui/chat/messages/QuasselMessageRenderer.kt      | 11 +++++++----
 .../quasseldroid/ui/chat/nicks/NickListFragment.kt  | 12 +++++++++++-
 .../quasseldroid/viewmodel/EditorViewModel.kt       |  1 +
 .../quasseldroid/viewmodel/QuasselViewModel.kt      |  1 +
 .../quasseldroid/viewmodel/data/AutoCompleteItem.kt |  1 +
 .../quasseldroid/viewmodel/data/IrcUserItem.kt      |  1 +
 9 files changed, 52 insertions(+), 11 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 a05b91fb4..ad335f07e 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselNotificationBackend.kt
@@ -243,10 +243,13 @@ class QuasselNotificationBackend @Inject constructor(
                                             '\\')
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
-        val senderColor = if (it.flag.hasFlag(Message_Flag.Self))
-          selfColor
-        else
-          senderColors[senderColorIndex]
+        val senderColor = when (messageSettings.colorizeNicknames) {
+          MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+            if (it.flag.hasFlag(Message_Flag.Self)) selfColor
+            else senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+        }
 
         val size = context.resources.getDimensionPixelSize(R.dimen.notification_avatar_width)
         val avatarList = AvatarHelper.avatar(messageSettings, it)
diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
index 3c699be77..adeac03de 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/user/UserInfoFragment.kt
@@ -126,6 +126,10 @@ class UserInfoFragment : ServiceBoundFragment() {
       }
     }
 
+    val selfColor = requireContext().theme.styledAttributes(R.attr.colorForegroundSecondary) {
+      getColor(0, 0)
+    }
+
     val networkId = arguments?.getInt("networkId")
     val nickName = arguments?.getString("nick")
     combineLatest(viewModel.session, viewModel.networks).switchMap { (sessionOptional, networks) ->
@@ -147,7 +151,13 @@ class UserInfoFragment : ServiceBoundFragment() {
         val rawInitial = user.nick().trimStart(*IGNORED_CHARS).firstOrNull()
                          ?: user.nick().firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
-        val senderColor = senderColors[senderColorIndex]
+        val senderColor = when (messageSettings.colorizeNicknames) {
+          MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+            if (user.network().isMyNick(user.nick())) selfColor
+            else senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+        }
 
         avatar.loadAvatars(
           AvatarHelper.avatar(messageSettings, user, maxOf(avatar.width, avatar.height)),
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 602cd42d5..4d39776cb 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
@@ -64,6 +64,10 @@ class AutoCompleteHelper(
     IntArray(length()) { getColor(it, 0) }
   }
 
+  private val selfColor = activity.theme.styledAttributes(R.attr.colorForegroundSecondary) {
+    getColor(0, 0)
+  }
+
   private val avatarSize = activity.resources.getDimensionPixelSize(R.dimen.avatar_size)
 
   init {
@@ -80,7 +84,13 @@ class AutoCompleteHelper(
           val rawInitial = nickName.trimStart(*IGNORED_CHARS).firstOrNull()
                            ?: nickName.firstOrNull()
           val initial = rawInitial?.toUpperCase().toString()
-          val senderColor = senderColors[senderColorIndex]
+          val senderColor = when (messageSettings.colorizeNicknames) {
+            MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
+            MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+              if (it.self) selfColor
+              else senderColors[senderColorIndex]
+            MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+          }
 
           fun formatNick(nick: CharSequence): CharSequence {
             val spannableString = SpannableString(nick)
@@ -177,6 +187,7 @@ class AutoCompleteHelper(
                   lowestMode,
                   user.realName(),
                   user.isAway(),
+                  user.network().isMyNick(user.nick()),
                   network.support("CASEMAPPING"),
                   AvatarHelper.avatar(messageSettings, user, avatarSize)
                 )
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 d27fb4107..095d4e4db 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
@@ -214,10 +214,13 @@ class QuasselMessageRenderer @Inject constructor(
         val rawInitial = nickName.trimStart('-', '_', '[', ']', '{', '}', '|', '`', '^', '.', '\\')
                            .firstOrNull() ?: nickName.firstOrNull()
         val initial = rawInitial?.toUpperCase().toString()
-        val senderColor = if (message.content.flag.hasFlag(Message_Flag.Self))
-          selfColor
-        else
-          senderColors[senderColorIndex]
+        val senderColor = when (messageSettings.colorizeNicknames) {
+          MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+            if (message.content.flag.hasFlag(Message_Flag.Self)) selfColor
+            else senderColors[senderColorIndex]
+          MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+        }
 
         FormattedMessage(
           id = message.content.messageId,
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 e7ef5a4e0..56d702b5e 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
@@ -94,6 +94,10 @@ class NickListFragment : ServiceBoundFragment() {
       }
     }
 
+    val selfColor = requireContext().theme.styledAttributes(R.attr.colorForegroundSecondary) {
+      getColor(0, 0)
+    }
+
     val avatarSize = resources.getDimensionPixelSize(R.dimen.avatar_size)
     viewModel.nickData.toLiveData().observe(this, Observer {
       runInBackground {
@@ -113,7 +117,13 @@ class NickListFragment : ServiceBoundFragment() {
                                               '\\')
                              .firstOrNull() ?: nickName.firstOrNull()
           val initial = rawInitial?.toUpperCase().toString()
-          val senderColor = senderColors[senderColorIndex]
+          val senderColor = when (messageSettings.colorizeNicknames) {
+            MessageSettings.ColorizeNicknamesMode.ALL          -> senderColors[senderColorIndex]
+            MessageSettings.ColorizeNicknamesMode.ALL_BUT_MINE ->
+              if (it.self) selfColor
+              else senderColors[senderColorIndex]
+            MessageSettings.ColorizeNicknamesMode.NONE         -> selfColor
+          }
           fun formatNick(nick: CharSequence): CharSequence {
             val spannableString = SpannableString(nick)
             spannableString.setSpan(
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt
index 63f4296d0..b48d462b7 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/EditorViewModel.kt
@@ -104,6 +104,7 @@ class EditorViewModel : ViewModel() {
                         lowestMode,
                         user.realName(),
                         user.isAway(),
+                        user.network().isMyNick(user.nick()),
                         network.support("CASEMAPPING")
                       )
                     }
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
index 2a2b52f5d..7d4af7d05 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/QuasselViewModel.kt
@@ -220,6 +220,7 @@ class QuasselViewModel : ViewModel() {
                       user.realName(),
                       user.hostMask(),
                       user.isAway(),
+                      user.network().isMyNick(user.nick()),
                       network.support("CASEMAPPING")
                     )
                   }
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
index afa1e13f0..88f2f5424 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/AutoCompleteItem.kt
@@ -40,6 +40,7 @@ sealed class AutoCompleteItem(open val name: String) : Comparable<AutoCompleteIt
     val lowestMode: Int,
     val realname: CharSequence,
     val away: Boolean,
+    val self: Boolean,
     val networkCasemapping: String?,
     val avatarUrls: List<Avatar> = emptyList(),
     val fallbackDrawable: Drawable? = null,
diff --git a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt
index 121ca2bed..ec8bfd49c 100644
--- a/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt
+++ b/viewmodel/src/main/java/de/kuschku/quasseldroid/viewmodel/data/IrcUserItem.kt
@@ -28,6 +28,7 @@ data class IrcUserItem(
   val realname: CharSequence,
   val hostmask: String,
   val away: Boolean,
+  val self: Boolean,
   val networkCasemapping: String?,
   val avatarUrls: List<Avatar> = emptyList(),
   val fallbackDrawable: Drawable? = null,
-- 
GitLab