diff --git a/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/BWI-noticeboard.png b/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/BWI-noticeboard.png new file mode 100644 index 000000000..7d993a44d Binary files /dev/null and b/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/BWI-noticeboard.png differ diff --git a/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/Contents.json b/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/Contents.json index 87c46ad3b..4c8d4000f 100644 --- a/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/Contents.json +++ b/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/Contents.json @@ -9,7 +9,7 @@ "scale" : "2x" }, { - "filename" : "personal_notes-1.jpg", + "filename" : "BWI-noticeboard.png", "idiom" : "universal", "scale" : "3x" } diff --git a/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/personal_notes-1.jpg b/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/personal_notes-1.jpg deleted file mode 100644 index 77b011135..000000000 Binary files a/Riot/Assets/Images.xcassets/PersonalNotes/personal_notes_avatar.imageset/personal_notes-1.jpg and /dev/null differ diff --git a/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m b/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m index dc68de946..0b33b7503 100644 --- a/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m +++ b/Riot/Modules/Common/Recents/Views/RecentTableViewCell.m @@ -125,10 +125,16 @@ self.roomTitle.font = [UIFont systemFontOfSize:17 weight:UIFontWeightMedium]; } - [self.roomAvatar vc_setRoomAvatarImageWith:roomCellData.avatarUrl - roomId:roomCellData.roomIdentifier - displayName:roomCellData.roomDisplayname - mediaManager:roomCellData.mxSession.mediaManager]; + // bwi: if the room is a personal notes room a local image is used as room avatar + PersonalNotesDefaultService *service = [[PersonalNotesDefaultService alloc] initWithMxSession:roomCellData.mxSession]; + if (BwiBuildSettings.bwiUseCustomPersonalNotesAvatar && [roomCellData.roomIdentifier isEqualToString:[service personalNotesRoomId]]) { + self.roomAvatar.image = [UIImage imageNamed:[service avatarImageUrl]]; + } else { + [self.roomAvatar vc_setRoomAvatarImageWith:roomCellData.avatarUrl + roomId:roomCellData.roomIdentifier + displayName:roomCellData.roomDisplayname + mediaManager:roomCellData.mxSession.mediaManager]; + } if (roomCellData.directUserId) { diff --git a/Riot/Modules/Room/RoomInfo/RoomInfoList/Views/RoomInfoBasicView.swift b/Riot/Modules/Room/RoomInfo/RoomInfoList/Views/RoomInfoBasicView.swift index 5d32a8918..b8a94e4f6 100644 --- a/Riot/Modules/Room/RoomInfo/RoomInfoList/Views/RoomInfoBasicView.swift +++ b/Riot/Modules/Room/RoomInfo/RoomInfoList/Views/RoomInfoBasicView.swift @@ -78,19 +78,31 @@ class RoomInfoBasicView: UIView { func configure(withViewData viewData: RoomInfoBasicViewData) { let avatarImage = AvatarGenerator.generateAvatar(forMatrixItem: viewData.roomId, withDisplayName: viewData.roomDisplayName) - if let avatarUrl = viewData.avatarUrl { - avatarImageView.enableInMemoryCache = true - - avatarImageView.setImageURI(avatarUrl, - withType: nil, - andImageOrientation: .up, - toFitViewSize: avatarImageView.frame.size, - with: MXThumbnailingMethodCrop, - previewImage: avatarImage, - mediaManager: viewData.mediaManager) - } else { - avatarImageView.image = avatarImage + if BwiBuildSettings.bwiUseCustomPersonalNotesAvatar { + if let session = AppDelegate.theDelegate().mxSessions.first as? MXSession { + let service = PersonalNotesDefaultService(mxSession: session) + if let personalNotesRoomId = service.personalNotesRoomId(), personalNotesRoomId == viewData.roomId { + avatarImageView.image = UIImage(named: service.avatarImageUrl()) + } + } } + + if avatarImageView.image == nil { + if let avatarUrl = viewData.avatarUrl { + avatarImageView.enableInMemoryCache = true + + avatarImageView.setImageURI(avatarUrl, + withType: nil, + andImageOrientation: .up, + toFitViewSize: avatarImageView.frame.size, + with: MXThumbnailingMethodCrop, + previewImage: avatarImage, + mediaManager: viewData.mediaManager) + } else { + avatarImageView.image = avatarImage + } + } + badgeImageView.image = viewData.encryptionImage roomNameLabel.text = viewData.roomDisplayName roomAddressLabel.text = viewData.mainRoomAlias diff --git a/Riot/Modules/Room/RoomViewController.m b/Riot/Modules/Room/RoomViewController.m index 01fabeb11..c22a4f05f 100644 --- a/Riot/Modules/Room/RoomViewController.m +++ b/Riot/Modules/Room/RoomViewController.m @@ -1860,11 +1860,18 @@ static CGSize kThreadListBarButtonItemImageSize; MXKImageView *userPictureView = ((RoomTitleView*)self.titleView).pictureView; // Set user picture in input toolbar - if (userPictureView) - { - [self.roomDataSource.room.summary setRoomAvatarImageIn:userPictureView]; + // bwi: if the room is a personal notes room a local image is used as room avatar + if (userPictureView) { + if (BwiBuildSettings.bwiUseCustomPersonalNotesAvatar + && [self.roomDataSource.room isPersonalNotesRoom]) { + + PersonalNotesDefaultService *service = [PersonalNotesDefaultService service:self.mainSession]; + userPictureView.image = [UIImage imageNamed:[service avatarImageUrl]]; + } else { + [self.roomDataSource.room.summary setRoomAvatarImageIn:userPictureView]; + } } - + [self refreshMissedDiscussionsCount:YES]; if (RiotSettings.shared.enableThreads) diff --git a/Riot/Modules/Room/Settings/RoomSettingsViewController.m b/Riot/Modules/Room/Settings/RoomSettingsViewController.m index f94649582..7cf3741f1 100644 --- a/Riot/Modules/Room/Settings/RoomSettingsViewController.m +++ b/Riot/Modules/Room/Settings/RoomSettingsViewController.m @@ -2397,10 +2397,19 @@ NSString *const kRoomSettingsAdvancedE2eEnabledCellViewIdentifier = @"kRoomSetti } else { - [mxRoom.summary setRoomAvatarImageIn:roomPhotoCell.mxkImageView]; - - roomPhotoCell.userInteractionEnabled = (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomAvatar]); - roomPhotoCell.mxkImageView.alpha = roomPhotoCell.userInteractionEnabled ? 1.0f : 0.5f; + // bwi if the room is a personal notes room use a local image + if (BwiBuildSettings.bwiUseCustomPersonalNotesAvatar && [mxRoom isPersonalNotesRoom] ) { + PersonalNotesDefaultService *service = [[PersonalNotesDefaultService alloc] initWithMxSession:self.mainSession]; + roomPhotoCell.mxkImageView.image = [UIImage imageNamed:service.avatarImageUrl]; + + roomPhotoCell.userInteractionEnabled = false; + roomPhotoCell.mxkImageView.alpha = 0.5f; + } else { + [mxRoom.summary setRoomAvatarImageIn:roomPhotoCell.mxkImageView]; + + roomPhotoCell.userInteractionEnabled = (oneSelfPowerLevel >= [powerLevels minimumPowerLevelForSendingEventAsStateEvent:kMXEventTypeStringRoomAvatar]); + roomPhotoCell.mxkImageView.alpha = roomPhotoCell.userInteractionEnabled ? 1.0f : 0.5f; + } } cell = roomPhotoCell; diff --git a/Riot/Modules/TabBar/MasterTabBarController.m b/Riot/Modules/TabBar/MasterTabBarController.m index d5eabc7a1..5d2499476 100644 --- a/Riot/Modules/TabBar/MasterTabBarController.m +++ b/Riot/Modules/TabBar/MasterTabBarController.m @@ -1218,6 +1218,17 @@ if (BuildSettings.bwiPersonalNotesRoom) { [service createPersonalNotesRoomIfNeeded]; } + if (BwiBuildSettings.bwiUseCustomPersonalNotesAvatar) { + MXSession *mainSession = mxSessionArray.firstObject; + + if (mainSession) { + for (MXRoom* room in [mainSession roomsWithTag:PersonalNotesDefaultService.roomTag]) { + if ([room.summary.avatar length] > 0) { + [room setAvatar:@"" success:nil failure:nil]; + } + } + } + } } #pragma mark - bwi matomo tracking diff --git a/bwi/BwiBuildSettings.swift b/bwi/BwiBuildSettings.swift index b39b0dc8f..f4f316d41 100644 --- a/bwi/BwiBuildSettings.swift +++ b/bwi/BwiBuildSettings.swift @@ -73,4 +73,5 @@ final class BwiBuildSettings: NSObject { static let bwiAutoCreateAliasOnRoomCreation = true static let bwiLocationShareButtonVisible = false + static let bwiUseCustomPersonalNotesAvatar = true } diff --git a/bwi/PersonalNotes/PersonalNotesDefaultService.swift b/bwi/PersonalNotes/PersonalNotesDefaultService.swift index 977ef5d7f..1dc0772f7 100644 --- a/bwi/PersonalNotes/PersonalNotesDefaultService.swift +++ b/bwi/PersonalNotes/PersonalNotesDefaultService.swift @@ -114,31 +114,19 @@ extension PersonalNotesDefaultService : PersonalNotesService { } if roomId == nil { - let image = UIImage(named: self.defaultAvatar) - let uploader = MXMediaManager.prepareUploader(withMatrixSession: self.session, initialRange: 0, andRange: 1.0) - uploader?.uploadData(image?.jpegData(compressionQuality: 0.5), filename: nil, mimeType: "image/jpeg", - success: { (urlString) in - if let urlString = urlString { - self.avatarURL = urlString - } - self.session.createRoom(parameters: self.roomParameters()) { (response) in - switch response { - case .success(let room): - _ = self.setRoomId(roomId: room.roomId) - - let tagOrder = self.session.tagOrderToBe(at: 0, from: UInt(NSNotFound), withTag: PersonalNotesDefaultService.roomTag) ?? "" - room.replaceTag(PersonalNotesDefaultService.roomTag, with: PersonalNotesDefaultService.roomTag, withOrder: tagOrder) { (response) in - - } - case .failure(let error): - MXLog.error("**BWI** Personal Notes creation failure: \(String(describing: error))") - } - } - }, - failure: { (error) in - guard let error = error else { return } - MXLog.error("**BWI** Personal Notes creation failure: \(String(describing: error))") - }) + self.session.createRoom(parameters: self.roomParameters()) { (response) in + switch response { + case .success(let room): + _ = self.setRoomId(roomId: room.roomId) + + let tagOrder = self.session.tagOrderToBe(at: 0, from: UInt(NSNotFound), withTag: PersonalNotesDefaultService.roomTag) ?? "" + room.replaceTag(PersonalNotesDefaultService.roomTag, with: PersonalNotesDefaultService.roomTag, withOrder: tagOrder) { (response) in + + } + case .failure(let error): + MXLog.error("**BWI** Personal Notes creation failure: \(String(describing: error))") + } + } } } } @@ -146,4 +134,8 @@ extension PersonalNotesDefaultService : PersonalNotesService { func resetPersonalNotesRoom() { session.setAccountData([:], forType: AccountDataTypes.personalNotes, success: nil, failure: nil) } + + func avatarImageUrl() -> String { + return self.defaultAvatar + } } diff --git a/bwi/PersonalNotes/PersonalNotesService.swift b/bwi/PersonalNotes/PersonalNotesService.swift index 76db931f5..64a92d80f 100644 --- a/bwi/PersonalNotes/PersonalNotesService.swift +++ b/bwi/PersonalNotes/PersonalNotesService.swift @@ -22,4 +22,6 @@ protocol PersonalNotesService { func createPersonalNotesRoomIfNeeded() func resetPersonalNotesRoom() + + func avatarImageUrl() -> String }