瀏覽代碼

implemented context menu for documentGallery, ContextMenuController now takes generic type

nayooti 4 年之前
父節點
當前提交
da92ef822a

+ 15 - 6
deltachat-ios/Controller/ContextMenuController.swift

@@ -4,12 +4,21 @@ import SDWebImage
 import DcCore
 
 
+protocol ContextMenuItem {
+    var msg: DcMsg { get set }
+    var thumbnailImage: UIImage? { get set  }
+}
+
 // MARK: - ContextMenuController
 class ContextMenuController: UIViewController {
 
-    let item: GalleryItem
-    
-    init(item: GalleryItem) {
+    let item: ContextMenuItem
+
+    var msg: DcMsg {
+        return item.msg
+    }
+
+    init(item: ContextMenuItem) {
         self.item = item
         super.init(nibName: nil, bundle: nil)
     }
@@ -22,13 +31,13 @@ class ContextMenuController: UIViewController {
     override func viewDidLoad() {
         super.viewDidLoad()
 
-        let viewType = item.msg.viewtype
+        let viewType = msg.viewtype
         var thumbnailView: UIView?
         switch viewType {
         case .image:
-            thumbnailView = makeImageView(image: item.msg.image)
+            thumbnailView = makeImageView(image: msg.image)
         case .video:
-            thumbnailView = makeVideoView(videoUrl: item.msg.fileURL)
+            thumbnailView = makeVideoView(videoUrl: msg.fileURL)
         case .gif:
             thumbnailView = makeGifView(gifImage: item.thumbnailImage)
         default:

+ 22 - 0
deltachat-ios/Controller/DocumentGalleryController.swift

@@ -125,6 +125,28 @@ extension DocumentGalleryController: UITableViewDelegate, UITableViewDataSource
         showPreview(msgId: msgId)
         tableView.deselectRow(at: indexPath, animated: false)
     }
+
+    // MARK: - context menu
+    // context menu for iOS 11, 12
+    func tableView(_ tableView: UITableView, canPerformAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) -> Bool {
+        return contextMenuConfiguration.canPerformAction(action: action)
+    }
+
+    func tableView(_ tableView: UITableView, performAction action: Selector, forRowAt indexPath: IndexPath, withSender sender: Any?) {
+        contextMenuConfiguration.performAction(action: action, indexPath: indexPath)
+    }
+
+    // context menu for iOS 13+
+    @available(iOS 13, *)
+    func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
+        return UIContextMenuConfiguration(
+            identifier: nil,
+            previewProvider: nil,
+            actionProvider: { [weak self] _ in
+                self?.contextMenuConfiguration.actionProvider(indexPath: indexPath)
+            }
+        )
+    }
 }
 
 // MARK: - coordinator

+ 1 - 1
deltachat-ios/Controller/GalleryViewController.swift

@@ -257,7 +257,7 @@ extension GalleryViewController: UICollectionViewDataSource, UICollectionViewDel
 
     @available(iOS 13, *)
     func collectionView(_ collectionView: UICollectionView, willEndContextMenuInteraction configuration: UIContextMenuConfiguration, animator: UIContextMenuInteractionAnimating?) {
-        if let msgId = (animator?.previewViewController as? ContextMenuController)?.item.msg.id {
+        if let msgId = (animator?.previewViewController as? ContextMenuController)?.msg.id {
             self.showPreview(msgId: msgId)
         }
     }

+ 1 - 1
deltachat-ios/Model/GalleryItem.swift

@@ -2,7 +2,7 @@ import UIKit
 import DcCore
 import SDWebImage
 
-class GalleryItem {
+class GalleryItem: ContextMenuItem {
 
     var onImageLoaded: ((UIImage?) -> Void)?