Create specific title view for threads

This commit is contained in:
ismailgulek
2021-11-11 01:05:03 +03:00
parent 73c15a18cf
commit 0481ba21d0
2 changed files with 255 additions and 0 deletions
@@ -0,0 +1,130 @@
//
// Copyright 2021 New Vector Ltd
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
import Foundation
import MatrixKit
@objc
enum ThreadRoomTitleViewMode: Int {
case partial
case full
}
@objcMembers
class ThreadRoomTitleView: RoomTitleView {
var mode: ThreadRoomTitleViewMode = .full {
didSet {
update()
}
}
var threadId: String!
// 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 fullCloseButton: UIButton!
@IBOutlet private weak var fullTitleLabel: UILabel!
@IBOutlet private weak var fullRoomAvatarView: RoomAvatarView!
@IBOutlet private weak var fullRoomNameLabel: UILabel!
@IBOutlet private weak var fullOptionsButton: UIButton!
var closeButton: UIButton {
return fullCloseButton
}
override class func nib() -> UINib! {
return UINib(nibName: String(describing: self),
bundle: .main)
}
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,
avatarUrl: room.mxContentUri,
mediaManager: room.mxSession.mediaManager,
fallbackImage: AvatarFallbackImage.matrixItem(room.matrixItemId,
room.displayName))
fullRoomAvatarView.fill(with: avatarViewData)
}
override func awakeFromNib() {
super.awakeFromNib()
update(theme: ThemeService.shared().theme)
update()
}
override func didMoveToSuperview() {
super.didMoveToSuperview()
if let superview = superview?.superview {
NSLayoutConstraint.activate([
self.leadingAnchor.constraint(equalTo: superview.leadingAnchor),
self.trailingAnchor.constraint(equalTo: superview.trailingAnchor)
])
}
}
private func update() {
switch mode {
case .partial:
partialContainerView.isHidden = false
fullContainerView.isHidden = true
case .full:
partialContainerView.isHidden = true
fullContainerView.isHidden = false
}
}
// MARK: - Actions
@IBAction private func closeButtonTapped(_ sender: UIButton) {
let gesture = UITapGestureRecognizer(target: nil, action: nil)
closeButton.addGestureRecognizer(gesture)
tapGestureDelegate.roomTitleView(self, recognizeTapGesture: gesture)
closeButton.removeGestureRecognizer(gesture)
}
@IBAction private func optionsButtonTapped(_ sender: UIButton) {
}
}
extension ThreadRoomTitleView: Themable {
func update(theme: Theme) {
partialTitleLabel.textColor = theme.colors.primaryContent
fullCloseButton.tintColor = theme.colors.secondaryContent
fullTitleLabel.textColor = theme.colors.primaryContent
fullRoomNameLabel.textColor = theme.colors.secondaryContent
fullOptionsButton.tintColor = theme.colors.secondaryContent
}
}