Skip to content

Commit 31f752c

Browse files
committed
reactions
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent 972d7e7 commit 31f752c

31 files changed

Lines changed: 773 additions & 758 deletions

app/src/androidTest/java/com/nextcloud/talk/data/database/migrations/MigrationsTest.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,12 @@
77

88
package com.nextcloud.talk.data.database.migrations
99

10-
import android.database.sqlite.SQLiteConstraintException
1110
import androidx.room.testing.MigrationTestHelper
1211
import androidx.sqlite.db.SupportSQLiteDatabase
1312
import androidx.test.ext.junit.runners.AndroidJUnit4
1413
import androidx.test.platform.app.InstrumentationRegistry
1514
import com.nextcloud.talk.data.source.local.Migrations
1615
import com.nextcloud.talk.data.source.local.TalkDatabase
17-
import org.junit.Assert.assertEquals
18-
import org.junit.Assert.assertTrue
1916
import org.junit.Rule
2017
import org.junit.Test
2118
import org.junit.runner.RunWith

app/src/main/java/com/nextcloud/talk/adapters/messages/PreviewMessageViewHolder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) :
123123
) {
124124
clickView!!.setOnClickListener { v: View? ->
125125
fileViewerUtils!!.openFile(
126-
message,
126+
message
127127
// ProgressUi(progressBar, messageText, image)
128128
)
129129
}

app/src/main/java/com/nextcloud/talk/api/NcApiCoroutines.kt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import com.nextcloud.talk.models.json.participants.AddParticipantOverall
2020
import com.nextcloud.talk.models.json.participants.TalkBan
2121
import com.nextcloud.talk.models.json.participants.TalkBanOverall
2222
import com.nextcloud.talk.models.json.profile.ProfileOverall
23+
import com.nextcloud.talk.models.json.reactions.ReactionsOverall
2324
import com.nextcloud.talk.models.json.status.StatusOverall
2425
import com.nextcloud.talk.models.json.testNotification.TestNotificationOverall
2526
import com.nextcloud.talk.models.json.threads.ThreadOverall
@@ -382,4 +383,25 @@ interface NcApiCoroutines {
382383
@Url url: String,
383384
@QueryMap fields: Map<String, Int>
384385
): Response<ChatOverall>
386+
387+
@POST
388+
suspend fun sendReaction(
389+
@Header("Authorization") authorization: String?,
390+
@Url url: String,
391+
@Query("reaction") reaction: String
392+
): GenericOverall
393+
394+
@DELETE
395+
suspend fun deleteReaction(
396+
@Header("Authorization") authorization: String?,
397+
@Url url: String,
398+
@Query("reaction") reaction: String
399+
): GenericOverall
400+
401+
@GET
402+
suspend fun getReactions(
403+
@Header("Authorization") authorization: String?,
404+
@Url url: String,
405+
@Query("reaction") reaction: String?
406+
): ReactionsOverall
385407
}

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 22 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ import com.nextcloud.talk.adapters.messages.TalkMessagesListAdapter
138138
import com.nextcloud.talk.adapters.messages.UnreadNoticeMessageViewHolder
139139
import com.nextcloud.talk.adapters.messages.VoiceMessageInterface
140140
import com.nextcloud.talk.api.NcApi
141+
import com.nextcloud.talk.api.NcApiCoroutines
141142
import com.nextcloud.talk.application.NextcloudTalkApplication
142143
import com.nextcloud.talk.chat.data.model.ChatMessage
143144
import com.nextcloud.talk.chat.ui.model.MessageTypeContent
@@ -288,6 +289,9 @@ class ChatActivity :
288289
@Inject
289290
lateinit var ncApi: NcApi
290291

292+
@Inject
293+
lateinit var ncApiCoroutines: NcApiCoroutines
294+
291295
@Inject
292296
lateinit var permissionUtil: PlatformPermissionUtil
293297

@@ -668,7 +672,9 @@ class ChatActivity :
668672
onPollClick = { pollId, pollName -> openPollDialog(pollId, pollName) },
669673
onVoicePlayPauseClick = { onVoicePlayPauseClickCompose(it) },
670674
onVoiceSeek = { _, progress -> chatViewModel.seekToMediaPlayer(progress) },
671-
onVoiceSpeedClick = { onVoiceSpeedClickCompose(it) }
675+
onVoiceSpeedClick = { onVoiceSpeedClickCompose(it) },
676+
onReactionClick = { messageId, emoji -> handleReactionClick(messageId, emoji) },
677+
onReactionLongClick = { messageId -> openReactionsDialog(messageId) }
672678
)
673679
}
674680
}
@@ -749,6 +755,20 @@ class ChatActivity :
749755
.show(supportFragmentManager, "PollMainDialogFragment")
750756
}
751757

758+
private fun handleReactionClick(messageId: Int, emoji: String) {
759+
lifecycleScope.launch {
760+
val chatMessage = chatViewModel.getMessageById(messageId.toLong()).first()
761+
onClickReaction(chatMessage, emoji)
762+
}
763+
}
764+
765+
private fun openReactionsDialog(messageId: Int) {
766+
lifecycleScope.launch {
767+
val chatMessage = chatViewModel.getMessageById(messageId.toLong()).first()
768+
onLongClickReactions(chatMessage)
769+
}
770+
}
771+
752772
// lifecycleScope.launch {
753773
// chatViewModel.getConversationFlow
754774
// .onEach { conversationModel ->
@@ -1284,32 +1304,6 @@ class ChatActivity :
12841304
}.collect()
12851305
}
12861306

1287-
chatViewModel.reactionDeletedViewState.observe(this) { state ->
1288-
when (state) {
1289-
is ChatViewModel.ReactionDeletedSuccessState -> {
1290-
updateUiToDeleteReaction(
1291-
state.reactionDeletedModel.chatMessage,
1292-
state.reactionDeletedModel.emoji
1293-
)
1294-
}
1295-
1296-
else -> {}
1297-
}
1298-
}
1299-
1300-
chatViewModel.reactionAddedViewState.observe(this) { state ->
1301-
when (state) {
1302-
is ChatViewModel.ReactionAddedSuccessState -> {
1303-
updateUiToAddReaction(
1304-
state.reactionAddedModel.chatMessage,
1305-
state.reactionAddedModel.emoji
1306-
)
1307-
}
1308-
1309-
else -> {}
1310-
}
1311-
}
1312-
13131307
messageInputViewModel.editMessageViewState.observe(this) { state ->
13141308
when (state) {
13151309
is MessageInputViewModel.EditMessageSuccessState -> {
@@ -4272,7 +4266,7 @@ class ChatActivity :
42724266
chatMessage,
42734267
conversationUser,
42744268
participantPermissions.hasReactPermission(),
4275-
ncApi
4269+
ncApiCoroutines
42764270
).show()
42774271
}
42784272

@@ -4759,45 +4753,6 @@ class ChatActivity :
47594753
}
47604754
}
47614755

4762-
fun updateUiToAddReaction(message: ChatMessage, emoji: String) {
4763-
if (message.reactions == null) {
4764-
message.reactions = LinkedHashMap()
4765-
}
4766-
4767-
if (message.reactionsSelf == null) {
4768-
message.reactionsSelf = ArrayList()
4769-
}
4770-
4771-
var amount = message.reactions!![emoji]
4772-
if (amount == null) {
4773-
amount = 0
4774-
}
4775-
message.reactions!![emoji] = amount + 1
4776-
message.reactionsSelf!!.add(emoji)
4777-
adapter?.update(message)
4778-
}
4779-
4780-
fun updateUiToDeleteReaction(message: ChatMessage, emoji: String) {
4781-
if (message.reactions == null) {
4782-
message.reactions = LinkedHashMap()
4783-
}
4784-
4785-
if (message.reactionsSelf == null) {
4786-
message.reactionsSelf = ArrayList()
4787-
}
4788-
4789-
var amount = message.reactions!![emoji]
4790-
if (amount == null) {
4791-
amount = 0
4792-
}
4793-
message.reactions!![emoji] = amount - 1
4794-
if (message.reactions!![emoji]!! <= 0) {
4795-
message.reactions!!.remove(emoji)
4796-
}
4797-
message.reactionsSelf!!.remove(emoji)
4798-
adapter?.update(message)
4799-
}
4800-
48014756
private fun isShowMessageDeletionButton(message: ChatMessage): Boolean {
48024757
val isUserAllowedByPrivileges = userAllowedByPrivilages(message)
48034758

app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,10 +78,7 @@ interface ChatMessageRepository : LifecycleAwareManager {
7878
@Deprecated("getMessage(messageId: Long, bundle: Bundle)")
7979
suspend fun getParentMessageById(messageId: Long): Flow<ChatMessage>
8080

81-
suspend fun fetchMissingParents(
82-
conversationId: String,
83-
parentIds: List<Long>
84-
)
81+
suspend fun fetchMissingParents(conversationId: String, parentIds: List<Long>)
8582

8683
suspend fun getNumberOfThreadReplies(threadId: Long): Int
8784

app/src/main/java/com/nextcloud/talk/chat/data/model/ChatMessage.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ data class ChatMessage(
167167
val deckCardParameters by lazy { DeckCardParameters(messageParameters) }
168168

169169
val hasFileAttachment get() = messageParameters?.containsKey("file") == true
170+
170171
// val hasGeoLocation get() = messageParameters?.containsKey("geo-location") == true
171172
val hasGeoLocation get() = messageParameters?.get("object")?.get("type") == "geo-location"
172173
val hasPoll get() = messageParameters?.get("object")?.get("type") == "talk-poll"
@@ -185,7 +186,6 @@ data class ChatMessage(
185186
}
186187
}
187188

188-
189189
var extractedUrlToPreview: String? = null
190190

191191
// messageTypesToIgnore is weird. must be deleted by refactoring!!!
@@ -293,8 +293,6 @@ data class ChatMessage(
293293
}
294294
}
295295

296-
297-
298296
// fun getCalculateMessageType(): MessageType =
299297
// if (!TextUtils.isEmpty(systemMessage)) {
300298
// MessageType.SYSTEM_MESSAGE

app/src/main/java/com/nextcloud/talk/chat/data/model/DeckCardParameters.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
package com.nextcloud.talk.chat.data.model
99

10-
class DeckCardParameters(
11-
messageParameters: HashMap<String?, HashMap<String?, String?>>?
12-
) : RichObjectParameters(messageParameters, "deck-card") {
10+
class DeckCardParameters(messageParameters: HashMap<String?, HashMap<String?, String?>>?) :
11+
RichObjectParameters(messageParameters, "deck-card") {
1312

1413
val id = string("id")
1514
val name = string("name")
@@ -19,4 +18,3 @@ class DeckCardParameters(
1918

2019
val link = string("link")
2120
}
22-

app/src/main/java/com/nextcloud/talk/chat/data/model/FileParameters.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@
77

88
package com.nextcloud.talk.chat.data.model
99

10-
class FileParameters(
11-
messageParameters: HashMap<String?, HashMap<String?, String?>>?
12-
) : RichObjectParameters(messageParameters, "file") {
10+
class FileParameters(messageParameters: HashMap<String?, HashMap<String?, String?>>?) :
11+
RichObjectParameters(messageParameters, "file") {
1312

1413
val id = string("id")
1514
val name = string("name")
@@ -31,4 +30,3 @@ class FileParameters(
3130
val previewAvailable = yesNo("preview-available")
3231
val hideDownload = yesNo("hide-download")
3332
}
34-

app/src/main/java/com/nextcloud/talk/chat/data/model/GeoLocationParameters.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77

88
package com.nextcloud.talk.chat.data.model
99

10-
class GeoLocationParameters(
11-
messageParameters: HashMap<String?, HashMap<String?, String?>>?
12-
) : RichObjectParameters(messageParameters, "object") {
10+
class GeoLocationParameters(messageParameters: HashMap<String?, HashMap<String?, String?>>?) :
11+
RichObjectParameters(messageParameters, "object") {
1312

1413
val id = string("id")
1514
val name = string("name")
1615

1716
val latitude = double("latitude")
1817
val longitude = double("longitude")
1918
}
20-

app/src/main/java/com/nextcloud/talk/chat/data/model/PollParameters.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,9 @@
77

88
package com.nextcloud.talk.chat.data.model
99

10-
class PollParameters(
11-
messageParameters: HashMap<String?, HashMap<String?, String?>>?
12-
) : RichObjectParameters(messageParameters, "object") {
10+
class PollParameters(messageParameters: HashMap<String?, HashMap<String?, String?>>?) :
11+
RichObjectParameters(messageParameters, "object") {
1312

1413
val id = string("id")
1514
val name = string("name")
1615
}
17-

0 commit comments

Comments
 (0)