mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-22 01:22:46 +02:00
Change UI according to video call, adapt theme, round avatars
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user