WIP: feat: modify conversation swap actions

pull/798/head
ryanzhao 1 year ago
parent 64e6dd4b95
commit b3378992ed

@ -113,6 +113,7 @@
7B4C75CB26B37E0F0000AC89 /* UnsendRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CA26B37E0F0000AC89 /* UnsendRequest.swift */; };
7B4C75CD26BB92060000AC89 /* DeletedMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */; };
7B50D64D28AC7CF80086CCEC /* silence.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 7B50D64C28AC7CF80086CCEC /* silence.aiff */; };
7B521E0629A87CEA00C3C36A /* UIContextualAction+Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B521E0529A87CEA00C3C36A /* UIContextualAction+Session.swift */; };
7B7037432834B81F000DCF35 /* ReactionContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7037422834B81F000DCF35 /* ReactionContainerView.swift */; };
7B7037452834BCC0000DCF35 /* ReactionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7037442834BCC0000DCF35 /* ReactionView.swift */; };
7B7CB18E270D066F0079FF93 /* IncomingCallBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7CB18D270D066F0079FF93 /* IncomingCallBanner.swift */; };
@ -1181,6 +1182,7 @@
7B4C75CA26B37E0F0000AC89 /* UnsendRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsendRequest.swift; sourceTree = "<group>"; };
7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedMessageView.swift; sourceTree = "<group>"; };
7B50D64C28AC7CF80086CCEC /* silence.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; path = silence.aiff; sourceTree = "<group>"; };
7B521E0529A87CEA00C3C36A /* UIContextualAction+Session.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIContextualAction+Session.swift"; sourceTree = "<group>"; };
7B7037422834B81F000DCF35 /* ReactionContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionContainerView.swift; sourceTree = "<group>"; };
7B7037442834BCC0000DCF35 /* ReactionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionView.swift; sourceTree = "<group>"; };
7B7CB18D270D066F0079FF93 /* IncomingCallBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncomingCallBanner.swift; sourceTree = "<group>"; };
@ -2582,6 +2584,7 @@
FD52090828B59411006098F6 /* ScreenLockUI.swift */,
FD37EA0828AA2D27003AE748 /* SessionTableViewModel.swift */,
FD37EA0628AA2CCA003AE748 /* SessionTableViewController.swift */,
7B521E0529A87CEA00C3C36A /* UIContextualAction+Session.swift */,
);
path = Shared;
sourceTree = "<group>";
@ -5712,6 +5715,7 @@
4539B5861F79348F007141FF /* PushRegistrationManager.swift in Sources */,
B8041A9525C8FA1D003C2166 /* MediaLoaderView.swift in Sources */,
45F32C232057297A00A300D5 /* MediaPageViewController.swift in Sources */,
7B521E0629A87CEA00C3C36A /* UIContextualAction+Session.swift in Sources */,
7B9F71D42852EEE2006DFE7B /* Emoji+Name.swift in Sources */,
4CA46F4C219CCC630038ABDE /* CaptionView.swift in Sources */,
C328253025CA55370062D0A7 /* ContextMenuWindow.swift in Sources */,

@ -618,6 +618,20 @@ final class HomeVC: BaseVC, UITableViewDataSource, UITableViewDelegate, SeedRemi
return true
}
func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let section: HomeViewModel.SectionModel = self.viewModel.threadData[indexPath.section]
let unswipeAnimationDelay: DispatchTimeInterval = .milliseconds(500)
switch section.model {
case .messageRequests:
return nil
case .threads:
return UISwipeActionsConfiguration(actions: [ ])
default: return nil
}
}
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let section: HomeViewModel.SectionModel = self.viewModel.threadData[indexPath.section]
let unswipeAnimationDelay: DispatchTimeInterval = .milliseconds(500)
@ -665,6 +679,7 @@ final class HomeVC: BaseVC, UITableViewDataSource, UITableViewDelegate, SeedRemi
self?.present(confirmationModal, animated: true, completion: nil)
}
delete.themeBackgroundColor = .conversationButton_swipeDestructive
delete.setupSessionStyle(with: UIImage(systemName: "trash"))
let pin: UIContextualAction = UIContextualAction(
style: .normal,
@ -688,6 +703,7 @@ final class HomeVC: BaseVC, UITableViewDataSource, UITableViewDelegate, SeedRemi
}
}
pin.themeBackgroundColor = .conversationButton_swipeTertiary
pin.setupSessionStyle(with: UIImage(systemName: "pin"))
guard threadViewModel.threadVariant == .contact && !threadViewModel.threadIsNoteToSelf else {
return UISwipeActionsConfiguration(actions: [ delete, pin ])

@ -0,0 +1,42 @@
// Copyright © 2023 Rangeproof Pty Ltd. All rights reserved.
import UIKit
extension UIContextualAction {
func setupSessionStyle(with image: UIImage?) {
guard let title = self.title, let image = image else {
self.image = image
return
}
let text = NSMutableAttributedString(string: "")
let attachment = NSTextAttachment()
attachment.image = image.withTintColor(.white)
text.append(NSAttributedString(attachment: attachment))
text.append(
NSAttributedString(
string: "\n\(title)",
attributes: [
.font : UIFont.systemFont(ofSize: Values.smallFontSize),
.foregroundColor : UIColor.white
]
)
)
let label = UILabel(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
label.textAlignment = .center
label.numberOfLines = 2
label.attributedText = text
let renderer = UIGraphicsImageRenderer(bounds: label.bounds)
let renderedImage = renderer.image { context in
label.layer.render(in: context.cgContext)
}
if let cgImage = renderedImage.cgImage {
let finalImage = UIImage(cgImage: cgImage, scale: UIScreen.main.scale, orientation: .up)
self.image = finalImage
self.title = nil
}
}
}
Loading…
Cancel
Save