Pārlūkot izejas kodu

add context option to reply to a message

cyberta 4 gadi atpakaļ
vecāks
revīzija
df32d422ab

+ 3 - 0
deltachat-ios/Assets.xcassets/ic_reply.imageset/Contents.json

@@ -19,5 +19,8 @@
   "info" : {
     "author" : "xcode",
     "version" : 1
+  },
+  "properties" : {
+    "template-rendering-intent" : "template"
   }
 }

+ 28 - 10
deltachat-ios/Chat/ChatViewController.swift

@@ -134,12 +134,9 @@ class ChatViewController: UITableViewController {
             isDestructive: true,
             action: #selector(BaseMessageCell.messageDelete),
             onPerform: { [weak self] indexPath in
-                guard let self = self else { return }
-                self.tableView.becomeFirstResponder()
-                // DispatchQueue.main.async ensures the table view has already become
-                // first responder before askToDeleteMessage shows a new UIAlertController
                 DispatchQueue.main.async { [weak self] in
                     guard let self = self else { return }
+                    self.tableView.becomeFirstResponder()
                     let msg = DcMsg(id: self.messageIds[indexPath.row])
                     self.askToDeleteMessage(id: msg.id)
                 }
@@ -159,8 +156,25 @@ class ChatViewController: UITableViewController {
             }
         )
 
+        let replyItem = ContextMenuProvider.ContextMenuItem(
+            title: String.localized("notify_reply_button"),
+            imageNames: ("ic_reply", nil),
+            isDestructive: false,
+            action: #selector(BaseMessageCell.messageReply),
+            onPerform: { indexPath in
+                DispatchQueue.main.async { [weak self] in
+                    self?.replyToMessage(at: indexPath)
+                }
+            }
+        )
+
         let config = ContextMenuProvider()
-        config.setMenu([copyItem, infoItem, forwardItem, deleteItem])
+        if #available(iOS 13.0, *), !disableWriting {
+            config.setMenu([copyItem, replyItem, forwardItem, infoItem, deleteItem])
+        } else {
+            config.setMenu([copyItem, forwardItem, infoItem, deleteItem])
+        }
+
         return config
     }()
 
@@ -479,11 +493,8 @@ class ChatViewController: UITableViewController {
         }
 
         let action = UIContextualAction(style: .normal, title: nil,
-                                        handler: { (_, _, completionHandler) in
-                                            let message = DcMsg(id: self.messageIds[indexPath.row])
-                                            self.draft.setQuote(quotedMsg: message)
-                                            self.configureDraftArea(draft: self.draft)
-                                            self.messageInputBar.inputTextView.becomeFirstResponder()
+                                        handler: { [weak self] (_, _, completionHandler) in
+                                            self?.replyToMessage(at: indexPath)
                                             completionHandler(true)
                                         })
         if #available(iOS 12.0, *) {
@@ -499,6 +510,13 @@ class ChatViewController: UITableViewController {
         return configuration
     }
 
+    func replyToMessage(at indexPath: IndexPath) {
+        let message = DcMsg(id: self.messageIds[indexPath.row])
+        self.draft.setQuote(quotedMsg: message)
+        self.configureDraftArea(draft: self.draft)
+        self.messageInputBar.inputTextView.becomeFirstResponder()
+    }
+
     func markSeenMessagesInVisibleArea() {
         if let indexPaths = tableView.indexPathsForVisibleRows {
             let visibleMessagesIds = indexPaths.map { UInt32(messageIds[$0.row]) }

+ 4 - 0
deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

@@ -409,6 +409,10 @@ public class BaseMessageCell: UITableViewCell {
         self.performAction(#selector(BaseMessageCell.messageForward(_:)), with: sender)
     }
 
+    @objc func messageReply(_ sender: Any?) {
+        self.performAction(#selector(BaseMessageCell.messageReply(_:)), with: sender)
+    }
+
     func performAction(_ action: Selector, with sender: Any?) {
         if let tableView = self.superview as? UITableView, let indexPath = tableView.indexPath(for: self) {
             // Trigger action in tableView delegate (UITableViewController)