Merge pull request #4052 from nextcloud/renovate/com.google.devtools.ksp-2.x

chore(deps): update plugin com.google.devtools.ksp to v2.0.10-1.0.24
This commit is contained in:
Andy Scherzinger 2024-08-17 20:43:02 +02:00 committed by GitHub
commit b5806df2f8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
29 changed files with 104 additions and 125 deletions

View File

@ -15,7 +15,7 @@ import com.github.spotbugs.snom.SpotBugsTask
plugins { plugins {
id "org.jetbrains.kotlin.plugin.compose" version "2.0.10" id "org.jetbrains.kotlin.plugin.compose" version "2.0.10"
id "org.jetbrains.kotlin.kapt" id "org.jetbrains.kotlin.kapt"
id 'com.google.devtools.ksp' version '2.0.0-1.0.24' id 'com.google.devtools.ksp' version '2.0.10-1.0.24'
} }
apply plugin: 'com.android.application' apply plugin: 'com.android.application'

View File

@ -52,7 +52,6 @@ class ChatBlocksDaoTest {
@Test @Test
fun testGetConnectedChatBlocks() = fun testGetConnectedChatBlocks() =
runTest { runTest {
usersDao.saveUser(createUserEntity("account1", "Account 1")) usersDao.saveUser(createUserEntity("account1", "Account 1"))
val account1 = usersDao.getUserWithUserId("account1").blockingGet() val account1 = usersDao.getUserWithUserId("account1").blockingGet()
@ -67,7 +66,7 @@ class ChatBlocksDaoTest {
accountId = account1.id, accountId = account1.id,
"def", "def",
roomName = "Conversation Two" roomName = "Conversation Two"
), )
) )
) )

View File

@ -13,21 +13,19 @@ import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.OutcomingPollMessageViewHolder.Companion
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomIncomingLinkPreviewMessageBinding import com.nextcloud.talk.databinding.ItemCustomIncomingLinkPreviewMessageBinding
import com.nextcloud.talk.extensions.loadBotsAvatar import com.nextcloud.talk.extensions.loadBotsAvatar
import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar
import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils

View File

@ -20,21 +20,19 @@ import android.view.MotionEvent
import android.view.View import android.view.View
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.IncomingPollMessageViewHolder.Companion
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomIncomingLocationMessageBinding import com.nextcloud.talk.databinding.ItemCustomIncomingLocationMessageBinding
import com.nextcloud.talk.extensions.loadBotsAvatar import com.nextcloud.talk.extensions.loadBotsAvatar
import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar
import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils

View File

@ -12,21 +12,19 @@ import android.text.TextUtils
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.IncomingTextMessageViewHolder.Companion
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomIncomingPollMessageBinding import com.nextcloud.talk.databinding.ItemCustomIncomingPollMessageBinding
import com.nextcloud.talk.extensions.loadBotsAvatar import com.nextcloud.talk.extensions.loadBotsAvatar
import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar
import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.polls.ui.PollMainDialogFragment import com.nextcloud.talk.polls.ui.PollMainDialogFragment
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils

View File

@ -15,7 +15,6 @@ import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.View import android.view.View
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
@ -23,11 +22,11 @@ import com.nextcloud.talk.R
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomIncomingTextMessageBinding import com.nextcloud.talk.databinding.ItemCustomIncomingTextMessageBinding
import com.nextcloud.talk.extensions.loadBotsAvatar import com.nextcloud.talk.extensions.loadBotsAvatar
import com.nextcloud.talk.extensions.loadChangelogBotAvatar import com.nextcloud.talk.extensions.loadChangelogBotAvatar
import com.nextcloud.talk.extensions.loadFederatedUserAvatar import com.nextcloud.talk.extensions.loadFederatedUserAvatar
import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils
import com.nextcloud.talk.utils.DateUtils import com.nextcloud.talk.utils.DateUtils
@ -37,9 +36,7 @@ import com.nextcloud.talk.utils.preferences.AppPreferences
import com.stfalcon.chatkit.messages.MessageHolders import com.stfalcon.chatkit.messages.MessageHolders
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import javax.inject.Inject import javax.inject.Inject

View File

@ -12,18 +12,16 @@ import android.content.Context
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.OutcomingPollMessageViewHolder.Companion
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.databinding.ItemCustomOutcomingLinkPreviewMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomOutcomingLinkPreviewMessageBinding
import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils

View File

@ -18,19 +18,17 @@ import android.view.View
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.google.android.flexbox.FlexboxLayout import com.google.android.flexbox.FlexboxLayout
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.IncomingPollMessageViewHolder.Companion
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.databinding.ItemCustomOutcomingLocationMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomOutcomingLocationMessageBinding
import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils

View File

@ -12,18 +12,16 @@ import android.content.Context
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.lifecycle.lifecycleScope
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.IncomingPollMessageViewHolder.Companion
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.databinding.ItemCustomOutcomingPollMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomOutcomingPollMessageBinding
import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.polls.ui.PollMainDialogFragment import com.nextcloud.talk.polls.ui.PollMainDialogFragment
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils

View File

@ -17,19 +17,17 @@ import android.view.View
import android.widget.SeekBar import android.widget.SeekBar
import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.content.res.AppCompatResources
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.lifecycleScope
import androidx.work.WorkInfo import androidx.work.WorkInfo
import androidx.work.WorkManager import androidx.work.WorkManager
import autodagger.AutoInjector import autodagger.AutoInjector
import coil.load import coil.load
import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.messages.IncomingPollMessageViewHolder.Companion
import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.chat.ChatActivity import com.nextcloud.talk.chat.ChatActivity
import com.nextcloud.talk.databinding.ItemCustomOutcomingVoiceMessageBinding
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.databinding.ItemCustomOutcomingVoiceMessageBinding
import com.nextcloud.talk.models.json.chat.ReadStatus import com.nextcloud.talk.models.json.chat.ReadStatus
import com.nextcloud.talk.ui.theme.ViewThemeUtils import com.nextcloud.talk.ui.theme.ViewThemeUtils
import com.nextcloud.talk.utils.ApiUtils import com.nextcloud.talk.utils.ApiUtils

View File

@ -162,7 +162,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_BREAKOUT_ROOM import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_BREAKOUT_ROOM
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_MODERATOR import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_IS_MODERATOR
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_RECORDING_STATE import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_RECORDING_STATE
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_START_CALL_AFTER_ROOM_SWITCH
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SWITCH_TO_ROOM
@ -187,7 +186,6 @@ import kotlinx.coroutines.withContext
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode import org.greenrobot.eventbus.ThreadMode
import retrofit2.HttpException import retrofit2.HttpException
import retrofit2.Response
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.net.HttpURLConnection import java.net.HttpURLConnection
@ -291,6 +289,7 @@ class ChatActivity :
var newMessagesCount = 0 var newMessagesCount = 0
var startCallFromNotification: Boolean = false var startCallFromNotification: Boolean = false
var startCallFromRoomSwitch: Boolean = false var startCallFromRoomSwitch: Boolean = false
// lateinit var roomId: String // lateinit var roomId: String
var voiceOnly: Boolean = true var voiceOnly: Boolean = true
private lateinit var path: String private lateinit var path: String
@ -600,7 +599,7 @@ class ChatActivity :
chatViewModel.loadMessages( chatViewModel.loadMessages(
withCredentials = credentials!!, withCredentials = credentials!!,
withUrl = urlForChatting, withUrl = urlForChatting
) )
} }
@ -985,7 +984,8 @@ class ChatActivity :
if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) { if (newState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
if (layoutManager!!.findFirstCompletelyVisibleItemPosition() > 0 && if (layoutManager!!.findFirstCompletelyVisibleItemPosition() > 0 &&
!binding.unreadMessagesPopup.isShown) { !binding.unreadMessagesPopup.isShown
) {
binding.scrollDownButton.visibility = View.VISIBLE binding.scrollDownButton.visibility = View.VISIBLE
} else { } else {
binding.scrollDownButton.visibility = View.GONE binding.scrollDownButton.visibility = View.GONE
@ -2504,7 +2504,6 @@ class ChatActivity :
unreadChatMessage.message = context.getString(R.string.nc_new_messages) unreadChatMessage.message = context.getString(R.string.nc_new_messages)
adapter?.addToStart(unreadChatMessage, false) adapter?.addToStart(unreadChatMessage, false)
if (scrollToEndOnUpdate) { if (scrollToEndOnUpdate) {
binding.scrollDownButton.visibility = View.GONE binding.scrollDownButton.visibility = View.GONE
newMessagesCount = 0 newMessagesCount = 0
@ -2519,7 +2518,6 @@ class ChatActivity :
} }
} }
for (chatMessage in chatMessageList) { for (chatMessage in chatMessageList) {
chatMessage.activeUser = conversationUser chatMessage.activeUser = conversationUser
@ -2630,7 +2628,6 @@ class ChatActivity :
// see getImageUrl() source code // see getImageUrl() source code
setUpWaveform(currentlyPlayedVoiceMessage!!, voiceMessageToRestoreWasPlaying) setUpWaveform(currentlyPlayedVoiceMessage!!, voiceMessageToRestoreWasPlaying)
Log.d(RESUME_AUDIO_TAG, "resume audio procedure completed") Log.d(RESUME_AUDIO_TAG, "resume audio procedure completed")
} else { } else {
Log.d(RESUME_AUDIO_TAG, "No voice message to restore") Log.d(RESUME_AUDIO_TAG, "No voice message to restore")
} }
@ -2652,9 +2649,7 @@ class ChatActivity :
Log.d(TAG, "currentItem retrieved was not chatmessage or its id was not correct") Log.d(TAG, "currentItem retrieved was not chatmessage or its id was not correct")
} }
} else { } else {
Log.d( Log.d(TAG, "messagePosition is -1, adapter # of items: " + adapter!!.itemCount)
TAG, "messagePosition is -1, adapter # of items: " + adapter!!.itemCount
)
} }
} else { } else {
Log.d(TAG, "TalkMessagesListAdapter is null") Log.d(TAG, "TalkMessagesListAdapter is null")
@ -2831,7 +2826,6 @@ class ChatActivity :
while (chatMessageIterator.hasNext()) { while (chatMessageIterator.hasNext()) {
val currentMessage = chatMessageIterator.next() val currentMessage = chatMessageIterator.next()
if (isInfoMessageAboutDeletion(currentMessage) || if (isInfoMessageAboutDeletion(currentMessage) ||
isReactionsMessage(currentMessage) || isReactionsMessage(currentMessage) ||
isPollVotedMessage(currentMessage) || isPollVotedMessage(currentMessage) ||

View File

@ -32,11 +32,7 @@ interface ChatMessageRepository : LifecycleAwareManager {
val lastCommonReadFlow: Flow<Int> val lastCommonReadFlow: Flow<Int>
fun setData( fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String)
conversationModel: ConversationModel,
credentials: String,
urlForChatting: String
)
fun loadInitialMessages(withNetworkParams: Bundle): Job fun loadInitialMessages(withNetworkParams: Bundle): Job

View File

@ -90,11 +90,7 @@ class OfflineFirstChatRepository @Inject constructor(
private lateinit var credentials: String private lateinit var credentials: String
private lateinit var urlForChatting: String private lateinit var urlForChatting: String
override fun setData( override fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String) {
conversationModel: ConversationModel,
credentials: String,
urlForChatting: String
) {
this.conversationModel = conversationModel this.conversationModel = conversationModel
this.credentials = credentials this.credentials = credentials
this.urlForChatting = urlForChatting this.urlForChatting = urlForChatting
@ -213,9 +209,7 @@ class OfflineFirstChatRepository @Inject constructor(
} }
} }
private suspend fun hasToLoadPreviousMessagesFromServer( private suspend fun hasToLoadPreviousMessagesFromServer(beforeMessageId: Long): Boolean {
beforeMessageId: Long
): Boolean {
val loadFromServer: Boolean val loadFromServer: Boolean
val blockForMessage = getBlockOfMessage(beforeMessageId.toInt()) val blockForMessage = getBlockOfMessage(beforeMessageId.toInt())
@ -239,7 +233,8 @@ class OfflineFirstChatRepository @Inject constructor(
loadFromServer = amountBetween < 100 loadFromServer = amountBetween < 100
Log.d( Log.d(
TAG, "Amount between messageId " + beforeMessageId + " and " + blockForMessage.oldestMessageId + TAG,
"Amount between messageId " + beforeMessageId + " and " + blockForMessage.oldestMessageId +
" is: " + amountBetween + " so 'loadFromServer' is " + loadFromServer " is: " + amountBetween + " so 'loadFromServer' is " + loadFromServer
) )
} }
@ -272,9 +267,7 @@ class OfflineFirstChatRepository @Inject constructor(
return fieldMap return fieldMap
} }
override suspend fun getMessage(messageId: Long, bundle: Bundle): override suspend fun getMessage(messageId: Long, bundle: Bundle): Flow<ChatMessage> {
Flow<ChatMessage> {
Log.d(TAG, "Get message with id $messageId") Log.d(TAG, "Get message with id $messageId")
val loadFromServer = hasToLoadPreviousMessagesFromServer(messageId) val loadFromServer = hasToLoadPreviousMessagesFromServer(messageId)
@ -511,12 +504,12 @@ class OfflineFirstChatRepository @Inject constructor(
chatBlock.newestMessageId chatBlock.newestMessageId
).first() ).first()
if (connectedChatBlocks.size == 1) { return if (connectedChatBlocks.size == 1) {
Log.d(TAG, "This chatBlock is not connected to others") Log.d(TAG, "This chatBlock is not connected to others")
val chatBlockFromDb = connectedChatBlocks[0] val chatBlockFromDb = connectedChatBlocks[0]
Log.d(TAG, "chatBlockFromDb.oldestMessageId: " + chatBlockFromDb.oldestMessageId) Log.d(TAG, "chatBlockFromDb.oldestMessageId: " + chatBlockFromDb.oldestMessageId)
Log.d(TAG, "chatBlockFromDb.newestMessageId: " + chatBlockFromDb.newestMessageId) Log.d(TAG, "chatBlockFromDb.newestMessageId: " + chatBlockFromDb.newestMessageId)
return chatBlockFromDb chatBlockFromDb
} else if (connectedChatBlocks.size > 1) { } else if (connectedChatBlocks.size > 1) {
Log.d(TAG, "Found " + connectedChatBlocks.size + " chat blocks that are connected") Log.d(TAG, "Found " + connectedChatBlocks.size + " chat blocks that are connected")
val oldestIdFromDbChatBlocks = val oldestIdFromDbChatBlocks =
@ -543,10 +536,10 @@ class OfflineFirstChatRepository @Inject constructor(
Log.d(TAG, "A new chat block was created that covers all the range of the found chatblocks") Log.d(TAG, "A new chat block was created that covers all the range of the found chatblocks")
Log.d(TAG, "new chatBlock - oldest MessageId: $oldestIdFromDbChatBlocks") Log.d(TAG, "new chatBlock - oldest MessageId: $oldestIdFromDbChatBlocks")
Log.d(TAG, "new chatBlock - newest MessageId: $newestIdFromDbChatBlocks") Log.d(TAG, "new chatBlock - newest MessageId: $newestIdFromDbChatBlocks")
return newChatBlock newChatBlock
} else { } else {
Log.d(TAG, "No chat block found ....") Log.d(TAG, "No chat block found ....")
return null null
} }
} }

View File

@ -217,16 +217,8 @@ class ChatViewModel @Inject constructor(
val reactionDeletedViewState: LiveData<ViewState> val reactionDeletedViewState: LiveData<ViewState>
get() = _reactionDeletedViewState get() = _reactionDeletedViewState
fun setData( fun setData(conversationModel: ConversationModel, credentials: String, urlForChatting: String) {
conversationModel: ConversationModel, chatRepository.setData(conversationModel, credentials, urlForChatting)
credentials: String,
urlForChatting: String
) {
chatRepository.setData(
conversationModel,
credentials,
urlForChatting
)
} }
fun getRoom(user: User, token: String) { fun getRoom(user: User, token: String) {

View File

@ -121,7 +121,6 @@ import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FORWARD_MSG_FLAG
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FORWARD_MSG_TEXT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_FORWARD_MSG_TEXT
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_INTERNAL_USER_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_NEW_CONVERSATION import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_NEW_CONVERSATION
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_ID
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_ROOM_TOKEN
import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SHARED_TEXT import com.nextcloud.talk.utils.bundle.BundleKeys.KEY_SHARED_TEXT
import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil

View File

@ -57,7 +57,6 @@ interface ChatBlocksDao {
) )
fun getChatBlocksContainingMessageId(internalConversationId: String, messageId: Long): Flow<List<ChatBlockEntity?>> fun getChatBlocksContainingMessageId(internalConversationId: String, messageId: Long): Flow<List<ChatBlockEntity?>>
@Query( @Query(
""" """
SELECT * SELECT *

View File

@ -7,11 +7,9 @@
package com.nextcloud.talk.data.database.mappers package com.nextcloud.talk.data.database.mappers
import com.nextcloud.talk.models.json.chat.ChatMessageJson
import com.nextcloud.talk.data.database.model.ChatMessageEntity
import com.nextcloud.talk.chat.data.model.ChatMessage import com.nextcloud.talk.chat.data.model.ChatMessage
import com.nextcloud.talk.data.database.dao.ChatMessagesDao import com.nextcloud.talk.data.database.model.ChatMessageEntity
import kotlinx.coroutines.flow.first import com.nextcloud.talk.models.json.chat.ChatMessageJson
fun ChatMessageJson.asEntity(accountId: Long) = fun ChatMessageJson.asEntity(accountId: Long) =
ChatMessageEntity( ChatMessageEntity(

View File

@ -63,7 +63,7 @@ data class ChatMessageEntity(
@ColumnInfo(name = "reactions") var reactions: LinkedHashMap<String, Int>? = null, @ColumnInfo(name = "reactions") var reactions: LinkedHashMap<String, Int>? = null,
@ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList<String>? = null, @ColumnInfo(name = "reactionsSelf") var reactionsSelf: ArrayList<String>? = null,
@ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType, @ColumnInfo(name = "systemMessage") var systemMessageType: ChatMessage.SystemMessageType,
@ColumnInfo(name = "timestamp") var timestamp: Long = 0, @ColumnInfo(name = "timestamp") var timestamp: Long = 0
// missing/not needed: referenceId // missing/not needed: referenceId
// missing/not needed: silent // missing/not needed: silent
) )

View File

@ -92,7 +92,7 @@ data class ConversationEntity(
@ColumnInfo(name = "type") var type: ConversationEnums.ConversationType, @ColumnInfo(name = "type") var type: ConversationEnums.ConversationType,
@ColumnInfo(name = "unreadMention") var unreadMention: Boolean = false, @ColumnInfo(name = "unreadMention") var unreadMention: Boolean = false,
@ColumnInfo(name = "unreadMentionDirect") var unreadMentionDirect: Boolean, @ColumnInfo(name = "unreadMentionDirect") var unreadMentionDirect: Boolean,
@ColumnInfo(name = "unreadMessages") var unreadMessages: Int = 0, @ColumnInfo(name = "unreadMessages") var unreadMessages: Int = 0
// missing/not needed: attendeeId // missing/not needed: attendeeId
// missing/not needed: attendeePin // missing/not needed: attendeePin
// missing/not needed: attendeePermissions // missing/not needed: attendeePermissions

View File

@ -210,11 +210,13 @@ object Migrations {
) )
db.execSQL( db.execSQL(
"CREATE UNIQUE INDEX IF NOT EXISTS `index_ChatMessages_internalId` ON `ChatMessages` (`internalId`)" "CREATE UNIQUE INDEX IF NOT EXISTS `index_ChatMessages_internalId` " +
"ON `ChatMessages` (`internalId`)"
) )
db.execSQL( db.execSQL(
"CREATE INDEX IF NOT EXISTS `index_ChatMessages_internalConversationId` ON `ChatMessages` (`internalConversationId`)" "CREATE INDEX IF NOT EXISTS `index_ChatMessages_internalConversationId` " +
"ON `ChatMessages` (`internalConversationId`)"
) )
db.execSQL( db.execSQL(
@ -231,7 +233,8 @@ object Migrations {
) )
db.execSQL( db.execSQL(
"CREATE INDEX IF NOT EXISTS `index_ChatBlocks_internalConversationId` ON `ChatBlocks` (`internalConversationId`)" "CREATE INDEX IF NOT EXISTS `index_ChatBlocks_internalConversationId` " +
"ON `ChatBlocks` (`internalConversationId`)"
) )
} }
} }

View File

@ -51,7 +51,7 @@ import java.util.Locale
], ],
version = 11, version = 11,
autoMigrations = [ autoMigrations = [
AutoMigration(from = 9, to = 10), AutoMigration(from = 9, to = 10)
], ],
exportSchema = true exportSchema = true
) )

View File

@ -62,7 +62,7 @@ class ConversationModel(
var remoteToken: String? = null, var remoteToken: String? = null,
// attributes that don't come from API. This should be changed?! // attributes that don't come from API. This should be changed?!
var password: String? = null, var password: String? = null
) { ) {
companion object { companion object {

View File

@ -42,5 +42,5 @@ data class ChatMessageJson(
@JsonField(name = ["lastEditActorId"]) var lastEditActorId: String? = null, @JsonField(name = ["lastEditActorId"]) var lastEditActorId: String? = null,
@JsonField(name = ["lastEditActorType"]) var lastEditActorType: String? = null, @JsonField(name = ["lastEditActorType"]) var lastEditActorType: String? = null,
@JsonField(name = ["lastEditTimestamp"]) var lastEditTimestamp: Long? = 0, @JsonField(name = ["lastEditTimestamp"]) var lastEditTimestamp: Long? = 0,
@JsonField(name = ["deleted"]) var deleted: Boolean = false, @JsonField(name = ["deleted"]) var deleted: Boolean = false
) : Parcelable ) : Parcelable

View File

@ -32,24 +32,34 @@ data class Conversation(
// var roomId: String? = null, // var roomId: String? = null,
@JsonField(name = ["token"]) @JsonField(name = ["token"])
var token: String? = null, var token: String? = null,
@JsonField(name = ["name"]) @JsonField(name = ["name"])
var name: String? = null, var name: String? = null,
@JsonField(name = ["displayName"]) @JsonField(name = ["displayName"])
var displayName: String? = null, var displayName: String? = null,
@JsonField(name = ["description"]) @JsonField(name = ["description"])
var description: String? = null, var description: String? = null,
@JsonField(name = ["type"], typeConverter = EnumRoomTypeConverter::class) @JsonField(name = ["type"], typeConverter = EnumRoomTypeConverter::class)
var type: ConversationEnums.ConversationType? = null, var type: ConversationEnums.ConversationType? = null,
@JsonField(name = ["lastPing"]) @JsonField(name = ["lastPing"])
var lastPing: Long = 0, var lastPing: Long = 0,
@JsonField(name = ["participantType"], typeConverter = EnumParticipantTypeConverter::class) @JsonField(name = ["participantType"], typeConverter = EnumParticipantTypeConverter::class)
var participantType: ParticipantType? = null, var participantType: ParticipantType? = null,
@JsonField(name = ["hasPassword"]) @JsonField(name = ["hasPassword"])
var hasPassword: Boolean = false, var hasPassword: Boolean = false,
@JsonField(name = ["sessionId"]) @JsonField(name = ["sessionId"])
var sessionId: String? = null, var sessionId: String? = null,
@JsonField(name = ["actorId"]) @JsonField(name = ["actorId"])
var actorId: String? = null, var actorId: String? = null,
@JsonField(name = ["actorType"]) @JsonField(name = ["actorType"])
var actorType: String? = null, var actorType: String? = null,
@ -152,8 +162,7 @@ data class Conversation(
var remoteServer: String? = null, var remoteServer: String? = null,
@JsonField(name = ["remoteToken"]) @JsonField(name = ["remoteToken"])
var remoteToken: String? = null, var remoteToken: String? = null
) : Parcelable { ) : Parcelable {
@Deprecated("Use ConversationUtil") @Deprecated("Use ConversationUtil")
val isPublic: Boolean val isPublic: Boolean

View File

@ -82,7 +82,7 @@ class DialogBanListFragment(val roomToken: String) : DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this)
binding = FragmentDialogBanListBinding.inflate(LayoutInflater.from(context)) binding = FragmentDialogBanListBinding.inflate(layoutInflater)
viewModel = viewModel =
ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java] ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java]
conversationUser = currentUserProvider.currentUser.blockingGet() conversationUser = currentUserProvider.currentUser.blockingGet()

View File

@ -77,6 +77,8 @@ object DisplayUtils {
private const val TWITTER_HANDLE_PREFIX = "@" private const val TWITTER_HANDLE_PREFIX = "@"
private const val HTTP_PROTOCOL = "http://" private const val HTTP_PROTOCOL = "http://"
private const val HTTPS_PROTOCOL = "https://" private const val HTTPS_PROTOCOL = "https://"
private const val HTTP_MIN_LENGTH: Int = 7
private const val HTTPS_MIN_LENGTH: Int = 7
private const val DATE_TIME_PARTS_SIZE = 2 private const val DATE_TIME_PARTS_SIZE = 2
fun isDarkModeOn(context: Context): Boolean { fun isDarkModeOn(context: Context): Boolean {
val currentNightMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK val currentNightMode = context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
@ -394,10 +396,14 @@ object DisplayUtils {
if (TextUtils.isEmpty(url)) { if (TextUtils.isEmpty(url)) {
return "" return ""
} }
if (url!!.length >= 7 && HTTP_PROTOCOL.equals(url.substring(0, 7), ignoreCase = true)) { if (url!!.length >= HTTP_MIN_LENGTH &&
HTTP_PROTOCOL.equals(url.substring(0, HTTP_MIN_LENGTH), ignoreCase = true)
) {
return url.substring(HTTP_PROTOCOL.length).trim { it <= ' ' } return url.substring(HTTP_PROTOCOL.length).trim { it <= ' ' }
} }
return if (url.length >= 8 && HTTPS_PROTOCOL.equals(url.substring(0, 8), ignoreCase = true)) { return if (url.length >= HTTPS_MIN_LENGTH &&
HTTPS_PROTOCOL.equals(url.substring(0, HTTPS_MIN_LENGTH), ignoreCase = true)
) {
url.substring(HTTPS_PROTOCOL.length).trim { it <= ' ' } url.substring(HTTPS_PROTOCOL.length).trim { it <= ' ' }
} else { } else {
url.trim { it <= ' ' } url.trim { it <= ' ' }

View File

@ -162,26 +162,26 @@ class PushUtils {
var keyGen: KeyPairGenerator? = null var keyGen: KeyPairGenerator? = null
try { try {
keyGen = KeyPairGenerator.getInstance("RSA") keyGen = KeyPairGenerator.getInstance("RSA")
keyGen.initialize(2048) keyGen.initialize(RSA_KEY_SIZE)
val pair = keyGen.generateKeyPair() val pair = keyGen.generateKeyPair()
val statusPrivate = saveKeyToFile(pair.private, privateKeyFile.absolutePath) val statusPrivate = saveKeyToFile(pair.private, privateKeyFile.absolutePath)
val statusPublic = saveKeyToFile(pair.public, publicKeyFile.absolutePath) val statusPublic = saveKeyToFile(pair.public, publicKeyFile.absolutePath)
return if (statusPrivate == 0 && statusPublic == 0) { return if (statusPrivate == 0 && statusPublic == 0) {
// all went well // all went well
0 RETURN_CODE_KEY_GENERATION_SUCCESSFUL
} else { } else {
-2 RETURN_CODE_KEY_GENERATION_FAILED
} }
} catch (e: NoSuchAlgorithmException) { } catch (e: NoSuchAlgorithmException) {
Log.d(TAG, "RSA algorithm not supported") Log.d(TAG, "RSA algorithm not supported")
} }
} else { } else {
// We already have the key // We already have the key
return -1 return RETURN_CODE_KEY_ALREADY_EXISTS
} }
// we failed to generate the key // we failed to generate the key
return -2 return RETURN_CODE_KEY_GENERATION_FAILED
} }
fun pushRegistrationToServer(ncApi: NcApi) { fun pushRegistrationToServer(ncApi: NcApi) {
@ -399,6 +399,10 @@ class PushUtils {
companion object { companion object {
private const val TAG = "PushUtils" private const val TAG = "PushUtils"
private const val RSA_KEY_SIZE: Int = 2048
private const val RETURN_CODE_KEY_GENERATION_SUCCESSFUL: Int = 0
private const val RETURN_CODE_KEY_ALREADY_EXISTS: Int = -1
private const val RETURN_CODE_KEY_GENERATION_FAILED: Int = -2
const val LATEST_PUSH_REGISTRATION_AT_SERVER: String = "LATEST_PUSH_REGISTRATION_AT_SERVER" const val LATEST_PUSH_REGISTRATION_AT_SERVER: String = "LATEST_PUSH_REGISTRATION_AT_SERVER"
const val LATEST_PUSH_REGISTRATION_AT_PUSH_PROXY: String = "LATEST_PUSH_REGISTRATION_AT_PUSH_PROXY" const val LATEST_PUSH_REGISTRATION_AT_PUSH_PROXY: String = "LATEST_PUSH_REGISTRATION_AT_PUSH_PROXY"
} }

View File

@ -503,10 +503,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
for (msgStr in queueStr.split("]")) { for (msgStr in queueStr.split("]")) {
try { try {
val msgArray = msgStr.replace("[", "").split(",") val msgArray = msgStr.replace("[", "").split(",")
val message = msgArray[0] val message = msgArray[MESSAGE_INDEX]
val replyTo = msgArray[1].toInt() val replyTo = msgArray[REPLY_TO_INDEX].toInt()
val displayName = msgArray[2] val displayName = msgArray[DISPLY_NAME_INDEX]
val silent = msgArray[3].toBoolean() val silent = msgArray[SILENT_INDEX].toBoolean()
val qMsg = MessageInputViewModel.QueuedMessage(message, displayName, replyTo, silent) val qMsg = MessageInputViewModel.QueuedMessage(message, displayName, replyTo, silent)
queue.add(qMsg) queue.add(qMsg)
@ -570,6 +570,10 @@ class AppPreferencesImpl(val context: Context) : AppPreferences {
@Suppress("UnusedPrivateProperty") @Suppress("UnusedPrivateProperty")
private val TAG = AppPreferencesImpl::class.simpleName private val TAG = AppPreferencesImpl::class.simpleName
private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings") private val Context.dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
private const val MESSAGE_INDEX: Int = 0
private const val REPLY_TO_INDEX: Int = 1
private const val DISPLY_NAME_INDEX: Int = 2
private const val SILENT_INDEX: Int = 3
const val PROXY_TYPE = "proxy_type" const val PROXY_TYPE = "proxy_type"
const val PROXY_SERVER = "proxy_server" const val PROXY_SERVER = "proxy_server"
const val PROXY_HOST = "proxy_host" const val PROXY_HOST = "proxy_host"

View File

@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors # SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
build: build:
maxIssues: 138 maxIssues: 166
weights: weights:
# complexity: 2 # complexity: 2
# LongParameterList: 1 # LongParameterList: 1