diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java index fb1f6f85d..572bd9e9a 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPreviewMessageViewHolder.java @@ -50,7 +50,8 @@ public class IncomingPreviewMessageViewHolder extends PreviewMessageViewHolder { message, true, viewThemeUtils); - viewThemeUtils.talk.themeIncomingMessageBubble(binding.incomingPreviewMessageBubble, true, false); + viewThemeUtils.talk.themeIncomingMessageBubble(binding.incomingPreviewMessageBubble, true, false, + false); } if (processedMessageText != null) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt index 71aafcce6..e16d1a45e 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingVoiceMessageViewHolder.kt @@ -279,7 +279,7 @@ class IncomingVoiceMessageViewHolder(incomingView: View, payload: Any) : } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeIncomingMessageBubble(bubble, message.isGrouped, message.isDeleted, message.wasPlayedVoiceMessage) } @Suppress("Detekt.TooGenericExceptionCaught") diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java index 21509d502..eb7d54452 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPreviewMessageViewHolder.java @@ -50,7 +50,8 @@ public class OutcomingPreviewMessageViewHolder extends PreviewMessageViewHolder message, false, viewThemeUtils); - viewThemeUtils.talk.themeOutgoingMessageBubble(binding.outgoingPreviewMessageBubble, true, false); + viewThemeUtils.talk.themeOutgoingMessageBubble(binding.outgoingPreviewMessageBubble, true, false, + false); } if (processedMessageText != null) { diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt index 281240748..1e6715cde 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt @@ -342,7 +342,7 @@ class OutcomingVoiceMessageViewHolder(outcomingView: View) : } private fun colorizeMessageBubble(message: ChatMessage) { - viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted) + viewThemeUtils.talk.themeOutgoingMessageBubble(bubble, message.isGrouped, message.isDeleted, message.wasPlayedVoiceMessage) } fun assignVoiceMessageInterface(voiceMessageInterface: VoiceMessageInterface) { diff --git a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt index 00706c42e..25d4790c6 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -1644,6 +1644,11 @@ class ChatActivity : lastRecordMediaPosition = mediaPlayer!!.currentPosition message.voiceMessagePlayedSeconds = pos message.voiceMessageSeekbarProgress = mediaPlayer!!.currentPosition + if(mediaPlayer!!.currentPosition * 20 > mediaPlayer!!.duration){ + // a voice message is marked as played when the mediaplayer position + // is at least at 5% of its duration + message.wasPlayedVoiceMessage = true + } adapter?.update(message) } else { message.resetVoiceMessage = true diff --git a/app/src/main/java/com/nextcloud/talk/chat/data/model/ChatMessage.kt b/app/src/main/java/com/nextcloud/talk/chat/data/model/ChatMessage.kt index 7283cf8ec..f071f9849 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/data/model/ChatMessage.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/data/model/ChatMessage.kt @@ -91,6 +91,8 @@ data class ChatMessage( var isPlayingVoiceMessage: Boolean = false, + var wasPlayedVoiceMessage : Boolean = false, + var voiceMessageDuration: Int = 0, var voiceMessagePlayedSeconds: Int = 0, diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt index 87b1b3bde..ad85b6c9f 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/TalkSpecificViewThemeUtils.kt @@ -70,7 +70,7 @@ class TalkSpecificViewThemeUtils @Inject constructor( ) : ViewThemeUtilsBase(schemes) { private val dynamicColor = MaterialDynamicColors() - fun themeIncomingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { + fun themeIncomingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean, isPlayed: Boolean = false) { val resources = bubble.resources var bubbleResource = R.drawable.shape_incoming_message @@ -81,6 +81,8 @@ class TalkSpecificViewThemeUtils @Inject constructor( val bgBubbleColor = if (deleted) { resources.getColor(R.color.bg_message_list_incoming_bubble_deleted, null) + } else if(isPlayed){ + resources.getColor(R.color.bg_message_list_incoming_bubble_audio_played, null) } else { resources.getColor(R.color.bg_message_list_incoming_bubble, null) } @@ -93,11 +95,13 @@ class TalkSpecificViewThemeUtils @Inject constructor( ViewCompat.setBackground(bubble, bubbleDrawable) } - fun themeOutgoingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean) { + fun themeOutgoingMessageBubble(bubble: View, grouped: Boolean, deleted: Boolean, isPlayed : Boolean = false) { withScheme(bubble) { scheme -> val bgBubbleColor = if (deleted) { ColorUtils.setAlphaComponent(dynamicColor.surfaceVariant().getArgb(scheme), HALF_ALPHA_INT) - } else { + } else if(isPlayed){ + ContextCompat.getColor(bubble.context, R.color.bg_message_list_outgoing_bubble_audio_played) + }else { dynamicColor.surfaceVariant().getArgb(scheme) } diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 7b4c18f30..087fee614 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -45,6 +45,8 @@ #121212 #2A2A2A #14FFFFFF + #3F3F73 + #313B75 #8c8c8c diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index a49e2de29..3253644f1 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -64,6 +64,8 @@ #EFEFEF #66EFEFEF + #AFAFAF + #D3CFCF #FFFFFF #121212