From 57f9a9a1097c46aa101f1f867e8c5969d1a62dce Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sat, 24 Feb 2018 22:46:20 +0100 Subject: [PATCH] Allow showing hostmask in join/part/quit messages --- .../ui/chat/NickListFragment.kt | 8 +++ .../chat/messages/QuasselMessageRenderer.kt | 69 ++++++++++--------- .../ui/settings/data/AppearanceSettings.kt | 1 + .../ui/settings/data/Settings.kt | 26 ++++--- .../main/res/values/strings_preferences.xml | 20 +++--- app/src/main/res/xml/preferences.xml | 30 ++++---- 6 files changed, 91 insertions(+), 63 deletions(-) diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt index 0d1c34236..0590152f9 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/NickListFragment.kt @@ -52,6 +52,14 @@ class NickListFragment : ServiceBoundFragment() { viewModel.nickData.map { it.map { it.copy( + modes = when (appearanceSettings.showPrefix) { + AppearanceSettings.ShowPrefixMode.ALL -> it.modes + else -> it.modes.substring( + 0, Math.min( + it.modes.length, 1 + ) + ) + }, realname = ircFormatDeserializer?.formatString( it.realname.toString(), appearanceSettings.colorizeMirc ) ?: it.realname diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt index 8ee5dda43..993162c30 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/messages/QuasselMessageRenderer.kt @@ -102,40 +102,40 @@ class QuasselMessageRenderer( val self = Message_Flag.of(message.flag).hasFlag(Message_Flag.Self) val highlight = Message_Flag.of(message.flag).hasFlag(Message_Flag.Highlight) return when (Message_Type.of(message.type).enabledValues().firstOrNull()) { - Message_Type.Plain -> FormattedMessage( + Message_Type.Plain -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( context.getString(R.string.message_format_plain), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, false), formatContent(message.content, highlight) ), message.messageId == markerLine ) - Message_Type.Action -> FormattedMessage( + Message_Type.Action -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( context.getString(R.string.message_format_action), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, false), formatContent(message.content, highlight) ), message.messageId == markerLine ) - Message_Type.Notice -> FormattedMessage( + Message_Type.Notice -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( context.getString(R.string.message_format_notice), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, false), formatContent(message.content, highlight) ), message.messageId == markerLine ) - Message_Type.Nick -> { + Message_Type.Nick -> { val nickSelf = message.sender == message.content || self FormattedMessage( message.messageId, @@ -144,74 +144,74 @@ class QuasselMessageRenderer( SpanFormatter.format( context.getString(R.string.message_format_nick_self), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, nickSelf, highlight) + formatNick(message.sender, nickSelf, highlight, false) ) } else { SpanFormatter.format( context.getString(R.string.message_format_nick), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, nickSelf, highlight), + formatNick(message.sender, nickSelf, highlight, false), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.content, nickSelf, highlight) + formatNick(message.content, nickSelf, highlight, false) ) }, message.messageId == markerLine ) } - Message_Type.Mode -> FormattedMessage( + Message_Type.Mode -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( context.getString(R.string.message_format_mode), message.content, formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight) + formatNick(message.sender, self, highlight, true) ), message.messageId == markerLine ) - Message_Type.Join -> FormattedMessage( + Message_Type.Join -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( context.getString(R.string.message_format_join), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight) + formatNick(message.sender, self, highlight, true) ), message.messageId == markerLine ) - Message_Type.Part -> FormattedMessage( + Message_Type.Part -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), if (message.content.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_part_1), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight) + formatNick(message.sender, self, highlight, true) ) } else { SpanFormatter.format( context.getString(R.string.message_format_part_2), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, true), message.content ) }, message.messageId == markerLine ) - Message_Type.Quit -> FormattedMessage( + Message_Type.Quit -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), if (message.content.isBlank()) { SpanFormatter.format( context.getString(R.string.message_format_quit_1), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight) + formatNick(message.sender, self, highlight, true) ) } else { SpanFormatter.format( context.getString(R.string.message_format_quit_2), formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, true), message.content ) }, @@ -245,26 +245,26 @@ class QuasselMessageRenderer( } Message_Type.Server, Message_Type.Info, - Message_Type.Error -> FormattedMessage( + Message_Type.Error -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), formatContent(message.content, highlight), message.messageId == markerLine ) - Message_Type.Topic -> FormattedMessage( + Message_Type.Topic -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), formatContent(message.content, highlight), message.messageId == markerLine ) - else -> FormattedMessage( + else -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( "[%d] %s%s: %s", message.type, formatPrefix(message.senderPrefixes, highlight), - formatNick(message.sender, self, highlight), + formatNick(message.sender, self, highlight, true), message.content ), message.messageId == markerLine @@ -324,32 +324,37 @@ class QuasselMessageRenderer( } } - private fun formatNickImpl(sender: String, colorize: Boolean): CharSequence { + private fun formatNickImpl(sender: String, colorize: Boolean, hostmask: Boolean): CharSequence { val nick = IrcUserUtils.nick(sender) - val spannableString = SpannableString(nick) + val content = if (hostmask) sender else nick + val spannableString = SpannableString(content) if (colorize) { val senderColor = IrcUserUtils.senderColor(nick) spannableString.setSpan( ForegroundColorSpan(senderColors[senderColor % senderColors.size]), 0, - nick.length, + content.length, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE ) } spannableString.setSpan( StyleSpan(Typeface.BOLD), 0, - nick.length, + content.length, SpannableString.SPAN_INCLUSIVE_EXCLUSIVE ) return spannableString } private fun formatNick(sender: String, self: Boolean, - highlight: Boolean) = when (appearanceSettings.colorizeNicknames) { - ColorizeNicknamesMode.ALL -> formatNickImpl(sender, !highlight) - ColorizeNicknamesMode.ALL_BUT_MINE -> formatNickImpl(sender, !self && !highlight) - ColorizeNicknamesMode.NONE -> formatNickImpl(sender, false) + highlight: Boolean, showHostmask: Boolean) = + when (appearanceSettings.colorizeNicknames) { + ColorizeNicknamesMode.ALL -> + formatNickImpl(sender, !highlight, appearanceSettings.showHostmask && showHostmask) + ColorizeNicknamesMode.ALL_BUT_MINE -> + formatNickImpl(sender, !self && !highlight, appearanceSettings.showHostmask && showHostmask) + ColorizeNicknamesMode.NONE -> + formatNickImpl(sender, false, appearanceSettings.showHostmask && showHostmask) } private fun formatPrefix(prefix: String, diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt index a9741f275..f3f53c065 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/AppearanceSettings.kt @@ -10,6 +10,7 @@ data class AppearanceSettings( val useMonospace: Boolean = false, val showSeconds: Boolean = false, val use24hClock: Boolean = true, + val showHostmask: Boolean = false, val showLag: Boolean = true, val theme: Theme = Theme.QUASSEL_LIGHT ) { diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/Settings.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/Settings.kt index ca4f45c5d..3c820d012 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/settings/data/Settings.kt @@ -14,6 +14,18 @@ object Settings { AppearanceSettings.DEFAULT.theme.name ) ), + useMonospace = getBoolean( + context.getString(R.string.preference_monospace_key), + AppearanceSettings.DEFAULT.useMonospace + ), + showSeconds = getBoolean( + context.getString(R.string.preference_show_seconds_key), + AppearanceSettings.DEFAULT.showSeconds + ), + use24hClock = getBoolean( + context.getString(R.string.preference_use_24h_clock_key), + AppearanceSettings.DEFAULT.use24hClock + ), showPrefix = ShowPrefixMode.valueOf( getString( context.getString(R.string.preference_show_prefix_key), @@ -30,17 +42,9 @@ object Settings { context.getString(R.string.preference_colorize_mirc_key), AppearanceSettings.DEFAULT.colorizeMirc ), - useMonospace = getBoolean( - context.getString(R.string.preference_monospace_key), - AppearanceSettings.DEFAULT.useMonospace - ), - showSeconds = getBoolean( - context.getString(R.string.preference_show_seconds_key), - AppearanceSettings.DEFAULT.showSeconds - ), - use24hClock = getBoolean( - context.getString(R.string.preference_use_24h_clock_key), - AppearanceSettings.DEFAULT.use24hClock + showHostmask = getBoolean( + context.getString(R.string.preference_hostmask_key), + AppearanceSettings.DEFAULT.showHostmask ), showLag = getBoolean( context.getString(R.string.preference_show_lag_key), diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index e6ef17ff5..0ba6ff568 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -30,6 +30,15 @@ <item>GRUVBOX_DARK</item> </string-array> + <string name="preference_monospace_key" translatable="false">monospace</string> + <string name="preference_monospace_title">Use Monospace Font</string> + + <string name="preference_show_seconds_key" translatable="false">show_seconds</string> + <string name="preference_show_seconds_title">Show Seconds</string> + + <string name="preference_use_24h_clock_key" translatable="false">use_24h_clock</string> + <string name="preference_use_24h_clock_title">Use 24h Clock</string> + <string name="preference_colorize_mirc_key" translatable="false">colorize_mirc</string> <string name="preference_colorize_mirc_title">Use mIRC Colors</string> <string name="preference_colorize_mirc_summaryon">Show mIRC colors in messages</string> @@ -67,14 +76,9 @@ <item>NONE</item> </string-array> - <string name="preference_monospace_key" translatable="false">monospace</string> - <string name="preference_monospace_title">Use Monospace Font</string> - - <string name="preference_show_seconds_key" translatable="false">show_seconds</string> - <string name="preference_show_seconds_title">Show Seconds</string> - - <string name="preference_use_24h_clock_key" translatable="false">use_24h_clock</string> - <string name="preference_use_24h_clock_title">Use 24h Clock</string> + <string name="preference_hostmask_key" translatable="false">hostmask</string> + <string name="preference_hostmask_title">Show Hostmask</string> + <string name="preference_hostmask_summary">Display the full nick!ident@host in messages</string> <string name="preference_show_lag_key" translatable="false">show_lag</string> <string name="preference_show_lag_title">Show lag</string> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 2e1c9c5eb..11c9426fe 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -8,6 +8,21 @@ android:key="@string/preference_theme_key" android:title="@string/preference_theme_title" /> + <SwitchPreference + android:defaultValue="false" + android:key="@string/preference_monospace_key" + android:title="@string/preference_monospace_title" /> + + <SwitchPreference + android:defaultValue="false" + android:key="@string/preference_show_seconds_key" + android:title="@string/preference_show_seconds_title" /> + + <SwitchPreference + android:defaultValue="true" + android:key="@string/preference_use_24h_clock_key" + android:title="@string/preference_use_24h_clock_title" /> + <SwitchPreference android:defaultValue="true" android:key="@string/preference_colorize_mirc_key" @@ -31,18 +46,9 @@ <SwitchPreference android:defaultValue="false" - android:key="@string/preference_monospace_key" - android:title="@string/preference_monospace_title" /> - - <SwitchPreference - android:defaultValue="false" - android:key="@string/preference_show_seconds_key" - android:title="@string/preference_show_seconds_title" /> - - <SwitchPreference - android:defaultValue="true" - android:key="@string/preference_use_24h_clock_key" - android:title="@string/preference_use_24h_clock_title" /> + android:key="@string/preference_hostmask_key" + android:summary="@string/preference_hostmask_summary" + android:title="@string/preference_hostmask_title" /> <SwitchPreference android:defaultValue="false" -- GitLab