소스 검색

refactor QuotePreview in order to reuse code for other staging area items

cyberta 4 년 전
부모
커밋
b094976bd6

+ 5 - 1
deltachat-ios.xcodeproj/project.pbxproj

@@ -21,6 +21,7 @@
 		302E1BB4252B5AB4008F4264 /* PlayButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302E1BB3252B5AB4008F4264 /* PlayButtonView.swift */; };
 		302E1BB4252B5AB4008F4264 /* PlayButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302E1BB3252B5AB4008F4264 /* PlayButtonView.swift */; };
 		30349291256441E200A523D0 /* QuotePreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30349290256441E200A523D0 /* QuotePreview.swift */; };
 		30349291256441E200A523D0 /* QuotePreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30349290256441E200A523D0 /* QuotePreview.swift */; };
 		303492952565AABC00A523D0 /* DraftModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303492942565AABC00A523D0 /* DraftModel.swift */; };
 		303492952565AABC00A523D0 /* DraftModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303492942565AABC00A523D0 /* DraftModel.swift */; };
+		303492A5257546B400A523D0 /* DraftPreview.swift in Sources */ = {isa = PBXBuildFile; fileRef = 303492A4257546B400A523D0 /* DraftPreview.swift */; };
 		304219D3243F588500516852 /* DcCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 304219D1243F588500516852 /* DcCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		304219D3243F588500516852 /* DcCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 304219D1243F588500516852 /* DcCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
 		304219D92440734A00516852 /* DcMsg+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304219D82440734A00516852 /* DcMsg+Extension.swift */; };
 		304219D92440734A00516852 /* DcMsg+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 304219D82440734A00516852 /* DcMsg+Extension.swift */; };
 		304F5E44244F571C00462538 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A9FB14A1FB061E2001FEA36 /* Assets.xcassets */; };
 		304F5E44244F571C00462538 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 7A9FB14A1FB061E2001FEA36 /* Assets.xcassets */; };
@@ -217,6 +218,7 @@
 		302E1BB3252B5AB4008F4264 /* PlayButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PlayButtonView.swift; path = "deltachat-ios/Chat/Views/PlayButtonView.swift"; sourceTree = SOURCE_ROOT; };
 		302E1BB3252B5AB4008F4264 /* PlayButtonView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = PlayButtonView.swift; path = "deltachat-ios/Chat/Views/PlayButtonView.swift"; sourceTree = SOURCE_ROOT; };
 		30349290256441E200A523D0 /* QuotePreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuotePreview.swift; sourceTree = "<group>"; };
 		30349290256441E200A523D0 /* QuotePreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuotePreview.swift; sourceTree = "<group>"; };
 		303492942565AABC00A523D0 /* DraftModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftModel.swift; sourceTree = "<group>"; };
 		303492942565AABC00A523D0 /* DraftModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftModel.swift; sourceTree = "<group>"; };
+		303492A4257546B400A523D0 /* DraftPreview.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DraftPreview.swift; sourceTree = "<group>"; };
 		304219D1243F588500516852 /* DcCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DcCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		304219D1243F588500516852 /* DcCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = DcCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		304219D82440734A00516852 /* DcMsg+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DcMsg+Extension.swift"; sourceTree = "<group>"; };
 		304219D82440734A00516852 /* DcMsg+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DcMsg+Extension.swift"; sourceTree = "<group>"; };
 		3052C609253F082E007D13EA /* MessageLabelDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageLabelDelegate.swift; sourceTree = "<group>"; };
 		3052C609253F082E007D13EA /* MessageLabelDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageLabelDelegate.swift; sourceTree = "<group>"; };
@@ -546,6 +548,8 @@
 				3052C609253F082E007D13EA /* MessageLabelDelegate.swift */,
 				3052C609253F082E007D13EA /* MessageLabelDelegate.swift */,
 				3052C60D253F088E007D13EA /* DetectorType.swift */,
 				3052C60D253F088E007D13EA /* DetectorType.swift */,
 				30653080254358B10093E196 /* QuoteView.swift */,
 				30653080254358B10093E196 /* QuoteView.swift */,
+				30349290256441E200A523D0 /* QuotePreview.swift */,
+				303492A4257546B400A523D0 /* DraftPreview.swift */,
 			);
 			);
 			path = Views;
 			path = Views;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -780,7 +784,6 @@
 				AEFBE22E23FEF23D0045327A /* ProviderInfoCell.swift */,
 				AEFBE22E23FEF23D0045327A /* ProviderInfoCell.swift */,
 				AED62BCD247687E6009E220D /* LocationStreamingIndicator.swift */,
 				AED62BCD247687E6009E220D /* LocationStreamingIndicator.swift */,
 				30F4BFED252E3E020006B9B3 /* PaddingTextView.swift */,
 				30F4BFED252E3E020006B9B3 /* PaddingTextView.swift */,
-				30349290256441E200A523D0 /* QuotePreview.swift */,
 			);
 			);
 			path = View;
 			path = View;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -1220,6 +1223,7 @@
 				3052C60A253F082E007D13EA /* MessageLabelDelegate.swift in Sources */,
 				3052C60A253F082E007D13EA /* MessageLabelDelegate.swift in Sources */,
 				AE0AA9562478191900D42A7F /* GridCollectionViewFlowLayout.swift in Sources */,
 				AE0AA9562478191900D42A7F /* GridCollectionViewFlowLayout.swift in Sources */,
 				AEA0F6A124474146009F887B /* ProfileInfoViewController.swift in Sources */,
 				AEA0F6A124474146009F887B /* ProfileInfoViewController.swift in Sources */,
+				303492A5257546B400A523D0 /* DraftPreview.swift in Sources */,
 				305961D02346125100C80F33 /* NSAttributedString+Extensions.swift in Sources */,
 				305961D02346125100C80F33 /* NSAttributedString+Extensions.swift in Sources */,
 				302B84C72396770B001C261F /* RelayHelper.swift in Sources */,
 				302B84C72396770B001C261F /* RelayHelper.swift in Sources */,
 				305961CF2346125100C80F33 /* UIColor+Extensions.swift in Sources */,
 				305961CF2346125100C80F33 /* UIColor+Extensions.swift in Sources */,

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

@@ -1175,7 +1175,7 @@ extension ChatViewController: InputBarAccessoryViewDelegate {
 }
 }
 
 
 extension ChatViewController: QuotePreviewDelegate {
 extension ChatViewController: QuotePreviewDelegate {
-    func onCancel() {
+    func onCancelQuote() {
         draft.setQuote(quotedMsg: nil)
         draft.setQuote(quotedMsg: nil)
         configureDraftArea(draft: draft)
         configureDraftArea(draft: draft)
     }
     }

+ 15 - 35
deltachat-ios/View/QuotePreview.swift → deltachat-ios/Chat/Views/DraftPreview.swift

@@ -2,12 +2,8 @@ import UIKit
 import InputBarAccessoryView
 import InputBarAccessoryView
 import DcCore
 import DcCore
 
 
-public protocol QuotePreviewDelegate: class {
-    func onCancel()
-}
+public class DraftPreview: UIView, InputItem {
 
 
-public class QuotePreview: UIView, InputItem {
-    
     public var inputBarAccessoryView: InputBarAccessoryView?
     public var inputBarAccessoryView: InputBarAccessoryView?
     public var parentStackViewPosition: InputStackView.Position?
     public var parentStackViewPosition: InputStackView.Position?
     public func textViewDidChangeAction(with textView: InputTextView) {}
     public func textViewDidChangeAction(with textView: InputTextView) {}
@@ -15,15 +11,6 @@ public class QuotePreview: UIView, InputItem {
     public func keyboardEditingEndsAction() {}
     public func keyboardEditingEndsAction() {}
     public func keyboardEditingBeginsAction() {}
     public func keyboardEditingBeginsAction() {}
 
 
-    public weak var delegate: QuotePreviewDelegate?
-
-    lazy var quoteView: QuoteView = {
-        let view = QuoteView()
-        view.translatesAutoresizingMaskIntoConstraints = false
-
-        return view
-    }()
-
     lazy var cancelButton: UIView = {
     lazy var cancelButton: UIView = {
         let view = UIView()
         let view = UIView()
         view.isUserInteractionEnabled = true
         view.isUserInteractionEnabled = true
@@ -49,6 +36,12 @@ public class QuotePreview: UIView, InputItem {
         return view
         return view
     }()
     }()
 
 
+    lazy var mainContentView: UIView = {
+        let view = UIView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
     init() {
     init() {
         super.init(frame: .zero)
         super.init(frame: .zero)
         setupSubviews()
         setupSubviews()
@@ -58,19 +51,19 @@ public class QuotePreview: UIView, InputItem {
         fatalError("init(coder:) has not been implemented")
         fatalError("init(coder:) has not been implemented")
     }
     }
 
 
-    private func setupSubviews() {
+    func setupSubviews() {
         addSubview(upperBorder)
         addSubview(upperBorder)
-        addSubview(quoteView)
+        addSubview(mainContentView)
         addSubview(cancelButton)
         addSubview(cancelButton)
         addConstraints([
         addConstraints([
             upperBorder.constraintAlignLeadingTo(self),
             upperBorder.constraintAlignLeadingTo(self),
             upperBorder.constraintAlignTrailingTo(self),
             upperBorder.constraintAlignTrailingTo(self),
             upperBorder.constraintHeightTo(1),
             upperBorder.constraintHeightTo(1),
             upperBorder.constraintAlignTopTo(self, paddingTop: 4),
             upperBorder.constraintAlignTopTo(self, paddingTop: 4),
-            quoteView.constraintAlignTopTo(upperBorder, paddingTop: 4),
-            quoteView.constraintAlignLeadingTo(self),
-            quoteView.constraintAlignBottomTo(self, paddingBottom: 4),
-            quoteView.constraintTrailingToLeadingOf(cancelButton, paddingTrailing: -2),
+            mainContentView.constraintAlignTopTo(upperBorder, paddingTop: 4),
+            mainContentView.constraintAlignLeadingTo(self),
+            mainContentView.constraintAlignBottomTo(self, paddingBottom: 4),
+            mainContentView.constraintTrailingToLeadingOf(cancelButton, paddingTrailing: -2),
             cancelButton.constraintAlignTrailingTo(self, paddingTrailing: 14),
             cancelButton.constraintAlignTrailingTo(self, paddingTrailing: 14),
             cancelButton.constraintWidthTo(36),
             cancelButton.constraintWidthTo(36),
             cancelButton.constraintHeightTo(36),
             cancelButton.constraintHeightTo(36),
@@ -86,23 +79,10 @@ public class QuotePreview: UIView, InputItem {
     }
     }
 
 
     @objc public func cancel() {
     @objc public func cancel() {
-        quoteView.prepareForReuse()
-        delegate?.onCancel()
+        safe_fatalError("cancel needs to be implemented in inheriting class")
     }
     }
 
 
     public func configure(draft: DraftModel) {
     public func configure(draft: DraftModel) {
-        if let quoteText = draft.quoteText {
-            quoteView.quote.text = quoteText
-            if let quoteMessage = draft.quoteMessage {
-                let contact = quoteMessage.fromContact
-                quoteView.senderTitle.text = contact.displayName
-                quoteView.senderTitle.textColor = contact.color
-                quoteView.citeBar.backgroundColor = contact.color
-                quoteView.imagePreview.image = quoteMessage.image
-            }
-            isHidden = false
-        } else {
-            isHidden = true
-        }
+        safe_fatalError("configure needs to be implemented in inheriting class")
     }
     }
 }
 }

+ 38 - 0
deltachat-ios/Chat/Views/MediaPreview.swift

@@ -0,0 +1,38 @@
+import UIKit
+import SDWebImage
+
+class MediaPreview: UIView {
+
+    lazy var contentImageView: SDAnimatedImageView = {
+        let imageView = SDAnimatedImageView()
+        imageView.translatesAutoresizingMaskIntoConstraints = false
+        imageView.setContentHuggingPriority(.defaultHigh, for: .vertical)
+        imageView.isUserInteractionEnabled = true
+        imageView.contentMode = .scaleAspectFill
+        imageView.clipsToBounds = true
+        return imageView
+    }()
+
+    /// The play button view to display on video messages.
+    open lazy var playButtonView: PlayButtonView = {
+        let playButtonView = PlayButtonView()
+        playButtonView.isHidden = true
+        translatesAutoresizingMaskIntoConstraints = false
+        return playButtonView
+    }()
+
+    
+
+    init() {
+        super.init(frame: .zero)
+        setupSubviews()
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    func setupSubviews() {
+
+    }
+}

+ 45 - 0
deltachat-ios/Chat/Views/QuotePreview.swift

@@ -0,0 +1,45 @@
+import UIKit
+import InputBarAccessoryView
+import DcCore
+
+public protocol QuotePreviewDelegate: class {
+    func onCancelQuote()
+}
+
+public class QuotePreview: DraftPreview {
+
+    public weak var delegate: QuotePreviewDelegate?
+
+    lazy var quoteView: QuoteView = {
+        let view = QuoteView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
+    override func setupSubviews() {
+        super.setupSubviews()
+        mainContentView.addSubview(quoteView)
+        quoteView.fillSuperview()
+    }
+
+    override public func cancel() {
+        quoteView.prepareForReuse()
+        delegate?.onCancelQuote()
+    }
+
+    override public func configure(draft: DraftModel) {
+        if let quoteText = draft.quoteText {
+            quoteView.quote.text = quoteText
+            if let quoteMessage = draft.quoteMessage {
+                let contact = quoteMessage.fromContact
+                quoteView.senderTitle.text = contact.displayName
+                quoteView.senderTitle.textColor = contact.color
+                quoteView.citeBar.backgroundColor = contact.color
+                quoteView.imagePreview.image = quoteMessage.image
+            }
+            isHidden = false
+        } else {
+            isHidden = true
+        }
+    }
+}