diff --git a/Signal/src/Storyboards/Registration.storyboard b/Signal/src/Storyboards/Registration.storyboard index ff03dee07..a8aafd54c 100644 --- a/Signal/src/Storyboards/Registration.storyboard +++ b/Signal/src/Storyboards/Registration.storyboard @@ -6,9 +6,6 @@ - - - @@ -16,224 +13,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -284,7 +66,4 @@ - - - diff --git a/Signal/src/ViewControllers/RegistrationViewController.h b/Signal/src/ViewControllers/RegistrationViewController.h index eebd4c520..08f02f444 100644 --- a/Signal/src/ViewControllers/RegistrationViewController.h +++ b/Signal/src/ViewControllers/RegistrationViewController.h @@ -3,28 +3,7 @@ // #import -#import "CountryCodeViewController.h" - @interface RegistrationViewController : UIViewController -// Country code -@property (nonatomic) IBOutlet UIButton *countryNameButton; -@property (nonatomic) IBOutlet UIButton *countryCodeButton; -@property (nonatomic) IBOutlet UIView *countryCodeRow; - -// Phone number -@property (nonatomic) IBOutlet UITextField *phoneNumberTextField; -@property (nonatomic) IBOutlet UIButton *phoneNumberButton; -@property (nonatomic) IBOutlet UILabel *titleLabel; -// Button -@property (nonatomic) IBOutlet UIButton *sendCodeButton; -@property (nonatomic) IBOutlet UIButton *existingUserButton; - -@property (nonatomic) IBOutlet UIActivityIndicatorView *spinnerView; -@property (nonatomic) IBOutlet UIImageView *signalLogo; -@property (nonatomic) IBOutlet UIView *registrationHeader; - -@property (nonatomic) IBOutlet NSLayoutConstraint *headerHeightConstraint; - @end diff --git a/Signal/src/ViewControllers/RegistrationViewController.m b/Signal/src/ViewControllers/RegistrationViewController.m index 07a3b09ec..109a19399 100644 --- a/Signal/src/ViewControllers/RegistrationViewController.m +++ b/Signal/src/ViewControllers/RegistrationViewController.m @@ -4,72 +4,232 @@ #import "RegistrationViewController.h" #import "CodeVerificationViewController.h" +#import "CountryCodeViewController.h" #import "Environment.h" #import "PhoneNumber.h" #import "PhoneNumberUtil.h" #import "Signal-Swift.h" -#import "SignalKeyingStorage.h" #import "TSAccountManager.h" #import "UIView+OWS.h" -#import "Util.h" #import "ViewControllerUtils.h" -static NSString *const kCodeSentSegue = @"codeSent"; - @interface RegistrationViewController () @property (nonatomic) NSString *callingCode; +@property (nonatomic) UILabel *countryCodeLabel; +@property (nonatomic) UITextField *phoneNumberTextField; +@property (nonatomic) UILabel *examplePhoneNumberLabel; +@property (nonatomic) UIButton *activateButton; +@property (nonatomic) UIActivityIndicatorView *spinnerView; + @end #pragma mark - @implementation RegistrationViewController -- (void)viewDidLoad { - [super viewDidLoad]; +- (void)loadView +{ + [super loadView]; + + [self createViews]; // Do any additional setup after loading the view. - _phoneNumberTextField.delegate = self; - _phoneNumberTextField.keyboardType = UIKeyboardTypeNumberPad; [self populateDefaultCountryNameAndCode]; [[Environment getCurrent] setSignUpFlowNavigationController:self.navigationController]; +} - _titleLabel.text = NSLocalizedString(@"REGISTRATION_TITLE_LABEL", @""); - [_countryNameButton - setTitle:NSLocalizedString(@"REGISTRATION_DEFAULT_COUNTRY_NAME", @"Label for the country code field") - forState:UIControlStateNormal]; - _phoneNumberTextField.placeholder = NSLocalizedString( - @"REGISTRATION_ENTERNUMBER_DEFAULT_TEXT", @"Placeholder text for the phone number textfield"); - [_phoneNumberButton - setTitle:NSLocalizedString(@"REGISTRATION_PHONENUMBER_BUTTON", @"Label for the phone number textfield") - forState:UIControlStateNormal]; - [_phoneNumberButton.titleLabel setAdjustsFontSizeToFitWidth:YES]; - [_sendCodeButton setTitle:NSLocalizedString(@"REGISTRATION_VERIFY_DEVICE", @"") forState:UIControlStateNormal]; - [_existingUserButton setTitle:NSLocalizedString(@"ALREADY_HAVE_ACCOUNT_BUTTON", @"registration button text") - forState:UIControlStateNormal]; - - [self.countryNameButton addTarget:self - action:@selector(changeCountryCodeTapped) - forControlEvents:UIControlEventTouchUpInside]; - [self.countryCodeButton addTarget:self - action:@selector(changeCountryCodeTapped) - forControlEvents:UIControlEventTouchUpInside]; - [self.countryCodeRow +- (void)createViews +{ + self.view.backgroundColor = [UIColor ows_signalBrandBlueColor]; + + UIView *header = [UIView new]; + header.backgroundColor = [UIColor ows_signalBrandBlueColor]; + [self.view addSubview:header]; + [header autoPinToTopLayoutGuideOfViewController:self withInset:0]; + [header autoPinWidthToSuperview]; + + UILabel *headerLabel = [UILabel new]; + headerLabel.text = NSLocalizedString(@"REGISTRATION_TITLE_LABEL", @""); + headerLabel.textColor = [UIColor whiteColor]; + headerLabel.font = [UIFont ows_mediumFontWithSize:ScaleFromIPhone5To7Plus(20.f, 24.f)]; + [header addSubview:headerLabel]; + [headerLabel autoHCenterInSuperview]; + [headerLabel autoPinEdgeToSuperviewEdge:ALEdgeBottom withInset:14.f]; + + CGFloat screenHeight = MAX([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height); + if (screenHeight < 568) { + // iPhone 4s or smaller. + [header autoSetDimension:ALDimensionHeight toSize:20]; + headerLabel.hidden = YES; + } else if (screenHeight < 667) { + // iPhone 5 or smaller. + [header autoSetDimension:ALDimensionHeight toSize:80]; + } else { + [header autoSetDimension:ALDimensionHeight toSize:225]; + + UIImage *logo = [UIImage imageNamed:@"logoSignal"]; + OWSAssert(logo); + UIImageView *logoView = [UIImageView new]; + logoView.image = logo; + [header addSubview:logoView]; + [logoView autoHCenterInSuperview]; + [logoView autoPinEdge:ALEdgeBottom toEdge:ALEdgeTop ofView:headerLabel withOffset:-14.f]; + } + + UIView *contentView = [UIView new]; + contentView.backgroundColor = [UIColor whiteColor]; + [self.view addSubview:contentView]; + [contentView autoPinToBottomLayoutGuideOfViewController:self withInset:0]; + [contentView autoPinWidthToSuperview]; + [contentView autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:header]; + + const CGFloat kRowHeight = 60.f; + const CGFloat kRowLeftMargin = 20.f; + const CGFloat kRowRightMargin = 16.f; + const CGFloat kSeparatorHeight = 1.f; + const CGFloat kButtonHMargin = 30.f; + const CGFloat kExamplePhoneNumberVSpacing = 8.f; + const CGFloat fontSizePoints = ScaleFromIPhone5To7Plus(16.f, 20.f); + + // Country + UIView *countryRow = [UIView new]; + [contentView addSubview:countryRow]; + [countryRow autoPinWidthToSuperview]; + [countryRow autoPinEdgeToSuperviewEdge:ALEdgeTop]; + [countryRow autoSetDimension:ALDimensionHeight toSize:kRowHeight]; + [countryRow addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(countryCodeRowWasTapped:)]]; -} -- (void)viewWillAppear:(BOOL)animated { - [self adjustScreenSizes]; + UILabel *countryNameLabel = [UILabel new]; + countryNameLabel.text + = NSLocalizedString(@"REGISTRATION_DEFAULT_COUNTRY_NAME", @"Label for the country code field"); + countryNameLabel.textColor = [UIColor blackColor]; + countryNameLabel.font = [UIFont ows_mediumFontWithSize:fontSizePoints]; + [countryRow addSubview:countryNameLabel]; + [countryNameLabel autoVCenterInSuperview]; + [countryNameLabel autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:kRowLeftMargin]; + + UILabel *countryCodeLabel = [UILabel new]; + self.countryCodeLabel = countryCodeLabel; + countryCodeLabel.textColor = [UIColor ows_materialBlueColor]; + countryCodeLabel.font = [UIFont ows_mediumFontWithSize:fontSizePoints + 2.f]; + [countryRow addSubview:countryCodeLabel]; + [countryCodeLabel autoVCenterInSuperview]; + [countryCodeLabel autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:kRowRightMargin]; + + UIView *separatorView1 = [UIView new]; + separatorView1.backgroundColor = [UIColor colorWithWhite:0.75f alpha:1.f]; + [contentView addSubview:separatorView1]; + [separatorView1 autoPinWidthToSuperview]; + [separatorView1 autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:countryRow]; + [separatorView1 autoSetDimension:ALDimensionHeight toSize:kSeparatorHeight]; + + // Phone Number + UIView *phoneNumberRow = [UIView new]; + [contentView addSubview:phoneNumberRow]; + [phoneNumberRow autoPinWidthToSuperview]; + [phoneNumberRow autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:separatorView1]; + [phoneNumberRow autoSetDimension:ALDimensionHeight toSize:kRowHeight]; + + UILabel *phoneNumberLabel = [UILabel new]; + phoneNumberLabel.text + = NSLocalizedString(@"REGISTRATION_PHONENUMBER_BUTTON", @"Label for the phone number textfield"); + phoneNumberLabel.textColor = [UIColor blackColor]; + phoneNumberLabel.font = [UIFont ows_mediumFontWithSize:fontSizePoints]; + [phoneNumberRow addSubview:phoneNumberLabel]; + [phoneNumberLabel autoVCenterInSuperview]; + [phoneNumberLabel autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:kRowLeftMargin]; + + UITextField *phoneNumberTextField = [UITextField new]; + phoneNumberTextField.textAlignment = NSTextAlignmentRight; + phoneNumberTextField.delegate = self; + phoneNumberTextField.keyboardType = UIKeyboardTypeNumberPad; + phoneNumberTextField.placeholder = NSLocalizedString( + @"REGISTRATION_ENTERNUMBER_DEFAULT_TEXT", @"Placeholder text for the phone number textfield"); + self.phoneNumberTextField = phoneNumberTextField; + phoneNumberTextField.textColor = [UIColor ows_materialBlueColor]; + phoneNumberTextField.font = [UIFont ows_mediumFontWithSize:fontSizePoints]; + [phoneNumberRow addSubview:phoneNumberTextField]; + [phoneNumberTextField autoVCenterInSuperview]; + [phoneNumberTextField autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:kRowRightMargin]; + + UILabel *examplePhoneNumberLabel = [UILabel new]; + self.examplePhoneNumberLabel = examplePhoneNumberLabel; + examplePhoneNumberLabel.font = [UIFont ows_regularFontWithSize:fontSizePoints - 2.f]; + examplePhoneNumberLabel.textColor = [UIColor colorWithWhite:0.5f alpha:1.f]; + [contentView addSubview:examplePhoneNumberLabel]; + [examplePhoneNumberLabel autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:kRowRightMargin]; + [examplePhoneNumberLabel autoPinEdge:ALEdgeTop + toEdge:ALEdgeBottom + ofView:phoneNumberTextField + withOffset:kExamplePhoneNumberVSpacing]; + + UIView *separatorView2 = [UIView new]; + separatorView2.backgroundColor = [UIColor colorWithWhite:0.75f alpha:1.f]; + [contentView addSubview:separatorView2]; + [separatorView2 autoPinWidthToSuperview]; + [separatorView2 autoPinEdge:ALEdgeTop + toEdge:ALEdgeBottom + ofView:phoneNumberRow + withOffset:examplePhoneNumberLabel.font.lineHeight]; + [separatorView2 autoSetDimension:ALDimensionHeight toSize:kSeparatorHeight]; + + // Activate Button + UIButton *activateButton = [UIButton buttonWithType:UIButtonTypeCustom]; + self.activateButton = activateButton; + activateButton.backgroundColor = [UIColor ows_signalBrandBlueColor]; + [activateButton setTitle:NSLocalizedString(@"REGISTRATION_VERIFY_DEVICE", @"") forState:UIControlStateNormal]; + [activateButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + activateButton.titleLabel.font = [UIFont ows_boldFontWithSize:fontSizePoints]; + [activateButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; + [activateButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + [contentView addSubview:activateButton]; + [activateButton autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:kButtonHMargin]; + [activateButton autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:kButtonHMargin]; + [activateButton autoPinEdge:ALEdgeTop + toEdge:ALEdgeBottom + ofView:separatorView2 + withOffset:ScaleFromIPhone5To7Plus(12.f, 15.f)]; + [activateButton autoSetDimension:ALDimensionHeight toSize:47.f]; + [activateButton addTarget:self action:@selector(sendCodeAction:) forControlEvents:UIControlEventTouchUpInside]; + + UIActivityIndicatorView *spinnerView = + [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite]; + self.spinnerView = spinnerView; + [activateButton addSubview:spinnerView]; + [spinnerView autoVCenterInSuperview]; + [spinnerView autoSetDimension:ALDimensionWidth toSize:20.f]; + [spinnerView autoSetDimension:ALDimensionHeight toSize:20.f]; + [spinnerView autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:20]; + [spinnerView stopAnimating]; + + // Existing Account Button + UIButton *existingAccountButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [existingAccountButton setTitle:NSLocalizedString(@"ALREADY_HAVE_ACCOUNT_BUTTON", @"registration button text") + forState:UIControlStateNormal]; + [existingAccountButton setTitleColor:[UIColor ows_materialBlueColor] forState:UIControlStateNormal]; + existingAccountButton.titleLabel.font = [UIFont ows_mediumFontWithSize:fontSizePoints - 2.f]; + [existingAccountButton setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter]; + [existingAccountButton setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter]; + [contentView addSubview:existingAccountButton]; + [existingAccountButton autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:kButtonHMargin]; + [existingAccountButton autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:kButtonHMargin]; + [existingAccountButton autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:activateButton withOffset:9.f]; + [existingAccountButton autoSetDimension:ALDimensionHeight toSize:36.f]; + [existingAccountButton addTarget:self + action:@selector(didTapExistingUserButton:) + forControlEvents:UIControlEventTouchUpInside]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; - [_sendCodeButton setEnabled:YES]; - [_spinnerView stopAnimating]; - [_phoneNumberTextField becomeFirstResponder]; + [self.activateButton setEnabled:YES]; + [self.spinnerView stopAnimating]; + [self.phoneNumberTextField becomeFirstResponder]; } #pragma mark - Country @@ -95,37 +255,17 @@ static NSString *const kCodeSentSegue = @"codeSent"; NSString *title = [NSString stringWithFormat:@"%@ (%@)", callingCode, countryCode.uppercaseString]; - [_countryCodeButton setTitle:title - forState:UIControlStateNormal]; - - // In the absence of a rewrite to a programmatic layout, - // re-add the country code and name views in order to - // remove any layout constraints that apply to them. - UIView *superview = _countryCodeButton.superview; - [_countryNameButton removeFromSuperview]; - [_countryCodeButton removeFromSuperview]; - [_countryNameButton removeConstraints:_countryNameButton.constraints]; - [_countryCodeButton removeConstraints:_countryCodeButton.constraints]; - - [superview addSubview:_countryNameButton]; - [superview addSubview:_countryCodeButton]; - [_countryNameButton autoVCenterInSuperview]; - [_countryCodeButton autoVCenterInSuperview]; - [_countryNameButton autoSetDimension:ALDimensionHeight toSize:26]; - [_countryCodeButton autoSetDimension:ALDimensionHeight toSize:26]; - [_countryNameButton autoPinEdgeToSuperviewEdge:ALEdgeLeft withInset:20]; - [_countryCodeButton autoPinEdgeToSuperviewEdge:ALEdgeRight withInset:16]; - [_countryNameButton autoSetDimension:ALDimensionWidth toSize:150]; - [_countryCodeButton autoSetDimension:ALDimensionWidth toSize:150]; - _countryNameButton.translatesAutoresizingMaskIntoConstraints = NO; - _countryCodeButton.translatesAutoresizingMaskIntoConstraints = NO; - - [superview layoutSubviews]; + self.countryCodeLabel.text = title; + [self.countryCodeLabel setNeedsLayout]; + + self.examplePhoneNumberLabel.text = + [ViewControllerUtils examplePhoneNumberForCountryCode:countryCode callingCode:callingCode]; + [self.examplePhoneNumberLabel setNeedsLayout]; } #pragma mark - Actions -- (IBAction)didTapExistingUserButton:(id)sender +- (void)didTapExistingUserButton:(id)sender { DDLogInfo(@"called %s", __PRETTY_FUNCTION__); @@ -137,7 +277,8 @@ static NSString *const kCodeSentSegue = @"codeSent"; message:NSLocalizedString(@"EXISTING_USER_REGISTRATION_ALERT_BODY", @"during registration")]; } -- (IBAction)sendCodeAction:(id)sender { +- (void)sendCodeAction:(id)sender +{ NSString *phoneNumberText = [_phoneNumberTextField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if (phoneNumberText.length < 1) { @@ -162,14 +303,17 @@ static NSString *const kCodeSentSegue = @"codeSent"; return; } - [_sendCodeButton setEnabled:NO]; - [_spinnerView startAnimating]; - [_phoneNumberTextField resignFirstResponder]; + [self.activateButton setEnabled:NO]; + [self.spinnerView startAnimating]; + [self.phoneNumberTextField resignFirstResponder]; + __weak RegistrationViewController *weakSelf = self; [TSAccountManager registerWithPhoneNumber:parsedPhoneNumber success:^{ - [self performSegueWithIdentifier:@"codeSent" sender:self]; - [_spinnerView stopAnimating]; + [weakSelf.spinnerView stopAnimating]; + + CodeVerificationViewController *vc = [CodeVerificationViewController new]; + [weakSelf.navigationController pushViewController:vc animated:YES]; } failure:^(NSError *error) { if (error.code == 400) { @@ -179,8 +323,8 @@ static NSString *const kCodeSentSegue = @"codeSent"; [OWSAlerts showAlertWithTitle:error.localizedDescription message:error.localizedRecoverySuggestion]; } - [_sendCodeButton setEnabled:YES]; - [_spinnerView stopAnimating]; + [weakSelf.activateButton setEnabled:YES]; + [weakSelf.spinnerView stopAnimating]; } smsVerification:YES]; } @@ -257,24 +401,4 @@ static NSString *const kCodeSentSegue = @"codeSent"; return NO; } -#pragma mark - Unwind segue - -- (IBAction)unwindToChangeNumber:(UIStoryboardSegue *)sender { -} - -#pragma mark iPhone 5s or shorter - -- (void)adjustScreenSizes -{ - CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height; - - if (screenHeight < 568) { // iphone 4s - self.signalLogo.hidden = YES; - _headerHeightConstraint.constant = 20; - } else if (screenHeight < 667) { // iphone 5 - self.signalLogo.hidden = YES; - _headerHeightConstraint.constant = 120; - } -} - @end diff --git a/Signal/src/ViewControllers/SelectRecipientViewController.m b/Signal/src/ViewControllers/SelectRecipientViewController.m index 2955c397b..c38a7f259 100644 --- a/Signal/src/ViewControllers/SelectRecipientViewController.m +++ b/Signal/src/ViewControllers/SelectRecipientViewController.m @@ -252,24 +252,8 @@ NSString *const kSelectRecipientViewControllerCellIdentifier = @"kSelectRecipien [self.countryCodeButton setTitle:title forState:UIControlStateNormal]; [self.countryCodeButton layoutSubviews]; - NSString *examplePhoneNumber = [PhoneNumberUtil examplePhoneNumberForCountryCode:countryCode]; - OWSAssert(!examplePhoneNumber || [examplePhoneNumber hasPrefix:callingCode]); - if (examplePhoneNumber && [examplePhoneNumber hasPrefix:callingCode]) { - NSString *formattedPhoneNumber = - [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:examplePhoneNumber - withSpecifiedCountryCodeString:countryCode]; - if (formattedPhoneNumber.length > 0) { - examplePhoneNumber = formattedPhoneNumber; - } - - self.examplePhoneNumberLabel.text = [NSString - stringWithFormat: - NSLocalizedString(@"PHONE_NUMBER_EXAMPLE_FORMAT", - @"A format for a label showing an example phone number. Embeds {{the example phone number}}."), - [examplePhoneNumber substringFromIndex:callingCode.length]]; - } else { - self.examplePhoneNumberLabel.text = @""; - } + self.examplePhoneNumberLabel.text = + [ViewControllerUtils examplePhoneNumberForCountryCode:countryCode callingCode:callingCode]; [self.examplePhoneNumberLabel.superview layoutSubviews]; } diff --git a/Signal/src/ViewControllers/ViewControllerUtils.h b/Signal/src/ViewControllers/ViewControllerUtils.h index 436bd13b7..f3698a534 100644 --- a/Signal/src/ViewControllers/ViewControllerUtils.h +++ b/Signal/src/ViewControllers/ViewControllerUtils.h @@ -4,6 +4,8 @@ #import +NS_ASSUME_NONNULL_BEGIN + @interface ViewControllerUtils : NSObject - (instancetype)init NS_UNAVAILABLE; @@ -22,4 +24,8 @@ + (NSString *)formatDurationSeconds:(long)timeSeconds; ++ (NSString *)examplePhoneNumberForCountryCode:(NSString *)countryCode callingCode:(NSString *)callingCode; + @end + +NS_ASSUME_NONNULL_END diff --git a/Signal/src/ViewControllers/ViewControllerUtils.m b/Signal/src/ViewControllers/ViewControllerUtils.m index ef41ef1fb..f88b8d648 100644 --- a/Signal/src/ViewControllers/ViewControllerUtils.m +++ b/Signal/src/ViewControllers/ViewControllerUtils.m @@ -115,6 +115,31 @@ NS_ASSUME_NONNULL_BEGIN } } ++ (NSString *)examplePhoneNumberForCountryCode:(NSString *)countryCode callingCode:(NSString *)callingCode +{ + OWSAssert(countryCode.length > 0); + OWSAssert(callingCode.length > 0); + + NSString *examplePhoneNumber = [PhoneNumberUtil examplePhoneNumberForCountryCode:countryCode]; + OWSAssert(!examplePhoneNumber || [examplePhoneNumber hasPrefix:callingCode]); + if (examplePhoneNumber && [examplePhoneNumber hasPrefix:callingCode]) { + NSString *formattedPhoneNumber = + [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:examplePhoneNumber + withSpecifiedCountryCodeString:countryCode]; + if (formattedPhoneNumber.length > 0) { + examplePhoneNumber = formattedPhoneNumber; + } + + return [NSString + stringWithFormat: + NSLocalizedString(@"PHONE_NUMBER_EXAMPLE_FORMAT", + @"A format for a label showing an example phone number. Embeds {{the example phone number}}."), + [examplePhoneNumber substringFromIndex:callingCode.length]]; + } else { + return @""; + } +} + #pragma mark - Logging + (NSString *)tag