diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.storyboard b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.storyboard index ef78ae43f..fc55b347f 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.storyboard +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.storyboard @@ -36,7 +36,7 @@ - + diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift index b414e9c17..2972e81a2 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewController.swift @@ -34,7 +34,7 @@ final class DeviceVerificationIncomingViewController: UIViewController { @IBOutlet weak var titleLabel: UILabel! - @IBOutlet weak var avatarImageView: UIImageView! + @IBOutlet weak var avatarImageView: MXKImageView! @IBOutlet weak var userDisplaynameLabel: UILabel! @IBOutlet weak var deviceIdLabel: UILabel! @@ -146,10 +146,15 @@ final class DeviceVerificationIncomingViewController: UIViewController { self.description2Label.text = VectorL10n.deviceVerificationIncomingDescription2 self.continueButton.setTitle(VectorL10n.continue, for: .normal) - // TODO: Use MXKImageView - let url = URL(string: self.viewModel.avatarUrl) - let data = try? Data(contentsOf: url!) - self.avatarImageView.image = UIImage(data: data!) + if let avatarImageView = self.avatarImageView { + let defaultavatarImage = AvatarGenerator.generateAvatar(forMatrixItem: self.viewModel.userId, withDisplayName: self.viewModel.userDisplayName) + + avatarImageView.enableInMemoryCache = true + avatarImageView.setImageURI(self.viewModel.avatarUrl, withType: nil, andImageOrientation: .up, previewImage: defaultavatarImage, mediaManager: self.viewModel.mediaManager) + + avatarImageView.layer.cornerRadius = avatarImageView.frame.size.width / 2 + avatarImageView.clipsToBounds = true + } self.userDisplaynameLabel.text = self.viewModel.userDisplayName self.deviceIdLabel.text = self.viewModel.deviceId diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift index a60acef4c..601dee378 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModel.swift @@ -29,10 +29,13 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM // MARK: Public + var userId: String var userDisplayName: String var avatarUrl: String var deviceId: String + var mediaManager: MXMediaManager + weak var viewDelegate: DeviceVerificationIncomingViewModelViewDelegate? weak var coordinatorDelegate: DeviceVerificationIncomingViewModelCoordinatorDelegate? @@ -41,10 +44,13 @@ final class DeviceVerificationIncomingViewModel: DeviceVerificationIncomingViewM init(session: MXSession, otherUser: MXUser, transaction: MXIncomingSASTransaction) { self.session = session self.transaction = transaction + self.userId = otherUser.userId self.userDisplayName = otherUser.displayname - self.avatarUrl = self.session.mediaManager.url(ofContent: otherUser.avatarUrl) + self.avatarUrl = otherUser.avatarUrl self.deviceId = transaction.otherDeviceId + self.mediaManager = session.mediaManager + self.registerTransactionDidStateChangeNotification(transaction: transaction) } diff --git a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModelType.swift b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModelType.swift index be7ad12d0..9cd19b912 100644 --- a/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModelType.swift +++ b/Riot/Modules/DeviceVerification/Incoming/DeviceVerificationIncomingViewModelType.swift @@ -30,9 +30,12 @@ protocol DeviceVerificationIncomingViewModelCoordinatorDelegate: class { /// Protocol describing the view model used by `DeviceVerificationIncomingViewController` protocol DeviceVerificationIncomingViewModelType { + var userId: String { get } var userDisplayName: String { get } var avatarUrl: String { get } var deviceId: String { get } + + var mediaManager: MXMediaManager { get } var viewDelegate: DeviceVerificationIncomingViewModelViewDelegate? { get set } var coordinatorDelegate: DeviceVerificationIncomingViewModelCoordinatorDelegate? { get set } diff --git a/Riot/SupportingFiles/Riot-Bridging-Header.h b/Riot/SupportingFiles/Riot-Bridging-Header.h index 3d91a54f2..bc166e61d 100644 --- a/Riot/SupportingFiles/Riot-Bridging-Header.h +++ b/Riot/SupportingFiles/Riot-Bridging-Header.h @@ -10,3 +10,4 @@ #import "ThemeService.h" #import "TableViewCellWithCheckBoxAndLabel.h" #import "RecentsDataSource.h" +#import "AvatarGenerator.h"