diff --git a/apps/ios/Shared/AppDelegate.swift b/apps/ios/Shared/AppDelegate.swift index d52c950d81..eba301b51c 100644 --- a/apps/ios/Shared/AppDelegate.swift +++ b/apps/ios/Shared/AppDelegate.swift @@ -15,29 +15,28 @@ class AppDelegate: NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { logger.debug("AppDelegate: didFinishLaunchingWithOptions") application.registerForRemoteNotifications() - if #available(iOS 17.0, *) { trackKeyboard() } + trackKeyboard() NotificationCenter.default.addObserver(self, selector: #selector(pasteboardChanged), name: UIPasteboard.changedNotification, object: nil) removePasscodesIfReinstalled() prepareForLaunch() return true } - @available(iOS 17.0, *) private func trackKeyboard() { NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: UIResponder.keyboardWillShowNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: UIResponder.keyboardWillHideNotification, object: nil) } - @available(iOS 17.0, *) @objc func keyboardWillShow(_ notification: Notification) { if let keyboardFrame: NSValue = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue { ChatModel.shared.keyboardHeight = keyboardFrame.cgRectValue.height + ChatModel.shared.keyboardShown = true } } - @available(iOS 17.0, *) @objc func keyboardWillHide(_ notification: Notification) { ChatModel.shared.keyboardHeight = 0 + ChatModel.shared.keyboardShown = false } @objc func pasteboardChanged() { diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 7dae94dfcd..10eeac01bb 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -108,6 +108,7 @@ final class ChatModel: ObservableObject { @Published var draftChatId: String? // tracks keyboard height via subscription in AppDelegate @Published var keyboardHeight: CGFloat = 0 + @Published var keyboardShown = false @Published var pasteboardHasStrings: Bool = UIPasteboard.general.hasStrings @Published var networkInfo = UserNetworkInfo(networkType: .other, online: true) diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 2e95f13e22..2dee60ee04 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -35,7 +35,6 @@ struct ChatView: View { @State private var revealedChatItem: ChatItem? @State private var searchMode = false @State private var searchText: String = "" - @FocusState private var searchFocussed // opening GroupMemberInfoView on member icon @State private var selectedMember: GMember? = nil // opening GroupLinkView on link button (incognito) @@ -57,10 +56,6 @@ struct ChatView: View { private var viewBody: some View { let cInfo = chat.chatInfo return VStack(spacing: 0) { -// if searchMode { -// searchToolbar() -// Divider() -// } ZStack(alignment: .bottomTrailing) { let wallpaperImage = theme.wallpaper.type.image let wallpaperType = theme.wallpaper.type @@ -82,8 +77,11 @@ struct ChatView: View { ) .disabled(!cInfo.sendMsgEnabled) } - .if(searchMode) { - $0.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always)) + .if(searchMode) { v in + v.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always)) + } + .onChange(of: chatModel.keyboardShown) { shown in + if !shown { searchMode = false } } .navigationTitle(cInfo.chatViewName) .background(theme.colors.background) @@ -282,39 +280,6 @@ struct ChatView: View { } } - private func searchToolbar() -> some View { - HStack(spacing: 12) { - HStack(spacing: 4) { - Image(systemName: "magnifyingglass") - TextField("Search", text: $searchText) - .focused($searchFocussed) - .foregroundColor(theme.colors.onBackground) - .frame(maxWidth: .infinity) - - Button { - searchText = "" - } label: { - Image(systemName: "xmark.circle.fill").opacity(searchText == "" ? 0 : 1) - } - } - .padding(EdgeInsets(top: 7, leading: 7, bottom: 7, trailing: 7)) - .foregroundColor(theme.colors.secondary) - .background(Color(.tertiarySystemFill)) - .cornerRadius(10.0) - - Button ("Cancel") { - searchText = "" - searchMode = false - searchFocussed = false - DispatchQueue.main.asyncAfter(deadline: .now() + 0.35) { - loadChat(chat: chat) - } - } - } - .padding(.horizontal) - .padding(.vertical, 8) - } - private func voiceWithoutFrame(_ ci: ChatItem) -> Bool { ci.content.msgContent?.isVoice == true && ci.content.text.count == 0 && ci.quotedItem == nil && ci.meta.itemForwarded == nil } @@ -512,7 +477,6 @@ struct ChatView: View { private func searchButton() -> some View { Button { searchMode = true - searchFocussed = true searchText = "" } label: { Label("Search", systemImage: "magnifyingglass")