From 2fc20702d947194561ec75249fb520b6bdaf02e4 Mon Sep 17 00:00:00 2001 From: Frederic Jacobs Date: Fri, 19 Jun 2015 14:31:50 +0200 Subject: [PATCH] Fixing crash on responding to phone call. --- Signal/src/contact/ContactsManager.m | 14 ++++++++++++-- Signal/src/phone/signaling/SignalUtil.m | 18 +++++++++++++++--- .../textsecure/Messages/TSMessagesManager.m | 4 +++- .../view controllers/MessagesViewController.m | 5 +++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/Signal/src/contact/ContactsManager.m b/Signal/src/contact/ContactsManager.m index 426792f4d..4a48ce04c 100644 --- a/Signal/src/contact/ContactsManager.m +++ b/Signal/src/contact/ContactsManager.m @@ -222,7 +222,7 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in } -(Contact*)latestContactForPhoneNumber:(PhoneNumber *)phoneNumber { - NSArray *allContacts = latestContactsById.allValues; + NSArray *allContacts = [self allContacts]; ContactSearchBlock searchBlock = ^BOOL(Contact *contact, NSUInteger idx, BOOL *stop) { for (PhoneNumber *number in contact.parsedPhoneNumbers) { @@ -336,7 +336,17 @@ void onAddressBookChanged(ABAddressBookRef notifyAddressBook, CFDictionaryRef in } - (NSArray*)allContacts { - return [latestContactsById allValues]; + NSMutableArray *allContacts = [NSMutableArray array]; + + for (NSString *key in latestContactsById.allKeys){ + Contact *contact = [latestContactsById objectForKey:key]; + + if ([contact isKindOfClass:[Contact class]]) { + [allContacts addObject:contact]; + } + } + return allContacts; + } - (NSArray*)recordsForContacts:(NSArray*) contacts{ diff --git a/Signal/src/phone/signaling/SignalUtil.m b/Signal/src/phone/signaling/SignalUtil.m index dd247b340..b97fea0d2 100644 --- a/Signal/src/phone/signaling/SignalUtil.m +++ b/Signal/src/phone/signaling/SignalUtil.m @@ -32,15 +32,27 @@ } -(bool) isRingingForSession:(int64_t)targetSessionId { - return [self.method isEqualToString:@"RING"] && [@(targetSessionId) isEqualToNumber:self.tryGetSessionId]; + NSNumber *sessionId = self.tryGetSessionId; + BOOL isMethod = [self.method isEqualToString:@"RING"]; + BOOL isSession = sessionId?[@(targetSessionId) isEqualToNumber:sessionId]:NO; + + return isMethod&&isSession; } -(bool) isHangupForSession:(int64_t)targetSessionId { - return [self.method isEqualToString:@"DELETE"] && self.tryGetSessionId?[@(targetSessionId) isEqualToNumber:self.tryGetSessionId]:NO; + NSNumber *sessionId = self.tryGetSessionId; + BOOL isMethod = [self.method isEqualToString:@"DELETE"]; + BOOL isSession = sessionId?[@(targetSessionId) isEqualToNumber:sessionId]:NO; + + return isMethod&&isSession; } -(bool) isBusyForSession:(int64_t)targetSessionId { - return [self.method isEqualToString:@"BUSY"] && [@(targetSessionId) isEqualToNumber:self.tryGetSessionId]; + NSNumber *sessionId = self.tryGetSessionId; + BOOL isMethod = [self.method isEqualToString:@"BUSY"]; + BOOL isSession = sessionId?[@(targetSessionId) isEqualToNumber:sessionId]:NO; + + return isMethod&&isSession; } +(HttpRequest*) httpRequestToOpenPortWithSessionId:(int64_t)sessionId { diff --git a/Signal/src/textsecure/Messages/TSMessagesManager.m b/Signal/src/textsecure/Messages/TSMessagesManager.m index aad185674..dc3b42c9f 100644 --- a/Signal/src/textsecure/Messages/TSMessagesManager.m +++ b/Signal/src/textsecure/Messages/TSMessagesManager.m @@ -430,7 +430,9 @@ TSContactThread *cThread = (TSContactThread*)thread; if (call.callType == RPRecentCallTypeMissed) { - [[UIApplication sharedApplication] cancelLocalNotification:notif]; + if (notif) { + [[UIApplication sharedApplication] cancelLocalNotification:notif]; + } UILocalNotification *notification = [[UILocalNotification alloc] init]; notification.category = Signal_CallBack_Category; diff --git a/Signal/src/view controllers/MessagesViewController.m b/Signal/src/view controllers/MessagesViewController.m index b2b0cf735..124f5d377 100644 --- a/Signal/src/view controllers/MessagesViewController.m +++ b/Signal/src/view controllers/MessagesViewController.m @@ -796,6 +796,11 @@ typedef enum : NSUInteger { if([self.thread isKindOfClass:[TSGroupThread class]]) { NSString *name = [[Environment getCurrent].contactsManager nameStringForPhoneIdentifier:msg.senderId]; name = name ? name : msg.senderId; + + if (!name) { + name = @""; + } + NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:name]; [attrStr appendAttributedString:[NSAttributedString attributedStringWithAttachment:textAttachment]];