Skip to content

Commit cc5e3b7

Browse files
committed
new chat architecture incl chat relay
Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
1 parent ffa2e51 commit cc5e3b7

70 files changed

Lines changed: 5616 additions & 2872 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ChatMessagesDaoTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class ChatMessagesDaoTest {
108108
assertEquals(conversation1, conversation1GotByToken)
109109

110110
// Lets insert some messages to the conversations
111-
chatMessagesDao.upsertChatMessages(
111+
chatMessagesDao.upsertChatMessagesAndDeleteTemp(
112112
listOf(
113113
createChatMessageEntity(conversation1.internalId, "hello"),
114114
createChatMessageEntity(conversation1.internalId, "here"),
@@ -117,22 +117,22 @@ class ChatMessagesDaoTest {
117117
createChatMessageEntity(conversation1.internalId, "messages")
118118
)
119119
)
120-
chatMessagesDao.upsertChatMessages(
120+
chatMessagesDao.upsertChatMessagesAndDeleteTemp(
121121
listOf(
122122
createChatMessageEntity(conversation2.internalId, "first message in conversation 2")
123123
)
124124
)
125125

126-
chatMessagesDao.getMessagesForConversation(conversation1.internalId).first().forEach {
126+
chatMessagesDao.getMessagesForConversation(conversation1.internalId, null).first().forEach {
127127
Log.d(tag, "- next Message for conversation1 (account1)-")
128128
Log.d(tag, "id (PK): " + it.id)
129129
Log.d(tag, "message: " + it.message)
130130
}
131131

132-
val chatMessagesConv1 = chatMessagesDao.getMessagesForConversation(conversation1.internalId)
132+
val chatMessagesConv1 = chatMessagesDao.getMessagesForConversation(conversation1.internalId, null)
133133
assertEquals(5, chatMessagesConv1.first().size)
134134

135-
val chatMessagesConv2 = chatMessagesDao.getMessagesForConversation(conversation2.internalId)
135+
val chatMessagesConv2 = chatMessagesDao.getMessagesForConversation(conversation2.internalId, null)
136136
assertEquals(1, chatMessagesConv2.first().size)
137137

138138
assertEquals("some", chatMessagesConv1.first()[1].message)

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

Lines changed: 95 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,25 @@
77

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

10-
import androidx.room.Room
10+
import android.database.sqlite.SQLiteConstraintException
1111
import androidx.room.testing.MigrationTestHelper
12+
import androidx.sqlite.db.SupportSQLiteDatabase
1213
import androidx.test.ext.junit.runners.AndroidJUnit4
1314
import androidx.test.platform.app.InstrumentationRegistry
1415
import com.nextcloud.talk.data.source.local.Migrations
1516
import com.nextcloud.talk.data.source.local.TalkDatabase
17+
import org.junit.Assert.assertEquals
18+
import org.junit.Assert.assertTrue
1619
import org.junit.Rule
1720
import org.junit.Test
1821
import org.junit.runner.RunWith
1922
import java.io.IOException
2023

2124
@RunWith(AndroidJUnit4::class)
2225
class MigrationsTest {
26+
2327
companion object {
2428
private const val TEST_DB = "migration-test"
25-
private const val INIT_VERSION = 10 // last version before update to offline first
26-
private val TAG = MigrationsTest::class.java.simpleName
2729
}
2830

2931
@get:Rule
@@ -32,21 +34,96 @@ class MigrationsTest {
3234
TalkDatabase::class.java
3335
)
3436

35-
@Test
36-
@Throws(IOException::class)
37-
@Suppress("SpreadOperator")
38-
fun migrateAll() {
39-
helper.createDatabase(TEST_DB, INIT_VERSION).apply {
40-
close()
41-
}
42-
43-
Room.databaseBuilder(
44-
InstrumentationRegistry.getInstrumentation().targetContext,
45-
TalkDatabase::class.java,
46-
TEST_DB
47-
).addMigrations(*TalkDatabase.MIGRATIONS).build().apply {
48-
openHelper.writableDatabase.close()
49-
}
37+
private fun insertMessage(
38+
db: SupportSQLiteDatabase,
39+
internalId: String,
40+
referenceId: String?,
41+
isTemporary: Int,
42+
timestamp: Long
43+
) {
44+
db.execSQL(
45+
"""
46+
INSERT INTO ChatMessages (
47+
internalId,
48+
accountId,
49+
token,
50+
id,
51+
internalConversationId,
52+
threadId,
53+
isThread,
54+
actorDisplayName,
55+
message,
56+
actorId,
57+
actorType,
58+
deleted,
59+
expirationTimestamp,
60+
isReplyable,
61+
isTemporary,
62+
lastEditActorDisplayName,
63+
lastEditActorId,
64+
lastEditActorType,
65+
lastEditTimestamp,
66+
markdown,
67+
messageParameters,
68+
messageType,
69+
parent,
70+
reactions,
71+
reactionsSelf,
72+
referenceId,
73+
sendStatus,
74+
silent,
75+
systemMessage,
76+
threadTitle,
77+
threadReplies,
78+
timestamp,
79+
pinnedActorType,
80+
pinnedActorId,
81+
pinnedActorDisplayName,
82+
pinnedAt,
83+
pinnedUntil,
84+
sendAt
85+
) VALUES (
86+
'$internalId',
87+
1,
88+
'token',
89+
1,
90+
'conv',
91+
NULL,
92+
0,
93+
'User',
94+
'Hello',
95+
'actor1',
96+
'USER',
97+
0,
98+
0,
99+
0,
100+
$isTemporary,
101+
NULL,
102+
NULL,
103+
NULL,
104+
0,
105+
0,
106+
NULL,
107+
'comment',
108+
NULL,
109+
NULL,
110+
NULL,
111+
${if (referenceId != null) "'$referenceId'" else "NULL"},
112+
NULL,
113+
0,
114+
0,
115+
NULL,
116+
0,
117+
$timestamp,
118+
NULL,
119+
NULL,
120+
NULL,
121+
NULL,
122+
NULL,
123+
0
124+
)
125+
"""
126+
)
50127
}
51128

52129
@Test

app/src/main/java/com/nextcloud/talk/activities/BaseActivity.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import com.nextcloud.talk.utils.adjustUIForAPILevel35
4444
import com.nextcloud.talk.utils.bundle.BundleKeys
4545
import com.nextcloud.talk.utils.database.user.CurrentUserProvider
4646
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
47+
import com.nextcloud.talk.utils.message.MessageUtils
4748
import com.nextcloud.talk.utils.preferences.AppPreferences
4849
import com.nextcloud.talk.utils.ssl.TrustManager
4950
import org.greenrobot.eventbus.EventBus
@@ -72,6 +73,9 @@ open class BaseActivity : AppCompatActivity() {
7273
@Inject
7374
lateinit var viewThemeUtils: ViewThemeUtils
7475

76+
@Inject
77+
lateinit var messageUtils: MessageUtils
78+
7579
@Inject
7680
lateinit var context: Context
7781

app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,10 @@ class CallActivity : CallBaseActivity() {
284284
private var isBreakoutRoom = false
285285
private val localParticipantMessageListener = LocalParticipantMessageListener { token ->
286286
switchToRoomToken = token
287-
hangup(true, false)
287+
hangup(
288+
shutDownView = true,
289+
endCallForAll = false
290+
)
288291
}
289292
private val offerMessageListener = OfferMessageListener { sessionId, roomType, sdp, nick ->
290293
getOrCreatePeerConnectionWrapperForSessionIdAndType(
@@ -1900,7 +1903,7 @@ class CallActivity : CallBaseActivity() {
19001903

19011904
when (messageType) {
19021905
"usersInRoom" ->
1903-
internalSignalingMessageReceiver.process(signaling.messageWrapper as List<Map<String?, Any?>?>?)
1906+
internalSignalingMessageReceiver.process(signaling.messageWrapper as List<Map<String?, Any?>>)
19041907

19051908
"message" -> {
19061909
val ncSignalingMessage = LoganSquare.parse(
@@ -2716,11 +2719,11 @@ class CallActivity : CallBaseActivity() {
27162719
* All listeners are called in the main thread.
27172720
*/
27182721
private class InternalSignalingMessageReceiver : SignalingMessageReceiver() {
2719-
fun process(users: List<Map<String?, Any?>?>?) {
2722+
fun process(users: List<Map<String?, Any?>>) {
27202723
processUsersInRoom(users)
27212724
}
27222725

2723-
fun process(message: NCSignalingMessage?) {
2726+
fun process(message: NCSignalingMessage) {
27242727
processSignalingMessage(message)
27252728
}
27262729
}

app/src/main/java/com/nextcloud/talk/activities/ParticipantHandler.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ class ParticipantHandler(
139139
_uiState.update { it.copy(raisedHand = state) }
140140
}
141141

142-
override fun onReaction(reaction: String?) {
142+
override fun onReaction(reaction: String) {
143143
Log.d(TAG, "onReaction")
144144
}
145145

app/src/main/java/com/nextcloud/talk/adapters/items/ConversationItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ import com.nextcloud.talk.adapters.items.ConversationItem.ConversationItemViewHo
2828
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
2929
import com.nextcloud.talk.chat.data.model.ChatMessage
3030
import com.nextcloud.talk.chat.data.model.ChatMessage.MessageType
31-
import com.nextcloud.talk.data.database.mappers.asModel
31+
import com.nextcloud.talk.data.database.mappers.toDomainModel
3232
import com.nextcloud.talk.data.user.model.User
3333
import com.nextcloud.talk.databinding.RvItemConversationWithLastMessageBinding
3434
import com.nextcloud.talk.extensions.loadConversationAvatar
@@ -60,7 +60,7 @@ class ConversationItem(
6060
ISectionable<ConversationItemViewHolder, GenericTextHeaderItem?>,
6161
IFilterable<String?> {
6262
private var header: GenericTextHeaderItem? = null
63-
private val chatMessage = model.lastMessage?.asModel()
63+
private val chatMessage = model.lastMessage?.toDomainModel()
6464
var mHolder: ConversationItemViewHolder? = null
6565

6666
constructor(

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package com.nextcloud.talk.adapters.messages
1111

1212
import android.annotation.SuppressLint
1313
import android.content.Context
14+
import android.text.SpannableStringBuilder
1415
import android.util.Log
1516
import android.util.TypedValue
1617
import android.view.GestureDetector
@@ -154,10 +155,10 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
154155
binding.messageAuthor.visibility = View.GONE
155156
}
156157
binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
157-
binding.messageText.text = processedMessageText
158+
// binding.messageText.text = processedMessageText
158159
// just for debugging:
159-
// binding.messageText.text =
160-
// SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
160+
binding.messageText.text =
161+
SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
161162
} else {
162163
binding.checkboxContainer.visibility = View.VISIBLE
163164
binding.messageText.visibility = View.GONE

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ package com.nextcloud.talk.adapters.messages
1111

1212
import android.annotation.SuppressLint
1313
import android.content.Context
14+
import android.text.SpannableStringBuilder
1415
import android.util.Log
1516
import android.util.TypedValue
1617
import android.view.GestureDetector
@@ -167,10 +168,10 @@ class OutcomingTextMessageViewHolder(itemView: View) :
167168

168169
binding.messageTime.layoutParams = layoutParams
169170
viewThemeUtils.platform.colorTextView(binding.messageText, ColorRole.ON_SURFACE_VARIANT)
170-
binding.messageText.text = processedMessageText
171+
// binding.messageText.text = processedMessageText
171172
// just for debugging:
172-
// binding.messageText.text =
173-
// SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
173+
binding.messageText.text =
174+
SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
174175
} else {
175176
binding.messageText.visibility = View.GONE
176177
binding.checkboxContainer.visibility = View.VISIBLE

0 commit comments

Comments
 (0)