From 5f297b5dece28b880996f27511541b4f83b9e08a Mon Sep 17 00:00:00 2001 From: "benoit.martins" Date: Mon, 24 Apr 2023 17:25:52 +0200 Subject: [PATCH] Add RemoveAllDelegate in AvatarBridge --- Classes/ChatConversationCreateTableView.m | 1 + Classes/ChatConversationInfoView.m | 1 + Classes/ChatsListTableView.m | 1 + Classes/ContactDetailsView.m | 2 ++ Classes/ContactsListTableView.m | 5 ++++ Classes/HistoryDetailsView.m | 2 ++ Classes/HistoryListTableView.m | 1 + .../Views/ChatConversationViewSwift.swift | 7 +++++ Classes/Swift/Voip/Widgets/Avatar.swift | 26 +++++++++++-------- 9 files changed, 35 insertions(+), 11 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index c376d08b9..5de55541c 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -122,6 +122,7 @@ - (void) viewWillDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; _notFirstTime = FALSE; } diff --git a/Classes/ChatConversationInfoView.m b/Classes/ChatConversationInfoView.m index d5cab748d..b5ea0ae06 100644 --- a/Classes/ChatConversationInfoView.m +++ b/Classes/ChatConversationInfoView.m @@ -135,6 +135,7 @@ static UICompositeViewDescription *compositeDescription = nil; - (void)viewWillDisappear:(BOOL)animated { [NSNotificationCenter.defaultCenter removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; if (!_room || !_chatRoomCbs) return; diff --git a/Classes/ChatsListTableView.m b/Classes/ChatsListTableView.m index 2b747f0e0..2fa9fab32 100644 --- a/Classes/ChatsListTableView.m +++ b/Classes/ChatsListTableView.m @@ -113,6 +113,7 @@ } [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; } - (void)layoutSubviews { diff --git a/Classes/ContactDetailsView.m b/Classes/ContactDetailsView.m index 5a885ea5e..66ce967ec 100644 --- a/Classes/ContactDetailsView.m +++ b/Classes/ContactDetailsView.m @@ -20,6 +20,7 @@ #import "ContactDetailsView.h" #import "PhoneMainView.h" #import "UIContactDetailsCell.h" +#import "linphoneapp-Swift.h" @implementation ContactDetailsView @@ -370,6 +371,7 @@ } [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; } #pragma mark - UICompositeViewDelegate Functions diff --git a/Classes/ContactsListTableView.m b/Classes/ContactsListTableView.m index 7d86ab6cb..f67e61c0a 100644 --- a/Classes/ContactsListTableView.m +++ b/Classes/ContactsListTableView.m @@ -67,6 +67,11 @@ object: userInfo]; } +-(void)viewWillDisappear:(BOOL)animated{ + [super viewWillDisappear:animated]; + [AvatarBridge removeAllObserver]; +} + -(void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; diff --git a/Classes/HistoryDetailsView.m b/Classes/HistoryDetailsView.m index 512b47db5..1231f23cf 100644 --- a/Classes/HistoryDetailsView.m +++ b/Classes/HistoryDetailsView.m @@ -20,6 +20,7 @@ #import "HistoryDetailsView.h" #import "PhoneMainView.h" #import "FastAddressBook.h" +#import "linphoneapp-Swift.h" @implementation HistoryDetailsView @@ -113,6 +114,7 @@ static UICompositeViewDescription *compositeDescription = nil; [super viewWillDisappear:animated]; [NSNotificationCenter.defaultCenter removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; } #pragma mark - Event Functions diff --git a/Classes/HistoryListTableView.m b/Classes/HistoryListTableView.m index 261397f57..e2163e7ea 100644 --- a/Classes/HistoryListTableView.m +++ b/Classes/HistoryListTableView.m @@ -110,6 +110,7 @@ [NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneCoreUpdate object:nil]; [NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneCallUpdate object:nil]; [[NSNotificationCenter defaultCenter] removeObserver:self name:@"LinphoneFriendPresenceUpdate" object:nil]; + [AvatarBridge removeAllObserver]; } #pragma mark - Event Functions diff --git a/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift b/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift index 1a9ea4acf..a6b3215aa 100644 --- a/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift +++ b/Classes/Swift/Chat/Views/ChatConversationViewSwift.swift @@ -259,6 +259,13 @@ class ChatConversationViewSwift: BackActionsNavigationView, PHPickerViewControll configureMessageField() ChatConversationViewModel.sharedModel.shareFile() } + + override func viewWillDisappear(_ animated: Bool) { + if friendDelegate != nil { + friend?.removeDelegate(delegate: friendDelegate!) + } + AvatarBridge.removeAllObserver() + } override func viewDidDisappear(_ animated: Bool) { resetView() diff --git a/Classes/Swift/Voip/Widgets/Avatar.swift b/Classes/Swift/Voip/Widgets/Avatar.swift index 15aa24285..49399169c 100644 --- a/Classes/Swift/Voip/Widgets/Avatar.swift +++ b/Classes/Swift/Voip/Widgets/Avatar.swift @@ -153,17 +153,6 @@ class Avatar : UIView { if (linphoneFriend.address?.asStringUriOnly()) != nil { let presenceModel = linphoneFriend.getPresenceModelForUriOrTel(uriOrTel: (linphoneFriend.address?.asStringUriOnly())!) NotificationCenter.default.post(name: Notification.Name("LinphoneFriendPresenceUpdate"), object: nil, userInfo: ["friend": linphoneFriend.address?.asStringUriOnly() ?? "", "isOnline": presenceModel!.consolidatedPresence.rawValue == LinphoneConsolidatedPresenceOnline.rawValue]) - - var i = 0 - self.friend.forEach { friendForEach in - if friendForEach.address?.asStringUriOnly() == linphoneFriend.address?.asStringUriOnly() { - self.friend[i].removeDelegate(delegate: self.friendDelegate[i]) - self.friendDelegate.remove(at: i) - self.friend.remove(at: i) - } - i += 1; - } - } } ) @@ -171,6 +160,17 @@ class Avatar : UIView { friend.last?.addDelegate(delegate: friendDelegate.last!) } } + + func removeAllDelegate(){ + var i = 0 + self.friend.forEach { friendForEach in + self.friend[i].removeDelegate(delegate: self.friendDelegate[i]) + i += 1; + } + + self.friendDelegate = [] + self.friend = [] + } } @@ -265,4 +265,8 @@ class Avatar : UIView { shared!.friendDelegate = [] } } + + @objc static func removeAllObserver(){ + shared!.removeAllDelegate() + } }