ui: don't switch profile when the prepared chat failed to move

ComposeContextProfilePickerView.changeProfile called changeActiveUser_
outside both 'updated != null' branches, so when
apiChangePreparedContactUser or apiChangePreparedGroupUser returned null
the chat stayed on the old profile but the active user was switched
anyway - and the post-switch check passed, so no error was shown either.
The invitation is then left behind on a profile the user is no longer on.

Kotlin only: the iOS twin throws instead of returning null, so its outer
catch already skips the switch.
This commit is contained in:
Narasimha-sc
2026-09-05 11:16:14 +00:00
parent 10b88a02cb
commit e85fa9d3cc
@@ -79,6 +79,7 @@ fun ComposeContextProfilePickerView(
fun changeProfile(newUser: User) {
withApi {
var chatMoved = false
if (chat.chatInfo is ChatInfo.Direct) {
val updatedContact = chatModel.controller.apiChangePreparedContactUser(rhId, chat.chatInfo.contact.contactId, newUser.userId)
if (updatedContact != null) {
@@ -86,6 +87,7 @@ fun ComposeContextProfilePickerView(
chatModel.controller.appPrefs.incognito.set(false)
listExpanded.value = false
chatModel.chatsContext.updateContact(rhId, updatedContact)
chatMoved = true
}
} else if (chat.chatInfo is ChatInfo.Group) {
val updatedGroup = chatModel.controller.apiChangePreparedGroupUser(rhId, chat.chatInfo.groupInfo.groupId, newUser.userId)
@@ -94,8 +96,10 @@ fun ComposeContextProfilePickerView(
chatModel.controller.appPrefs.incognito.set(false)
listExpanded.value = false
chatModel.chatsContext.updateGroup(rhId, updatedGroup)
chatMoved = true
}
}
if (!chatMoved) return@withApi
chatModel.controller.changeActiveUser_(
rhId = newUser.remoteHostId,
toUserId = newUser.userId,