mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-24 02:22:44 +02:00
Setup a dedicated listener owned by PresenceIndicatorView
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
// We add here a protocol to handle tap gesture in title view.
|
||||
@class RoomTitleView;
|
||||
@class PresenceIndicatorView;
|
||||
@protocol PresenceIndicatorViewDelegate;
|
||||
@protocol RoomTitleViewTapGestureDelegate <NSObject>
|
||||
|
||||
/**
|
||||
@@ -33,7 +34,7 @@
|
||||
|
||||
@end
|
||||
|
||||
@interface RoomTitleView : MXKRoomTitleView <UIGestureRecognizerDelegate>
|
||||
@interface RoomTitleView : MXKRoomTitleView <UIGestureRecognizerDelegate, PresenceIndicatorViewDelegate>
|
||||
|
||||
@property (weak, nonatomic) IBOutlet UIView *titleMask;
|
||||
@property (weak, nonatomic) IBOutlet UIImageView *badgeImageView;
|
||||
|
||||
@@ -20,15 +20,6 @@
|
||||
#import "ThemeService.h"
|
||||
#import "GeneratedInterface-Swift.h"
|
||||
|
||||
@interface RoomTitleView()
|
||||
{
|
||||
/**
|
||||
The observer of the presence for direct user.
|
||||
*/
|
||||
id mxDirectUserPresenceObserver;
|
||||
}
|
||||
@end
|
||||
|
||||
@implementation RoomTitleView
|
||||
|
||||
+ (UINib *)nib
|
||||
@@ -118,22 +109,16 @@
|
||||
}
|
||||
else if (self.mxRoom)
|
||||
{
|
||||
if (!mxDirectUserPresenceObserver && self.mxRoom.isDirect)
|
||||
if (self.mxRoom.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.mxRoom.directUserId;
|
||||
|
||||
if (directUserId && [directUserId isEqualToString:notif.object])
|
||||
{
|
||||
[self refreshContactPresence];
|
||||
}
|
||||
}];
|
||||
|
||||
[self refreshContactPresence];
|
||||
MXUser *contact = [self.mxRoom.mxSession userWithUserId:self.mxRoom.directUserId];
|
||||
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.headerBackgroundColor;
|
||||
self.presenceIndicatorView.delegate = self;
|
||||
[self.presenceIndicatorView configureWithUserId:self.mxRoom.directUserId presence:contact.presence];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.presenceIndicatorView stopListeningPresenceUpdates];
|
||||
}
|
||||
|
||||
self.displayNameTextField.text = self.mxRoom.summary.displayname;
|
||||
@@ -149,38 +134,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)refreshContactPresence
|
||||
{
|
||||
MXUser *contact = [self.mxRoom.mxSession userWithUserId:self.mxRoom.directUserId];
|
||||
BOOL presenceHidden = contact.presence == MXPresenceUnknown;
|
||||
self.presenceIndicatorView.hidden = presenceHidden;
|
||||
self.presenceIndicatorView.borderColor = ThemeService.shared.theme.headerBackgroundColor;
|
||||
self.presenceIndicatorView.presence = contact.presence;
|
||||
if (presenceHidden)
|
||||
{
|
||||
[self.badgeImageViewLeadingToPictureViewConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewCenterYToDisplayNameConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewToPictureViewBottomConstraint setPriority:UILayoutPriorityRequired];
|
||||
[self.badgeImageViewToPictureViewTrailingConstraint setPriority:UILayoutPriorityRequired];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.badgeImageViewToPictureViewBottomConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewToPictureViewTrailingConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewLeadingToPictureViewConstraint setPriority:UILayoutPriorityRequired];
|
||||
[self.badgeImageViewCenterYToDisplayNameConstraint setPriority:UILayoutPriorityRequired];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)destroy
|
||||
{
|
||||
self.tapGestureDelegate = nil;
|
||||
|
||||
if (mxDirectUserPresenceObserver) {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:mxDirectUserPresenceObserver];
|
||||
mxDirectUserPresenceObserver = nil;
|
||||
}
|
||||
|
||||
[super destroy];
|
||||
}
|
||||
|
||||
@@ -246,4 +203,24 @@
|
||||
return self.typingLabel.text;
|
||||
}
|
||||
|
||||
#pragma mark - PresenceIndicatorViewDelegate
|
||||
|
||||
- (void)presenceIndicatorViewDidUpdateVisibility:(PresenceIndicatorView *)presenceIndicatorView isHidden:(BOOL)isHidden
|
||||
{
|
||||
if (isHidden)
|
||||
{
|
||||
[self.badgeImageViewLeadingToPictureViewConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewCenterYToDisplayNameConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewToPictureViewBottomConstraint setPriority:UILayoutPriorityRequired];
|
||||
[self.badgeImageViewToPictureViewTrailingConstraint setPriority:UILayoutPriorityRequired];
|
||||
}
|
||||
else
|
||||
{
|
||||
[self.badgeImageViewToPictureViewBottomConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewToPictureViewTrailingConstraint setPriority:UILayoutPriorityDefaultLow];
|
||||
[self.badgeImageViewLeadingToPictureViewConstraint setPriority:UILayoutPriorityRequired];
|
||||
[self.badgeImageViewCenterYToDisplayNameConstraint setPriority:UILayoutPriorityRequired];
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user