RoomUserStatusView.swift 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. //
  2. // RoomUserStatusView.swift
  3. // TUIRoomKit
  4. //
  5. // Created by janejntang on 2023/7/24.
  6. //
  7. import Foundation
  8. class RoomUserStatusView: UIView {
  9. private var isShownUserRoleFlag = false
  10. private var isViewReady: Bool = false
  11. private var isShownMuteFlag = true
  12. private let homeOwnerImageView: UIImageView = {
  13. let imageView = UIImageView(image: UIImage(named: "room_homeowner", in: tuiRoomKitBundle(), compatibleWith: nil))
  14. imageView.layer.cornerRadius = 12
  15. imageView.layer.masksToBounds = true
  16. return imageView
  17. }()
  18. private let userNameLabel: UILabel = {
  19. let user = UILabel()
  20. user.textColor = .white
  21. user.backgroundColor = UIColor.clear
  22. user.textAlignment = isRTL ? .right : .left
  23. user.numberOfLines = 1
  24. user.font = UIFont(name: "PingFangSC-Regular", size: 12)
  25. return user
  26. }()
  27. private let voiceVolumeImageView: VolumeView = {
  28. let imageView = VolumeView()
  29. return imageView
  30. }()
  31. override func didMoveToWindow() {
  32. super.didMoveToWindow()
  33. guard !isViewReady else { return }
  34. isViewReady = true
  35. constructViewHierarchy()
  36. activateConstraints()
  37. backgroundColor = UIColor(0x22262E, alpha: 0.8)
  38. layer.cornerRadius = 12
  39. layer.masksToBounds = true
  40. }
  41. private func constructViewHierarchy() {
  42. addSubview(homeOwnerImageView)
  43. addSubview(voiceVolumeImageView)
  44. addSubview(userNameLabel)
  45. }
  46. private func activateConstraints() {
  47. updateViewConstraints()
  48. userNameLabel.snp.makeConstraints { make in
  49. make.leading.equalTo(voiceVolumeImageView.snp.trailing).offset(5)
  50. make.centerY.equalToSuperview()
  51. make.trailing.equalToSuperview().offset(-8)
  52. }
  53. voiceVolumeImageView.snp.makeConstraints { make in
  54. make.leading.equalTo(homeOwnerImageView.snp.trailing).offset(6.scale375())
  55. make.width.height.equalTo(14)
  56. make.centerY.equalToSuperview()
  57. }
  58. }
  59. private func updateViewConstraints() {
  60. guard homeOwnerImageView.superview != nil else { return }
  61. homeOwnerImageView.snp.remakeConstraints { make in
  62. make.leading.equalToSuperview()
  63. make.height.equalTo(24)
  64. make.top.bottom.equalToSuperview()
  65. make.width.equalTo(isShownUserRoleFlag ? 24 : 0)
  66. }
  67. }
  68. }
  69. extension RoomUserStatusView {
  70. func updateUserStatus(userModel: UserEntity) {
  71. if !userModel.userName.isEmpty {
  72. userNameLabel.text = userModel.userName
  73. } else {
  74. userNameLabel.text = userModel.userId
  75. }
  76. if userModel.userRole == .roomOwner {
  77. homeOwnerImageView.image = UIImage(named: "room_homeowner", in: tuiRoomKitBundle(), compatibleWith: nil)
  78. } else if userModel.userRole == .administrator {
  79. homeOwnerImageView.image = UIImage(named: "room_administrator", in: tuiRoomKitBundle(), compatibleWith: nil)
  80. }
  81. isShownUserRoleFlag = userModel.userRole != .generalUser
  82. updateViewConstraints()
  83. updateUserAudio(userModel.hasAudioStream)
  84. updateUserVolume(volume: userModel.userVoiceVolume)
  85. }
  86. func updateUserAudio(_ hasAudio: Bool) {
  87. voiceVolumeImageView.updateAudio(hasAudio)
  88. isShownMuteFlag = !hasAudio
  89. }
  90. func updateUserVolume(volume: Int) {
  91. guard !isShownMuteFlag else { return }
  92. voiceVolumeImageView.updateVolume(CGFloat(volume))
  93. }
  94. }