From df329d305b52eb2d9a250ea3c26e4b5c16594cd6 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 21 Sep 2022 15:11:52 +0100 Subject: [PATCH] ios: replace "make connection" screen with two buttons (#1084) * ios: replace "make connection" screen with two buttons * add "no chats", update translations --- apps/ios/Shared/Model/SimpleXAPI.swift | 2 - apps/ios/Shared/Views/ChatList/ChatHelp.swift | 3 +- .../Shared/Views/ChatList/ChatListView.swift | 157 ++++++++++++------ .../Shared/Views/NewChat/NewChatButton.swift | 6 +- .../Views/Onboarding/MakeConnection.swift | 150 ----------------- .../Views/Onboarding/OnboardingView.swift | 2 - .../Onboarding/SetNotificationsMode.swift | 4 +- .../Shared/Views/Onboarding/SimpleXInfo.swift | 2 +- .../en.xcloc/Localized Contents/en.xliff | 61 ++----- .../ru.xcloc/Localized Contents/ru.xliff | 61 ++----- apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 - apps/ios/ru.lproj/Localizable.strings | 35 +--- 12 files changed, 143 insertions(+), 344 deletions(-) delete mode 100644 apps/ios/Shared/Views/Onboarding/MakeConnection.swift diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index fce1705c6..7cdc245cc 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -763,8 +763,6 @@ func startChat() throws { withAnimation { m.onboardingStage = m.onboardingStage == .step2_CreateProfile ? .step3_SetNotificationsMode - : m.chats.isEmpty - ? .step4_MakeConnection : .onboardingComplete } } diff --git a/apps/ios/Shared/Views/ChatList/ChatHelp.swift b/apps/ios/Shared/Views/ChatList/ChatHelp.swift index 7c02bd64e..2aa6b0e7d 100644 --- a/apps/ios/Shared/Views/ChatList/ChatHelp.swift +++ b/apps/ios/Shared/Views/ChatList/ChatHelp.swift @@ -11,6 +11,7 @@ import SwiftUI struct ChatHelp: View { @EnvironmentObject var chatModel: ChatModel @Binding var showSettings: Bool + @State private var showAddChat = false var body: some View { VStack(alignment: .leading, spacing: 10) { @@ -34,7 +35,7 @@ struct ChatHelp: View { HStack(spacing: 8) { Text("Tap button ") - NewChatButton() + NewChatButton(showAddChat: $showAddChat) Text("above, then choose:") } diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 4c504eda8..71d39c29e 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -15,65 +15,16 @@ struct ChatListView: View { @State private var showSettings = false @State private var searchText = "" @State private var selectedChat: ChatId? + @State private var showAddChat = false var body: some View { let v = NavigationView { - List { - ForEach(filteredChats(), id: \.viewId) { chat in - ChatListNavLink(chat: chat) - .padding(.trailing, -16) - .disabled(chatModel.chatRunning != true) + VStack { + if chatModel.chats.isEmpty { + onboardingButtons() } + chatList } - .onChange(of: chatModel.chatId) { _ in - selectedChat = chatModel.chatId - if chatModel.chatId == nil, let chatId = chatModel.chatToTop { - chatModel.chatToTop = nil - chatModel.popChat(chatId) - } - } - .onChange(of: chatModel.chats.isEmpty) { empty in - if !empty { return } - withAnimation { chatModel.onboardingStage = .step4_MakeConnection } - } - .onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() } - .onAppear() { connectViaUrl() } - .offset(x: -8) - .listStyle(.plain) - .navigationTitle("Your chats") - .navigationBarTitleDisplayMode(chatModel.chats.count > 8 ? .inline : .large) - .toolbar { - ToolbarItem(placement: .navigationBarLeading) { - SettingsButton() - } - ToolbarItem(placement: .principal) { - if (chatModel.incognito) { - HStack { - if (chatModel.chats.count > 8) { - Text("Your chats").font(.headline) - Spacer().frame(width: 16) - } - Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo) - } - } - } - ToolbarItem(placement: .navigationBarTrailing) { - switch chatModel.chatRunning { - case .some(true): NewChatButton() - case .some(false): chatStoppedIcon() - case .none: EmptyView() - } - } - } - .background( - NavigationLink( - destination: chatView(selectedChat), - isActive: Binding( - get: { selectedChat != nil }, - set: { _, _ in selectedChat = nil } - ) - ) { EmptyView() } - ) } .navigationViewStyle(.stack) @@ -84,6 +35,104 @@ struct ChatListView: View { } } + var chatList: some View { + List { + ForEach(filteredChats(), id: \.viewId) { chat in + ChatListNavLink(chat: chat) + .padding(.trailing, -16) + .disabled(chatModel.chatRunning != true) + } + } + .onChange(of: chatModel.chatId) { _ in + selectedChat = chatModel.chatId + if chatModel.chatId == nil, let chatId = chatModel.chatToTop { + chatModel.chatToTop = nil + chatModel.popChat(chatId) + } + } + .onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() } + .onAppear() { connectViaUrl() } + .offset(x: -8) + .listStyle(.plain) + .navigationTitle("Your chats") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + SettingsButton() + } + ToolbarItem(placement: .principal) { + if (chatModel.incognito) { + HStack { + if (chatModel.chats.count > 8) { + Text("Your chats").font(.headline) + Spacer().frame(width: 16) + } + Image(systemName: "theatermasks").frame(maxWidth: 24, maxHeight: 24, alignment: .center).foregroundColor(.indigo) + } + } + } + ToolbarItem(placement: .navigationBarTrailing) { + switch chatModel.chatRunning { + case .some(true): NewChatButton(showAddChat: $showAddChat) + case .some(false): chatStoppedIcon() + case .none: EmptyView() + } + } + } + .background( + NavigationLink( + destination: chatView(selectedChat), + isActive: Binding( + get: { selectedChat != nil }, + set: { _, _ in selectedChat = nil } + ) + ) { EmptyView() } + ) + } + + private func onboardingButtons() -> some View { + VStack(alignment: .trailing, spacing: 0) { + Path { p in + p.move(to: CGPoint(x: 8, y: 0)) + p.addLine(to: CGPoint(x: 16, y: 10)) + p.addLine(to: CGPoint(x: 0, y: 10)) + p.addLine(to: CGPoint(x: 8, y: 0)) + } + .fill(Color.accentColor) + .frame(width: 20, height: 10) + .padding(.trailing, 12) + + connectButton("Tap to start a new chat") { + showAddChat = true + } + + connectButton("or chat with the developers") { + DispatchQueue.main.async { + UIApplication.shared.open(simplexTeamURL) + } + } + .padding(.top, 10) + + Spacer() + Text("You have no chats") + .foregroundColor(.secondary) + .frame(maxWidth: .infinity) + } + .padding(.trailing, 6) + .frame(maxHeight: .infinity) + } + + private func connectButton(_ label: LocalizedStringKey, action: @escaping () -> Void) -> some View { + Button(action: action) { + Text(label) + .padding(.vertical, 10) + .padding(.horizontal, 20) + } + .background(Color.accentColor) + .foregroundColor(.white) + .clipShape(RoundedRectangle(cornerRadius: 16)) + } + @ViewBuilder private func chatView(_ chatId: ChatId?) -> some View { if let chatId = chatId, let chat = chatModel.getChat(chatId) { ChatView(chat: chat).onAppear { diff --git a/apps/ios/Shared/Views/NewChat/NewChatButton.swift b/apps/ios/Shared/Views/NewChat/NewChatButton.swift index 2fa981caf..9c5758111 100644 --- a/apps/ios/Shared/Views/NewChat/NewChatButton.swift +++ b/apps/ios/Shared/Views/NewChat/NewChatButton.swift @@ -19,13 +19,13 @@ enum NewChatAction: Identifiable { } struct NewChatButton: View { - @State private var showAddChat = false + @Binding var showAddChat: Bool @State private var connReq: String = "" @State private var actionSheet: NewChatAction? var body: some View { Button { showAddChat = true } label: { - Image(systemName: "plus.circle.fill") + Image(systemName: "square.and.pencil") .resizable() .scaledToFit() .frame(width: 24, height: 24) @@ -85,6 +85,6 @@ func connectionReqSentAlert(_ type: ConnReqType) { struct NewChatButton_Previews: PreviewProvider { static var previews: some View { - NewChatButton() + NewChatButton(showAddChat: Binding.constant(false)) } } diff --git a/apps/ios/Shared/Views/Onboarding/MakeConnection.swift b/apps/ios/Shared/Views/Onboarding/MakeConnection.swift deleted file mode 100644 index 81bee84d9..000000000 --- a/apps/ios/Shared/Views/Onboarding/MakeConnection.swift +++ /dev/null @@ -1,150 +0,0 @@ -// -// MakeConnection.swift -// SimpleX (iOS) -// -// Created by Evgeny on 07/05/2022. -// Copyright © 2022 SimpleX Chat. All rights reserved. -// - -import SwiftUI -import SimpleXChat - -struct MakeConnection: View { - @EnvironmentObject var m: ChatModel - @State private var connReq: String = "" - @State private var actionSheet: NewChatAction? - - var body: some View { - VStack(alignment: .leading) { - HStack { - SettingsButton() - if m.chatRunning == false { - Spacer() - chatStoppedIcon() - } - } - .padding(.bottom, 1) - - if let user = m.currentUser { - Text("Welcome \(user.displayName)!") - .font(.largeTitle) - .multilineTextAlignment(.leading) - .padding(.bottom, 8) - } else { - Text("Make a private connection") - .font(.largeTitle) - .padding(.bottom) - } - - ScrollView { - VStack(alignment: .leading) { - Text("To make your first private connection, choose **one of the following**:") - .padding(.bottom) - - actionRow( - icon: "link.badge.plus", - title: "Create 1-time link / QR code", - text: "It's secure to share - only one contact can use it." - ) { addContactAction() } - - actionRow( - icon: "doc.plaintext", - title: "Paste the link you received", - text: "Or open the link in the browser and tap **Open in mobile**." - ) { actionSheet = .pasteLink } - - actionRow( - icon: "qrcode.viewfinder", - title: "Scan contact's QR code", - text: "In person or via a video call – the most secure way to connect." - ) { actionSheet = .scanQRCode } - - Text("or") - .padding(.bottom) - .frame(maxWidth: .infinity) - - actionRow( - icon: "number", - title: "Connect with the developers", - text: "To ask any questions and to receive SimpleX Chat updates." - ) { - DispatchQueue.main.async { - UIApplication.shared.open(simplexTeamURL) - } - } - } - .disabled(m.chatRunning != true) - } - - Spacer() - - Button { - withAnimation { m.onboardingStage = .step1_SimpleXInfo } - } label: { - HStack { - Image(systemName: "lessthan") - Text("About SimpleX") - } - } - .padding(.bottom, 8) - .padding(.bottom) - } - .sheet(item: $actionSheet) { sheet in - switch sheet { - case .createLink: AddContactView(connReqInvitation: connReq) - case .pasteLink: PasteToConnectView() - case .scanQRCode: ScanToConnectView() - case .createGroup: EmptyView() // TODO refactor / show during onboarding? - } - } - .onChange(of: actionSheet) { _ in checkOnboarding() } - .onChange(of: m.chats.isEmpty) { _ in checkOnboarding() } - .onChange(of: m.appOpenUrl) { _ in connectViaUrl() } - .onAppear() { connectViaUrl() } - .padding(.horizontal) - .frame(maxHeight: .infinity, alignment: .top) - } - - private func checkOnboarding() { - if actionSheet == nil && !m.chats.isEmpty { - withAnimation { m.onboardingStage = .onboardingComplete } - } - } - - private func addContactAction() { - if let cReq = apiAddContact() { - connReq = cReq - actionSheet = .createLink - } - } - - private func actionRow(icon: String, title: LocalizedStringKey, text: LocalizedStringKey, action: @escaping () -> Void) -> some View { - Button(action: action, label: { - HStack(alignment: .top, spacing: 20) { - Image(systemName: icon) - .resizable() - .scaledToFit() - .frame(width: 30, height: 30) - .padding(.leading, 4) - .padding(.top, 6) - VStack(alignment: .leading) { - Group { - Text(title).font(.headline) - Text(text).foregroundColor(.primary) - } - .multilineTextAlignment(.leading) - } - } - }) - .padding(.bottom) - } -} - -struct MakeConnection_Previews: PreviewProvider { - static var previews: some View { - let chatModel = ChatModel() - chatModel.currentUser = User.sampleData - return MakeConnection() - .environmentObject(chatModel) - } -} diff --git a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift index 0b0189383..1ee8ecb6c 100644 --- a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift +++ b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift @@ -16,7 +16,6 @@ struct OnboardingView: View { case .step1_SimpleXInfo: SimpleXInfo(onboarding: true) case .step2_CreateProfile: CreateProfile() case .step3_SetNotificationsMode: SetNotificationsMode() - case .step4_MakeConnection: MakeConnection() case .onboardingComplete: EmptyView() } } @@ -26,7 +25,6 @@ enum OnboardingStage { case step1_SimpleXInfo case step2_CreateProfile case step3_SetNotificationsMode - case step4_MakeConnection case onboardingComplete } diff --git a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift index 87803512b..fa872e9c1 100644 --- a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift +++ b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift @@ -32,9 +32,7 @@ struct SetNotificationsMode: View { } else { AlertManager.shared.showAlertMsg(title: "No device token!") } - m.onboardingStage = m.chats.isEmpty - ? .step4_MakeConnection - : .onboardingComplete + m.onboardingStage = .onboardingComplete } label: { if case .off = notificationMode { Text("Use chat") diff --git a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift index 821eab975..afd005458 100644 --- a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift +++ b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift @@ -78,7 +78,7 @@ struct OnboardingActionButton: View { if m.currentUser == nil { actionButton("Create your profile", onboarding: .step2_CreateProfile) } else { - actionButton("Make a private connection", onboarding: .step4_MakeConnection) + actionButton("Make a private connection", onboarding: .onboardingComplete) } } 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 73768a7d8..24164130d 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -463,11 +463,6 @@ Connect via relay No comment provided by engineer. - - Connect with the developers - Connect with the developers - No comment provided by engineer. - Connecting to server… Connecting to server… @@ -553,11 +548,6 @@ Create No comment provided by engineer. - - Create 1-time link / QR code - Create 1-time link / QR code - No comment provided by engineer. - Create address Create address @@ -1251,11 +1241,6 @@ Import database No comment provided by engineer. - - In person or via a video call – the most secure way to connect. - In person or via a video call – the most secure way to connect. - No comment provided by engineer. - Incognito Incognito @@ -1353,11 +1338,6 @@ We will be adding server redundancy to prevent lost messages. It seems like you are already connected via this link. If it is not the case, there was an error (%@). No comment provided by engineer. - - It's secure to share - only one contact can use it. - It's secure to share - only one contact can use it. - No comment provided by engineer. - Join Join @@ -1653,11 +1633,6 @@ We will be adding server redundancy to prevent lost messages. Open-source protocol and code – anybody can run the servers. No comment provided by engineer. - - Or open the link in the browser and tap **Open in mobile**. - Or open the link in the browser and tap **Open in mobile**. - No comment provided by engineer. - PING interval PING interval @@ -1678,11 +1653,6 @@ We will be adding server redundancy to prevent lost messages. Paste received link No comment provided by engineer. - - Paste the link you received - Paste the link you received - No comment provided by engineer. - Paste the link you received into the box below to connect with your contact. Paste the link you received into the box below to connect with your contact. @@ -1943,11 +1913,6 @@ We will be adding server redundancy to prevent lost messages. Scan QR code No comment provided by engineer. - - Scan contact's QR code - Scan contact's QR code - No comment provided by engineer. - Search Search @@ -2148,6 +2113,11 @@ We will be adding server redundancy to prevent lost messages. Tap to join incognito No comment provided by engineer. + + Tap to start a new chat + Tap to start a new chat + No comment provided by engineer. + Thank you for installing SimpleX Chat! Thank you for installing SimpleX Chat! @@ -2233,11 +2203,6 @@ We will be adding server redundancy to prevent lost messages. This group no longer exists. No comment provided by engineer. - - To ask any questions and to receive SimpleX Chat updates. - To ask any questions and to receive SimpleX Chat updates. - No comment provided by engineer. - To ask any questions and to receive updates: To ask any questions and to receive updates: @@ -2253,11 +2218,6 @@ We will be adding server redundancy to prevent lost messages. To make a new connection No comment provided by engineer. - - To make your first private connection, choose **one of the following**: - To make your first private connection, choose **one of the following**: - No comment provided by engineer. - To prevent the call interruption, enable Do Not Disturb mode. To prevent the call interruption, enable Do Not Disturb mode. @@ -2507,6 +2467,11 @@ To connect, please ask your contact to create another connection link and check You could not be verified; please try again. No comment provided by engineer. + + You have no chats + You have no chats + No comment provided by engineer. + You have to enter passphrase every time the app starts - it is not stored on the device. You have to enter passphrase every time the app starts - it is not stored on the device. @@ -2966,9 +2931,9 @@ SimpleX servers cannot see your profile. no e2e encryption No comment provided by engineer. - - or - or + + or chat with the developers + or chat with the developers No comment provided by engineer. 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 a608cf4e4..5335e08dc 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -463,11 +463,6 @@ Соединяться через сервер (relay) No comment provided by engineer. - - Connect with the developers - Соединиться с разработчиками - No comment provided by engineer. - Connecting to server… Устанавливается соединение с сервером… @@ -553,11 +548,6 @@ Создать No comment provided by engineer. - - Create 1-time link / QR code - Создать ссылку / QR код - No comment provided by engineer. - Create address Создать адрес @@ -1251,11 +1241,6 @@ Импорт архива чата No comment provided by engineer. - - In person or via a video call – the most secure way to connect. - При встрече или в видеозвонке – самый безопасный способ установить соединение - No comment provided by engineer. - Incognito Инкогнито @@ -1353,11 +1338,6 @@ We will be adding server redundancy to prevent lost messages. Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@). No comment provided by engineer. - - It's secure to share - only one contact can use it. - Ей безопасно поделиться - только один контакт может использовать её. - No comment provided by engineer. - Join Вступить @@ -1653,11 +1633,6 @@ We will be adding server redundancy to prevent lost messages. Открытый протокол и код - кто угодно может запустить сервер. No comment provided by engineer. - - Or open the link in the browser and tap **Open in mobile**. - Или откройте ссылку в браузере и нажмите **Open in mobile**. - No comment provided by engineer. - PING interval Интервал PING @@ -1678,11 +1653,6 @@ We will be adding server redundancy to prevent lost messages. Вставить полученную ссылку No comment provided by engineer. - - Paste the link you received - Вставьте полученную ссылку - No comment provided by engineer. - Paste the link you received into the box below to connect with your contact. Чтобы соединиться, вставьте ссылку, полученную от вашего контакта. @@ -1943,11 +1913,6 @@ We will be adding server redundancy to prevent lost messages. Сканировать QR код No comment provided by engineer. - - Scan contact's QR code - Сосканировать QR код контакта - No comment provided by engineer. - Search Поиск @@ -2148,6 +2113,11 @@ We will be adding server redundancy to prevent lost messages. Нажмите, чтобы вступить инкогнито No comment provided by engineer. + + Tap to start a new chat + Нажмите, чтобы начать чат + No comment provided by engineer. + Thank you for installing SimpleX Chat! Спасибо, что установили SimpleX Chat! @@ -2233,11 +2203,6 @@ We will be adding server redundancy to prevent lost messages. Эта группа больше не существует. No comment provided by engineer. - - To ask any questions and to receive SimpleX Chat updates. - Чтобы задать вопросы и получать уведомления о SimpleX Chat. - No comment provided by engineer. - To ask any questions and to receive updates: Чтобы задать вопросы и получать уведомления о новых версиях, @@ -2253,11 +2218,6 @@ We will be adding server redundancy to prevent lost messages. Чтобы соединиться No comment provided by engineer. - - To make your first private connection, choose **one of the following**: - Чтобы добавить ваш первый контакт, выберите **одно из**: - No comment provided by engineer. - To prevent the call interruption, enable Do Not Disturb mode. Чтобы избежать прерывания звонков, включите режим Не Беспокоить. @@ -2507,6 +2467,11 @@ To connect, please ask your contact to create another connection link and check Верификация не удалась; пожалуйста, попробуйте ещё раз. No comment provided by engineer. + + You have no chats + У вас нет чатов + No comment provided by engineer. + You have to enter passphrase every time the app starts - it is not stored on the device. Пароль не сохранен на устройстве — вы будете должны ввести его при каждом запуске чата. @@ -2966,9 +2931,9 @@ SimpleX серверы не могут получить доступ к ваше нет e2e шифрования No comment provided by engineer. - - or - или + + or chat with the developers + или соединитесь с разработчиками No comment provided by engineer. diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 6977e4445..fc9957d27 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -76,7 +76,6 @@ 5CB0BA8E2827126500B3292C /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA8D2827126500B3292C /* OnboardingView.swift */; }; 5CB0BA90282713D900B3292C /* SimpleXInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA8F282713D900B3292C /* SimpleXInfo.swift */; }; 5CB0BA92282713FD00B3292C /* CreateProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA91282713FD00B3292C /* CreateProfile.swift */; }; - 5CB0BA962827143500B3292C /* MakeConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA952827143500B3292C /* MakeConnection.swift */; }; 5CB0BA9A2827FD8800B3292C /* HowItWorks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB0BA992827FD8800B3292C /* HowItWorks.swift */; }; 5CB2084F28DA4B4800D024EC /* RTCServers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB2084E28DA4B4800D024EC /* RTCServers.swift */; }; 5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */; }; @@ -270,7 +269,6 @@ 5CB0BA8D2827126500B3292C /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; 5CB0BA8F282713D900B3292C /* SimpleXInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimpleXInfo.swift; sourceTree = ""; }; 5CB0BA91282713FD00B3292C /* CreateProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreateProfile.swift; sourceTree = ""; }; - 5CB0BA952827143500B3292C /* MakeConnection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MakeConnection.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 = ""; }; 5CB346E42868AA7F001FD2EF /* SuspendChat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SuspendChat.swift; sourceTree = ""; }; @@ -530,7 +528,6 @@ 5CB0BA992827FD8800B3292C /* HowItWorks.swift */, 5CB0BA91282713FD00B3292C /* CreateProfile.swift */, 5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */, - 5CB0BA952827143500B3292C /* MakeConnection.swift */, ); path = Onboarding; sourceTree = ""; @@ -908,7 +905,6 @@ 5C05DF532840AA1D00C683F9 /* CallSettings.swift in Sources */, 5CFE0921282EEAF60002594B /* ZoomableScrollView.swift in Sources */, 5C3A88CE27DF50170060F1C2 /* DetermineWidth.swift in Sources */, - 5CB0BA962827143500B3292C /* MakeConnection.swift in Sources */, 5C7505A527B679EE00BE3227 /* NavLinkPlain.swift in Sources */, 5CB346E72868D76D001FD2EF /* NotificationsView.swift in Sources */, 647F090E288EA27B00644C40 /* GroupMemberInfoView.swift in Sources */, diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 60219eb96..423c5db39 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -323,9 +323,6 @@ /* No comment provided by engineer. */ "Connect via relay" = "Соединяться через сервер (relay)"; -/* No comment provided by engineer. */ -"Connect with the developers" = "Соединиться с разработчиками"; - /* No comment provided by engineer. */ "connected" = "соединение установлено"; @@ -413,9 +410,6 @@ /* No comment provided by engineer. */ "Create" = "Создать"; -/* No comment provided by engineer. */ -"Create 1-time link / QR code" = "Создать ссылку / QR код"; - /* No comment provided by engineer. */ "Create address" = "Создать адрес"; @@ -860,9 +854,6 @@ /* No comment provided by engineer. */ "Import database" = "Импорт архива чата"; -/* No comment provided by engineer. */ -"In person or via a video call – the most secure way to connect." = "При встрече или в видеозвонке – самый безопасный способ установить соединение"; - /* No comment provided by engineer. */ "Incognito" = "Инкогнито"; @@ -941,9 +932,6 @@ /* No comment provided by engineer. */ "It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Возможно, вы уже соединились через эту ссылку. Если это не так, то это ошибка (%@)."; -/* No comment provided by engineer. */ -"It's secure to share - only one contact can use it." = "Ей безопасно поделиться - только один контакт может использовать её."; - /* No comment provided by engineer. */ "italic" = "курсив"; @@ -1149,10 +1137,7 @@ "Open-source protocol and code – anybody can run the servers." = "Открытый протокол и код - кто угодно может запустить сервер."; /* No comment provided by engineer. */ -"or" = "или"; - -/* No comment provided by engineer. */ -"Or open the link in the browser and tap **Open in mobile**." = "Или откройте ссылку в браузере и нажмите **Open in mobile**."; +"or chat with the developers" = "или соединитесь с разработчиками"; /* No comment provided by engineer. */ "owner" = "владелец"; @@ -1166,9 +1151,6 @@ /* No comment provided by engineer. */ "Paste received link" = "Вставить полученную ссылку"; -/* No comment provided by engineer. */ -"Paste the link you received" = "Вставьте полученную ссылку"; - /* No comment provided by engineer. */ "Paste the link you received into the box below to connect with your contact." = "Чтобы соединиться, вставьте ссылку, полученную от вашего контакта."; @@ -1340,9 +1322,6 @@ /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Сохраненные WebRTC ICE серверы будут удалены"; -/* No comment provided by engineer. */ -"Scan contact's QR code" = "Сосканировать QR код контакта"; - /* No comment provided by engineer. */ "Scan QR code" = "Сканировать QR код"; @@ -1472,6 +1451,9 @@ /* No comment provided by engineer. */ "Tap to join incognito" = "Нажмите, чтобы вступить инкогнито"; +/* No comment provided by engineer. */ +"Tap to start a new chat" = "Нажмите, чтобы начать чат"; + /* No comment provided by engineer. */ "TCP connection timeout" = "Таймаут TCP соединения"; @@ -1538,9 +1520,6 @@ /* No comment provided by engineer. */ "This group no longer exists." = "Эта группа больше не существует."; -/* No comment provided by engineer. */ -"To ask any questions and to receive SimpleX Chat updates." = "Чтобы задать вопросы и получать уведомления о SimpleX Chat."; - /* No comment provided by engineer. */ "To ask any questions and to receive updates:" = "Чтобы задать вопросы и получать уведомления о новых версиях,"; @@ -1550,9 +1529,6 @@ /* No comment provided by engineer. */ "To make a new connection" = "Чтобы соединиться"; -/* No comment provided by engineer. */ -"To make your first private connection, choose **one of the following**:" = "Чтобы добавить ваш первый контакт, выберите **одно из**:"; - /* No comment provided by engineer. */ "To prevent the call interruption, enable Do Not Disturb mode." = "Чтобы избежать прерывания звонков, включите режим Не Беспокоить."; @@ -1733,6 +1709,9 @@ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Верификация не удалась; пожалуйста, попробуйте ещё раз."; +/* No comment provided by engineer. */ +"You have no chats" = "У вас нет чатов"; + /* No comment provided by engineer. */ "You have to enter passphrase every time the app starts - it is not stored on the device." = "Пароль не сохранен на устройстве — вы будете должны ввести его при каждом запуске чата.";