Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ class ChatMessagesDaoTest {
assertEquals(conversation1, conversation1GotByToken)

// Lets insert some messages to the conversations
chatMessagesDao.upsertChatMessages(
chatMessagesDao.upsertChatMessagesAndDeleteTemp(
listOf(
createChatMessageEntity(conversation1.internalId, "hello"),
createChatMessageEntity(conversation1.internalId, "here"),
Expand All @@ -117,22 +117,22 @@ class ChatMessagesDaoTest {
createChatMessageEntity(conversation1.internalId, "messages")
)
)
chatMessagesDao.upsertChatMessages(
chatMessagesDao.upsertChatMessagesAndDeleteTemp(
listOf(
createChatMessageEntity(conversation2.internalId, "first message in conversation 2")
)
)

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

val chatMessagesConv1 = chatMessagesDao.getMessagesForConversation(conversation1.internalId)
val chatMessagesConv1 = chatMessagesDao.getMessagesForConversation(conversation1.internalId, null)
assertEquals(5, chatMessagesConv1.first().size)

val chatMessagesConv2 = chatMessagesDao.getMessagesForConversation(conversation2.internalId)
val chatMessagesConv2 = chatMessagesDao.getMessagesForConversation(conversation2.internalId, null)
assertEquals(1, chatMessagesConv2.first().size)

assertEquals("some", chatMessagesConv1.first()[1].message)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

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

import androidx.room.Room
import androidx.room.testing.MigrationTestHelper
import androidx.sqlite.db.SupportSQLiteDatabase
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.platform.app.InstrumentationRegistry
import com.nextcloud.talk.data.source.local.Migrations
Expand All @@ -20,10 +20,9 @@ import java.io.IOException

@RunWith(AndroidJUnit4::class)
class MigrationsTest {

companion object {
private const val TEST_DB = "migration-test"
private const val INIT_VERSION = 10 // last version before update to offline first
private val TAG = MigrationsTest::class.java.simpleName
}

@get:Rule
Expand All @@ -32,21 +31,96 @@ class MigrationsTest {
TalkDatabase::class.java
)

@Test
@Throws(IOException::class)
@Suppress("SpreadOperator")
fun migrateAll() {
helper.createDatabase(TEST_DB, INIT_VERSION).apply {
close()
}

Room.databaseBuilder(
InstrumentationRegistry.getInstrumentation().targetContext,
TalkDatabase::class.java,
TEST_DB
).addMigrations(*TalkDatabase.MIGRATIONS).build().apply {
openHelper.writableDatabase.close()
}
private fun insertMessage(
db: SupportSQLiteDatabase,
internalId: String,
referenceId: String?,
isTemporary: Int,
timestamp: Long
) {
db.execSQL(
"""
INSERT INTO ChatMessages (
internalId,
accountId,
token,
id,
internalConversationId,
threadId,
isThread,
actorDisplayName,
message,
actorId,
actorType,
deleted,
expirationTimestamp,
isReplyable,
isTemporary,
lastEditActorDisplayName,
lastEditActorId,
lastEditActorType,
lastEditTimestamp,
markdown,
messageParameters,
messageType,
parent,
reactions,
reactionsSelf,
referenceId,
sendStatus,
silent,
systemMessage,
threadTitle,
threadReplies,
timestamp,
pinnedActorType,
pinnedActorId,
pinnedActorDisplayName,
pinnedAt,
pinnedUntil,
sendAt
) VALUES (
'$internalId',
1,
'token',
1,
'conv',
NULL,
0,
'User',
'Hello',
'actor1',
'USER',
0,
0,
0,
$isTemporary,
NULL,
NULL,
NULL,
0,
0,
NULL,
'comment',
NULL,
NULL,
NULL,
${if (referenceId != null) "'$referenceId'" else "NULL"},
NULL,
0,
0,
NULL,
0,
$timestamp,
NULL,
NULL,
NULL,
NULL,
NULL,
0
)
"""
)
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ import com.nextcloud.talk.utils.adjustUIForAPILevel35
import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CurrentUserProvider
import com.nextcloud.talk.utils.database.user.CurrentUserProviderOld
import com.nextcloud.talk.utils.message.MessageUtils
import com.nextcloud.talk.utils.preferences.AppPreferences
import com.nextcloud.talk.utils.ssl.TrustManager
import org.greenrobot.eventbus.EventBus
Expand Down Expand Up @@ -72,6 +73,9 @@ open class BaseActivity : AppCompatActivity() {
@Inject
lateinit var viewThemeUtils: ViewThemeUtils

@Inject
lateinit var messageUtils: MessageUtils

@Inject
lateinit var context: Context

Expand Down
11 changes: 7 additions & 4 deletions app/src/main/java/com/nextcloud/talk/activities/CallActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,10 @@ class CallActivity : CallBaseActivity() {
private var isBreakoutRoom = false
private val localParticipantMessageListener = LocalParticipantMessageListener { token ->
switchToRoomToken = token
hangup(true, false)
hangup(
shutDownView = true,
endCallForAll = false
)
}
private val offerMessageListener = OfferMessageListener { sessionId, roomType, sdp, nick ->
getOrCreatePeerConnectionWrapperForSessionIdAndType(
Expand Down Expand Up @@ -1900,7 +1903,7 @@ class CallActivity : CallBaseActivity() {

when (messageType) {
"usersInRoom" ->
internalSignalingMessageReceiver.process(signaling.messageWrapper as List<Map<String?, Any?>?>?)
internalSignalingMessageReceiver.process(signaling.messageWrapper as List<Map<String?, Any?>>)

"message" -> {
val ncSignalingMessage = LoganSquare.parse(
Expand Down Expand Up @@ -2716,11 +2719,11 @@ class CallActivity : CallBaseActivity() {
* All listeners are called in the main thread.
*/
private class InternalSignalingMessageReceiver : SignalingMessageReceiver() {
fun process(users: List<Map<String?, Any?>?>?) {
fun process(users: List<Map<String?, Any?>>) {
processUsersInRoom(users)
}

fun process(message: NCSignalingMessage?) {
fun process(message: NCSignalingMessage) {
processSignalingMessage(message)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class ParticipantHandler(
_uiState.update { it.copy(raisedHand = state) }
}

override fun onReaction(reaction: String?) {
override fun onReaction(reaction: String) {
Log.d(TAG, "onReaction")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import com.nextcloud.talk.adapters.items.ConversationItem.ConversationItemViewHo
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.chat.data.model.ChatMessage.MessageType
import com.nextcloud.talk.data.database.mappers.asModel
import com.nextcloud.talk.data.database.mappers.toDomainModel
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.RvItemConversationWithLastMessageBinding
import com.nextcloud.talk.extensions.loadConversationAvatar
Expand Down Expand Up @@ -60,7 +60,7 @@ class ConversationItem(
ISectionable<ConversationItemViewHolder, GenericTextHeaderItem?>,
IFilterable<String?> {
private var header: GenericTextHeaderItem? = null
private val chatMessage = model.lastMessage?.asModel()
private val chatMessage = model.lastMessage?.toDomainModel()
var mHolder: ConversationItemViewHolder? = null

constructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package com.nextcloud.talk.adapters.messages

import android.annotation.SuppressLint
import android.content.Context
import android.text.SpannableStringBuilder
import android.util.Log
import android.util.TypedValue
import android.view.GestureDetector
Expand Down Expand Up @@ -154,10 +155,10 @@ class IncomingTextMessageViewHolder(itemView: View, payload: Any) :
binding.messageAuthor.visibility = View.GONE
}
binding.messageText.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
binding.messageText.text = processedMessageText
// binding.messageText.text = processedMessageText
// just for debugging:
// binding.messageText.text =
// SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
binding.messageText.text =
SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
} else {
binding.checkboxContainer.visibility = View.VISIBLE
binding.messageText.visibility = View.GONE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ package com.nextcloud.talk.adapters.messages

import android.annotation.SuppressLint
import android.content.Context
import android.text.SpannableStringBuilder
import android.util.Log
import android.util.TypedValue
import android.view.GestureDetector
Expand Down Expand Up @@ -167,10 +168,10 @@ class OutcomingTextMessageViewHolder(itemView: View) :

binding.messageTime.layoutParams = layoutParams
viewThemeUtils.platform.colorTextView(binding.messageText, ColorRole.ON_SURFACE_VARIANT)
binding.messageText.text = processedMessageText
// binding.messageText.text = processedMessageText
// just for debugging:
// binding.messageText.text =
// SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
binding.messageText.text =
SpannableStringBuilder(processedMessageText).append(" (" + message.jsonMessageId + ")")
} else {
binding.messageText.visibility = View.GONE
binding.checkboxContainer.visibility = View.VISIBLE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,6 @@ import com.nextcloud.talk.utils.FileViewerUtils
import com.nextcloud.talk.utils.FileViewerUtils.ProgressUi
import com.nextcloud.talk.utils.message.MessageUtils
import com.stfalcon.chatkit.messages.MessageHolders.IncomingImageMessageViewHolder
import coil.load
import com.nextcloud.talk.utils.ApiUtils
import io.reactivex.Single
import io.reactivex.SingleObserver
import io.reactivex.disposables.Disposable
Expand Down Expand Up @@ -102,22 +100,6 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) :
super.onBind(message)
image.minimumHeight = DisplayUtils.convertDpToPixel(MIN_IMAGE_HEIGHT, context!!).toInt()

// Reset state for view recycling
image.adjustViewBounds = false
messageText.visibility = View.VISIBLE

// Check if image is GIF and load animated image
if (message.imageUrl != null && message.shouldAutoplayGif()) {
image.adjustViewBounds = true
image.load(message.imageUrl) {
size(coil.size.Size.ORIGINAL)
addHeader(
"Authorization",
ApiUtils.getCredentials(message.activeUser!!.username, message.activeUser!!.token)!!
)
}
}

if (message.lastEditTimestamp != 0L && !message.isDeleted) {
time.text = dateUtils.getLocalTimeStringFromTimestamp(message.lastEditTimestamp!!)
messageEditIndicator.visibility = View.VISIBLE
Expand All @@ -128,42 +110,39 @@ abstract class PreviewMessageViewHolder(itemView: View?, payload: Any?) :

viewThemeUtils!!.platform.colorCircularProgressBar(progressBar!!, ColorRole.PRIMARY)
clickView = image
messageText.visibility = View.VISIBLE
if (message.getCalculateMessageType() === ChatMessage.MessageType.SINGLE_NC_ATTACHMENT_MESSAGE) {
val chatActivity = commonMessageInterface as ChatActivity
fileViewerUtils = FileViewerUtils(chatActivity, message.activeUser!!)
val fileName = message.selectedIndividualHashMap!![KEY_NAME]

messageText.text = fileName

// hide filename display for GIF images
if (message.shouldAutoplayGif()) {
messageText.visibility = View.INVISIBLE
}

if (message.activeUser != null &&
message.activeUser!!.username != null &&
message.activeUser!!.baseUrl != null
) {
clickView!!.setOnClickListener { v: View? ->
fileViewerUtils!!.openFile(
message,
ProgressUi(progressBar, messageText, image)
)
}
clickView!!.setOnLongClickListener {
previewMessageInterface!!.onPreviewMessageLongClick(message)
true
message.activeUser?.let {
val chatActivity = commonMessageInterface as ChatActivity
fileViewerUtils = FileViewerUtils(chatActivity, it)
val fileName = message.selectedIndividualHashMap!![KEY_NAME]
messageText.text = fileName
if (
it.username != null &&
it.baseUrl != null
) {
clickView!!.setOnClickListener { v: View? ->
fileViewerUtils!!.openFile(
message
// ProgressUi(progressBar, messageText, image)
)
}
clickView!!.setOnLongClickListener {
previewMessageInterface!!.onPreviewMessageLongClick(message)
true
}
}
} else {

fileViewerUtils?.resumeToUpdateViewsByProgress(
message.selectedIndividualHashMap!![KEY_NAME]!!,
message.selectedIndividualHashMap!![KEY_ID]!!,
message.selectedIndividualHashMap!![KEY_MIMETYPE],
message.openWhenDownloaded,
ProgressUi(progressBar, messageText, image)
)
} ?: {
Log.e(TAG, "failed to set click listener because activeUser, username or baseUrl were null")
}
fileViewerUtils!!.resumeToUpdateViewsByProgress(
message.selectedIndividualHashMap!![KEY_NAME]!!,
message.selectedIndividualHashMap!![KEY_ID]!!,
message.selectedIndividualHashMap!![KEY_MIMETYPE],
message.openWhenDownloaded,
ProgressUi(progressBar, messageText, image)
)
} else if (message.getCalculateMessageType() === ChatMessage.MessageType.SINGLE_LINK_GIPHY_MESSAGE) {
messageText.text = "GIPHY"
DisplayUtils.setClickableString("GIPHY", "https://giphy.com", messageText)
Expand Down
Loading
Loading