From a393bc8163f82612c4e8e4617ebd4182b63d16cc Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 23 Jan 2023 18:17:33 +0000 Subject: [PATCH] ios: Testing workaround of a crash (#1789) * ios: Testing workaround of a crash * another try * complete * added file * enable swipe to go back from ChatView * Revert "enable swipe to go back from ChatView" This reverts commit 22de79505c19fd89c593610d04067ff0c8e1e622. * refactor Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- apps/ios/Shared/Views/Chat/ChatView.swift | 4 ++ .../Shared/Views/ChatList/ChatListView.swift | 18 +++----- .../Shared/Views/Helpers/NavStackCompat.swift | 43 +++++++++++++++++++ apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 ++ 4 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 apps/ios/Shared/Views/Helpers/NavStackCompat.swift diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index fd94e96a3..68ab7c191 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -15,6 +15,7 @@ private let memberImageSize: CGFloat = 34 struct ChatView: View { @EnvironmentObject var chatModel: ChatModel @Environment(\.colorScheme) var colorScheme + @Environment(\.dismiss) var dismiss @State @ObservedObject var chat: Chat @State private var showChatInfoSheet: Bool = false @State private var showAddMembersSheet: Bool = false @@ -70,6 +71,9 @@ struct ChatView: View { } } } + .onChange(of: chatModel.chatId) { _ in + if chatModel.chatId == nil { dismiss() } + } .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button { diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index f35bb32aa..4b66f53d9 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -17,7 +17,13 @@ struct ChatListView: View { @State private var showAddChat = false var body: some View { - NavigationView { + NavStackCompat( + isActive: Binding( + get: { ChatModel.shared.chatId != nil }, + set: { _ in } + ), + destination: chatView + ) { VStack { if chatModel.chats.isEmpty { onboardingButtons() @@ -29,7 +35,6 @@ struct ChatListView: View { } } } - .navigationViewStyle(.stack) } var chatList: some View { @@ -75,15 +80,6 @@ struct ChatListView: View { } } } - .background( - NavigationLink( - destination: chatView(), - isActive: Binding( - get: { chatModel.chatId != nil }, - set: { _ in } - ) - ) { EmptyView() } - ) } private func onboardingButtons() -> some View { diff --git a/apps/ios/Shared/Views/Helpers/NavStackCompat.swift b/apps/ios/Shared/Views/Helpers/NavStackCompat.swift new file mode 100644 index 000000000..6e3b89c9b --- /dev/null +++ b/apps/ios/Shared/Views/Helpers/NavStackCompat.swift @@ -0,0 +1,43 @@ +// +// NavStackCompat.swift +// SimpleX (iOS) +// +// Created by Evgeny on 23/01/2023. +// Copyright © 2023 SimpleX Chat. All rights reserved. +// + +import SwiftUI + +struct NavStackCompat : View { + let isActive: Binding + let destination: () -> D + let content: () -> C + + var body: some View { + if #available(iOS 16, *) { + NavigationStack(path: Binding( + get: { isActive.wrappedValue ? [true] : [] }, + set: { _ in } + )) { + ZStack { + NavigationLink(value: true) { EmptyView() } + content() + } + .navigationDestination(for: Bool.self) { show in + if show { destination() } + } + } + } else { + NavigationView { + ZStack { + NavigationLink( + destination: destination(), + isActive: isActive + ) { EmptyView() } + content() + } + } + .navigationViewStyle(.stack) + } + } +} diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index ef7898ce0..158c3e8ce 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -110,6 +110,7 @@ 5CC2C0FC2809BF11000C35E3 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FA2809BF11000C35E3 /* Localizable.strings */; }; 5CC2C0FF2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5CC2C0FD2809BF11000C35E3 /* SimpleX--iOS--InfoPlist.strings */; }; 5CCA7DF32905735700C8FEBA /* AcceptRequestsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCA7DF22905735700C8FEBA /* AcceptRequestsView.swift */; }; + 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */; }; 5CCD403427A5F6DF00368C90 /* AddContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403327A5F6DF00368C90 /* AddContactView.swift */; }; 5CCD403727A5F9A200368C90 /* ScanToConnectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */; }; 5CDCAD482818589900503DA2 /* NotificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CDCAD472818589900503DA2 /* NotificationService.swift */; }; @@ -341,6 +342,7 @@ 5CC2C0FB2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = ""; }; 5CC2C0FE2809BF11000C35E3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = "ru.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CCA7DF22905735700C8FEBA /* AcceptRequestsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AcceptRequestsView.swift; sourceTree = ""; }; + 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavStackCompat.swift; sourceTree = ""; }; 5CCD403327A5F6DF00368C90 /* AddContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactView.swift; sourceTree = ""; }; 5CCD403627A5F9A200368C90 /* ScanToConnectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScanToConnectView.swift; sourceTree = ""; }; 5CDCAD452818589900503DA2 /* SimpleX NSE.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SimpleX NSE.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -538,6 +540,7 @@ 5C6BA666289BD954009B8ECC /* DismissSheets.swift */, 5C00164328A26FBC0094D739 /* ContextMenu.swift */, 5CA7DFC229302AF000F7FDDE /* AppSheet.swift */, + 5CCB939B297EFCB100399E78 /* NavStackCompat.swift */, ); path = Helpers; sourceTree = ""; @@ -1051,6 +1054,7 @@ 5CB346E52868AA7F001FD2EF /* SuspendChat.swift in Sources */, 5C9C2DA52894777E00CC63B1 /* GroupProfileView.swift in Sources */, 5CEACCED27DEA495000BD591 /* MsgContentView.swift in Sources */, + 5CCB939C297EFCB100399E78 /* NavStackCompat.swift in Sources */, 5C764E89279CBCB3000C6508 /* ChatModel.swift in Sources */, 5C971E1D27AEBEF600C8A3CE /* ChatInfoView.swift in Sources */, 5CBD285C29575B8E00EC2CF4 /* WhatsNewView.swift in Sources */,