From 1093892edee889a6783c8aaead7725f61302b1da Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 29 Mar 2023 08:41:13 +0100 Subject: [PATCH] ios: update developer options (#2091) * ios: update developer options * move XFTP option, make chat console usable * update footer * typo Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- apps/ios/Shared/Model/ChatModel.swift | 2 +- apps/ios/Shared/Views/TerminalView.swift | 37 ++++++++++------ .../Views/UserSettings/CallSettings.swift | 1 - .../Views/UserSettings/DeveloperView.swift | 44 ++++++++++++++----- .../Views/UserSettings/PrivacySettings.swift | 1 - .../Views/UserSettings/SettingsView.swift | 12 ++--- 6 files changed, 64 insertions(+), 33 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index e8f917af3f..6f33e42640 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -381,7 +381,7 @@ final class ChatModel: ObservableObject { markChatItemsRead(cInfo) } } - + func markChatUnread(_ cInfo: ChatInfo, unreadChat: Bool = true) { _updateChat(cInfo.id) { chat in chat.chatStats.unreadChat = unreadChat diff --git a/apps/ios/Shared/Views/TerminalView.swift b/apps/ios/Shared/Views/TerminalView.swift index 4174e5b439..763627fc47 100644 --- a/apps/ios/Shared/Views/TerminalView.swift +++ b/apps/ios/Shared/Views/TerminalView.swift @@ -20,6 +20,7 @@ struct TerminalView: View { @State var composeState: ComposeState = ComposeState() @FocusState private var keyboardVisible: Bool @State var authorized = !UserDefaults.standard.bool(forKey: DEFAULT_PERFORM_LA) + @State private var terminalItem: TerminalItem? var body: some View { if authorized { @@ -38,19 +39,8 @@ struct TerminalView: View { ScrollView { LazyVStack { ForEach(chatModel.terminalItems) { item in - NavigationLink { - let s = item.details - ScrollView { - Text(s.prefix(maxItemSize)) - .padding() - } - .toolbar { - ToolbarItem(placement: .navigationBarTrailing) { - Button { showShareSheet(items: [s]) } label: { - Image(systemName: "square.and.arrow.up") - } - } - } + Button { + terminalItem = item } label: { HStack { Text(item.id.formatted(date: .omitted, time: .standard)) @@ -70,6 +60,11 @@ struct TerminalView: View { } } } + .background(NavigationLink( + isActive: Binding(get: { terminalItem != nil }, set: { _ in }), + destination: terminalItemView, + label: { EmptyView() } + )) } } @@ -96,6 +91,22 @@ struct TerminalView: View { } } } + + func terminalItemView() -> some View { + let s = terminalItem?.details ?? "" + return ScrollView { + Text(s.prefix(maxItemSize)) + .padding() + } + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button { showShareSheet(items: [s]) } label: { + Image(systemName: "square.and.arrow.up") + } + } + } + .onDisappear { terminalItem = nil } + } func sendMessage() { let cmd = ChatCommand.string(composeState.message) diff --git a/apps/ios/Shared/Views/UserSettings/CallSettings.swift b/apps/ios/Shared/Views/UserSettings/CallSettings.swift index 43c715523e..3409e7ab0e 100644 --- a/apps/ios/Shared/Views/UserSettings/CallSettings.swift +++ b/apps/ios/Shared/Views/UserSettings/CallSettings.swift @@ -13,7 +13,6 @@ struct CallSettings: View { @AppStorage(DEFAULT_WEBRTC_POLICY_RELAY) private var webrtcPolicyRelay = true @AppStorage(GROUP_DEFAULT_CALL_KIT_ENABLED, store: groupDefaults) private var callKitEnabled = true @AppStorage(DEFAULT_CALL_KIT_CALLS_IN_RECENTS) private var callKitCallsInRecents = false - @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false private let allowChangingCallsHistory = false var body: some View { diff --git a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift index 0d7435d909..9f3a6684dd 100644 --- a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift +++ b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift @@ -12,23 +12,13 @@ import SimpleXChat struct DeveloperView: View { @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false + @AppStorage(GROUP_DEFAULT_XFTP_SEND_ENABLED, store: groupDefaults) private var xftpSendEnabled = false @Environment(\.colorScheme) var colorScheme var body: some View { VStack { List { Section { - NavigationLink { - TerminalView() - } label: { - settingsRow("terminal") { Text("Chat console") } - } - settingsRow("chevron.left.forwardslash.chevron.right") { - Toggle("Show developer options", isOn: $developerTools) - } - settingsRow("internaldrive") { - Toggle("Confirm database upgrades", isOn: $confirmDatabaseUpgrades) - } ZStack(alignment: .leading) { Image(colorScheme == .dark ? "github_light" : "github") .resizable() @@ -37,6 +27,38 @@ struct DeveloperView: View { Text("Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)") .padding(.leading, 36) } + NavigationLink { + TerminalView() + } label: { + settingsRow("terminal") { Text("Chat console") } + } + settingsRow("internaldrive") { + Toggle("Confirm database upgrades", isOn: $confirmDatabaseUpgrades) + } + settingsRow("chevron.left.forwardslash.chevron.right") { + Toggle("Show developer options", isOn: $developerTools) + } + } footer: { + (developerTools ? Text("Show: ") : Text("Hide: ")) + Text("Database IDs and Transport isolation option.") + } + + Section { + settingsRow("arrow.up.doc") { + Toggle("Send files via XFTP", isOn: $xftpSendEnabled) + .onChange(of: xftpSendEnabled) { _ in + do { + try setXFTPConfig(getXFTPCfg()) + } catch { + logger.error("setXFTPConfig: cannot set XFTP config \(responseError(error))") + } + } + } + } header: { + Text("Experimental") + } footer: { + if xftpSendEnabled { + Text("v4.6.1+ is required to receive via XFTP.") + } } } } diff --git a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift index 5b9cd49526..4c0084b68b 100644 --- a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift +++ b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift @@ -12,7 +12,6 @@ import SimpleXChat struct PrivacySettings: View { @AppStorage(DEFAULT_PRIVACY_ACCEPT_IMAGES) private var autoAcceptImages = true @AppStorage(DEFAULT_PRIVACY_LINK_PREVIEWS) private var useLinkPreviews = true - @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @State private var simplexLinkMode = privacySimplexLinkModeDefault.get() @AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index 715533481a..e885fc1f2d 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -264,12 +264,12 @@ struct SettingsView: View { } label: { settingsRow("chevron.left.forwardslash.chevron.right") { Text("Developer tools") } } - NavigationLink { - ExperimentalFeaturesView() - .navigationTitle("Experimental features") - } label: { - settingsRow("gauge") { Text("Experimental features") } - } +// NavigationLink { +// ExperimentalFeaturesView() +// .navigationTitle("Experimental features") +// } label: { +// settingsRow("gauge") { Text("Experimental features") } +// } NavigationLink { VersionView() .navigationBarTitle("App version")