From 2625e511ba17454b254324b49d26afd33b6c6272 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sun, 18 Feb 2018 16:38:57 +0100 Subject: [PATCH] Improve message rendering --- .../ui/chat/QuasselMessageRenderer.kt | 105 ++++++++++++++++-- .../res/layout/widget_chatmessage_info.xml | 40 +++++++ .../res/layout/widget_chatmessage_notice.xml | 39 +++++++ app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/themes_amoled.xml | 1 + app/src/main/res/values/themes_quassel.xml | 2 + app/src/main/res/values/themes_solarized.xml | 2 + 7 files changed, 183 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/layout/widget_chatmessage_info.xml create mode 100644 app/src/main/res/layout/widget_chatmessage_notice.xml diff --git a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt index 688beaa65..0e0f2998c 100644 --- a/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid_ng/ui/chat/QuasselMessageRenderer.kt @@ -28,9 +28,9 @@ class QuasselMessageRenderer(context: Context) : MessageRenderer { init { context.theme.styledAttributes( R.attr.senderColor0, R.attr.senderColor1, R.attr.senderColor2, R.attr.senderColor3, - R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, - R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, - R.attr.senderColorC, R.attr.senderColorD, R.attr.senderColorE, R.attr.senderColorF + R.attr.senderColor4, R.attr.senderColor5, R.attr.senderColor6, R.attr.senderColor7, + R.attr.senderColor8, R.attr.senderColor9, R.attr.senderColorA, R.attr.senderColorB, + R.attr.senderColorC, R.attr.senderColorD, R.attr.senderColorE, R.attr.senderColorF ) { senderColors = IntArray(16) { getColor(it, 0) @@ -40,8 +40,10 @@ class QuasselMessageRenderer(context: Context) : MessageRenderer { override fun layout(type: Message_Type?, hasHighlight: Boolean) = when (type) { - Nick, Notice, Mode, Join, Part, Quit, Kick, Kill, Server, Info, DayChange, Topic, NetsplitJoin, - NetsplitQuit, Invite -> R.layout.widget_chatmessage_server + Nick, Mode, Join, Part, Quit, Kick, Kill, Info, DayChange, Topic, NetsplitJoin, + NetsplitQuit, Invite -> R.layout.widget_chatmessage_info + Notice -> R.layout.widget_chatmessage_notice + Server -> R.layout.widget_chatmessage_server Error -> R.layout.widget_chatmessage_error Action -> R.layout.widget_chatmessage_action Plain -> R.layout.widget_chatmessage_plain @@ -65,8 +67,8 @@ class QuasselMessageRenderer(context: Context) : MessageRenderer { } override fun render(message: QuasselDatabase.DatabaseMessage): FormattedMessage { - when (message.type) { - else -> return FormattedMessage( + return when (message.type) { + Message_Type.Plain.bit -> FormattedMessage( message.messageId, timeFormatter.format(message.time.atZone(zoneId)), SpanFormatter.format( @@ -76,6 +78,95 @@ class QuasselMessageRenderer(context: Context) : MessageRenderer { message.content ) ) + Message_Type.Action.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "* %s%s %s", + message.senderPrefixes, + formatNick(message.sender), + message.content + ) + ) + Message_Type.Notice.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "[%s%s] %s", + message.senderPrefixes, + formatNick(message.sender), + message.content + ) + ) + Message_Type.Nick.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s%s is now known as %s%s", + message.senderPrefixes, + formatNick(message.sender), + message.senderPrefixes, + formatNick(message.content) + ) + ) + Message_Type.Join.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s%s joined", + message.senderPrefixes, + formatNick(message.sender) + ) + ) + Message_Type.Part.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s%s left: %s", + message.senderPrefixes, + formatNick(message.sender), + message.content + ) + ) + Message_Type.Quit.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s%s quit: %s", + message.senderPrefixes, + formatNick(message.sender), + message.content + ) + ) + Message_Type.Server.bit, + Message_Type.Info.bit, + Message_Type.Error.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s", + message.content + ) + ) + Message_Type.Topic.bit -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "%s", + message.content + ) + ) + else -> FormattedMessage( + message.messageId, + timeFormatter.format(message.time.atZone(zoneId)), + SpanFormatter.format( + "[%d] %s%s: %s", + message.type, + message.senderPrefixes, + formatNick(message.sender), + message.content + ) + ) } } diff --git a/app/src/main/res/layout/widget_chatmessage_info.xml b/app/src/main/res/layout/widget_chatmessage_info.xml new file mode 100644 index 000000000..0530deda0 --- /dev/null +++ b/app/src/main/res/layout/widget_chatmessage_info.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorBackgroundSecondary" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall" + tools:background="@android:color/background_light" + tools:theme="@style/Theme.ChatTheme.Quassel_Light"> + + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:fontFamily="monospace" + android:textColor="?attr/colorForegroundSecondary" + tools:text="[15:55]" /> + + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundSecondary" + android:textIsSelectable="true" + android:textStyle="italic" + tools:text="Connecting to irc.freenode.net:6667..." /> +</LinearLayout> diff --git a/app/src/main/res/layout/widget_chatmessage_notice.xml b/app/src/main/res/layout/widget_chatmessage_notice.xml new file mode 100644 index 000000000..0d785dd05 --- /dev/null +++ b/app/src/main/res/layout/widget_chatmessage_notice.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="?attr/colorBackgroundSecondary" + android:clickable="true" + android:focusable="true" + android:gravity="top" + android:orientation="horizontal" + android:paddingBottom="@dimen/message_vertical" + android:paddingEnd="@dimen/message_horizontal" + android:paddingLeft="@dimen/message_horizontal" + android:paddingRight="@dimen/message_horizontal" + android:paddingStart="@dimen/message_horizontal" + android:paddingTop="@dimen/message_vertical" + android:textAppearance="?android:attr/textAppearanceListItemSmall" + tools:background="@android:color/background_light" + tools:theme="@style/Theme.ChatTheme.Quassel_Light"> + + <TextView + android:id="@+id/time" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/message_horizontal" + android:layout_marginRight="@dimen/message_horizontal" + android:fontFamily="monospace" + android:textColor="?attr/colorForegroundNotice" + tools:text="[15:55]" /> + + <TextView + android:id="@+id/content" + android:layout_width="0dip" + android:layout_height="wrap_content" + android:layout_weight="1" + android:textColor="?attr/colorForegroundNotice" + android:textIsSelectable="true" + tools:text="Connecting to irc.freenode.net:6667..." /> +</LinearLayout> diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml index 81d04fca8..cc5cf114c 100644 --- a/app/src/main/res/values/attrs.xml +++ b/app/src/main/res/values/attrs.xml @@ -39,6 +39,7 @@ <attr name="colorForeground" format="color" /> <attr name="colorForegroundHighlight" format="color" /> <attr name="colorForegroundSecondary" format="color" /> + <attr name="colorForegroundNotice" format="color" /> <attr name="colorForegroundAction" format="color" /> <attr name="colorForegroundError" format="color" /> diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml index 0786acba1..fe36b6143 100644 --- a/app/src/main/res/values/themes_amoled.xml +++ b/app/src/main/res/values/themes_amoled.xml @@ -30,6 +30,7 @@ <item name="colorForegroundHighlight">#FFFFFF</item> <item name="colorForegroundSecondary">#B3FFFFFF</item> <item name="colorForegroundAction">#7986cb</item> + <item name="colorForegroundNotice">#916409</item> <item name="colorForegroundError">#800000</item> <item name="colorForegroundMirc">0x0</item> diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml index d9cbff96d..f83e1fffb 100644 --- a/app/src/main/res/values/themes_quassel.xml +++ b/app/src/main/res/values/themes_quassel.xml @@ -26,6 +26,7 @@ <item name="colorForegroundHighlight">#DE000000</item> <item name="colorForegroundSecondary">#8A000000</item> <item name="colorForegroundAction">#1a237e</item> + <item name="colorForegroundNotice">#916409</item> <item name="colorForegroundError">#800000</item> <item name="colorForegroundMirc">0x1</item> @@ -66,6 +67,7 @@ <item name="colorForegroundHighlight">#FFFFFF</item> <item name="colorForegroundSecondary">#B3FFFFFF</item> <item name="colorForegroundAction">#7986cb</item> + <item name="colorForegroundNotice">#916409</item> <item name="colorForegroundError">#800000</item> <item name="colorForegroundMirc">0x0</item> diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml index 12973f3c5..c1ece0215 100644 --- a/app/src/main/res/values/themes_solarized.xml +++ b/app/src/main/res/values/themes_solarized.xml @@ -32,6 +32,7 @@ <item name="colorForegroundHighlight">#839495</item> <item name="colorForegroundSecondary">#576A66</item> <item name="colorForegroundAction">#268BD2</item> + <item name="colorForegroundNotice">#B58900</item> <item name="colorForegroundError">#B00000</item> <item name="colorForegroundMirc">0xF</item> @@ -76,6 +77,7 @@ <item name="colorForegroundHighlight">#839495</item> <item name="colorForegroundSecondary">#576A66</item> <item name="colorForegroundAction">#268BD2</item> + <item name="colorForegroundNotice">#B58900</item> <item name="colorForegroundError">#B00000</item> <item name="colorForegroundMirc">0xF</item> -- GitLab