Merge branch 'charlesmchen/holidayCodeReviewOmnibus'

pull/1/head
Matthew Chen 7 years ago
commit c758f85cc8

@ -134,7 +134,7 @@ CHECKOUT OPTIONS:
:commit: 7054e4b13ee5bcd6d524adb6dc9a726e8c466308
:git: https://github.com/WhisperSystems/JSQMessagesViewController.git
SignalServiceKit:
:commit: a9bac8bce7ea3a0209024d0b0a937d45748aea97
:commit: c0cb153f29e0102355c01273570115217bb0454f
:git: https://github.com/WhisperSystems/SignalServiceKit.git
SocketRocket:
:commit: 877ac7438be3ad0b45ef5ca3969574e4b97112bf

@ -38,8 +38,8 @@ NS_ASSUME_NONNULL_BEGIN
@interface OWSMessagesBubblesSizeCalculator ()
@property (nonatomic) OWSSystemMessageCell *referenceSystemMessageCell;
@property (nonatomic) OWSUnreadIndicatorCell *referenceUnreadIndicatorCell;
@property (nonatomic, readonly) OWSSystemMessageCell *referenceSystemMessageCell;
@property (nonatomic, readonly) OWSUnreadIndicatorCell *referenceUnreadIndicatorCell;
@end
@ -47,6 +47,15 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSMessagesBubblesSizeCalculator
- (instancetype)init
{
if (self = [super init]) {
_referenceSystemMessageCell = [OWSSystemMessageCell new];
_referenceUnreadIndicatorCell = [OWSUnreadIndicatorCell new];
}
return self;
}
/**
* Computes and returns the size of the `messageBubbleImageView` property
* of a `JSQMessagesCollectionViewCell` for the specified messageData at indexPath.
@ -119,10 +128,6 @@ NS_ASSUME_NONNULL_BEGIN
return [cachedSize CGSizeValue];
}
if (!self.referenceSystemMessageCell) {
self.referenceSystemMessageCell = [OWSSystemMessageCell new];
}
CGSize result = [self.referenceSystemMessageCell cellSizeForInteraction:interaction
collectionViewWidth:layout.collectionView.width];
@ -143,10 +148,6 @@ NS_ASSUME_NONNULL_BEGIN
return [cachedSize CGSizeValue];
}
if (!self.referenceUnreadIndicatorCell) {
self.referenceUnreadIndicatorCell = [OWSUnreadIndicatorCell new];
}
CGSize result = [self.referenceUnreadIndicatorCell cellSizeForInteraction:interaction
collectionViewWidth:layout.collectionView.width];

@ -14,7 +14,7 @@ class ProfileFetcherJob: NSObject {
let thread: TSThread
// This property is only accessed on the default global queue.
// This property is only accessed on the main queue.
static var fetchDateMap = [String: Date]()
public class func run(thread: TSThread, networkManager: TSNetworkManager) {
@ -31,7 +31,7 @@ class ProfileFetcherJob: NSObject {
public func run() {
AssertIsOnMainThread()
DispatchQueue.global().async {
DispatchQueue.main.async {
for recipientId in self.thread.recipientIdentifiers {
self.getProfile(recipientId: recipientId)
}
@ -40,27 +40,24 @@ class ProfileFetcherJob: NSObject {
public func getProfile(recipientId: String, remainingRetries: Int = 3) {
// Only throttle profile fetch in production builds in order to
// facilitate debugging.
if !_isDebugAssertConfiguration() {
if let lastDate = ProfileFetcherJob.fetchDateMap[recipientId] {
let lastTimeInterval = fabs(lastDate.timeIntervalSinceNow)
// Don't check a profile more often than every N minutes.
let kGetProfileMaxFrequencySeconds = 60.0 * 5.0
if lastTimeInterval < kGetProfileMaxFrequencySeconds {
Logger.info("\(self.TAG) skipping getProfile: \(recipientId), lastTimeInterval: \(lastTimeInterval)")
return
}
if let lastDate = ProfileFetcherJob.fetchDateMap[recipientId] {
let lastTimeInterval = fabs(lastDate.timeIntervalSinceNow)
// Don't check a profile more often than every N minutes.
//
// Only throttle profile fetch in production builds in order to
// facilitate debugging.
let kGetProfileMaxFrequencySeconds = _isDebugAssertConfiguration() ? 0 : 60.0 * 5.0
guard lastTimeInterval > kGetProfileMaxFrequencySeconds else {
Logger.info("\(self.TAG) skipping getProfile: \(recipientId), lastTimeInterval: \(lastTimeInterval)")
return
}
ProfileFetcherJob.fetchDateMap[recipientId] = Date()
}
ProfileFetcherJob.fetchDateMap[recipientId] = Date()
Logger.error("\(self.TAG) getProfile: \(recipientId)")
let request = OWSGetProfileRequest(recipientId: recipientId)
// We don't need to retainUntilComplete() since the success and failure
// handlers both close over a strong reference to self.
self.networkManager.makeRequest(
request,
success: { (_: URLSessionDataTask?, responseObject: Any?) -> Void in

@ -685,7 +685,7 @@ typedef enum : NSUInteger {
[result addObject:recipientId];
}
}
return result;
return [result copy];
}
- (void)ensureBannerState
@ -838,7 +838,7 @@ typedef enum : NSUInteger {
preferredStyle:UIAlertControllerStyleActionSheet];
__weak MessagesViewController *weakSelf = self;
UIAlertAction *unblockAction = [UIAlertAction
UIAlertAction *verifyAction = [UIAlertAction
actionWithTitle:
NSLocalizedString(@"VERIFY_PRIVACY",
@"Label for button or row which allows users to verify the safety number of another user.")
@ -846,7 +846,7 @@ typedef enum : NSUInteger {
handler:^(UIAlertAction *_Nonnull action) {
[weakSelf showConversationSettingsAndShowVerification:YES];
}];
[actionSheetController addAction:unblockAction];
[actionSheetController addAction:verifyAction];
UIAlertAction *dismissAction =
[UIAlertAction actionWithTitle:NSLocalizedString(@"DISMISS_BUTTON_TEXT",
@ -882,7 +882,7 @@ typedef enum : NSUInteger {
[OWSIdentityManager.sharedManager setVerificationState:OWSVerificationStateDefault
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:YES];
isUserInitiatedChange:YES];
}
}
@ -1308,7 +1308,7 @@ typedef enum : NSUInteger {
}
// Bubbles
self.collectionView.collectionViewLayout.bubbleSizeCalculator = [[OWSMessagesBubblesSizeCalculator alloc] init];
self.collectionView.collectionViewLayout.bubbleSizeCalculator = [OWSMessagesBubblesSizeCalculator new];
JSQMessagesBubbleImageFactory *bubbleFactory = [[JSQMessagesBubbleImageFactory alloc] init];
self.incomingBubbleImageData =
[bubbleFactory incomingMessagesBubbleImageWithColor:[UIColor jsq_messageBubbleLightGrayColor]];
@ -1341,7 +1341,7 @@ typedef enum : NSUInteger {
// return from FingerprintViewController.
[self dismissKeyBoard];
[FingerprintViewController showVerificationViewFromViewController:self recipientId:recipientId];
[FingerprintViewController presentFromViewController:self recipientId:recipientId];
}
#pragma mark - Calls

@ -90,10 +90,10 @@ NS_ASSUME_NONNULL_BEGIN
NSData *identityKey =
[identityManger identityKeyForRecipientId:recipientId];
[[OWSIdentityManager sharedManager]
setVerificationState:OWSVerificationStateDefault
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:NO];
setVerificationState:OWSVerificationStateDefault
identityKey:identityKey
recipientId:recipientId
isUserInitiatedChange:NO];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"Verified"
style:UIAlertActionStyleDefault
@ -101,10 +101,10 @@ NS_ASSUME_NONNULL_BEGIN
NSData *identityKey =
[identityManger identityKeyForRecipientId:recipientId];
[[OWSIdentityManager sharedManager]
setVerificationState:OWSVerificationStateVerified
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:NO];
setVerificationState:OWSVerificationStateVerified
identityKey:identityKey
recipientId:recipientId
isUserInitiatedChange:NO];
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"No Longer Verified"
style:UIAlertActionStyleDefault
@ -112,10 +112,10 @@ NS_ASSUME_NONNULL_BEGIN
NSData *identityKey =
[identityManger identityKeyForRecipientId:recipientId];
[[OWSIdentityManager sharedManager]
setVerificationState:OWSVerificationStateNoLongerVerified
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:NO];
setVerificationState:OWSVerificationStateNoLongerVerified
identityKey:identityKey
recipientId:recipientId
isUserInitiatedChange:NO];
}]];
[[UIApplication sharedApplication].frontmostViewController presentViewController:alertController

@ -69,7 +69,7 @@ NS_ASSUME_NONNULL_BEGIN
[OWSIdentityManager.sharedManager setVerificationState:verificationState
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:verificationState != OWSVerificationStateNoLongerVerified];
isUserInitiatedChange:verificationState != OWSVerificationStateNoLongerVerified];
}
@end

@ -6,7 +6,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface FingerprintViewController : UIViewController
+ (void)showVerificationViewFromViewController:(UIViewController *)viewController recipientId:(NSString *)recipientId;
+ (void)presentFromViewController:(UIViewController *)viewController recipientId:(NSString *)recipientId;
@end

@ -89,7 +89,7 @@ typedef void (^CustomLayoutBlock)();
@implementation FingerprintViewController
+ (void)showVerificationViewFromViewController:(UIViewController *)viewController recipientId:(NSString *)recipientId
+ (void)presentFromViewController:(UIViewController *)viewController recipientId:(NSString *)recipientId
{
OWSAssert(recipientId.length > 0);
@ -510,10 +510,10 @@ typedef void (^CustomLayoutBlock)();
BOOL isVerified = [[OWSIdentityManager sharedManager] verificationStateForRecipientId:self.recipientId]
== OWSVerificationStateVerified;
[[OWSIdentityManager sharedManager]
setVerificationState:(isVerified ? OWSVerificationStateDefault : OWSVerificationStateVerified)identityKey
:self.identityKey
recipientId:self.recipientId
sendSyncMessage:YES];
setVerificationState:(isVerified ? OWSVerificationStateDefault : OWSVerificationStateVerified)identityKey
:self.identityKey
recipientId:self.recipientId
isUserInitiatedChange:YES];
[self dismissViewControllerAnimated:YES completion:nil];
}

@ -205,7 +205,7 @@ NS_ASSUME_NONNULL_BEGIN
[OWSIdentityManager.sharedManager setVerificationState:OWSVerificationStateVerified
identityKey:identityKey
recipientId:recipientId
sendSyncMessage:YES];
isUserInitiatedChange:YES];
[viewController dismissViewControllerAnimated:true completion:nil];
}]];
UIAlertAction *dismissAction =

@ -679,7 +679,7 @@ NS_ASSUME_NONNULL_BEGIN
NSString *recipientId = self.thread.contactIdentifier;
OWSAssert(recipientId.length > 0);
[FingerprintViewController showVerificationViewFromViewController:self recipientId:recipientId];
[FingerprintViewController presentFromViewController:self recipientId:recipientId];
}
- (void)showGroupMembersView

@ -55,7 +55,7 @@ class SafetyNumberConfirmationAlert: NSObject {
Logger.info("\(self.TAG) Confirmed identity: \(untrustedIdentity)")
OWSDispatch.sessionStoreQueue().async {
OWSIdentityManager.shared().setVerificationState(.default, identityKey: untrustedIdentity.identityKey, recipientId: untrustedIdentity.recipientId, sendSyncMessage: true)
OWSIdentityManager.shared().setVerificationState(.default, identityKey: untrustedIdentity.identityKey, recipientId: untrustedIdentity.recipientId, isUserInitiatedChange: true)
DispatchQueue.main.async {
completion(true)
}
@ -86,7 +86,7 @@ class SafetyNumberConfirmationAlert: NSObject {
Logger.info("\(self.TAG) Missing frontmostViewController")
return
}
FingerprintViewController.showVerificationView(from:fromViewController, recipientId:theirRecipientId)
FingerprintViewController.present(from:fromViewController, recipientId:theirRecipientId)
}
private func untrustedIdentityForSending(recipientIds: [String]) -> OWSRecipientIdentity? {

@ -317,7 +317,7 @@ NS_ASSUME_NONNULL_BEGIN
{
OWSAssert(recipientId.length > 0);
[FingerprintViewController showVerificationViewFromViewController:self recipientId:recipientId];
[FingerprintViewController presentFromViewController:self recipientId:recipientId];
}
#pragma mark - ContactsViewHelperDelegate

@ -500,13 +500,13 @@ protocol CallServiceObserver: class {
return
}
guard self.call == nil else {
// TODO on iOS10+ we can use CallKit to swap calls rather than just returning busy immediately.
Logger.info("\(TAG) receivedCallOffer for thread: \(thread) but we're already in call: \(call!)")
handleLocalBusyCall(newCall, thread: thread)
return
}

@ -31,6 +31,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSSystemMessageCell
// `[UIView init]` invokes `[self initWithFrame:...]`.
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
@ -40,21 +41,9 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
- (instancetype)init
{
if (self = [super init]) {
[self commontInit];
}
return self;
}
- (void)commontInit
{
if (self.imageView) {
// Don't init twice.
return;
}
OWSAssert(!self.imageView);
[self setTranslatesAutoresizingMaskIntoConstraints:NO];

@ -29,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation OWSUnreadIndicatorCell
// `[UIView init]` invokes `[self initWithFrame:...]`.
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
@ -38,21 +39,9 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
- (instancetype)init
{
if (self = [super init]) {
[self commontInit];
}
return self;
}
- (void)commontInit
{
if (self.bannerView) {
// Don't init twice.
return;
}
OWSAssert(!self.bannerView);
[self setTranslatesAutoresizingMaskIntoConstraints:NO];

@ -728,13 +728,13 @@
"MESSAGE_STATUS_UPLOADING" = "Uploading…";
/* Indicates that one member of this group conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer verified. Tap for options.";
"MESSAGES_VIEW_1_MEMBER_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
/* Indicates that this 1:1 conversation has been blocked. */
"MESSAGES_VIEW_CONTACT_BLOCKED" = "You Blocked this User";
/* Indicates that this 1:1 conversation is no longer verified. Embeds {{user's name or phone number}}. */
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer verified. Tap for options.";
"MESSAGES_VIEW_CONTACT_NO_LONGER_VERIFIED_FORMAT" = "%@ is no longer marked as verified. Tap for options.";
/* Action sheet title after tapping on failed download. */
"MESSAGES_VIEW_FAILED_DOWNLOAD_ACTIONSHEET_TITLE" = "Download Failed.";
@ -749,7 +749,7 @@
"MESSAGES_VIEW_GROUP_N_MEMBERS_BLOCKED_FORMAT" = "You Blocked %d Members of this Group";
/* Indicates that more than one member of this group conversation is no longer verified. */
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "More than one member of this group is no longer verified. Tap for options.";
"MESSAGES_VIEW_N_MEMBERS_NO_LONGER_VERIFIED" = "More than one member of this group is no longer marked as verified. Tap for options.";
/* The subtitle for the messages view title indicates that the title can be tapped to access settings for this conversation. */
"MESSAGES_VIEW_TITLE_SUBTITLE" = "Tap here for settings";
@ -962,7 +962,7 @@
"PHONE_NUMBER_TYPE_WORK_FAX" = "Work Fax";
/* Label indicating that the user is not verified. Embeds {{the user's name or phone number}}. */
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "%@ is not verified.";
"PRIVACY_IDENTITY_IS_NOT_VERIFIED_FORMAT" = "You have not marked %@ as verified.";
/* Badge indicating that the user is verified. */
"PRIVACY_IDENTITY_IS_VERIFIED_BADGE" = "Verified";

Loading…
Cancel
Save