Skip to content
Snippets Groups Projects
Verified Commit 008e12ea authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Allow highlighting of own messages

parent 0c784994
No related branches found
No related tags found
No related merge requests found
Pipeline #
Showing
with 69 additions and 20 deletions
...@@ -36,7 +36,8 @@ data class MessageSettings( ...@@ -36,7 +36,8 @@ data class MessageSettings(
val showIRCCloudAvatars: Boolean = false, val showIRCCloudAvatars: Boolean = false,
val showGravatarAvatars: Boolean = false, val showGravatarAvatars: Boolean = false,
val showMatrixAvatars: Boolean = false, val showMatrixAvatars: Boolean = false,
val largerEmoji: Boolean = false val largerEmoji: Boolean = false,
val highlightOwnMessages: Boolean = false
) { ) {
enum class ColorizeNicknamesMode { enum class ColorizeNicknamesMode {
......
...@@ -128,6 +128,10 @@ object Settings { ...@@ -128,6 +128,10 @@ object Settings {
largerEmoji = getBoolean( largerEmoji = getBoolean(
context.getString(R.string.preference_larger_emoji_key), context.getString(R.string.preference_larger_emoji_key),
MessageSettings.DEFAULT.largerEmoji MessageSettings.DEFAULT.largerEmoji
),
highlightOwnMessages = getBoolean(
context.getString(R.string.preference_highlight_own_messages_key),
MessageSettings.DEFAULT.highlightOwnMessages
) )
) )
} }
......
...@@ -19,7 +19,9 @@ ...@@ -19,7 +19,9 @@
package de.kuschku.quasseldroid.ui.chat.messages package de.kuschku.quasseldroid.ui.chat.messages
import de.kuschku.libquassel.protocol.Message_Flag
import de.kuschku.libquassel.protocol.MsgId import de.kuschku.libquassel.protocol.MsgId
import de.kuschku.libquassel.util.flag.hasFlag
import de.kuschku.quasseldroid.persistence.QuasselDatabase import de.kuschku.quasseldroid.persistence.QuasselDatabase
data class DisplayMessage( data class DisplayMessage(
...@@ -33,6 +35,7 @@ data class DisplayMessage( ...@@ -33,6 +35,7 @@ data class DisplayMessage(
) { ) {
data class Tag( data class Tag(
val id: MsgId, val id: MsgId,
val isSelf: Boolean,
val hasDayChange: Boolean, val hasDayChange: Boolean,
val isFollowUp: Boolean, val isFollowUp: Boolean,
val isSelected: Boolean, val isSelected: Boolean,
...@@ -43,6 +46,7 @@ data class DisplayMessage( ...@@ -43,6 +46,7 @@ data class DisplayMessage(
val tag = Tag( val tag = Tag(
content.messageId, content.messageId,
content.flag.hasFlag(Message_Flag.Self),
hasDayChange, hasDayChange,
isFollowUp, isFollowUp,
isSelected, isSelected,
......
...@@ -110,11 +110,12 @@ class MessageAdapter @Inject constructor( ...@@ -110,11 +110,12 @@ class MessageAdapter @Inject constructor(
it.content.type.value or it.content.type.value or
(if (it.content.flag.hasFlag(Message_Flag.Highlight)) MASK_HIGHLIGHT else 0x00) or (if (it.content.flag.hasFlag(Message_Flag.Highlight)) MASK_HIGHLIGHT else 0x00) or
(if (it.isFollowUp) MASK_FOLLOWUP 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 } ?: 0
override fun getItemId(position: Int): Long { 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? = private fun messageType(viewType: Int): Message_Type? =
...@@ -126,13 +127,17 @@ class MessageAdapter @Inject constructor( ...@@ -126,13 +127,17 @@ class MessageAdapter @Inject constructor(
private fun isEmoji(viewType: Int) = viewType and MASK_EMOJI != 0 private fun isEmoji(viewType: Int) = viewType and MASK_EMOJI != 0
private fun isSelf(viewType: Int) = viewType and MASK_SELF != 0
companion object { companion object {
private const val SHIFT_HIGHLIGHT = 32 - 1 private const val SHIFT_HIGHLIGHT = 32 - 1
private const val SHIFT_FOLLOWUP = SHIFT_HIGHLIGHT - 1 private const val SHIFT_FOLLOWUP = SHIFT_HIGHLIGHT - 1
private const val SHIFT_EMOJI = SHIFT_FOLLOWUP - 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_HIGHLIGHT = 0x01 shl SHIFT_HIGHLIGHT
const val MASK_FOLLOWUP = 0x01 shl SHIFT_FOLLOWUP const val MASK_FOLLOWUP = 0x01 shl SHIFT_FOLLOWUP
const val MASK_EMOJI = 0x01 shl SHIFT_EMOJI const val MASK_EMOJI = 0x01 shl SHIFT_EMOJI
const val MASK_SELF = 0x01 shl SHIFT_SELF
const val MASK_TYPE = 0xFFFFFF const val MASK_TYPE = 0xFFFFFF
} }
...@@ -141,9 +146,10 @@ class MessageAdapter @Inject constructor( ...@@ -141,9 +146,10 @@ class MessageAdapter @Inject constructor(
val hasHighlight = hasHiglight(viewType) val hasHighlight = hasHiglight(viewType)
val isFollowUp = isFollowUp(viewType) val isFollowUp = isFollowUp(viewType)
val isEmoji = isEmoji(viewType) val isEmoji = isEmoji(viewType)
val isSelf = isSelf(viewType)
val viewHolder = QuasselMessageViewHolder( val viewHolder = QuasselMessageViewHolder(
LayoutInflater.from(parent.context).inflate( LayoutInflater.from(parent.context).inflate(
messageRenderer.layout(messageType, hasHighlight, isFollowUp, isEmoji), messageRenderer.layout(messageType, hasHighlight, isFollowUp, isEmoji, isSelf),
parent, parent,
false false
), ),
...@@ -153,7 +159,7 @@ class MessageAdapter @Inject constructor( ...@@ -153,7 +159,7 @@ class MessageAdapter @Inject constructor(
expansionListener, expansionListener,
movementMethod movementMethod
) )
messageRenderer.init(viewHolder, messageType, hasHighlight, isFollowUp, isEmoji) messageRenderer.init(viewHolder, messageType, hasHighlight, isFollowUp, isEmoji, isSelf)
return viewHolder return viewHolder
} }
......
...@@ -27,7 +27,11 @@ import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage ...@@ -27,7 +27,11 @@ import de.kuschku.quasseldroid.viewmodel.data.FormattedMessage
interface MessageRenderer { interface MessageRenderer {
@LayoutRes @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, fun bind(holder: MessageAdapter.QuasselMessageViewHolder, message: FormattedMessage,
original: QuasselDatabase.MessageData) original: QuasselDatabase.MessageData)
...@@ -38,5 +42,6 @@ interface MessageRenderer { ...@@ -38,5 +42,6 @@ interface MessageRenderer {
messageType: Message_Type?, messageType: Message_Type?,
hasHighlight: Boolean, hasHighlight: Boolean,
isFollowUp: Boolean, isFollowUp: Boolean,
isEmoji: Boolean) = Unit isEmoji: Boolean,
isSelf: Boolean) = Unit
} }
...@@ -102,8 +102,11 @@ class QuasselMessageRenderer @Inject constructor( ...@@ -102,8 +102,11 @@ class QuasselMessageRenderer @Inject constructor(
private val zoneId = ZoneId.systemDefault() private val zoneId = ZoneId.systemDefault()
override fun layout(type: Message_Type?, hasHighlight: Boolean, override fun layout(type: Message_Type?,
isFollowUp: Boolean, isEmoji: Boolean) = when (type) { hasHighlight: Boolean,
isFollowUp: Boolean,
isEmoji: Boolean,
isSelf: Boolean) = when (type) {
Notice -> R.layout.widget_chatmessage_notice Notice -> R.layout.widget_chatmessage_notice
Server -> R.layout.widget_chatmessage_server Server -> R.layout.widget_chatmessage_server
Error -> R.layout.widget_chatmessage_error Error -> R.layout.widget_chatmessage_error
...@@ -119,7 +122,8 @@ class QuasselMessageRenderer @Inject constructor( ...@@ -119,7 +122,8 @@ class QuasselMessageRenderer @Inject constructor(
messageType: Message_Type?, messageType: Message_Type?,
hasHighlight: Boolean, hasHighlight: Boolean,
isFollowUp: Boolean, isFollowUp: Boolean,
isEmoji: Boolean) { isEmoji: Boolean,
isSelf: Boolean) {
if (hasHighlight) { if (hasHighlight) {
viewHolder.itemView.context.theme.styledAttributes( viewHolder.itemView.context.theme.styledAttributes(
R.attr.colorForegroundHighlight, R.attr.colorForegroundHighlightSecondary, R.attr.colorForegroundHighlight, R.attr.colorForegroundHighlightSecondary,
...@@ -140,6 +144,21 @@ class QuasselMessageRenderer @Inject constructor( ...@@ -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 avatarContainer = viewHolder.itemView.findViewById<View>(R.id.avatar_container)
val avatarPlaceholder = viewHolder.itemView.findViewById<View>(R.id.avatar_placeholder) val avatarPlaceholder = viewHolder.itemView.findViewById<View>(R.id.avatar_placeholder)
......
...@@ -242,6 +242,10 @@ ...@@ -242,6 +242,10 @@
<string name="preference_larger_emoji_title">Larger Reactions</string> <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_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> <string name="preference_autocomplete_title">Autocomplete</string>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<item name="colorBackground">#000000</item> <item name="colorBackground">#000000</item>
<item name="android:windowBackground">@color/amoled_background</item> <item name="android:windowBackground">@color/amoled_background</item>
<item name="colorBackgroundHighlight">#40ffaf3b</item> <item name="colorBackgroundHighlight">#40ffaf3b</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#10ffaf3b</item>
<item name="colorBackgroundCard">#000000</item> <item name="colorBackgroundCard">#000000</item>
<item name="colorBackgroundDialog">#000000</item> <item name="colorBackgroundDialog">#000000</item>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<item name="android:windowBackground">@color/dracula_dark_background</item> <item name="android:windowBackground">@color/dracula_dark_background</item>
<item name="colorBackground">#282a36</item> <item name="colorBackground">#282a36</item>
<item name="colorBackgroundHighlight">#20ff79c6</item> <item name="colorBackgroundHighlight">#20ff79c6</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#44475a</item>
<item name="colorBackgroundCard">#44475a</item> <item name="colorBackgroundCard">#44475a</item>
<item name="colorBackgroundDialog">#282a36</item> <item name="colorBackgroundDialog">#282a36</item>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<item name="android:windowBackground">@color/gruvbox_light_background</item> <item name="android:windowBackground">@color/gruvbox_light_background</item>
<item name="colorBackground">#fbf1c7</item> <item name="colorBackground">#fbf1c7</item>
<item name="colorBackgroundHighlight">#40d65d0e</item> <item name="colorBackgroundHighlight">#40d65d0e</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#ebdbb2</item>
<item name="colorBackgroundCard">#ebdbb2</item> <item name="colorBackgroundCard">#ebdbb2</item>
<item name="colorBackgroundDialog">#f2d5bc</item> <item name="colorBackgroundDialog">#f2d5bc</item>
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
<item name="android:windowBackground">@color/gruvbox_dark_background</item> <item name="android:windowBackground">@color/gruvbox_dark_background</item>
<item name="colorBackground">#282828</item> <item name="colorBackground">#282828</item>
<item name="colorBackgroundHighlight">#40d65d0e</item> <item name="colorBackgroundHighlight">#40d65d0e</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#504945</item>
<item name="colorBackgroundCard">#504945</item> <item name="colorBackgroundCard">#504945</item>
<item name="colorBackgroundDialog">#3c3836</item> <item name="colorBackgroundDialog">#3c3836</item>
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
<item name="android:windowBackground">@color/material_light_background</item> <item name="android:windowBackground">@color/material_light_background</item>
<item name="colorBackground">#FAFAFA</item> <item name="colorBackground">#FAFAFA</item>
<item name="colorBackgroundHighlight">#40ffaf3b</item> <item name="colorBackgroundHighlight">#40ffaf3b</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#F0F0F0</item>
<item name="colorBackgroundCard">#FFFFFF</item> <item name="colorBackgroundCard">#FFFFFF</item>
<item name="colorBackgroundDialog">#FAFAFA</item> <item name="colorBackgroundDialog">#FAFAFA</item>
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
<item name="android:windowBackground">@color/material_dark_background</item> <item name="android:windowBackground">@color/material_dark_background</item>
<item name="colorBackground">#303030</item> <item name="colorBackground">#303030</item>
<item name="colorBackgroundHighlight">#40ffaf3b</item> <item name="colorBackgroundHighlight">#40ffaf3b</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#424242</item>
<item name="colorBackgroundCard">#424242</item> <item name="colorBackgroundCard">#424242</item>
<item name="colorBackgroundDialog">#303030</item> <item name="colorBackgroundDialog">#303030</item>
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
<item name="android:windowBackground">@color/quassel_light_background</item> <item name="android:windowBackground">@color/quassel_light_background</item>
<item name="colorBackground">#FAFAFA</item> <item name="colorBackground">#FAFAFA</item>
<item name="colorBackgroundHighlight">#ffaf3b</item> <item name="colorBackgroundHighlight">#ffaf3b</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#F0F0F0</item>
<item name="colorBackgroundCard">#FFFFFF</item> <item name="colorBackgroundCard">#FFFFFF</item>
<item name="colorBackgroundDialog">#FAFAFA</item> <item name="colorBackgroundDialog">#FAFAFA</item>
...@@ -117,7 +117,7 @@ ...@@ -117,7 +117,7 @@
<item name="android:windowBackground">@color/quassel_dark_background</item> <item name="android:windowBackground">@color/quassel_dark_background</item>
<item name="colorBackground">#303030</item> <item name="colorBackground">#303030</item>
<item name="colorBackgroundHighlight">#ffaf3b</item> <item name="colorBackgroundHighlight">#ffaf3b</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#424242</item>
<item name="colorBackgroundCard">#424242</item> <item name="colorBackgroundCard">#424242</item>
<item name="colorBackgroundDialog">#303030</item> <item name="colorBackgroundDialog">#303030</item>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<item name="android:windowBackground">@color/solarized_light_background</item> <item name="android:windowBackground">@color/solarized_light_background</item>
<item name="colorBackground">#FDF6E3</item> <item name="colorBackground">#FDF6E3</item>
<item name="colorBackgroundHighlight">#40B58900</item> <item name="colorBackgroundHighlight">#40B58900</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#EEE8D5</item>
<item name="colorBackgroundCard">#EEE8D5</item> <item name="colorBackgroundCard">#EEE8D5</item>
<item name="colorBackgroundDialog">#FDF6E3</item> <item name="colorBackgroundDialog">#FDF6E3</item>
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
<item name="android:windowBackground">@color/solarized_dark_background</item> <item name="android:windowBackground">@color/solarized_dark_background</item>
<item name="colorBackground">#002B36</item> <item name="colorBackground">#002B36</item>
<item name="colorBackgroundHighlight">#30268BD2</item> <item name="colorBackgroundHighlight">#30268BD2</item>
<item name="colorBackgroundSecondary">@null</item> <item name="colorBackgroundSecondary">#073642</item>
<item name="colorBackgroundCard">#073642</item> <item name="colorBackgroundCard">#073642</item>
<item name="colorBackgroundDialog">#002B36</item> <item name="colorBackgroundDialog">#002B36</item>
......
...@@ -213,6 +213,12 @@ ...@@ -213,6 +213,12 @@
android:key="@string/preference_larger_emoji_key" android:key="@string/preference_larger_emoji_key"
android:summary="@string/preference_larger_emoji_summary" android:summary="@string/preference_larger_emoji_summary"
android:title="@string/preference_larger_emoji_title" /> 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>
<PreferenceCategory android:layout="@layout/widget_preference_divider" /> <PreferenceCategory android:layout="@layout/widget_preference_divider" />
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment