Parcourir la source

enable multiselect editing mode from chat context menu

cyberta il y a 4 ans
Parent
commit
2b91c94da0

+ 21 - 2
deltachat-ios/Chat/ChatViewController.swift

@@ -164,11 +164,25 @@ class ChatViewController: UITableViewController {
             }
         )
 
+        let selectMoreItem = ContextMenuProvider.ContextMenuItem(
+            title: String.localized("select_more"),
+            imageName: "ic_check",
+            action: #selector(BaseMessageCell.messageSelectMore),
+            onPerform: { indexPath in
+                DispatchQueue.main.async { [weak self] in
+                    guard let self = self else { return }
+                    let messageId = self.messageIds[indexPath.row]
+                    self.tableView.setEditing(true, animated: true)
+                    self.tableView.selectRow(at: indexPath, animated: false, scrollPosition: .none)
+                }
+            }
+        )
+
         let config = ContextMenuProvider()
         if #available(iOS 13.0, *), !disableWriting {
-            config.setMenu([replyItem, forwardItem, infoItem, copyItem, deleteItem])
+            config.setMenu([replyItem, forwardItem, infoItem, copyItem, selectMoreItem, deleteItem])
         } else {
-            config.setMenu([forwardItem, infoItem, copyItem, deleteItem])
+            config.setMenu([forwardItem, infoItem, copyItem, deleteItem, selectMoreItem])
         }
 
         return config
@@ -226,6 +240,8 @@ class ChatViewController: UITableViewController {
         tableView.rowHeight = UITableView.automaticDimension
         tableView.separatorStyle = .none
         tableView.keyboardDismissMode = .interactive
+        tableView.allowsSelection = false
+        tableView.allowsMultipleSelectionDuringEditing = true
         if !dcContext.isConfigured() {
             // TODO: display message about nothing being configured
             return
@@ -525,6 +541,9 @@ class ChatViewController: UITableViewController {
     }
 
     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
+        if tableView.isEditing {
+            return
+        }
         let messageId = messageIds[indexPath.row]
         let message = DcMsg(id: messageId)
         if message.isSetupMessage {

+ 5 - 1
deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

@@ -185,7 +185,7 @@ public class BaseMessageCell: UITableViewCell {
 
         topCompactView = false
         bottomCompactView = false
-        selectionStyle = .none
+        
 
         let gestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(onAvatarTapped))
         gestureRecognizer.numberOfTapsRequired = 1
@@ -417,6 +417,10 @@ public class BaseMessageCell: UITableViewCell {
         self.performAction(#selector(BaseMessageCell.messageCopy(_:)), with: sender)
     }
 
+    @objc func messageSelectMore(_ sender: Any?) {
+        self.performAction(#selector(BaseMessageCell.messageSelectMore(_:)), 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)

+ 2 - 0
deltachat-ios/en.lproj/Localizable.strings

@@ -733,3 +733,5 @@
 "a11y_voice_message_hint_ios" = "After recording double-tap to send. To discard the recording scrub left-right with two fingers.";
 "login_error_no_internet_connection" = "No internet connection, can\'t log in to your server.";
 "share_account_not_configured" = "Account is not configured.";
+
+"select_more" = "Select more";