Merge branch 'charlesmchen/phoneParsingThreadSafety'
This commit is contained in:
commit
e63014ccf3
@ -40,7 +40,7 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||
OWSAssert(text != nil);
|
||||
OWSAssert(regionCode != nil);
|
||||
|
||||
PhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedUtil];
|
||||
PhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedThreadLocal];
|
||||
|
||||
NSError *parseError = nil;
|
||||
NBPhoneNumber *number = [phoneUtil parse:text defaultRegion:regionCode error:&parseError];
|
||||
@ -71,7 +71,7 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||
|
||||
NSString *_Nullable countryCode = nil;
|
||||
#if TARGET_OS_IPHONE
|
||||
countryCode = [[PhoneNumberUtil sharedUtil].nbPhoneNumberUtil countryCodeByCarrier];
|
||||
countryCode = [[PhoneNumberUtil sharedThreadLocal].nbPhoneNumberUtil countryCodeByCarrier];
|
||||
|
||||
if ([countryCode isEqualToString:@"ZZ"]) {
|
||||
countryCode = [locale objectForKey:NSLocaleCountryCode];
|
||||
@ -164,7 +164,7 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||
}
|
||||
|
||||
+ (NSString *)regionCodeFromCountryCodeString:(NSString *)countryCodeString {
|
||||
NBPhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedUtil].nbPhoneNumberUtil;
|
||||
NBPhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedThreadLocal].nbPhoneNumberUtil;
|
||||
NSString *regionCode =
|
||||
[phoneUtil getRegionCodeForCountryCode:@([[countryCodeString substringFromIndex:1] integerValue])];
|
||||
return regionCode;
|
||||
@ -381,11 +381,11 @@ static NSString *const RPDefaultsKeyPhoneNumberCanonical = @"RPDefaultsKeyPhoneN
|
||||
}
|
||||
|
||||
- (BOOL)isValid {
|
||||
return [[PhoneNumberUtil sharedUtil].nbPhoneNumberUtil isValidNumber:self.phoneNumber];
|
||||
return [[PhoneNumberUtil sharedThreadLocal].nbPhoneNumberUtil isValidNumber:self.phoneNumber];
|
||||
}
|
||||
|
||||
- (NSString *)localizedDescriptionForUser {
|
||||
NBPhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedUtil].nbPhoneNumberUtil;
|
||||
NBPhoneNumberUtil *phoneUtil = [PhoneNumberUtil sharedThreadLocal].nbPhoneNumberUtil;
|
||||
|
||||
NSError *formatError = nil;
|
||||
NSString *pretty =
|
||||
|
||||
@ -1,14 +1,18 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import <libPhoneNumber_iOS/NBPhoneNumberUtil.h>
|
||||
#import "PhoneNumber.h"
|
||||
#import <libPhoneNumber_iOS/NBPhoneNumberUtil.h>
|
||||
|
||||
@interface PhoneNumberUtil : NSObject
|
||||
|
||||
@property (nonatomic, retain) NBPhoneNumberUtil *nbPhoneNumberUtil;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
|
||||
+ (instancetype)sharedThreadLocal;
|
||||
|
||||
+ (BOOL)name:(NSString *)nameString matchesQuery:(NSString *)queryString;
|
||||
|
||||
+ (NSString *)callingCodeFromCountryCode:(NSString *)countryCode;
|
||||
@ -28,8 +32,6 @@
|
||||
|
||||
+ (NSString *)examplePhoneNumberForCountryCode:(NSString *)countryCode;
|
||||
|
||||
+ (instancetype)sharedUtil;
|
||||
|
||||
- (NBPhoneNumber *)parse:(NSString *)numberToParse defaultRegion:(NSString *)defaultRegion error:(NSError **)error;
|
||||
- (NSString *)format:(NBPhoneNumber *)phoneNumber
|
||||
numberFormat:(NBEPhoneNumberFormat)numberFormat
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Copyright (c) 2017 Open Whisper Systems. All rights reserved.
|
||||
// Copyright (c) 2018 Open Whisper Systems. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PhoneNumberUtil.h"
|
||||
@ -18,13 +18,28 @@
|
||||
|
||||
@implementation PhoneNumberUtil
|
||||
|
||||
+ (instancetype)sharedUtil {
|
||||
+ (NSObject *)sharedLock
|
||||
{
|
||||
static dispatch_once_t onceToken;
|
||||
static id sharedInstance = nil;
|
||||
static NSObject *lock = nil;
|
||||
dispatch_once(&onceToken, ^{
|
||||
sharedInstance = [self.class new];
|
||||
lock = [NSObject new];
|
||||
});
|
||||
return sharedInstance;
|
||||
return lock;
|
||||
}
|
||||
|
||||
+ (PhoneNumberUtil *)sharedThreadLocal
|
||||
{
|
||||
@synchronized(self.sharedLock)
|
||||
{
|
||||
NSString *key = PhoneNumberUtil.logTag;
|
||||
PhoneNumberUtil *_Nullable threadLocal = NSThread.currentThread.threadDictionary[key];
|
||||
if (!threadLocal) {
|
||||
threadLocal = [PhoneNumberUtil new];
|
||||
NSThread.currentThread.threadDictionary[key] = threadLocal;
|
||||
}
|
||||
return threadLocal;
|
||||
}
|
||||
}
|
||||
|
||||
- (instancetype)init {
|
||||
@ -138,9 +153,10 @@
|
||||
return @"+1";
|
||||
}
|
||||
|
||||
NSString *callingCode = [NSString stringWithFormat:@"%@%@",
|
||||
COUNTRY_CODE_PREFIX,
|
||||
[[[self sharedUtil] nbPhoneNumberUtil] getCountryCodeForRegion:countryCode]];
|
||||
NSString *callingCode =
|
||||
[NSString stringWithFormat:@"%@%@",
|
||||
COUNTRY_CODE_PREFIX,
|
||||
[[[self sharedThreadLocal] nbPhoneNumberUtil] getCountryCodeForRegion:countryCode]];
|
||||
return callingCode;
|
||||
}
|
||||
|
||||
@ -578,26 +594,24 @@
|
||||
|
||||
+ (NSString *)examplePhoneNumberForCountryCode:(NSString *)countryCode
|
||||
{
|
||||
PhoneNumberUtil *sharedUtil = [self sharedThreadLocal];
|
||||
|
||||
// Signal users are very likely using mobile devices, so prefer that kind of example.
|
||||
NSError *error;
|
||||
NBPhoneNumber *nbPhoneNumber =
|
||||
[[[self sharedUtil] nbPhoneNumberUtil] getExampleNumberForType:countryCode
|
||||
type:NBEPhoneNumberTypeMOBILE
|
||||
error:&error];
|
||||
[sharedUtil.nbPhoneNumberUtil getExampleNumberForType:countryCode type:NBEPhoneNumberTypeMOBILE error:&error];
|
||||
OWSAssert(!error);
|
||||
if (!nbPhoneNumber) {
|
||||
// For countries that with similar mobile and land lines, use "line or mobile"
|
||||
// examples.
|
||||
nbPhoneNumber =
|
||||
[[[self sharedUtil] nbPhoneNumberUtil] getExampleNumberForType:countryCode
|
||||
type:NBEPhoneNumberTypeFIXED_LINE_OR_MOBILE
|
||||
error:&error];
|
||||
nbPhoneNumber = [sharedUtil.nbPhoneNumberUtil getExampleNumberForType:countryCode
|
||||
type:NBEPhoneNumberTypeFIXED_LINE_OR_MOBILE
|
||||
error:&error];
|
||||
OWSAssert(!error);
|
||||
}
|
||||
NSString *result = (nbPhoneNumber ? [[[self sharedUtil] nbPhoneNumberUtil] format:nbPhoneNumber
|
||||
numberFormat:NBEPhoneNumberFormatE164
|
||||
error:&error]
|
||||
: nil);
|
||||
NSString *result = (nbPhoneNumber
|
||||
? [sharedUtil.nbPhoneNumberUtil format:nbPhoneNumber numberFormat:NBEPhoneNumberFormatE164 error:&error]
|
||||
: nil);
|
||||
OWSAssert(!error);
|
||||
return result;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user