diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index 37906db46b..cee7e368ea 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -919,6 +919,7 @@ class PendingContactConnection( val pccAgentConnId: String, val pccConnStatus: ConnStatus, val viaContactUri: Boolean, + val groupLinkId: String? = null, val customUserProfileId: Long? = null, val connReqInv: String? = null, override val localAlias: String, @@ -957,8 +958,11 @@ class PendingContactConnection( return if (initiated == null) "" else generalGetString( if (initiated && !viaContactUri) if (incognito) R.string.description_you_shared_one_time_link_incognito else R.string.description_you_shared_one_time_link - else if (viaContactUri ) - if (incognito) R.string.description_via_contact_address_link_incognito else R.string.description_via_contact_address_link + else if (viaContactUri) + if (groupLinkId != null) + if (incognito) R.string.description_via_group_link_incognito else R.string.description_via_group_link + else + if (incognito) R.string.description_via_contact_address_link_incognito else R.string.description_via_contact_address_link else if (incognito) R.string.description_via_one_time_link_incognito else R.string.description_via_one_time_link ) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index 970061df84..2a4a003608 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -952,11 +952,11 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a is CR.ContactConnected -> { if (!r.contact.viaGroupLink) { chatModel.updateContact(r.contact) - chatModel.dismissConnReqView(r.contact.activeConn.id) - chatModel.removeChat(r.contact.activeConn.id) chatModel.updateNetworkStatus(r.contact.id, Chat.NetworkStatus.Connected()) ntfManager.notifyContactConnected(r.contact) } + chatModel.dismissConnReqView(r.contact.activeConn.id) + chatModel.removeChat(r.contact.activeConn.id) } is CR.ContactConnecting -> { if (!r.contact.viaGroupLink) { @@ -1038,6 +1038,8 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a chatModel.addChat(Chat(chatInfo = ChatInfo.Group(r.groupInfo), chatItems = listOf())) // TODO NtfManager.shared.notifyGroupInvitation } + is CR.UserAcceptedGroupSent -> + chatModel.updateGroup(r.groupInfo) is CR.JoinedGroupMemberConnecting -> chatModel.upsertGroupMember(r.groupInfo, r.member) is CR.DeletedMemberUser -> // TODO update user member diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt index dd6ec2b590..f68287ff92 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt @@ -46,10 +46,7 @@ fun ContactConnectionInfoView( } ContactConnectionInfoLayout( connReq = connReqInvitation, - contactConnection.localAlias, - contactConnection.initiated, - contactConnection.viaContactUri, - contactConnection.incognito, + contactConnection, focusAlias, deleteConnection = { deleteContactConnectionAlert(contactConnection, chatModel, close) }, onLocalAliasChanged = { setContactAlias(contactConnection, it, chatModel) }, @@ -71,10 +68,7 @@ fun ContactConnectionInfoView( @Composable private fun ContactConnectionInfoLayout( connReq: String?, - localAlias: String, - connectionInitiated: Boolean, - connectionViaContactUri: Boolean, - connectionIncognito: Boolean, + contactConnection: PendingContactConnection, focusAlias: Boolean, deleteConnection: () -> Unit, onLocalAliasChanged: (String) -> Unit, @@ -86,23 +80,25 @@ private fun ContactConnectionInfoLayout( ) { AppBarTitle( stringResource( - if (connectionInitiated) R.string.you_invited_your_contact + if (contactConnection.initiated) R.string.you_invited_your_contact else R.string.you_accepted_connection ) ) - Row(Modifier.padding(bottom = DEFAULT_PADDING)) { - LocalAliasEditor(localAlias, center = false, leadingIcon = true, focus = focusAlias, updateValue = onLocalAliasChanged) + if (contactConnection.groupLinkId == null) { + Row(Modifier.padding(bottom = DEFAULT_PADDING)) { + LocalAliasEditor(contactConnection.localAlias, center = false, leadingIcon = true, focus = focusAlias, updateValue = onLocalAliasChanged) + } } Text( stringResource( - if (connectionViaContactUri) R.string.you_will_be_connected_when_your_connection_request_is_accepted + if (contactConnection.viaContactUri) R.string.you_will_be_connected_when_your_connection_request_is_accepted else R.string.you_will_be_connected_when_your_contacts_device_is_online ), Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, bottom = DEFAULT_PADDING) ) SectionView { - if (!connReq.isNullOrEmpty() && connectionInitiated) { - ShowQrButton(connectionIncognito, showQr) + if (!connReq.isNullOrEmpty() && contactConnection.initiated) { + ShowQrButton(contactConnection.incognito, showQr) SectionDivider() } DeleteButton(deleteConnection) @@ -148,11 +144,8 @@ private fun setContactAlias(contactConnection: PendingContactConnection, localAl private fun PreviewContactConnectionInfoView() { SimpleXTheme { ContactConnectionInfoLayout( - localAlias = "", connReq = "https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23MCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%3D", - connectionInitiated = true, - connectionViaContactUri = true, - connectionIncognito = false, + PendingContactConnection.getSampleData(), focusAlias = false, deleteConnection = {}, onLocalAliasChanged = {}, diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 5f2ac9dece..d52ed1bcb6 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -26,16 +26,18 @@ Unzulässiges Nachrichtenformat - Verbindung %1$d - Verbindung hergestellt - Für eine Verbindung eingeladen - verbinde … - Sie haben einen Einmal-Link geteilt - Sie haben Inkognito einen Einmal-Link geteilt - Über einen Kontaktadressen Link - Inkognito über einen Kontaktadressen Link - Über einen Einmal-Link - Inkognito über einen Einmal-Link + verbindung %1$d + verbindung hergestellt + für eine Verbindung eingeladen + verbinde… + sie haben einen Einmal-Link geteilt + sie haben Inkognito einen Einmal-Link geteilt + ***via group link + ***incognito via group link + über einen Kontaktadressen Link + inkognito über einen Kontaktadressen Link + über einen Einmal-Link + inkognito über einen Einmal-Link Fehler beim Speichern der SMP-Server diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index 3578758694..b74bc6c110 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -32,6 +32,8 @@ соединяется… вы создали одноразовую ссылку вы создали одноразовую ссылку инкогнито + через ссылку группы + инкогнито через ссылку группы через ссылку-контакт инкогнито через ссылку-контакт через одноразовую ссылку diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index ef21cc670e..45c8a61a7d 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -32,6 +32,8 @@ connecting… you shared one-time link you shared one-time link incognito + via group link + incognito via group link via contact address link incognito via contact address link via one-time link diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 7077141aa1..ce53f60fbb 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -893,11 +893,11 @@ func processReceivedMsg(_ res: ChatResponse) async { case let .contactConnected(contact, _): if !contact.viaGroupLink { m.updateContact(contact) - m.dismissConnReqView(contact.activeConn.id) - m.removeChat(contact.activeConn.id) m.updateNetworkStatus(contact.id, .connected) NtfManager.shared.notifyContactConnected(contact) } + m.dismissConnReqView(contact.activeConn.id) + m.removeChat(contact.activeConn.id) case let .contactConnecting(contact): if !contact.viaGroupLink { m.updateContact(contact) @@ -991,6 +991,8 @@ func processReceivedMsg(_ res: ChatResponse) async { chatItems: [] )) // NtfManager.shared.notifyContactRequest(contactRequest) // TODO notifyGroupInvitation? + case let .userAcceptedGroupSent(groupInfo): + m.updateGroup(groupInfo) case let .joinedGroupMemberConnecting(groupInfo, _, member): _ = m.upsertGroupMember(groupInfo, member) case let .deletedMemberUser(groupInfo, _): // TODO update user member diff --git a/apps/ios/Shared/Views/ChatList/ContactConnectionInfo.swift b/apps/ios/Shared/Views/ChatList/ContactConnectionInfo.swift index 669e483ec8..bf311b1719 100644 --- a/apps/ios/Shared/Views/ChatList/ContactConnectionInfo.swift +++ b/apps/ios/Shared/Views/ChatList/ContactConnectionInfo.swift @@ -46,17 +46,19 @@ struct ContactConnectionInfo: View { .onTapGesture { aliasTextFieldFocused = false } Section { - HStack(spacing: 20) { - Image(systemName: "pencil") - .foregroundColor(.secondary) - .padding(.leading, 6) - .onTapGesture { aliasTextFieldFocused = true } - TextField("Set contact name…", text: $localAlias) - .autocapitalization(.none) - .autocorrectionDisabled(true) - .focused($aliasTextFieldFocused) - .submitLabel(.done) - .onSubmit(setConnectionAlias) + if contactConnection.groupLinkId == nil { + HStack(spacing: 20) { + Image(systemName: "pencil") + .foregroundColor(.secondary) + .padding(.leading, 6) + .onTapGesture { aliasTextFieldFocused = true } + TextField("Set contact name…", text: $localAlias) + .autocapitalization(.none) + .autocorrectionDisabled(true) + .focused($aliasTextFieldFocused) + .submitLabel(.done) + .onSubmit(setConnectionAlias) + } } if contactConnection.initiated, diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 9db33c4b42..8745c4f6c8 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -433,6 +433,7 @@ public struct PendingContactConnection: Decodable, NamedChat { var pccAgentConnId: String var pccConnStatus: ConnStatus public var viaContactUri: Bool + public var groupLinkId: String? public var customUserProfileId: Int64? public var connReqInv: String? public var localAlias: String @@ -477,10 +478,18 @@ public struct PendingContactConnection: Decodable, NamedChat { desc = NSLocalizedString("you shared one-time link", comment: "chat list item description") } } else if viaContactUri { - if incognito { - desc = NSLocalizedString("incognito via contact address link", comment: "chat list item description") + if groupLinkId != nil { + if incognito { + desc = NSLocalizedString("incognito via group link", comment: "chat list item description") + } else { + desc = NSLocalizedString("via group link", comment: "chat list item description") + } } else { - desc = NSLocalizedString("via contact address link", comment: "chat list item description") + if incognito { + desc = NSLocalizedString("incognito via contact address link", comment: "chat list item description") + } else { + desc = NSLocalizedString("via contact address link", comment: "chat list item description") + } } } else { if incognito {