Presence: fix live updates on Home & DM list

This commit is contained in:
aringenbach
2022-05-11 15:05:56 +02:00
parent 0417263fdb
commit 1c365a3d84
5 changed files with 76 additions and 9 deletions
@@ -27,6 +27,15 @@
#import "MXRoomSummary+Riot.h"
@interface RecentTableViewCell()
{
/**
The observer of the presence for direct user.
*/
id mxDirectUserPresenceObserver;
}
@end
@implementation RecentTableViewCell
#pragma mark - Class methods
@@ -48,6 +57,7 @@
self.lastEventDescription.textColor = ThemeService.shared.theme.textSecondaryColor;
self.lastEventDate.textColor = ThemeService.shared.theme.textSecondaryColor;
self.missedNotifAndUnreadBadgeLabel.textColor = ThemeService.shared.theme.baseTextPrimaryColor;
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.backgroundColor;
self.roomAvatar.defaultBackgroundColor = [UIColor clearColor];
}
@@ -128,11 +138,25 @@
roomId:roomCellData.roomIdentifier
displayName:roomCellData.roomDisplayname
mediaManager:roomCellData.mxSession.mediaManager];
// Presence indicator
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.backgroundColor;
self.presenceIndicatorView.presence = roomCellData.presence;
self.presenceIndicatorView.hidden = roomCellData.presence == MXPresenceUnknown;
if (!mxDirectUserPresenceObserver && roomCellData.directUserId)
{
// Observe contact presence change
MXWeakify(self);
mxDirectUserPresenceObserver = [[NSNotificationCenter defaultCenter] addObserverForName:kMXKContactManagerMatrixUserPresenceChangeNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *notif) {
MXStrongifyAndReturnIfNil(self);
NSString* directUserId = self->roomCellData.directUserId;
if (directUserId && [directUserId isEqualToString:notif.object])
{
MXPresence presence = [MXTools presence:[notif.userInfo objectForKey:kMXKContactManagerMatrixPresenceKey]];
[self refreshContactPresence:presence];
}
}];
[self refreshContactPresence:roomCellData.presence];
}
}
else
{
@@ -140,6 +164,12 @@
}
}
- (void)refreshContactPresence:(MXPresence)presence
{
self.presenceIndicatorView.presence = presence;
self.presenceIndicatorView.hidden = presence == MXPresenceUnknown;
}
+ (CGFloat)heightForCellData:(MXKCellData *)cellData withMaximumWidth:(CGFloat)maxWidth
{
// The height is fixed