From 9b75553ddc6973ec3f1b4ef3308e729113cf4925 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Thu, 22 Sep 2022 08:36:39 +0100 Subject: [PATCH] ios: UX for making connections (#1088) * ios: UX for making connections * combine paste and scan into one view * translations --- .../Shared/Views/NewChat/AddContactView.swift | 22 +++++-- .../Views/NewChat/ConnectViaLinkView.swift | 42 ++++++++++++ .../Shared/Views/NewChat/CreateLinkView.swift | 66 +++++++++++++++++++ .../Shared/Views/NewChat/NewChatButton.swift | 19 +++--- .../Views/NewChat/PasteToConnectView.swift | 5 +- .../Views/NewChat/ScanToConnectView.swift | 5 +- .../Views/UserSettings/SettingsView.swift | 8 ++- .../Views/UserSettings/UserAddress.swift | 9 ++- .../en.xcloc/Localized Contents/en.xliff | 36 ++++++---- .../ru.xcloc/Localized Contents/ru.xliff | 36 ++++++---- apps/ios/SimpleX.xcodeproj/project.pbxproj | 8 +++ apps/ios/ru.lproj/Localizable.strings | 20 ++++-- 12 files changed, 218 insertions(+), 58 deletions(-) create mode 100644 apps/ios/Shared/Views/NewChat/ConnectViaLinkView.swift create mode 100644 apps/ios/Shared/Views/NewChat/CreateLinkView.swift diff --git a/apps/ios/Shared/Views/NewChat/AddContactView.swift b/apps/ios/Shared/Views/NewChat/AddContactView.swift index 3dd99ca9d..031e1d911 100644 --- a/apps/ios/Shared/Views/NewChat/AddContactView.swift +++ b/apps/ios/Shared/Views/NewChat/AddContactView.swift @@ -10,14 +10,17 @@ import SwiftUI import CoreImage.CIFilterBuiltins struct AddContactView: View { - @EnvironmentObject var chatModel: ChatModel + @EnvironmentObject private var chatModel: ChatModel var connReqInvitation: String + var viaSettings = false + var body: some View { ScrollView { VStack(alignment: .leading) { Text("One-time invitation link") - .font(.title) - .padding(.vertical) + .font(.largeTitle) + .bold() + .padding(viaSettings ? .bottom : .vertical) Text("Your contact can scan it from the app.") .padding(.bottom, 4) if (chatModel.incognito) { @@ -35,8 +38,15 @@ struct AddContactView: View { } .padding(.bottom) } - QRCode(uri: connReqInvitation) - .padding(.bottom) + if connReqInvitation != "" { + QRCode(uri: connReqInvitation).padding(.bottom) + } else { + ProgressView() + .progressViewStyle(.circular) + .scaleEffect(2) + .frame(maxWidth: .infinity) + .padding(.vertical) + } Text("If you can't meet in person, **show QR code in the video call**, or share the link.") .padding(.bottom) Button { @@ -47,7 +57,7 @@ struct AddContactView: View { .frame(maxWidth: .infinity, alignment: .center) } .padding() - .frame(maxHeight: .infinity, alignment: .top) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } } } diff --git a/apps/ios/Shared/Views/NewChat/ConnectViaLinkView.swift b/apps/ios/Shared/Views/NewChat/ConnectViaLinkView.swift new file mode 100644 index 000000000..9df767485 --- /dev/null +++ b/apps/ios/Shared/Views/NewChat/ConnectViaLinkView.swift @@ -0,0 +1,42 @@ +// +// ConnectViaLinkView.swift +// SimpleX (iOS) +// +// Created by Evgeny on 21/09/2022. +// Copyright © 2022 SimpleX Chat. All rights reserved. +// + +import SwiftUI + +enum ConnectViaLinkTab: String { + case scan + case paste +} + +struct ConnectViaLinkView: View { + @State private var selection: ConnectViaLinkTab = connectViaLinkTabDefault.get() + + var body: some View { + TabView(selection: $selection) { + ScanToConnectView() + .tabItem { + Label("Scan QR code", systemImage: "qrcode") + } + .tag(ConnectViaLinkTab.scan) + PasteToConnectView() + .tabItem { + Label("Paste received link", systemImage: "doc.plaintext") + } + .tag(ConnectViaLinkTab.paste) + } + .onChange(of: selection) { _ in + connectViaLinkTabDefault.set(selection) + } + } +} + +struct ConnectViaLinkView_Previews: PreviewProvider { + static var previews: some View { + ConnectViaLinkView() + } +} diff --git a/apps/ios/Shared/Views/NewChat/CreateLinkView.swift b/apps/ios/Shared/Views/NewChat/CreateLinkView.swift new file mode 100644 index 000000000..488e8727f --- /dev/null +++ b/apps/ios/Shared/Views/NewChat/CreateLinkView.swift @@ -0,0 +1,66 @@ +// +// CreateLinkView.swift +// SimpleX (iOS) +// +// Created by Evgeny on 21/09/2022. +// Copyright © 2022 SimpleX Chat. All rights reserved. +// + +import SwiftUI + +enum CreateLinkTab { + case oneTime + case longTerm +} + +struct CreateLinkView: View { + @State var selection: CreateLinkTab + @State var connReqInvitation: String = "" + @State private var creatingConnReq = false + var viaSettings = false + + var body: some View { + TabView(selection: $selection) { + AddContactView(connReqInvitation: connReqInvitation, viaSettings: viaSettings) + .tabItem { + Label( + connReqInvitation == "" + ? "Create one-time invitation link" + : "One-time invitation link", + systemImage: "1.circle" + ) + } + .tag(CreateLinkTab.oneTime) + UserAddress(viaSettings: viaSettings) + .tabItem { + Label("Your contact address", systemImage: "infinity.circle") + } + .tag(CreateLinkTab.longTerm) + } + .onChange(of: selection) { _ in + if case .oneTime = selection, connReqInvitation == "" && !creatingConnReq { + createInvitation() + } + } + } + + private func createInvitation() { + creatingConnReq = true + Task { + let connReq = await apiAddContact() + await MainActor.run { + if let connReq = connReq { + connReqInvitation = connReq + } else { + creatingConnReq = false + } + } + } + } +} + +struct CreateLinkView_Previews: PreviewProvider { + static var previews: some View { + CreateLinkView(selection: CreateLinkTab.oneTime) + } +} diff --git a/apps/ios/Shared/Views/NewChat/NewChatButton.swift b/apps/ios/Shared/Views/NewChat/NewChatButton.swift index bce4bae92..10da2ce20 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatButton.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatButton.swift @@ -11,15 +11,13 @@ import SimpleXChat enum NewChatAction: Identifiable { case createLink(link: String) - case pasteLink - case scanQRCode + case connectViaLink case createGroup var id: String { switch self { case let .createLink(link): return "createLink \(link)" - case .pasteLink: return "pasteLink" - case .scanQRCode: return "scanQRCode" + case .connectViaLink: return "connectViaLink" case .createGroup: return "createGroup" } } @@ -36,17 +34,16 @@ struct NewChatButton: View { .scaledToFit() .frame(width: 24, height: 24) } - .confirmationDialog("Add contact to start a new chat", isPresented: $showAddChat, titleVisibility: .visible) { - Button("Create link / QR code") { addContactAction() } - Button("Paste received link") { actionSheet = .pasteLink } - Button("Scan QR code") { actionSheet = .scanQRCode } + .confirmationDialog("Start a new chat", isPresented: $showAddChat, titleVisibility: .visible) { + Button("Share one-time invitation link") { addContactAction() } + Button("Connect via link / QR code") { actionSheet = .connectViaLink } Button("Create secret group") { actionSheet = .createGroup } } .sheet(item: $actionSheet) { sheet in switch sheet { - case let .createLink(link): AddContactView(connReqInvitation: link) - case .pasteLink: PasteToConnectView() - case .scanQRCode: ScanToConnectView() + case let .createLink(link): + CreateLinkView(selection: .oneTime, connReqInvitation: link) + case .connectViaLink: ConnectViaLinkView() case .createGroup: AddGroupView() } } diff --git a/apps/ios/Shared/Views/NewChat/PasteToConnectView.swift b/apps/ios/Shared/Views/NewChat/PasteToConnectView.swift index 05e36f63e..3b45a4eb8 100644 --- a/apps/ios/Shared/Views/NewChat/PasteToConnectView.swift +++ b/apps/ios/Shared/Views/NewChat/PasteToConnectView.swift @@ -16,7 +16,8 @@ struct PasteToConnectView: View { var body: some View { VStack(alignment: .leading) { Text("Connect via link") - .font(.title) + .font(.largeTitle) + .bold() .padding(.vertical) Text("Paste the link you received into the box below to connect with your contact.") .padding(.bottom, 4) @@ -73,7 +74,7 @@ struct PasteToConnectView: View { Text("You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.") } .padding() - .frame(maxHeight: .infinity, alignment: .top) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } private func connect() { diff --git a/apps/ios/Shared/Views/NewChat/ScanToConnectView.swift b/apps/ios/Shared/Views/NewChat/ScanToConnectView.swift index a70c74c09..e9836e6eb 100644 --- a/apps/ios/Shared/Views/NewChat/ScanToConnectView.swift +++ b/apps/ios/Shared/Views/NewChat/ScanToConnectView.swift @@ -16,7 +16,8 @@ struct ScanToConnectView: View { var body: some View { VStack(alignment: .leading) { Text("Scan QR code") - .font(.title) + .font(.largeTitle) + .bold() .padding(.vertical) if (chatModel.incognito) { HStack { @@ -43,7 +44,7 @@ struct ScanToConnectView: View { .padding(.bottom) } .padding() - .frame(maxHeight: .infinity, alignment: .top) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) } func processQRCode(_ resp: Result) { diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index 0abab8392..61ac9a901 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -33,6 +33,7 @@ let DEFAULT_ACCENT_COLOR_RED = "accentColorRed" let DEFAULT_ACCENT_COLOR_GREEN = "accentColorGreen" let DEFAULT_ACCENT_COLOR_BLUE = "accentColorBlue" let DEFAULT_USER_INTERFACE_STYLE = "userInterfaceStyle" +let DEFAULT_CONNECT_VIA_LINK_TAB = "connectViaLinkTab" let appDefaults: [String: Any] = [ DEFAULT_SHOW_LA_NOTICE: false, @@ -49,6 +50,7 @@ let appDefaults: [String: Any] = [ DEFAULT_ACCENT_COLOR_GREEN: 0.533, DEFAULT_ACCENT_COLOR_BLUE: 1.000, DEFAULT_USER_INTERFACE_STYLE: 0, + DEFAULT_CONNECT_VIA_LINK_TAB: "scan" ] private var indent: CGFloat = 36 @@ -59,6 +61,8 @@ let encryptionStartedDefault = BoolDefault(defaults: UserDefaults.standard, forK let encryptionStartedAtDefault = DateDefault(defaults: UserDefaults.standard, forKey: DEFAULT_ENCRYPTION_STARTED_AT) +let connectViaLinkTabDefault = EnumDefault(defaults: UserDefaults.standard, forKey: DEFAULT_CONNECT_VIA_LINK_TAB, withDefault: .scan) + func setGroupDefaults() { privacyAcceptImagesGroupDefault.set(UserDefaults.standard.bool(forKey: DEFAULT_PRIVACY_ACCEPT_IMAGES)) } @@ -89,8 +93,8 @@ struct SettingsView: View { .disabled(chatModel.chatRunning != true) NavigationLink { - UserAddress() - .navigationTitle("Your chat address") + CreateLinkView(selection: .longTerm, viaSettings: true) + .navigationBarTitleDisplayMode(.inline) } label: { settingsRow("qrcode") { Text("Your SimpleX contact address") } } diff --git a/apps/ios/Shared/Views/UserSettings/UserAddress.swift b/apps/ios/Shared/Views/UserSettings/UserAddress.swift index c21bfbf6b..a52255311 100644 --- a/apps/ios/Shared/Views/UserSettings/UserAddress.swift +++ b/apps/ios/Shared/Views/UserSettings/UserAddress.swift @@ -10,8 +10,9 @@ import SwiftUI import SimpleXChat struct UserAddress: View { - @EnvironmentObject var chatModel: ChatModel + @EnvironmentObject private var chatModel: ChatModel @State private var alert: UserAddressAlert? + var viaSettings = false private enum UserAddressAlert: Identifiable { case deleteAddress @@ -28,6 +29,10 @@ struct UserAddress: View { var body: some View { ScrollView { VStack (alignment: .leading) { + Text("Your contact address") + .font(.largeTitle) + .bold() + .padding(viaSettings ? .bottom : .vertical) Text("You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it.") .padding(.bottom) if let userAdress = chatModel.userAddress { @@ -71,7 +76,7 @@ struct UserAddress: View { } } .padding() - .frame(maxHeight: .infinity, alignment: .top) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) .alert(item: $alert) { alert in switch alert { case .deleteAddress: diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 24164130d..ec07f9695 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -233,11 +233,6 @@ Accept incognito No comment provided by engineer. - - Add contact to start a new chat - Add contact to start a new chat - No comment provided by engineer. - Advanced network settings Advanced network settings @@ -453,6 +448,11 @@ Connect via link No comment provided by engineer. + + Connect via link / QR code + Connect via link / QR code + No comment provided by engineer. + Connect via one-time link? Connect via one-time link? @@ -553,9 +553,9 @@ Create address No comment provided by engineer. - - Create link / QR code - Create link / QR code + + Create one-time invitation link + Create one-time invitation link No comment provided by engineer. @@ -1998,6 +1998,11 @@ We will be adding server redundancy to prevent lost messages. Share link No comment provided by engineer. + + Share one-time invitation link + Share one-time invitation link + No comment provided by engineer. + Show preview Show preview @@ -2033,6 +2038,11 @@ We will be adding server redundancy to prevent lost messages. Somebody notification title + + Start a new chat + Start a new chat + No comment provided by engineer. + Start chat Start chat @@ -2557,11 +2567,6 @@ To connect, please ask your contact to create another connection link and check Your calls No comment provided by engineer. - - Your chat address - Your chat address - No comment provided by engineer. - Your chat database Your chat database @@ -2592,6 +2597,11 @@ To connect, please ask your contact to create another connection link and check Your chats No comment provided by engineer. + + Your contact address + Your contact address + No comment provided by engineer. + Your contact can scan it from the app. Your contact can scan it from the app. diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 5335e08dc..a00d7e730 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -233,11 +233,6 @@ Принять инкогнито No comment provided by engineer. - - Add contact to start a new chat - Добавьте контакт, чтобы начать разговор - No comment provided by engineer. - Advanced network settings Настройки сети @@ -453,6 +448,11 @@ Соединиться через ссылку No comment provided by engineer. + + Connect via link / QR code + Соединиться через ссылку / QR код + No comment provided by engineer. + Connect via one-time link? Соединиться через одноразовую ссылку? @@ -553,9 +553,9 @@ Создать адрес No comment provided by engineer. - - Create link / QR code - Создать ссылку / QR код + + Create one-time invitation link + Создать ссылку-приглашение No comment provided by engineer. @@ -1998,6 +1998,11 @@ We will be adding server redundancy to prevent lost messages. Поделиться ссылкой No comment provided by engineer. + + Share one-time invitation link + Поделиться ссылкой-приглашением + No comment provided by engineer. + Show preview Показывать уведомления @@ -2033,6 +2038,11 @@ We will be adding server redundancy to prevent lost messages. Контакт notification title + + Start a new chat + Начать новый разговор + No comment provided by engineer. + Start chat Запустить чат @@ -2557,11 +2567,6 @@ To connect, please ask your contact to create another connection link and check Ваши звонки No comment provided by engineer. - - Your chat address - Ваш SimpleX адрес - No comment provided by engineer. - Your chat database База данных @@ -2592,6 +2597,11 @@ To connect, please ask your contact to create another connection link and check Ваши чаты No comment provided by engineer. + + Your contact address + Ваш SimpleX адрес + No comment provided by engineer. + Your contact can scan it from the app. Ваш контакт может сосканировать QR код в приложении diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index fc9957d27..92e1c80c8 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -78,6 +78,8 @@ 5CB0BA92282713FD00B3292C /* CreateProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA91282713FD00B3292C /* CreateProfile.swift */; }; 5CB0BA9A2827FD8800B3292C /* HowItWorks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA992827FD8800B3292C /* HowItWorks.swift */; }; 5CB2084F28DA4B4800D024EC /* RTCServers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2084E28DA4B4800D024EC /* RTCServers.swift */; }; + 5CB2085128DB64CA00D024EC /* CreateLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2085028DB64CA00D024EC /* CreateLinkView.swift */; }; + 5CB2085328DB7CAF00D024EC /* ConnectViaLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2085228DB7CAF00D024EC /* ConnectViaLinkView.swift */; }; 5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; }; 5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E62868D76D001FD2EF /* NotificationsView.swift */; }; 5CB346E92869E8BA001FD2EF /* PushEnvironment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */; }; @@ -271,6 +273,8 @@ 5CB0BA91282713FD00B3292C /* CreateProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateProfile.swift; sourceTree = ""; }; 5CB0BA992827FD8800B3292C /* HowItWorks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HowItWorks.swift; sourceTree = ""; }; 5CB2084E28DA4B4800D024EC /* RTCServers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RTCServers.swift; sourceTree = ""; }; + 5CB2085028DB64CA00D024EC /* CreateLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateLinkView.swift; sourceTree = ""; }; + 5CB2085228DB7CAF00D024EC /* ConnectViaLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectViaLinkView.swift; sourceTree = ""; }; 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = ""; }; 5CB346E62868D76D001FD2EF /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = ""; }; 5CB346E82869E8BA001FD2EF /* PushEnvironment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushEnvironment.swift; sourceTree = ""; }; @@ -541,6 +545,8 @@ 3C8C548828133C84000A3EC7 /* PasteToConnectView.swift */, 5CC1C99127A6C7F5000D9FF6 /* QRCode.swift */, 6442E0B9287F169300CEC0F9 /* AddGroupView.swift */, + 5CB2085028DB64CA00D024EC /* CreateLinkView.swift */, + 5CB2085228DB7CAF00D024EC /* ConnectViaLinkView.swift */, ); path = NewChat; sourceTree = ""; @@ -894,6 +900,7 @@ 5CB0BA8E2827126500B3292C /* OnboardingView.swift in Sources */, 6442E0BE2880182D00CEC0F9 /* GroupChatInfoView.swift in Sources */, 5C2E261227A30FEA00F70299 /* TerminalView.swift in Sources */, + 5CB2085128DB64CA00D024EC /* CreateLinkView.swift in Sources */, 5C9FD96E27A5D6ED0075386C /* SendMessageView.swift in Sources */, 64E972072881BB22008DBC02 /* CIGroupInvitationView.swift in Sources */, 5CC1C99227A6C7F5000D9FF6 /* QRCode.swift in Sources */, @@ -945,6 +952,7 @@ 5C029EA82837DBB3004A9677 /* CICallItemView.swift in Sources */, 5CE4407227ADB1D0007B033A /* Emoji.swift in Sources */, 5C3F1D5A2844B4DE00EC8A82 /* ExperimentalFeaturesView.swift in Sources */, + 5CB2085328DB7CAF00D024EC /* ConnectViaLinkView.swift in Sources */, 5C9CC7A928C532AB00BEF955 /* DatabaseErrorView.swift in Sources */, 5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */, 64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */, diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 423c5db39..7ab0a64c9 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -152,9 +152,6 @@ /* call status */ "accepted call" = " принятый звонок"; -/* No comment provided by engineer. */ -"Add contact to start a new chat" = "Добавьте контакт, чтобы начать разговор"; - /* No comment provided by engineer. */ "admin" = "админ"; @@ -317,6 +314,9 @@ /* No comment provided by engineer. */ "Connect via link" = "Соединиться через ссылку"; +/* No comment provided by engineer. */ +"Connect via link / QR code" = "Соединиться через ссылку / QR код"; + /* No comment provided by engineer. */ "Connect via one-time link?" = "Соединиться через одноразовую ссылку?"; @@ -414,7 +414,7 @@ "Create address" = "Создать адрес"; /* No comment provided by engineer. */ -"Create link / QR code" = "Создать ссылку / QR код"; +"Create one-time invitation link" = "Создать ссылку-приглашение"; /* No comment provided by engineer. */ "Create secret group" = "Создать скрытую группу"; @@ -1382,6 +1382,9 @@ /* No comment provided by engineer. */ "Share link" = "Поделиться ссылкой"; +/* No comment provided by engineer. */ +"Share one-time invitation link" = "Поделиться ссылкой-приглашением"; + /* No comment provided by engineer. */ "Show preview" = "Показывать уведомления"; @@ -1409,6 +1412,9 @@ /* notification title */ "Somebody" = "Контакт"; +/* No comment provided by engineer. */ +"Start a new chat" = "Начать новый разговор"; + /* No comment provided by engineer. */ "Start chat" = "Запустить чат"; @@ -1769,9 +1775,6 @@ /* No comment provided by engineer. */ "Your calls" = "Ваши звонки"; -/* No comment provided by engineer. */ -"Your chat address" = "Ваш SimpleX адрес"; - /* No comment provided by engineer. */ "Your chat database" = "База данных"; @@ -1790,6 +1793,9 @@ /* No comment provided by engineer. */ "Your chats" = "Ваши чаты"; +/* No comment provided by engineer. */ +"Your contact address" = "Ваш SimpleX адрес"; + /* No comment provided by engineer. */ "Your contact can scan it from the app." = "Ваш контакт может сосканировать QR код в приложении";