Change UI according to video call, adapt theme, round avatars

This commit is contained in:
ismailgulek
2021-06-09 12:42:20 +03:00
parent d202790085
commit e2ed8a302e
2 changed files with 80 additions and 22 deletions
+74 -14
View File
@@ -25,16 +25,28 @@ class CallPiPView: UIView {
static let smallDotWidth: CGFloat = 8
static let bigDotWidth: CGFloat = 10
static let spaceBetweenDots: CGFloat = 4
static let placeholderFontScale: CGFloat = 0.7
}
@IBOutlet private weak var bgView: UIView!
@IBOutlet private weak var bgImageView: MXKImageView!
@IBOutlet private weak var stackView: UIStackView!
@IBOutlet private weak var mainCallAvatarImageView: MXKImageView!
@IBOutlet private weak var mainCallAvatarImageView: MXKImageView! {
didSet {
mainCallAvatarImageView.clipsToBounds = true
mainCallAvatarImageView.layer.cornerRadius = mainCallAvatarImageView.bounds.width/2
}
}
@IBOutlet private weak var onHoldCallView: UIView!
@IBOutlet private weak var onHoldCallAvatarImageView: MXKImageView!
@IBOutlet private weak var onHoldCallAvatarImageView: MXKImageView! {
didSet {
onHoldCallAvatarImageView.clipsToBounds = true
onHoldCallAvatarImageView.layer.cornerRadius = onHoldCallAvatarImageView.bounds.width/2
}
}
@IBOutlet private weak var connectingView: DotsView! {
didSet {
@@ -44,9 +56,7 @@ class CallPiPView: UIView {
}
}
private lazy var defaultProfileImage: UIImage = {
return Bundle.mxk_imageFromMXKAssetsBundle(withName: "default-profile")
}()
private var theme: Theme = ThemeService.shared().theme
private var session: MXSession!
static func instantiate(withSession session: MXSession) -> CallPiPView {
@@ -65,12 +75,29 @@ class CallPiPView: UIView {
connectingView.isHidden = false
case .connected:
connectingView.isHidden = true
stackView.isHidden = false
if mainCall.isVideoCall {
bgView.isHidden = true
stackView.isHidden = true
} else {
bgView.isHidden = false
stackView.isHidden = false
}
onHoldCallView.isHidden = onHoldCall == nil
default:
break
}
let bgPlaceholder = placeholderImage(forPeer: peer,
call: mainCall,
imageView: bgImageView)
let mainCallPlaceholder = placeholderImage(forPeer: peer,
call: mainCall,
imageView: mainCallAvatarImageView)
bgImageView.contentMode = .scaleAspectFill
mainCallAvatarImageView.contentMode = .scaleAspectFill
onHoldCallAvatarImageView.contentMode = .scaleAspectFill
if let avatarUrl = peer?.avatarUrl {
bgImageView.mediaFolder = kMXMediaManagerAvatarThumbnailFolder
bgImageView.enableInMemoryCache = true
@@ -80,7 +107,7 @@ class CallPiPView: UIView {
andImageOrientation: .up,
toFitViewSize: bgImageView.bounds.size,
with: MXThumbnailingMethodCrop,
previewImage: defaultProfileImage,
previewImage: bgPlaceholder,
mediaManager: session.mediaManager)
mainCallAvatarImageView.mediaFolder = kMXMediaManagerAvatarThumbnailFolder
@@ -89,15 +116,19 @@ class CallPiPView: UIView {
mainCallAvatarImageView.setImageURI(avatarUrl,
withType: nil,
andImageOrientation: .up,
toFitViewSize: bgImageView.bounds.size,
toFitViewSize: mainCallAvatarImageView.bounds.size,
with: MXThumbnailingMethodCrop,
previewImage: defaultProfileImage,
previewImage: mainCallPlaceholder,
mediaManager: session.mediaManager)
} else {
bgImageView.image = defaultProfileImage
mainCallAvatarImageView.image = defaultProfileImage
bgImageView.image = bgPlaceholder
mainCallAvatarImageView.image = mainCallPlaceholder
}
let onHoldCallPlaceholder = placeholderImage(forPeer: onHoldPeer,
call: onHoldCall,
imageView: onHoldCallAvatarImageView)
if let avatarUrl = onHoldPeer?.avatarUrl {
onHoldCallAvatarImageView.mediaFolder = kMXMediaManagerAvatarThumbnailFolder
onHoldCallAvatarImageView.enableInMemoryCache = true
@@ -105,15 +136,44 @@ class CallPiPView: UIView {
onHoldCallAvatarImageView.setImageURI(avatarUrl,
withType: nil,
andImageOrientation: .up,
toFitViewSize: bgImageView.bounds.size,
toFitViewSize: onHoldCallAvatarImageView.bounds.size,
with: MXThumbnailingMethodCrop,
previewImage: defaultProfileImage,
previewImage: onHoldCallPlaceholder,
mediaManager: session.mediaManager)
} else {
onHoldCallAvatarImageView.image = defaultProfileImage
onHoldCallAvatarImageView.image = onHoldCallPlaceholder
}
}
private func placeholderImage(forPeer peer: MXUser?,
call: MXCall?,
imageView: MXKImageView) -> UIImage? {
let fontSize = imageView.bounds.width * Constants.placeholderFontScale
if let peer = peer {
return AvatarGenerator.generateAvatar(forMatrixItem: peer.userId,
withDisplayName: peer.displayname,
size: imageView.bounds.width,
andFontSize: fontSize)
} else if let room = call?.room {
return AvatarGenerator.generateAvatar(forMatrixItem: room.roomId,
withDisplayName: room.summary.displayname,
size: imageView.bounds.width,
andFontSize: fontSize)
}
return MXKTools.paint(Asset.Images.placeholder.image,
with: theme.tintColor)
}
}
extension CallPiPView: NibReusable {}
extension CallPiPView: Themable {
func update(theme: Theme) {
self.theme = theme
}
}