Skip to content

Commit 51e6337

Browse files
authored
Merge pull request #5393 from nextcloud/backport/5388/stable-22.0
[stable-22.0] Feature/3074/improve threads7
2 parents a4c43d2 + 4d663b4 commit 51e6337

25 files changed

Lines changed: 614 additions & 395 deletions

app/src/main/java/com/nextcloud/talk/account/WebViewLoginActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Julius Linus <juliuslinus1@gmail.com>
55
* SPDX-License-Identifier: GPL-3.0-or-later
66
*/
77
package com.nextcloud.talk.account

app/src/main/java/com/nextcloud/talk/account/viewmodels/BrowserLoginActivityViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2025 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Julius Linus <juliuslinus1@gmail.com>
55
* SPDX-License-Identifier: GPL-3.0-or-later
66
*/
77

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,8 @@ interface NcApiCoroutines {
277277
suspend fun getContextOfChatMessage(
278278
@Header("Authorization") authorization: String,
279279
@Url url: String,
280-
@Query("limit") limit: Int
280+
@Query("limit") limit: Int,
281+
@Query("threadId") threadId: Int?
281282
): ChatOverall
282283

283284
@GET

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

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import androidx.compose.runtime.mutableStateOf
6565
import androidx.compose.runtime.setValue
6666
import androidx.compose.ui.platform.ComposeView
6767
import androidx.coordinatorlayout.widget.CoordinatorLayout
68+
import androidx.core.content.ContextCompat
6869
import androidx.core.content.FileProvider
6970
import androidx.core.content.PermissionChecker
7071
import androidx.core.content.PermissionChecker.PERMISSION_GRANTED
@@ -134,6 +135,8 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
134135
import com.nextcloud.talk.chat.data.model.ChatMessage
135136
import com.nextcloud.talk.chat.viewmodels.ChatViewModel
136137
import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel
138+
import com.nextcloud.talk.contextchat.ContextChatView
139+
import com.nextcloud.talk.contextchat.ContextChatViewModel
137140
import com.nextcloud.talk.conversationinfo.ConversationInfoActivity
138141
import com.nextcloud.talk.conversationinfo.viewmodel.ConversationInfoViewModel
139142
import com.nextcloud.talk.conversationlist.ConversationsListActivity
@@ -168,7 +171,6 @@ import com.nextcloud.talk.ui.PlaybackSpeed
168171
import com.nextcloud.talk.ui.PlaybackSpeedControl
169172
import com.nextcloud.talk.ui.StatusDrawable
170173
import com.nextcloud.talk.ui.bottom.sheet.ProfileBottomSheet
171-
import com.nextcloud.talk.ui.dialog.ContextChatCompose
172174
import com.nextcloud.talk.ui.dialog.DateTimeCompose
173175
import com.nextcloud.talk.ui.dialog.FileAttachmentPreviewFragment
174176
import com.nextcloud.talk.ui.dialog.MessageActionsDialog
@@ -246,7 +248,6 @@ import java.util.Locale
246248
import java.util.concurrent.ExecutionException
247249
import javax.inject.Inject
248250
import kotlin.math.roundToInt
249-
import androidx.core.content.ContextCompat
250251

251252
@Suppress("TooManyFunctions")
252253
@AutoInjector(NextcloudTalkApplication::class)
@@ -287,6 +288,7 @@ class ChatActivity :
287288
lateinit var chatViewModel: ChatViewModel
288289

289290
lateinit var conversationInfoViewModel: ConversationInfoViewModel
291+
lateinit var contextChatViewModel: ContextChatViewModel
290292
lateinit var messageInputViewModel: MessageInputViewModel
291293

292294
private var chatMenu: Menu? = null
@@ -323,28 +325,27 @@ class ChatActivity :
323325
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
324326
executeIfResultOk(it) { intent ->
325327
runBlocking {
326-
val id = intent?.getStringExtra(MessageSearchActivity.RESULT_KEY_MESSAGE_ID)
327-
id?.let {
328-
startContextChatWindowForMessage(id)
328+
val messageId = intent?.getStringExtra(MessageSearchActivity.RESULT_KEY_MESSAGE_ID)
329+
val threadId = intent?.getStringExtra(MessageSearchActivity.RESULT_KEY_THREAD_ID)
330+
messageId?.let {
331+
startContextChatWindowForMessage(messageId, threadId)
329332
}
330333
}
331334
}
332335
}
333336

334-
private fun startContextChatWindowForMessage(id: String?) {
337+
private fun startContextChatWindowForMessage(messageId: String?, threadId: String?) {
335338
binding.genericComposeView.apply {
336-
val shouldDismiss = mutableStateOf(false)
337339
setContent {
338-
val bundle = bundleOf()
339-
bundle.putString(BundleKeys.KEY_CREDENTIALS, credentials!!)
340-
bundle.putString(BundleKeys.KEY_BASE_URL, conversationUser!!.baseUrl)
341-
bundle.putString(KEY_ROOM_TOKEN, roomToken)
342-
bundle.putString(BundleKeys.KEY_MESSAGE_ID, id)
343-
bundle.putString(
344-
KEY_CONVERSATION_NAME,
345-
currentConversation!!.displayName
340+
contextChatViewModel.getContextForChatMessages(
341+
credentials = credentials!!,
342+
baseUrl = conversationUser!!.baseUrl!!,
343+
token = roomToken,
344+
threadId = threadId,
345+
messageId = messageId!!,
346+
title = currentConversation!!.displayName
346347
)
347-
ContextChatCompose(bundle).GetDialogView(shouldDismiss, context)
348+
ContextChatView(context, contextChatViewModel)
348349
}
349350
}
350351
Log.d(TAG, "Should open something else")
@@ -514,6 +515,8 @@ class ChatActivity :
514515

515516
conversationInfoViewModel = ViewModelProvider(this, viewModelFactory)[ConversationInfoViewModel::class.java]
516517

518+
contextChatViewModel = ViewModelProvider(this, viewModelFactory)[ContextChatViewModel::class.java]
519+
517520
val urlForChatting = ApiUtils.getUrlForChat(chatApiVersion, conversationUser?.baseUrl, roomToken)
518521
val credentials = ApiUtils.getCredentials(conversationUser!!.username, conversationUser!!.token)
519522
chatViewModel.initData(
@@ -4431,7 +4434,7 @@ class ChatActivity :
44314434
}
44324435
if (!foundMessage) {
44334436
Log.d(TAG, "quoted message with id " + parentMessage.id + " was not found in adapter")
4434-
startContextChatWindowForMessage(parentMessage.id)
4437+
startContextChatWindowForMessage(parentMessage.id, conversationThreadId.toString())
44354438
}
44364439
}
44374440

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2025 Marcel Hibbe <dev@mhibbe.de>
55
* SPDX-License-Identifier: GPL-3.0-or-later
66
*/
77

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ interface ChatNetworkDataSource {
7474
baseUrl: String,
7575
token: String,
7676
messageId: String,
77-
limit: Int
77+
limit: Int,
78+
threadId: Int?
7879
): List<ChatMessageJson>
7980
suspend fun getOpenGraph(credentials: String, baseUrl: String, extractedLinkToPreview: String): Reference?
8081
suspend fun unbindRoom(credentials: String, baseUrl: String, roomToken: String): GenericOverall

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,10 +198,11 @@ class RetrofitChatNetwork(private val ncApi: NcApi, private val ncApiCoroutines:
198198
baseUrl: String,
199199
token: String,
200200
messageId: String,
201-
limit: Int
201+
limit: Int,
202+
threadId: Int?
202203
): List<ChatMessageJson> {
203204
val url = ApiUtils.getUrlForChatMessageContext(baseUrl, token, messageId)
204-
return ncApiCoroutines.getContextOfChatMessage(credentials, url, limit).ocs?.data ?: listOf()
205+
return ncApiCoroutines.getContextOfChatMessage(credentials, url, limit, threadId).ocs?.data ?: listOf()
205206
}
206207

207208
override suspend fun getOpenGraph(

app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import com.nextcloud.talk.models.domain.ConversationModel
3535
import com.nextcloud.talk.models.domain.ReactionAddedModel
3636
import com.nextcloud.talk.models.domain.ReactionDeletedModel
3737
import com.nextcloud.talk.models.json.capabilities.SpreedCapability
38-
import com.nextcloud.talk.models.json.chat.ChatMessageJson
3938
import com.nextcloud.talk.models.json.chat.ChatOverallSingleMessage
4039
import com.nextcloud.talk.models.json.conversations.RoomOverall
4140
import com.nextcloud.talk.models.json.generic.GenericOverall
@@ -171,10 +170,6 @@ class ChatViewModel @Inject constructor(
171170
val voiceMessagePlaybackSpeedPreferences: LiveData<Map<String, PlaybackSpeed>>
172171
get() = _voiceMessagePlaybackSpeedPreferences
173172

174-
private val _getContextChatMessages: MutableLiveData<List<ChatMessageJson>> = MutableLiveData()
175-
val getContextChatMessages: LiveData<List<ChatMessageJson>>
176-
get() = _getContextChatMessages
177-
178173
private val _threadRetrieveState = MutableStateFlow<ThreadRetrieveUiState>(ThreadRetrieveUiState.None)
179174
val threadRetrieveState: StateFlow<ThreadRetrieveUiState> = _threadRetrieveState
180175

@@ -944,20 +939,6 @@ class ChatViewModel @Inject constructor(
944939
}
945940
}
946941

947-
fun getContextForChatMessages(credentials: String, baseUrl: String, token: String, messageId: String, limit: Int) {
948-
viewModelScope.launch {
949-
val messages = chatNetworkDataSource.getContextForChatMessage(
950-
credentials,
951-
baseUrl,
952-
token,
953-
messageId,
954-
limit
955-
)
956-
957-
_getContextChatMessages.value = messages
958-
}
959-
}
960-
961942
fun getOpenGraph(credentials: String, baseUrl: String, urlToPreview: String) {
962943
viewModelScope.launch {
963944
_getOpenGraph.value = chatNetworkDataSource.getOpenGraph(credentials, baseUrl, urlToPreview)

app/src/main/java/com/nextcloud/talk/contacts/ContactsApplication.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Nextcloud Talk - Android Client
33
*
4-
* SPDX-FileCopyrightText: 2024 Your Name <your@email.com>
4+
* SPDX-FileCopyrightText: 2024 Sowjanya Kota <sowjanya.kch@gmail.com>
55
* SPDX-License-Identifier: GPL-3.0-or-later
66
*/
77

0 commit comments

Comments
 (0)