diff --git a/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.swift b/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.swift
index 21aaea539..d3d387a6a 100644
--- a/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.swift
+++ b/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.swift
@@ -16,59 +16,64 @@
import Foundation
import MatrixKit
+import Reusable
+
+enum ThreadRoomTitleViewMode {
+ case allThreads
+ case specificThread(threadId: String)
+}
@objc
-enum ThreadRoomTitleViewMode: Int {
- case partial
- case full
+protocol ThreadRoomTitleViewDelegate: AnyObject {
+ func threadRoomTitleViewDidTapOptions(_ view: ThreadRoomTitleView)
}
@objcMembers
class ThreadRoomTitleView: RoomTitleView {
- var mode: ThreadRoomTitleViewMode = .full {
+ var mode: ThreadRoomTitleViewMode = .allThreads {
didSet {
update()
}
}
- var threadId: String! {
- didSet {
- updateMode()
+ weak var viewDelegate: ThreadRoomTitleViewDelegate?
+
+ @IBOutlet private weak var titleLabel: UILabel!
+ @IBOutlet private weak var roomAvatarView: RoomAvatarView!
+ @IBOutlet private weak var roomEncryptionBadgeView: UIImageView!
+ @IBOutlet private weak var roomNameLabel: UILabel!
+ @IBOutlet private weak var optionsButton: UIButton!
+
+ // MARK: - Methods
+
+ func configure(withViewModel viewModel: ThreadRoomTitleViewModel) {
+ if let avatarViewData = viewModel.roomAvatar {
+ roomAvatarView.fill(with: avatarViewData)
+ } else {
+ roomAvatarView.avatarImageView.image = nil
}
+ roomEncryptionBadgeView.image = viewModel.roomEncryptionBadge
+ roomEncryptionBadgeView.isHidden = viewModel.roomEncryptionBadge == nil
+ roomNameLabel.text = viewModel.roomDisplayName
}
- // Container views
- @IBOutlet private weak var partialContainerView: UIView!
- @IBOutlet private weak var fullContainerView: UIView!
-
- // Individual views
- @IBOutlet private weak var partialTitleLabel: UILabel!
- @IBOutlet private weak var fullTitleLabel: UILabel!
- @IBOutlet private weak var fullRoomAvatarView: RoomAvatarView!
- @IBOutlet private weak var fullRoomEncryptionBadgeView: UIImageView!
- @IBOutlet private weak var fullRoomNameLabel: UILabel!
- @IBOutlet private weak var fullOptionsButton: UIButton!
+ // MARK: - Overrides
override var mxRoom: MXRoom! {
didSet {
- updateMode()
+ update()
}
}
override class func nib() -> UINib! {
- return UINib(nibName: String(describing: self),
- bundle: .main)
+ return self.nib
}
override func refreshDisplay() {
- partialTitleLabel.text = VectorL10n.roomThreadTitle
- fullTitleLabel.text = VectorL10n.roomThreadTitle
-
guard let room = mxRoom else {
// room not initialized yet
return
}
- fullRoomNameLabel.text = room.displayName
let avatarViewData = AvatarViewData(matrixItemId: room.matrixItemId,
displayName: room.displayName,
@@ -76,18 +81,18 @@ class ThreadRoomTitleView: RoomTitleView {
mediaManager: room.mxSession.mediaManager,
fallbackImage: AvatarFallbackImage.matrixItem(room.matrixItemId,
room.displayName))
- fullRoomAvatarView.fill(with: avatarViewData)
- guard let summary = room.summary else {
- fullRoomEncryptionBadgeView.isHidden = true
- return
- }
- if summary.isEncrypted && room.mxSession.crypto != nil {
- fullRoomEncryptionBadgeView.image = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: summary.roomEncryptionTrustLevel())
- fullRoomEncryptionBadgeView.isHidden = false
+ let encrpytionBadge: UIImage?
+ if let summary = room.summary, room.mxSession.crypto != nil {
+ encrpytionBadge = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: summary.roomEncryptionTrustLevel())
} else {
- fullRoomEncryptionBadgeView.isHidden = true
+ encrpytionBadge = nil
}
+
+ let viewModel = ThreadRoomTitleViewModel(roomAvatar: avatarViewData,
+ roomEncryptionBadge: encrpytionBadge,
+ roomDisplayName: room.displayName)
+ configure(withViewModel: viewModel)
}
override func awakeFromNib() {
@@ -116,33 +121,14 @@ class ThreadRoomTitleView: RoomTitleView {
object: nil)
}
- private func updateMode() {
- // ensure both mxRoom and threadId are set
- guard let room = mxRoom,
- let threadId = threadId else {
- return
- }
-
- if room.mxSession.threadingService.thread(withId: threadId) == nil {
- // thread not created yet
- mode = .partial
- // use full mode for every case for now
- // TODO: Fix in future
- mode = .full
- } else {
- // thread created before
- mode = .full
- }
- }
-
private func update() {
switch mode {
- case .partial:
- partialContainerView.isHidden = false
- fullContainerView.isHidden = true
- case .full:
- partialContainerView.isHidden = true
- fullContainerView.isHidden = false
+ case .allThreads:
+ titleLabel.text = VectorL10n.threadsTitle
+ optionsButton.setImage(Asset.Images.threadsFilter.image, for: .normal)
+ case .specificThread:
+ titleLabel.text = VectorL10n.roomThreadTitle
+ optionsButton.setImage(Asset.Images.roomContextMenuMore.image, for: .normal)
}
}
@@ -153,19 +139,20 @@ class ThreadRoomTitleView: RoomTitleView {
}
@IBAction private func optionsButtonTapped(_ sender: UIButton) {
-
+ viewDelegate?.threadRoomTitleViewDidTapOptions(self)
}
}
+extension ThreadRoomTitleView: NibLoadable {}
+
extension ThreadRoomTitleView: Themable {
func update(theme: Theme) {
- partialTitleLabel.textColor = theme.colors.primaryContent
- fullRoomAvatarView.backgroundColor = .clear
- fullTitleLabel.textColor = theme.colors.primaryContent
- fullRoomNameLabel.textColor = theme.colors.secondaryContent
- fullOptionsButton.tintColor = theme.colors.accent
+ roomAvatarView.backgroundColor = .clear
+ titleLabel.textColor = theme.colors.primaryContent
+ roomNameLabel.textColor = theme.colors.secondaryContent
+ optionsButton.tintColor = theme.colors.accent
}
}
diff --git a/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.xib b/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.xib
index 53262fb17..07a21fbb2 100644
--- a/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.xib
+++ b/Riot/Modules/Room/Views/Title/Thread/ThreadRoomTitleView.xib
@@ -15,33 +15,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/Riot/Modules/Threads/Thread/ThreadViewController.swift b/Riot/Modules/Threads/Thread/ThreadViewController.swift
index 9e803baf5..69625dd8a 100644
--- a/Riot/Modules/Threads/Thread/ThreadViewController.swift
+++ b/Riot/Modules/Threads/Thread/ThreadViewController.swift
@@ -41,7 +41,7 @@ class ThreadViewController: RoomViewController {
return
}
- threadTitleView.threadId = threadId
+ threadTitleView.mode = .specificThread(threadId: threadId)
}
}