mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Presence: fix live updates on Home & DM list
This commit is contained in:
parent
835cddab01
commit
6cc5433ac4
5 changed files with 76 additions and 9 deletions
|
@ -27,6 +27,15 @@
|
||||||
|
|
||||||
#import "MXRoomSummary+Riot.h"
|
#import "MXRoomSummary+Riot.h"
|
||||||
|
|
||||||
|
@interface RecentTableViewCell()
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
The observer of the presence for direct user.
|
||||||
|
*/
|
||||||
|
id mxDirectUserPresenceObserver;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation RecentTableViewCell
|
@implementation RecentTableViewCell
|
||||||
|
|
||||||
#pragma mark - Class methods
|
#pragma mark - Class methods
|
||||||
|
@ -48,6 +57,7 @@
|
||||||
self.lastEventDescription.textColor = ThemeService.shared.theme.textSecondaryColor;
|
self.lastEventDescription.textColor = ThemeService.shared.theme.textSecondaryColor;
|
||||||
self.lastEventDate.textColor = ThemeService.shared.theme.textSecondaryColor;
|
self.lastEventDate.textColor = ThemeService.shared.theme.textSecondaryColor;
|
||||||
self.missedNotifAndUnreadBadgeLabel.textColor = ThemeService.shared.theme.baseTextPrimaryColor;
|
self.missedNotifAndUnreadBadgeLabel.textColor = ThemeService.shared.theme.baseTextPrimaryColor;
|
||||||
|
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.backgroundColor;
|
||||||
|
|
||||||
self.roomAvatar.defaultBackgroundColor = [UIColor clearColor];
|
self.roomAvatar.defaultBackgroundColor = [UIColor clearColor];
|
||||||
}
|
}
|
||||||
|
@ -129,10 +139,24 @@
|
||||||
displayName:roomCellData.roomDisplayname
|
displayName:roomCellData.roomDisplayname
|
||||||
mediaManager:roomCellData.mxSession.mediaManager];
|
mediaManager:roomCellData.mxSession.mediaManager];
|
||||||
|
|
||||||
// Presence indicator
|
if (!mxDirectUserPresenceObserver && roomCellData.directUserId)
|
||||||
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.backgroundColor;
|
{
|
||||||
self.presenceIndicatorView.presence = roomCellData.presence;
|
// Observe contact presence change
|
||||||
self.presenceIndicatorView.hidden = roomCellData.presence == MXPresenceUnknown;
|
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
|
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
|
+ (CGFloat)heightForCellData:(MXKCellData *)cellData withMaximumWidth:(CGFloat)maxWidth
|
||||||
{
|
{
|
||||||
// The height is fixed
|
// The height is fixed
|
||||||
|
|
|
@ -26,6 +26,15 @@
|
||||||
|
|
||||||
#import "MXTools.h"
|
#import "MXTools.h"
|
||||||
|
|
||||||
|
@interface RoomCollectionViewCell()
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
The observer of the presence for direct user.
|
||||||
|
*/
|
||||||
|
id mxDirectUserPresenceObserver;
|
||||||
|
}
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation RoomCollectionViewCell
|
@implementation RoomCollectionViewCell
|
||||||
|
|
||||||
#pragma mark - Class methods
|
#pragma mark - Class methods
|
||||||
|
@ -147,10 +156,31 @@
|
||||||
displayName:roomCellData.roomDisplayname
|
displayName:roomCellData.roomDisplayname
|
||||||
mediaManager:roomCellData.mxSession.mediaManager];
|
mediaManager:roomCellData.mxSession.mediaManager];
|
||||||
|
|
||||||
// Presence indicator
|
if (!mxDirectUserPresenceObserver && roomCellData.directUserId)
|
||||||
self.presenceIndicatorView.presence = roomCellData.presence;
|
{
|
||||||
self.presenceIndicatorView.hidden = roomCellData.presence == MXPresenceUnknown;
|
// 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];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)refreshContactPresence:(MXPresence)presence
|
||||||
|
{
|
||||||
|
self.presenceIndicatorView.presence = presence;
|
||||||
|
self.presenceIndicatorView.hidden = presence == MXPresenceUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (MXKCellData*)renderedCellData
|
- (MXKCellData*)renderedCellData
|
||||||
|
|
|
@ -93,6 +93,11 @@
|
||||||
return roomSummary.avatar;
|
return roomSummary.avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSString *)directUserId
|
||||||
|
{
|
||||||
|
return self.roomSummary.directUserId;
|
||||||
|
}
|
||||||
|
|
||||||
- (MXPresence)presence
|
- (MXPresence)presence
|
||||||
{
|
{
|
||||||
if (self.roomSummary.isDirect)
|
if (self.roomSummary.isDirect)
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
@property (nonatomic, readonly) NSString *roomIdentifier;
|
@property (nonatomic, readonly) NSString *roomIdentifier;
|
||||||
@property (nonatomic, readonly) NSString *roomDisplayname;
|
@property (nonatomic, readonly) NSString *roomDisplayname;
|
||||||
@property (nonatomic, readonly) NSString *avatarUrl;
|
@property (nonatomic, readonly) NSString *avatarUrl;
|
||||||
|
@property (nonatomic, readonly) NSString *directUserId;
|
||||||
@property (nonatomic, readonly) MXPresence presence;
|
@property (nonatomic, readonly) MXPresence presence;
|
||||||
@property (nonatomic, readonly) NSString *lastEventTextMessage;
|
@property (nonatomic, readonly) NSString *lastEventTextMessage;
|
||||||
@property (nonatomic, readonly) NSString *lastEventDate;
|
@property (nonatomic, readonly) NSString *lastEventDate;
|
||||||
|
|
1
changelog.d/6144.bugfix
Normal file
1
changelog.d/6144.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Presence: fix live updates on Home & DM list
|
Loading…
Reference in a new issue