Browse Source

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
Andy Scherzinger 8 months ago
parent
commit
b5806df2f8
29 changed files with 105 additions and 126 deletions
  1. 1 1
      app/build.gradle
  2. 1 2
      app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ChatBlocksDaoTest.kt
  3. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt
  4. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt
  5. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt
  6. 1 4
      app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt
  7. 26 28
      app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLinkPreviewMessageViewHolder.kt
  8. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt
  9. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt
  10. 1 3
      app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt
  11. 7 13
      app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt
  12. 1 5
      app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt
  13. 9 16
      app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt
  14. 2 10
      app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt
  15. 0 1
      app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt
  16. 0 1
      app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt
  17. 2 4
      app/src/main/java/com/nextcloud/talk/data/database/mappers/ChatMessageMapUtils.kt
  18. 1 1
      app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt
  19. 1 1
      app/src/main/java/com/nextcloud/talk/data/database/model/ConversationEntity.kt
  20. 6 3
      app/src/main/java/com/nextcloud/talk/data/source/local/Migrations.kt
  21. 1 1
      app/src/main/java/com/nextcloud/talk/data/source/local/TalkDatabase.kt
  22. 1 1
      app/src/main/java/com/nextcloud/talk/models/domain/ConversationModel.kt
  23. 1 1
      app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessageJson.kt
  24. 11 2
      app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt
  25. 1 1
      app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt
  26. 8 2
      app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt
  27. 9 5
      app/src/main/java/com/nextcloud/talk/utils/PushUtils.kt
  28. 8 4
      app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt
  29. 1 1
      detekt.yml

+ 1 - 1
app/build.gradle

@@ -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'

+ 1 - 2
app/src/androidTest/java/com/nextcloud/talk/data/database/dao/ChatBlocksDaoTest.kt

@@ -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"
-                    ),
+                    )
                 )
                 )
             )
             )
 
 

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLinkPreviewMessageViewHolder.kt

@@ -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

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingLocationMessageViewHolder.kt

@@ -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

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingPollMessageViewHolder.kt

@@ -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

+ 1 - 4
app/src/main/java/com/nextcloud/talk/adapters/messages/IncomingTextMessageViewHolder.kt

@@ -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

+ 26 - 28
app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLinkPreviewMessageViewHolder.kt

@@ -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
@@ -164,32 +162,32 @@ class OutcomingLinkPreviewMessageViewHolder(outcomingView: View, payload: Any) :
                             message.parentMessageId!!
                             message.parentMessageId!!
                         ).first()
                         ).first()
                     }
                     }
-                        parentChatMessage.activeUser = message.activeUser
-                        parentChatMessage.imageUrl?.let {
-                            binding.messageQuote.quotedMessageImage.visibility = View.VISIBLE
-                            binding.messageQuote.quotedMessageImage.load(it) {
-                                addHeader(
-                                    "Authorization",
-                                    ApiUtils.getCredentials(message.activeUser!!.username, message.activeUser!!.token)!!
-                                )
-                            }
-                        } ?: run {
-                            binding.messageQuote.quotedMessageImage.visibility = View.GONE
-                        }
-                        binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
-                            ?: context.getText(R.string.nc_nick_guest)
-                        binding.messageQuote.quotedMessage.text = messageUtils
-                            .enrichChatReplyMessageText(
-                                binding.messageQuote.quotedMessage.context,
-                                parentChatMessage,
-                                false,
-                                viewThemeUtils
+                    parentChatMessage.activeUser = message.activeUser
+                    parentChatMessage.imageUrl?.let {
+                        binding.messageQuote.quotedMessageImage.visibility = View.VISIBLE
+                        binding.messageQuote.quotedMessageImage.load(it) {
+                            addHeader(
+                                "Authorization",
+                                ApiUtils.getCredentials(message.activeUser!!.username, message.activeUser!!.token)!!
                             )
                             )
-                        viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)
-                        viewThemeUtils.talk.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor)
-                        viewThemeUtils.talk.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView)
-
-                        binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE
+                        }
+                    } ?: run {
+                        binding.messageQuote.quotedMessageImage.visibility = View.GONE
+                    }
+                    binding.messageQuote.quotedMessageAuthor.text = parentChatMessage.actorDisplayName
+                        ?: context.getText(R.string.nc_nick_guest)
+                    binding.messageQuote.quotedMessage.text = messageUtils
+                        .enrichChatReplyMessageText(
+                            binding.messageQuote.quotedMessage.context,
+                            parentChatMessage,
+                            false,
+                            viewThemeUtils
+                        )
+                    viewThemeUtils.talk.colorOutgoingQuoteText(binding.messageQuote.quotedMessage)
+                    viewThemeUtils.talk.colorOutgoingQuoteAuthorText(binding.messageQuote.quotedMessageAuthor)
+                    viewThemeUtils.talk.colorOutgoingQuoteBackground(binding.messageQuote.quoteColoredView)
+
+                    binding.messageQuote.quotedChatMessageView.visibility = View.VISIBLE
                 } catch (e: Exception) {
                 } catch (e: Exception) {
                     Log.d(TAG, "Error when processing parent message in view holder", e)
                     Log.d(TAG, "Error when processing parent message in view holder", e)
                 }
                 }

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingLocationMessageViewHolder.kt

@@ -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

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingPollMessageViewHolder.kt

@@ -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

+ 1 - 3
app/src/main/java/com/nextcloud/talk/adapters/messages/OutcomingVoiceMessageViewHolder.kt

@@ -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

+ 7 - 13
app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

@@ -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")
         }
         }
@@ -2639,7 +2636,7 @@ class ChatActivity :
         voiceMessageToRestoreWasPlaying = false
         voiceMessageToRestoreWasPlaying = false
     }
     }
 
 
-    private fun getItemFromAdapter(messageId: String): Pair<ChatMessage,Int>? {
+    private fun getItemFromAdapter(messageId: String): Pair<ChatMessage, Int>? {
         if (adapter != null) {
         if (adapter != null) {
             val messagePosition = adapter!!.items!!.indexOfFirst {
             val messagePosition = adapter!!.items!!.indexOfFirst {
                 it.item is ChatMessage && (it.item as ChatMessage).id == messageId
                 it.item is ChatMessage && (it.item as ChatMessage).id == messageId
@@ -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(
-                    TAG, "messagePosition is -1, adapter # of items: " + adapter!!.itemCount
-                )
+                Log.d(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) ||
@@ -3176,7 +3170,7 @@ class ChatActivity :
             val lon = data["longitude"]!!
             val lon = data["longitude"]!!
             metaData =
             metaData =
                 "{\"type\":\"geo-location\",\"id\":\"geo:$lat,$lon\",\"latitude\":\"$lat\"," +
                 "{\"type\":\"geo-location\",\"id\":\"geo:$lat,$lon\",\"latitude\":\"$lat\"," +
-                    "\"longitude\":\"$lon\",\"name\":\"$name\"}"
+                "\"longitude\":\"$lon\",\"name\":\"$name\"}"
         }
         }
 
 
         when (type) {
         when (type) {

+ 1 - 5
app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt

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

+ 9 - 16
app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

@@ -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(
-        conversationModel: ConversationModel,
-        credentials: String,
-        urlForChatting: String
-    ) {
+    override fun setData(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(
-        beforeMessageId: Long
-    ): Boolean {
+    private suspend fun hasToLoadPreviousMessagesFromServer(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):
-        Flow<ChatMessage> {
-
+    override suspend fun getMessage(messageId: Long, bundle: Bundle): 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
         }
         }
     }
     }
 
 

+ 2 - 10
app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt

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

+ 0 - 1
app/src/main/java/com/nextcloud/talk/conversationlist/ConversationsListActivity.kt

@@ -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

+ 0 - 1
app/src/main/java/com/nextcloud/talk/data/database/dao/ChatBlocksDao.kt

@@ -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 *

+ 2 - 4
app/src/main/java/com/nextcloud/talk/data/database/mappers/ChatMessageMapUtils.kt

@@ -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 kotlinx.coroutines.flow.first
+import com.nextcloud.talk.data.database.model.ChatMessageEntity
+import com.nextcloud.talk.models.json.chat.ChatMessageJson
 
 
 fun ChatMessageJson.asEntity(accountId: Long) =
 fun ChatMessageJson.asEntity(accountId: Long) =
     ChatMessageEntity(
     ChatMessageEntity(

+ 1 - 1
app/src/main/java/com/nextcloud/talk/data/database/model/ChatMessageEntity.kt

@@ -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
 )
 )

+ 1 - 1
app/src/main/java/com/nextcloud/talk/data/database/model/ConversationEntity.kt

@@ -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

+ 6 - 3
app/src/main/java/com/nextcloud/talk/data/source/local/Migrations.kt

@@ -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`)"
         )
         )
     }
     }
 }
 }

+ 1 - 1
app/src/main/java/com/nextcloud/talk/data/source/local/TalkDatabase.kt

@@ -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
 )
 )

+ 1 - 1
app/src/main/java/com/nextcloud/talk/models/domain/ConversationModel.kt

@@ -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 {

+ 1 - 1
app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessageJson.kt

@@ -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

+ 11 - 2
app/src/main/java/com/nextcloud/talk/models/json/conversations/Conversation.kt

@@ -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

+ 1 - 1
app/src/main/java/com/nextcloud/talk/ui/dialog/DialogBanListFragment.kt

@@ -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()

+ 8 - 2
app/src/main/java/com/nextcloud/talk/utils/DisplayUtils.kt

@@ -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 <= ' ' }

+ 9 - 5
app/src/main/java/com/nextcloud/talk/utils/PushUtils.kt

@@ -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"
     }
     }

+ 8 - 4
app/src/main/java/com/nextcloud/talk/utils/preferences/AppPreferencesImpl.kt

@@ -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 replyTo = msgArray[1].toInt()
-                val displayName = msgArray[2]
-                val silent = msgArray[3].toBoolean()
+                val message = msgArray[MESSAGE_INDEX]
+                val replyTo = msgArray[REPLY_TO_INDEX].toInt()
+                val displayName = msgArray[DISPLY_NAME_INDEX]
+                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"

+ 1 - 1
detekt.yml

@@ -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