From 79e26fe2be7b9fc58f972b467fc92e167f817387 Mon Sep 17 00:00:00 2001
From: Janne Koschinski <janne@kuschku.de>
Date: Tue, 10 Apr 2018 16:57:20 +0200
Subject: [PATCH] Improve channel and user info, fix a casemapping bug

---
 .../chat/info/channel/ChannelInfoFragment.kt  | 22 +++++++++++++++++++
 .../main/res/layout/fragment_info_channel.xml |  8 +++++++
 app/src/main/res/values-de/strings.xml        |  2 ++
 app/src/main/res/values/strings.xml           |  2 ++
 build.gradle.kts                              |  2 +-
 .../libquassel/quassel/syncables/Network.kt   |  6 ++---
 .../libquassel/util/irc/IrcCaseMappers.kt     |  4 ++--
 7 files changed, 39 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
index 83a422ae5..26c968fe7 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/info/channel/ChannelInfoFragment.kt
@@ -36,9 +36,15 @@ class ChannelInfoFragment : ServiceBoundFragment() {
   @BindView(R.id.action_edit_topic)
   lateinit var actionEditTopic: Button
 
+  @BindView(R.id.action_who)
+  lateinit var actionWho: Button
+
   @BindView(R.id.action_part)
   lateinit var actionPart: Button
 
+  @BindView(R.id.action_join)
+  lateinit var actionJoin: Button
+
   @Inject
   lateinit var contentFormatter: ContentFormatter
 
@@ -84,6 +90,18 @@ class ChannelInfoFragment : ServiceBoundFragment() {
             }
           }
         }
+
+        actionWho.setOnClickListener {
+          viewModel.session.value?.orNull()?.let { session ->
+            session.bufferSyncer?.find(
+              networkId = channel.network().networkId(),
+              type = Buffer_Type.of(Buffer_Type.StatusBuffer)
+            )?.let { statusInfo ->
+              session.rpcHandler?.sendInput(statusInfo, "/who ${channel.name()}")
+              requireActivity().finish()
+            }
+          }
+        }
       }
     })
 
@@ -93,6 +111,10 @@ class ChannelInfoFragment : ServiceBoundFragment() {
 
     actionEditTopic.setTooltip()
     actionEditTopic.retint()
+    actionWho.setTooltip()
+    actionWho.retint()
+    actionJoin.setTooltip()
+    actionJoin.retint()
     actionPart.setTooltip()
     actionPart.retint()
 
diff --git a/app/src/main/res/layout/fragment_info_channel.xml b/app/src/main/res/layout/fragment_info_channel.xml
index a98e6d9d7..f0a7d9e59 100644
--- a/app/src/main/res/layout/fragment_info_channel.xml
+++ b/app/src/main/res/layout/fragment_info_channel.xml
@@ -49,6 +49,14 @@
           android:text="@string/label_edit_topic"
           tools:drawableTint="?colorTextSecondary" />
 
+        <android.support.v7.widget.AppCompatButton
+          android:id="@+id/action_who"
+          style="@style/Widget.Info.ActionButton"
+          android:contentDescription="@string/label_who_long"
+          android:drawableTop="@drawable/ic_info"
+          android:text="@string/label_who"
+          tools:drawableTint="?colorTextSecondary" />
+
         <android.support.v7.widget.AppCompatButton
           android:id="@+id/action_part"
           style="@style/Widget.Info.ActionButton"
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 976cd8600..2348e01c3 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -67,6 +67,8 @@
   <string name="label_topic">Kanal-Thema</string>
   <string name="label_unhide">Nicht mehr ausblenden</string>
   <string name="label_website">Webseite</string>
+  <string name="label_who">Who</string>
+  <string name="label_who_long">Informationen aller Nutzer aktualisieren</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Nutzerinformationen aktualisieren</string>
   <string name="label_yes">Ja</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3eecd053a..9682b2c7b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -67,6 +67,8 @@
   <string name="label_topic">Channel Topic</string>
   <string name="label_unhide">Make Visible</string>
   <string name="label_website">Website</string>
+  <string name="label_who">Who</string>
+  <string name="label_who_long">Update user information of all users</string>
   <string name="label_whois">Whois</string>
   <string name="label_whois_long">Update user information</string>
   <string name="label_yes">Yes</string>
diff --git a/build.gradle.kts b/build.gradle.kts
index 1cbcd793c..19742d018 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -4,7 +4,7 @@ buildscript {
     jcenter()
   }
   dependencies {
-    classpath("com.android.tools.build:gradle:3.1.0")
+    classpath("com.android.tools.build:gradle:3.1.1")
     withVersion("1.2.31") {
       classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$version")
       classpath("org.jetbrains.kotlin:kotlin-android-extensions:$version")
diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
index 555cca87d..aa738ae01 100644
--- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt
@@ -346,11 +346,9 @@ class Network constructor(
     }
   }
 
-  fun ircUser(nickName: String?) = _ircUsers[nickName?.let(caseMapper::toLowerCase)]
+  fun ircUser(nickName: String?) = _ircUsers[caseMapper.toLowerCaseNullable(nickName)]
   fun liveIrcUser(nickName: String?) = live_ircUsers.map {
-    ircUser(
-      nickName
-    ) ?: IrcUser.NULL
+    ircUser(nickName) ?: IrcUser.NULL
   }.distinctUntilChanged()
 
   fun ircUsers() = _ircUsers.values.toList()
diff --git a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
index efad8589c..037c61829 100644
--- a/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
+++ b/lib/src/main/java/de/kuschku/libquassel/util/irc/IrcCaseMappers.kt
@@ -3,8 +3,8 @@ package de.kuschku.libquassel.util.irc
 import java.util.*
 
 object IrcCaseMappers {
-  var irc: IrcCaseMapper = UnicodeCaseMapper()
-  var unicode: IrcCaseMapper = ClassicalIrcCaseMapper()
+  var irc: IrcCaseMapper = ClassicalIrcCaseMapper()
+  var unicode: IrcCaseMapper = UnicodeCaseMapper()
 
   interface IrcCaseMapper {
     fun equalsIgnoreCase(a: String, b: String): Boolean
-- 
GitLab