From 008e12eaec36df404d3a87ebb75f4dc0dcf432d7 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Sat, 9 Jun 2018 22:25:09 +0200 Subject: [PATCH] Allow highlighting of own messages --- .../quasseldroid/settings/MessageSettings.kt | 3 ++- .../kuschku/quasseldroid/settings/Settings.kt | 4 +++ .../ui/chat/messages/DisplayMessage.kt | 4 +++ .../ui/chat/messages/MessageAdapter.kt | 14 ++++++++--- .../ui/chat/messages/MessageRenderer.kt | 9 +++++-- .../chat/messages/QuasselMessageRenderer.kt | 25 ++++++++++++++++--- .../main/res/values/strings_preferences.xml | 4 +++ app/src/main/res/values/themes_amoled.xml | 2 +- app/src/main/res/values/themes_dracula.xml | 2 +- app/src/main/res/values/themes_gruvbox.xml | 4 +-- app/src/main/res/values/themes_material.xml | 4 +-- app/src/main/res/values/themes_quassel.xml | 4 +-- app/src/main/res/values/themes_solarized.xml | 4 +-- app/src/main/res/xml/preferences.xml | 6 +++++ 14 files changed, 69 insertions(+), 20 deletions(-) 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 ff9dada98..6090fc4e2 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/MessageSettings.kt @@ -36,7 +36,8 @@ data class MessageSettings( val showIRCCloudAvatars: Boolean = false, val showGravatarAvatars: Boolean = false, val showMatrixAvatars: Boolean = false, - val largerEmoji: Boolean = false + val largerEmoji: Boolean = false, + val highlightOwnMessages: Boolean = false ) { enum class ColorizeNicknamesMode { 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 765289949..1a05908ea 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/settings/Settings.kt @@ -128,6 +128,10 @@ object Settings { largerEmoji = getBoolean( context.getString(R.string.preference_larger_emoji_key), MessageSettings.DEFAULT.largerEmoji + ), + highlightOwnMessages = getBoolean( + context.getString(R.string.preference_highlight_own_messages_key), + MessageSettings.DEFAULT.highlightOwnMessages ) ) } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt index 67fd519d8..821809422 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/DisplayMessage.kt @@ -19,7 +19,9 @@ package de.kuschku.quasseldroid.ui.chat.messages +import de.kuschku.libquassel.protocol.Message_Flag import de.kuschku.libquassel.protocol.MsgId +import de.kuschku.libquassel.util.flag.hasFlag import de.kuschku.quasseldroid.persistence.QuasselDatabase data class DisplayMessage( @@ -33,6 +35,7 @@ data class DisplayMessage( ) { data class Tag( val id: MsgId, + val isSelf: Boolean, val hasDayChange: Boolean, val isFollowUp: Boolean, val isSelected: Boolean, @@ -43,6 +46,7 @@ data class DisplayMessage( val tag = Tag( content.messageId, + content.flag.hasFlag(Message_Flag.Self), hasDayChange, isFollowUp, isSelected, diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt index 2593a6037..c27834969 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageAdapter.kt @@ -110,11 +110,12 @@ class MessageAdapter @Inject constructor( it.content.type.value or (if (it.content.flag.hasFlag(Message_Flag.Highlight)) MASK_HIGHLIGHT else 0x00) or (if (it.isFollowUp) MASK_FOLLOWUP else 0x00) or - (if (it.isEmoji) MASK_EMOJI else 0x00) + (if (it.isEmoji) MASK_EMOJI else 0x00) or + (if (it.content.flag.hasFlag(Message_Flag.Self)) MASK_SELF else 0x00) } ?: 0 override fun getItemId(position: Int): Long { - return getItem(position)?.content?.messageId?.toLong() ?: 0L + return getItem(position)?.content?.messageId ?: 0L } private fun messageType(viewType: Int): Message_Type? = @@ -126,13 +127,17 @@ class MessageAdapter @Inject constructor( private fun isEmoji(viewType: Int) = viewType and MASK_EMOJI != 0 + private fun isSelf(viewType: Int) = viewType and MASK_SELF != 0 + companion object { private const val SHIFT_HIGHLIGHT = 32 - 1 private const val SHIFT_FOLLOWUP = SHIFT_HIGHLIGHT - 1 private const val SHIFT_EMOJI = SHIFT_FOLLOWUP - 1 + private const val SHIFT_SELF = SHIFT_EMOJI - 1 const val MASK_HIGHLIGHT = 0x01 shl SHIFT_HIGHLIGHT const val MASK_FOLLOWUP = 0x01 shl SHIFT_FOLLOWUP const val MASK_EMOJI = 0x01 shl SHIFT_EMOJI + const val MASK_SELF = 0x01 shl SHIFT_SELF const val MASK_TYPE = 0xFFFFFF } @@ -141,9 +146,10 @@ class MessageAdapter @Inject constructor( val hasHighlight = hasHiglight(viewType) val isFollowUp = isFollowUp(viewType) val isEmoji = isEmoji(viewType) + val isSelf = isSelf(viewType) val viewHolder = QuasselMessageViewHolder( LayoutInflater.from(parent.context).inflate( - messageRenderer.layout(messageType, hasHighlight, isFollowUp, isEmoji), + messageRenderer.layout(messageType, hasHighlight, isFollowUp, isEmoji, isSelf), parent, false ), @@ -153,7 +159,7 @@ class MessageAdapter @Inject constructor( expansionListener, movementMethod ) - messageRenderer.init(viewHolder, messageType, hasHighlight, isFollowUp, isEmoji) + messageRenderer.init(viewHolder, messageType, hasHighlight, isFollowUp, isEmoji, isSelf) return viewHolder } diff --git a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt index c2a1281d8..60c4bb302 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/ui/chat/messages/MessageRenderer.kt @@ -27,7 +27,11 @@ import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage interface MessageRenderer { @LayoutRes - fun layout(type: Message_Type?, hasHighlight: Boolean, isFollowUp: Boolean, isEmoji: Boolean): Int + fun layout(type: Message_Type?, + hasHighlight: Boolean, + isFollowUp: Boolean, + isEmoji: Boolean, + isSelf: Boolean): Int fun bind(holder: MessageAdapter.QuasselMessageViewHolder, message: FormattedMessage, original: QuasselDatabase.MessageData) @@ -38,5 +42,6 @@ interface MessageRenderer { messageType: Message_Type?, hasHighlight: Boolean, isFollowUp: Boolean, - isEmoji: Boolean) = Unit + isEmoji: Boolean, + isSelf: Boolean) = Unit } 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 fd1d8853d..113af97d8 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 @@ -102,8 +102,11 @@ class QuasselMessageRenderer @Inject constructor( private val zoneId = ZoneId.systemDefault() - override fun layout(type: Message_Type?, hasHighlight: Boolean, - isFollowUp: Boolean, isEmoji: Boolean) = when (type) { + override fun layout(type: Message_Type?, + hasHighlight: Boolean, + isFollowUp: Boolean, + isEmoji: Boolean, + isSelf: Boolean) = when (type) { Notice -> R.layout.widget_chatmessage_notice Server -> R.layout.widget_chatmessage_server Error -> R.layout.widget_chatmessage_error @@ -119,7 +122,8 @@ class QuasselMessageRenderer @Inject constructor( messageType: Message_Type?, hasHighlight: Boolean, isFollowUp: Boolean, - isEmoji: Boolean) { + isEmoji: Boolean, + isSelf: Boolean) { if (hasHighlight) { viewHolder.itemView.context.theme.styledAttributes( R.attr.colorForegroundHighlight, R.attr.colorForegroundHighlightSecondary, @@ -140,6 +144,21 @@ class QuasselMessageRenderer @Inject constructor( } } + + if (isSelf && messageSettings.highlightOwnMessages) { + viewHolder.itemView.context.theme.styledAttributes( + R.attr.colorBackgroundSecondary, + R.attr.backgroundMenuItem + ) { + viewHolder.messageContainer?.background = LayerDrawable( + arrayOf( + ColorDrawable(getColor(0, 0)), + getDrawable(1) + ) + ) + } + } + val avatarContainer = viewHolder.itemView.findViewById<View>(R.id.avatar_container) val avatarPlaceholder = viewHolder.itemView.findViewById<View>(R.id.avatar_placeholder) diff --git a/app/src/main/res/values/strings_preferences.xml b/app/src/main/res/values/strings_preferences.xml index 30aaf0b19..38e16aed0 100644 --- a/app/src/main/res/values/strings_preferences.xml +++ b/app/src/main/res/values/strings_preferences.xml @@ -242,6 +242,10 @@ <string name="preference_larger_emoji_title">Larger Reactions</string> <string name="preference_larger_emoji_summary">Increase the size of emoji-only messages</string> + <string name="preference_highlight_own_messages_key" translatable="false">highlight_own_messages</string> + <string name="preference_highlight_own_messages_title">Highlight own messages</string> + <string name="preference_highlight_own_messages_summary">Shows your own messages more prominently</string> + <string name="preference_autocomplete_title">Autocomplete</string> diff --git a/app/src/main/res/values/themes_amoled.xml b/app/src/main/res/values/themes_amoled.xml index ec3b486dc..f43bb84d7 100644 --- a/app/src/main/res/values/themes_amoled.xml +++ b/app/src/main/res/values/themes_amoled.xml @@ -63,7 +63,7 @@ <item name="colorBackground">#000000</item> <item name="android:windowBackground">@color/amoled_background</item> <item name="colorBackgroundHighlight">#40ffaf3b</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#10ffaf3b</item> <item name="colorBackgroundCard">#000000</item> <item name="colorBackgroundDialog">#000000</item> diff --git a/app/src/main/res/values/themes_dracula.xml b/app/src/main/res/values/themes_dracula.xml index 39ca255b6..f1f26e2d0 100644 --- a/app/src/main/res/values/themes_dracula.xml +++ b/app/src/main/res/values/themes_dracula.xml @@ -63,7 +63,7 @@ <item name="android:windowBackground">@color/dracula_dark_background</item> <item name="colorBackground">#282a36</item> <item name="colorBackgroundHighlight">#20ff79c6</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#44475a</item> <item name="colorBackgroundCard">#44475a</item> <item name="colorBackgroundDialog">#282a36</item> diff --git a/app/src/main/res/values/themes_gruvbox.xml b/app/src/main/res/values/themes_gruvbox.xml index 237c1694f..0ddf26994 100644 --- a/app/src/main/res/values/themes_gruvbox.xml +++ b/app/src/main/res/values/themes_gruvbox.xml @@ -63,7 +63,7 @@ <item name="android:windowBackground">@color/gruvbox_light_background</item> <item name="colorBackground">#fbf1c7</item> <item name="colorBackgroundHighlight">#40d65d0e</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#ebdbb2</item> <item name="colorBackgroundCard">#ebdbb2</item> <item name="colorBackgroundDialog">#f2d5bc</item> @@ -124,7 +124,7 @@ <item name="android:windowBackground">@color/gruvbox_dark_background</item> <item name="colorBackground">#282828</item> <item name="colorBackgroundHighlight">#40d65d0e</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#504945</item> <item name="colorBackgroundCard">#504945</item> <item name="colorBackgroundDialog">#3c3836</item> diff --git a/app/src/main/res/values/themes_material.xml b/app/src/main/res/values/themes_material.xml index 68ec5e472..e79dcb798 100644 --- a/app/src/main/res/values/themes_material.xml +++ b/app/src/main/res/values/themes_material.xml @@ -59,7 +59,7 @@ <item name="android:windowBackground">@color/material_light_background</item> <item name="colorBackground">#FAFAFA</item> <item name="colorBackgroundHighlight">#40ffaf3b</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#F0F0F0</item> <item name="colorBackgroundCard">#FFFFFF</item> <item name="colorBackgroundDialog">#FAFAFA</item> @@ -113,7 +113,7 @@ <item name="android:windowBackground">@color/material_dark_background</item> <item name="colorBackground">#303030</item> <item name="colorBackgroundHighlight">#40ffaf3b</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#424242</item> <item name="colorBackgroundCard">#424242</item> <item name="colorBackgroundDialog">#303030</item> diff --git a/app/src/main/res/values/themes_quassel.xml b/app/src/main/res/values/themes_quassel.xml index 41dfcff63..d980cfe2b 100644 --- a/app/src/main/res/values/themes_quassel.xml +++ b/app/src/main/res/values/themes_quassel.xml @@ -61,7 +61,7 @@ <item name="android:windowBackground">@color/quassel_light_background</item> <item name="colorBackground">#FAFAFA</item> <item name="colorBackgroundHighlight">#ffaf3b</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#F0F0F0</item> <item name="colorBackgroundCard">#FFFFFF</item> <item name="colorBackgroundDialog">#FAFAFA</item> @@ -117,7 +117,7 @@ <item name="android:windowBackground">@color/quassel_dark_background</item> <item name="colorBackground">#303030</item> <item name="colorBackgroundHighlight">#ffaf3b</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#424242</item> <item name="colorBackgroundCard">#424242</item> <item name="colorBackgroundDialog">#303030</item> diff --git a/app/src/main/res/values/themes_solarized.xml b/app/src/main/res/values/themes_solarized.xml index 9d5319b21..1d2a5ec0f 100644 --- a/app/src/main/res/values/themes_solarized.xml +++ b/app/src/main/res/values/themes_solarized.xml @@ -63,7 +63,7 @@ <item name="android:windowBackground">@color/solarized_light_background</item> <item name="colorBackground">#FDF6E3</item> <item name="colorBackgroundHighlight">#40B58900</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#EEE8D5</item> <item name="colorBackgroundCard">#EEE8D5</item> <item name="colorBackgroundDialog">#FDF6E3</item> @@ -124,7 +124,7 @@ <item name="android:windowBackground">@color/solarized_dark_background</item> <item name="colorBackground">#002B36</item> <item name="colorBackgroundHighlight">#30268BD2</item> - <item name="colorBackgroundSecondary">@null</item> + <item name="colorBackgroundSecondary">#073642</item> <item name="colorBackgroundCard">#073642</item> <item name="colorBackgroundDialog">#002B36</item> diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index c4dfa7cc4..9e301f156 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -213,6 +213,12 @@ android:key="@string/preference_larger_emoji_key" android:summary="@string/preference_larger_emoji_summary" android:title="@string/preference_larger_emoji_title" /> + <SwitchPreference + android:defaultValue="false" + android:dependency="@string/preference_highlight_own_messages" + android:key="@string/preference_highlight_own_messages_key" + android:summary="@string/preference_highlight_own_messages_summary" + android:title="@string/preference_highlight_own_messages_title" /> </PreferenceCategory> <PreferenceCategory android:layout="@layout/widget_preference_divider" /> -- GitLab