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 ff9dada98931912fcaebb8d8ae294e31961eedb9..6090fc4e29b1eae3092b67ad1ec2e83381cb9fea 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 76528994920ee379642237879181b4613f0dfa8e..1a05908eacff139e303e7726cfbf15a4371e0a5b 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 67fd519d8c7f9fee080d4b4d5ee7854c0ec401db..821809422ec8c3f666ca14260c90f044942856eb 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 2593a6037a6974a3584a7570c40f221a4e91e418..c278349695c467678e7afec97427d68492c52557 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 c2a1281d828904528c11c61bdf71e85258f8b7ca..60c4bb302d84cd77f8cd49cda81acce7a14c03c9 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 fd1d8853db932a6396e7b55ff6fd5a1dbcfe44a1..113af97d89ccec77ec6f836a0709a362a99bcb29 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 30aaf0b1919cf21fb80d362b99f7e18aeda9347d..38e16aed0b99c637610048ee956633a87931df27 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 ec3b486dc23a7e90ffe09bf5acaf01e1bdc3dd46..f43bb84d7214d51a81ef539b179c62f9db7574df 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 39ca255b64514c3998ec16997dbb70917c03eb2e..f1f26e2d014cd4c78cddebb08675c095a5142986 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 237c1694f7aa71324ea5fcb34a1a0b878e6e6b1c..0ddf26994b658a75d2af42fca39e8889d5edd286 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 68ec5e4729bd3c3cf39dccd3b1c4dd54ffecbbe8..e79dcb798b211e3cf4939b00f8d798a74a0ad9d1 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 41dfcff63fdb401641f5144ea6f7a7441c2dee8c..d980cfe2b4bb8e846d270480c7a66d8412517dbd 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 9d5319b21b856e1e2c0057e2c24134be32a8ccd4..1d2a5ec0f870bd56902d2a47ec81075bbbbb383c 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 c4dfa7cc4305e0de2fbefa6ac1f516f1bdc2871a..9e301f156d07980a3e91637c473bce1d02e89ac6 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" />