Przeglądaj źródła

use atomic boolean for keepKeyboard for now

cyberta 2 lat temu
rodzic
commit
bdca91e702
1 zmienionych plików z 12 dodań i 12 usunięć
  1. 12 12
      deltachat-ios/Chat/ChatViewController.swift

+ 12 - 12
deltachat-ios/Chat/ChatViewController.swift

@@ -16,7 +16,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
     var ephemeralTimerModifiedObserver: NSObjectProtocol?
     var ephemeralTimerModifiedObserver: NSObjectProtocol?
     private var isInitial = true
     private var isInitial = true
     private var isVisibleToUser: Bool = false
     private var isVisibleToUser: Bool = false
-    private var keepKeyboard: Bool = false
+    private var keepKeyboard: AtomicBoolean = AtomicBoolean(initialValue: false)
     private var wasInputBarFirstResponder = false
     private var wasInputBarFirstResponder = false
 
 
     lazy var isGroupChat: Bool = {
     lazy var isGroupChat: Bool = {
@@ -256,7 +256,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
             imageName: "arrowshape.turn.up.left.fill",
             imageName: "arrowshape.turn.up.left.fill",
             action: #selector(BaseMessageCell.messageReply),
             action: #selector(BaseMessageCell.messageReply),
             onPerform: { [weak self] indexPath in
             onPerform: { [weak self] indexPath in
-                self?.keepKeyboard = true
+                self?.keepKeyboard.set(value: true)
                 DispatchQueue.main.async { [weak self] in
                 DispatchQueue.main.async { [weak self] in
                     self?.replyToMessage(at: indexPath)
                     self?.replyToMessage(at: indexPath)
                 }
                 }
@@ -881,7 +881,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
 
 
         let action = UIContextualAction(style: .normal, title: nil,
         let action = UIContextualAction(style: .normal, title: nil,
                                         handler: { [weak self] (_, _, completionHandler) in
                                         handler: { [weak self] (_, _, completionHandler) in
-                                            self?.keepKeyboard = true
+                                            self?.keepKeyboard.set(value: true)
                                             self?.replyToMessage(at: indexPath)
                                             self?.replyToMessage(at: indexPath)
                                             completionHandler(true)
                                             completionHandler(true)
                                         })
                                         })
@@ -1711,7 +1711,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
     }
     }
 
 
     private func stageDocument(url: NSURL) {
     private func stageDocument(url: NSURL) {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         DispatchQueue.main.async { [weak self] in
         DispatchQueue.main.async { [weak self] in
             guard let self = self else { return }
             guard let self = self else { return }
             self.draft.setAttachment(viewType: url.pathExtension == "xdc" ? DC_MSG_WEBXDC : DC_MSG_FILE, path: url.relativePath)
             self.draft.setAttachment(viewType: url.pathExtension == "xdc" ? DC_MSG_WEBXDC : DC_MSG_FILE, path: url.relativePath)
@@ -1722,7 +1722,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
     }
     }
 
 
     private func stageVideo(url: NSURL) {
     private func stageVideo(url: NSURL) {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         DispatchQueue.main.async { [weak self] in
         DispatchQueue.main.async { [weak self] in
             guard let self = self else { return }
             guard let self = self else { return }
             self.draft.setAttachment(viewType: DC_MSG_VIDEO, path: url.relativePath)
             self.draft.setAttachment(viewType: DC_MSG_VIDEO, path: url.relativePath)
@@ -1733,7 +1733,7 @@ class ChatViewController: UITableViewController, UITableViewDropDelegate {
     }
     }
 
 
     private func stageImage(url: NSURL) {
     private func stageImage(url: NSURL) {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         DispatchQueue.global().async { [weak self] in
         DispatchQueue.global().async { [weak self] in
             if let image = ImageFormat.loadImageFrom(url: url as URL) {
             if let image = ImageFormat.loadImageFrom(url: url as URL) {
                 self?.stageImage(image)
                 self?.stageImage(image)
@@ -2196,7 +2196,7 @@ extension ChatViewController: MediaPickerDelegate {
 // MARK: - MessageInputBarDelegate
 // MARK: - MessageInputBarDelegate
 extension ChatViewController: InputBarAccessoryViewDelegate {
 extension ChatViewController: InputBarAccessoryViewDelegate {
     func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
     func inputBar(_ inputBar: InputBarAccessoryView, didPressSendButtonWith text: String) {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         let trimmedText = text.replacingOccurrences(of: "\u{FFFC}", with: "", options: .literal, range: nil)
         let trimmedText = text.replacingOccurrences(of: "\u{FFFC}", with: "", options: .literal, range: nil)
             .trimmingCharacters(in: .whitespacesAndNewlines)
             .trimmingCharacters(in: .whitespacesAndNewlines)
         if let filePath = draft.attachment, let viewType = draft.viewType {
         if let filePath = draft.attachment, let viewType = draft.viewType {
@@ -2227,14 +2227,14 @@ extension ChatViewController: InputBarAccessoryViewDelegate {
 // MARK: - DraftPreviewDelegate
 // MARK: - DraftPreviewDelegate
 extension ChatViewController: DraftPreviewDelegate {
 extension ChatViewController: DraftPreviewDelegate {
     func onCancelQuote() {
     func onCancelQuote() {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         draft.setQuote(quotedMsg: nil)
         draft.setQuote(quotedMsg: nil)
         configureDraftArea(draft: draft)
         configureDraftArea(draft: draft)
         focusInputTextView()
         focusInputTextView()
     }
     }
 
 
     func onCancelAttachment() {
     func onCancelAttachment() {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         draft.clearAttachment()
         draft.clearAttachment()
         configureDraftArea(draft: draft)
         configureDraftArea(draft: draft)
         evaluateInputBar(draft: draft)
         evaluateInputBar(draft: draft)
@@ -2433,11 +2433,11 @@ extension ChatViewController: AudioControllerDelegate {
 // MARK: - UITextViewDelegate
 // MARK: - UITextViewDelegate
 extension ChatViewController: UITextViewDelegate {
 extension ChatViewController: UITextViewDelegate {
     func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
     func textViewShouldEndEditing(_ textView: UITextView) -> Bool {
-        if keepKeyboard {
+        if keepKeyboard.get() {
             DispatchQueue.main.async { [weak self] in
             DispatchQueue.main.async { [weak self] in
                 self?.messageInputBar.inputTextView.becomeFirstResponder()
                 self?.messageInputBar.inputTextView.becomeFirstResponder()
             }
             }
-            keepKeyboard = false
+            self.keepKeyboard.set(value: false)
             return false
             return false
         }
         }
         return true
         return true
@@ -2462,7 +2462,7 @@ extension ChatViewController: WebxdcSelectorDelegate {
     }
     }
 
 
     func onWebxdcSelected(msgId: Int) {
     func onWebxdcSelected(msgId: Int) {
-        keepKeyboard = true
+        keepKeyboard.set(value: true)
         DispatchQueue.main.async { [weak self] in
         DispatchQueue.main.async { [weak self] in
             guard let self = self else { return }
             guard let self = self else { return }
             let message = self.dcContext.getMessage(id: msgId)
             let message = self.dcContext.getMessage(id: msgId)