Эх сурвалжийг харах

implement new info message cell

cyberta 4 жил өмнө
parent
commit
e80783042b

+ 4 - 0
deltachat-ios.xcodeproj/project.pbxproj

@@ -106,6 +106,7 @@
 		308FEA52246ABA2700FCEAD6 /* FileMessageSizeCalculator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 308FEA51246ABA2700FCEAD6 /* FileMessageSizeCalculator.swift */; };
 		3095A351237DD1F700AB07F7 /* MediaPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3095A350237DD1F700AB07F7 /* MediaPicker.swift */; };
 		30A2EC36247D72720024ADD8 /* AnimatedImageMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A2EC35247D72720024ADD8 /* AnimatedImageMessageCell.swift */; };
+		30A4149724F6EFBE00EC91EB /* NewInfoMessageCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30A4149624F6EFBE00EC91EB /* NewInfoMessageCell.swift */; };
 		30B0ACFA24AB5B99004D5E29 /* SettingsEphemeralMessageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */; };
 		30C0D49D237C4908008E2A0E /* CertificateCheckController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */; };
 		30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E348DE24F3F819005C93D1 /* ChatTableView.swift */; };
@@ -396,6 +397,7 @@
 		308FEA51246ABA2700FCEAD6 /* FileMessageSizeCalculator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileMessageSizeCalculator.swift; sourceTree = "<group>"; };
 		3095A350237DD1F700AB07F7 /* MediaPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaPicker.swift; sourceTree = "<group>"; };
 		30A2EC35247D72720024ADD8 /* AnimatedImageMessageCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AnimatedImageMessageCell.swift; sourceTree = "<group>"; };
+		30A4149624F6EFBE00EC91EB /* NewInfoMessageCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewInfoMessageCell.swift; sourceTree = "<group>"; };
 		30AC265E237F1807002A943F /* AvatarHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarHelper.swift; sourceTree = "<group>"; };
 		30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEphemeralMessageController.swift; sourceTree = "<group>"; };
 		30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertificateCheckController.swift; sourceTree = "<group>"; };
@@ -807,6 +809,7 @@
 				30FDB72024D838240066C48D /* BaseMessageCell.swift */,
 				30E348E024F53772005C93D1 /* NewImageTextCell.swift */,
 				30E348E424F6647D005C93D1 /* NewFileTextCell.swift */,
+				30A4149624F6EFBE00EC91EB /* NewInfoMessageCell.swift */,
 			);
 			path = Cells;
 			sourceTree = "<group>";
@@ -1471,6 +1474,7 @@
 				305961EE2346125100C80F33 /* AvatarPosition.swift in Sources */,
 				3015634423A003BA00E9DEF4 /* AudioRecorderController.swift in Sources */,
 				AE25F09022807AD800CDEA66 /* AvatarSelectionCell.swift in Sources */,
+				30A4149724F6EFBE00EC91EB /* NewInfoMessageCell.swift in Sources */,
 				302B84C6239676F0001C261F /* AvatarHelper.swift in Sources */,
 				AE77838D23E32ED20093EABD /* ContactDetailViewModel.swift in Sources */,
 				305961E62346125100C80F33 /* LocationMessageSnapshotOptions.swift in Sources */,

+ 6 - 0
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -117,6 +117,7 @@ class ChatViewControllerNew: UITableViewController {
         tableView.register(NewTextMessageCell.self, forCellReuseIdentifier: "text")
         tableView.register(NewImageTextCell.self, forCellReuseIdentifier: "image")
         tableView.register(NewFileTextCell.self, forCellReuseIdentifier: "file")
+        tableView.register(NewInfoMessageCell.self, forCellReuseIdentifier: "info")
         tableView.rowHeight = UITableView.automaticDimension
         tableView.separatorStyle = .none
         tableView.allowsSelection = false
@@ -306,6 +307,11 @@ class ChatViewControllerNew: UITableViewController {
         let id = messageIds[indexPath.row]
         let message = DcMsg(id: id)
 
+        if message.isInfo {
+            let cell = tableView.dequeueReusableCell(withIdentifier: "info", for: indexPath) as? NewInfoMessageCell ?? NewInfoMessageCell()
+            cell.update(msg: message)
+            return cell
+        }
 
         let cell: BaseMessageCell
         if message.type == DC_MSG_IMAGE || message.type == DC_MSG_GIF {

+ 63 - 0
deltachat-ios/Chat/Views/Cells/NewInfoMessageCell.swift

@@ -0,0 +1,63 @@
+import UIKit
+import DcCore
+
+class NewInfoMessageCell: UITableViewCell {
+
+    private lazy var messageBackgroundContainer: BackgroundContainer = {
+        let container = BackgroundContainer()
+        container.image = UIImage(color: DcColors.systemMessageBackgroundColor)
+        container.contentMode = .scaleToFill
+        container.clipsToBounds = true
+        container.translatesAutoresizingMaskIntoConstraints = false
+        return container
+    }()
+
+    lazy var messageLabel: UILabel = {
+        let label = UILabel()
+        label.translatesAutoresizingMaskIntoConstraints = false
+        label.numberOfLines = 0
+        label.lineBreakMode = .byWordWrapping
+        label.textAlignment = .center
+        label.font = UIFont.preferredFont(for: .subheadline, weight: .medium)
+        return label
+    }()
+
+    override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
+        super.init(style: .subtitle, reuseIdentifier: reuseIdentifier)
+        clipsToBounds = false
+        backgroundColor = .none
+        setupSubviews()
+    }
+
+    required init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    func setupSubviews() {
+        contentView.addSubview(messageBackgroundContainer)
+        contentView.addSubview(messageLabel)
+
+        contentView.addConstraints([
+            messageLabel.constraintAlignTopTo(contentView, paddingTop: 12),
+            messageLabel.constraintAlignBottomTo(contentView, paddingBottom: 12),
+            messageLabel.constraintAlignLeadingMaxTo(contentView, paddingLeading: 50),
+            messageLabel.constraintAlignTrailingMaxTo(contentView, paddingTrailing: 50),
+            messageLabel.constraintCenterXTo(contentView),
+            messageBackgroundContainer.constraintAlignLeadingTo(messageLabel, paddingLeading: -6),
+            messageBackgroundContainer.constraintAlignTopTo(messageLabel, paddingTop: -6),
+            messageBackgroundContainer.constraintAlignBottomTo(messageLabel, paddingBottom: -6),
+            messageBackgroundContainer.constraintAlignTrailingTo(messageLabel, paddingTrailing: -6)
+        ])
+    }
+
+    func update(msg: DcMsg) {
+        messageLabel.text = msg.text
+        var corners: UIRectCorner = []
+        corners.formUnion(.topLeft)
+        corners.formUnion(.bottomLeft)
+        corners.formUnion(.topRight)
+        corners.formUnion(.bottomRight)
+        messageBackgroundContainer.update(rectCorners: corners, color: DcColors.systemMessageBackgroundColor)
+    }
+
+}