diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt index 804d2d093..6d995febd 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingTextMessageViewHolder.kt @@ -14,6 +14,7 @@ import android.util.Log import android.util.TypedValue import android.view.View import androidx.core.content.res.ResourcesCompat +import androidx.lifecycle.lifecycleScope import autodagger.AutoInjector import coil.load import com.google.android.flexbox.FlexboxLayout @@ -23,6 +24,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.data.model.ChatMessage +import com.nextcloud.talk.data.network.NetworkMonitor import com.nextcloud.talk.databinding.ItemCustomOutcomingTextMessageBinding import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.ui.theme.ViewThemeUtils @@ -58,6 +60,9 @@ class OutcomingTextMessageViewHolder(itemView: View) : @Inject lateinit var dateUtils: DateUtils + @Inject + lateinit var networkMonitor: NetworkMonitor + lateinit var commonMessageInterface: CommonMessageInterface override fun onBind(message: ChatMessage) { @@ -115,18 +120,25 @@ class OutcomingTextMessageViewHolder(itemView: View) : } - when (message.readStatus) { - ReadStatus.READ -> updateReadStatus(R.drawable.ic_check_all, context.resources?.getString(R.string.nc_message_read)) - ReadStatus.SENT -> updateReadStatus(R.drawable.ic_check, context.resources?.getString(R.string.nc_message_sent)) - ReadStatus.SENDING -> updateSendingStatus() - ReadStatus.FAILED -> updateReadStatus( - R.drawable.ic_baseline_close_24, - "failed" - ) - else -> null - } - - + // CoroutineScope(Dispatchers.Main).launch { + if (message.sendingFailed) { + updateStatus( + R.drawable.baseline_report_problem_24, + "failed" + ) + // } else if (message.isTempMessage && !networkMonitor.isOnline.first()) { + // updateStatus( + // R.drawable.ic_signal_wifi_off_white_24dp, + // "offline" + // ) + } else if (message.isTempMessage) { + updateSendingStatus() + } else if(message.readStatus == ReadStatus.READ){ + updateStatus(R.drawable.ic_check_all, context.resources?.getString(R.string.nc_message_read)) + } else if(message.readStatus == ReadStatus.SENT) { + updateStatus(R.drawable.ic_check, context.resources?.getString(R.string.nc_message_sent)) + } + // } itemView.setTag(R.string.replyable_message_view_tag, message.replyable) @@ -141,7 +153,7 @@ class OutcomingTextMessageViewHolder(itemView: View) : ) } - private fun updateReadStatus(readStatusDrawableInt: Int, description: String?) { + private fun updateStatus(readStatusDrawableInt: Int, description: String?) { binding.sendingProgress.visibility = View.GONE binding.checkMark.visibility = View.VISIBLE readStatusDrawableInt.let { drawableInt -> diff --git a/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt b/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt index 73552c8c7..a8e6a8f4f 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt +++ b/app/src/main/java/com/nextcloud/talk/adapters/messages/TemporaryMessageViewHolder.kt @@ -13,6 +13,7 @@ import android.view.View import androidx.core.content.res.ResourcesCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.core.view.isVisible import autodagger.AutoInjector import coil.load import com.nextcloud.android.common.ui.theme.utils.ColorRole @@ -58,6 +59,14 @@ class TemporaryMessageViewHolder(outgoingView: View, payload: Any) : viewThemeUtils.platform.colorImageView(binding.tempMsgEdit, ColorRole.PRIMARY) viewThemeUtils.platform.colorImageView(binding.tempMsgDelete, ColorRole.PRIMARY) + binding.bubble.setOnClickListener { + if (binding.tempMsgActions.isVisible) { + binding.tempMsgActions.visibility = View.GONE + } else { + binding.tempMsgActions.visibility = View.VISIBLE + } + } + binding.tempMsgEdit.setOnClickListener { isEditing = !isEditing if (isEditing) { 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 e786832bc..d2d281b0e 100644 --- a/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt @@ -2934,12 +2934,7 @@ class ChatActivity : ) { if (message.item is ChatMessage) { val chatMessage = message.item as ChatMessage - - if (chatMessage.sendingFailed) { - chatMessage.readStatus = ReadStatus.FAILED - } else if (chatMessage.isTempMessage) { - chatMessage.readStatus = ReadStatus.SENDING - } else if (chatMessage.jsonMessageId <= xChatLastCommonRead) { + if (chatMessage.jsonMessageId <= xChatLastCommonRead) { chatMessage.readStatus = ReadStatus.READ } else { chatMessage.readStatus = ReadStatus.SENT @@ -3870,6 +3865,7 @@ class ChatActivity : CONTENT_TYPE_UNREAD_NOTICE_MESSAGE -> message.id == UNREAD_MESSAGES_MARKER_ID.toString() CONTENT_TYPE_CALL_STARTED -> message.id == "-2" CONTENT_TYPE_TEMP -> message.id == TEMPORARY_MESSAGE_ID_STRING + // CONTENT_TYPE_TEMP -> message.readStatus == ReadStatus.FAILED CONTENT_TYPE_DECK_CARD -> message.isDeckCard() else -> false diff --git a/app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt b/app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt index 1b46d5e89..5349794c3 100644 --- a/app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt +++ b/app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt @@ -52,6 +52,7 @@ data class ChatMessageEntity( @ColumnInfo(name = "deleted") var deleted: Boolean = false, @ColumnInfo(name = "expirationTimestamp") var expirationTimestamp: Int = 0, @ColumnInfo(name = "isReplyable") var replyable: Boolean = false, + @ColumnInfo(name = "isTemporary") var isTemporary: Boolean = false, @ColumnInfo(name = "lastEditActorDisplayName") var lastEditActorDisplayName: String? = null, @ColumnInfo(name = "lastEditActorId") var lastEditActorId: String? = null, @ColumnInfo(name = "lastEditActorType") var lastEditActorType: String? = null, @@ -63,9 +64,8 @@ data class ChatMessageEntity( @ColumnInfo(name = "reactions") var reactions: LinkedHashMap? = null, @ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList? = null, @ColumnInfo(name = "referenceId") var referenceId: String? = null, + @ColumnInfo(name = "sendingFailed") var sendingFailed: Boolean = false, @ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType, @ColumnInfo(name = "timestamp") var timestamp: Long = 0, - @ColumnInfo(name = "isTemporary") var isTemporary: Boolean = false, - @ColumnInfo(name = "sendingFailed") var sendingFailed: Boolean = false, // missing/not needed: silent ) diff --git a/app/src/main/res/drawable/baseline_replay_24.xml b/app/src/main/res/drawable/baseline_replay_24.xml new file mode 100644 index 000000000..58390a9c3 --- /dev/null +++ b/app/src/main/res/drawable/baseline_replay_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/drawable/baseline_report_problem_24.xml b/app/src/main/res/drawable/baseline_report_problem_24.xml new file mode 100644 index 000000000..a17ce9ad9 --- /dev/null +++ b/app/src/main/res/drawable/baseline_report_problem_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/item_custom_outcoming_text_message.xml b/app/src/main/res/layout/item_custom_outcoming_text_message.xml index 7c93c5d2a..4ada0dcd8 100644 --- a/app/src/main/res/layout/item_custom_outcoming_text_message.xml +++ b/app/src/main/res/layout/item_custom_outcoming_text_message.xml @@ -16,6 +16,42 @@ android:layout_marginRight="16dp" android:layout_marginBottom="2dp"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + app:tint="@color/high_emphasis_text" + tools:src="@drawable/ic_check_all" /> + app:tint="@color/high_emphasis_text" + tools:src="@drawable/ic_warning_white"/> + android:layout_below="@id/bubble" + android:layout_alignParentEnd="true"> + + + tools:visibility="gone"/> + android:visibility="gone" + tools:visibility="visible"/>