General: Unused View controller clean up

This commit is contained in:
dtsbourg 2014-11-20 17:07:04 +01:00 committed by Frederic Jacobs
parent 6524b08ffc
commit 64ab73baeb
10 changed files with 1 additions and 1092 deletions

View file

@ -29,7 +29,6 @@
765052B3182BF839008313E1 /* HelveticaNeueLTStd-Th.otf in Resources */ = {isa = PBXBuildFile; fileRef = 765052B1182BF839008313E1 /* HelveticaNeueLTStd-Th.otf */; };
768A1A2B17FC9CD300E00ED8 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 768A1A2A17FC9CD300E00ED8 /* libz.dylib */; };
76919BF71805D190008C664A /* ContactManagerTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 76919BF61805D190008C664A /* ContactManagerTest.m */; };
76B818A1182C39460088060E /* PreferenceListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76B8189D182C39460088060E /* PreferenceListViewController.xib */; };
76C87F19181EFCE600C4ACAB /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */; };
76D713E7182D3E3F00C9C9C8 /* PreferenceListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D713E6182D3E3F00C9C9C8 /* PreferenceListTableViewCell.m */; };
76D713E8182D3E3F00C9C9C8 /* PreferenceListTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D713E6182D3E3F00C9C9C8 /* PreferenceListTableViewCell.m */; };
@ -229,22 +228,15 @@
76EB064718170B33006006FC /* TimeUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04FA18170B33006006FC /* TimeUtil.m */; };
76EB064818170B33006006FC /* Zid.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04FD18170B33006006FC /* Zid.m */; };
76EB064918170B33006006FC /* Zid.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB04FD18170B33006006FC /* Zid.m */; };
76EB064E18170B34006006FC /* ContactDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050418170B33006006FC /* ContactDetailViewController.m */; };
76EB064F18170B34006006FC /* ContactDetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050418170B33006006FC /* ContactDetailViewController.m */; };
76EB065018170B34006006FC /* DialerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050618170B33006006FC /* DialerViewController.m */; };
76EB065118170B34006006FC /* DialerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050618170B33006006FC /* DialerViewController.m */; };
76EB065618170B34006006FC /* InCallViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050C18170B33006006FC /* InCallViewController.m */; };
76EB065718170B34006006FC /* InCallViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB050C18170B33006006FC /* InCallViewController.m */; };
76EB065A18170B34006006FC /* NextResponderScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB051018170B33006006FC /* NextResponderScrollView.m */; };
76EB065B18170B34006006FC /* NextResponderScrollView.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB051018170B33006006FC /* NextResponderScrollView.m */; };
76EB066018170B34006006FC /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB051618170B33006006FC /* RegisterViewController.m */; };
76EB066118170B34006006FC /* RegisterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB051618170B33006006FC /* RegisterViewController.m */; };
76EB066918170B34006006FC /* CallAudioManagerDemo.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB051D18170B33006006FC /* CallAudioManagerDemo.xib */; };
76EB066D18170B34006006FC /* ContactDetailTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB051F18170B33006006FC /* ContactDetailTableViewCell.xib */; };
76EB066F18170B34006006FC /* ContactDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052018170B33006006FC /* ContactDetailViewController.xib */; };
76EB067118170B34006006FC /* DialerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052118170B33006006FC /* DialerViewController.xib */; };
76EB067918170B34006006FC /* InCallViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052518170B33006006FC /* InCallViewController.xib */; };
76EB068118170B34006006FC /* RegisterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052918170B33006006FC /* RegisterViewController.xib */; };
76EB068418170B34006006FC /* ContactDetailTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB052D18170B33006006FC /* ContactDetailTableViewCell.m */; };
76EB068518170B34006006FC /* ContactDetailTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB052D18170B33006006FC /* ContactDetailTableViewCell.m */; };
76EB068618170B34006006FC /* ContactTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 76EB052F18170B33006006FC /* ContactTableViewCell.m */; };
@ -566,13 +558,9 @@
E14874FE18A06951002CC4F3 /* PreferenceListTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76D713E9182D3E5100C9C9C8 /* PreferenceListTableViewCell.xib */; };
E14874FF18A06951002CC4F3 /* UnseenWhisperUserCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = B9EB5AC81884D387007CBB57 /* UnseenWhisperUserCell.xib */; };
E148750018A06966002CC4F3 /* CallAudioManagerDemo.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB051D18170B33006006FC /* CallAudioManagerDemo.xib */; };
E148750318A06966002CC4F3 /* ContactDetailTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB051F18170B33006006FC /* ContactDetailTableViewCell.xib */; };
E148750418A06966002CC4F3 /* ContactDetailViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052018170B33006006FC /* ContactDetailViewController.xib */; };
E148750518A06966002CC4F3 /* CountryCodeViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = B97CBFA718860EA3008E0DE9 /* CountryCodeViewController.xib */; };
E148750618A06966002CC4F3 /* DialerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052118170B33006006FC /* DialerViewController.xib */; };
E148750A18A06966002CC4F3 /* InCallViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052518170B33006006FC /* InCallViewController.xib */; };
E148750D18A06966002CC4F3 /* PreferenceListViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76B8189D182C39460088060E /* PreferenceListViewController.xib */; };
E148750E18A06966002CC4F3 /* RegisterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 76EB052918170B33006006FC /* RegisterViewController.xib */; };
E148751218A06AFD002CC4F3 /* HelveticaNeueLTStd-Bd.otf in Resources */ = {isa = PBXBuildFile; fileRef = B96A30FE187DA1B600648F3E /* HelveticaNeueLTStd-Bd.otf */; };
E148751318A06AFD002CC4F3 /* HelveticaNeueLTStd-Th.otf in Resources */ = {isa = PBXBuildFile; fileRef = 765052B1182BF839008313E1 /* HelveticaNeueLTStd-Th.otf */; };
E148751418A06AFD002CC4F3 /* HelveticaNeueLTStd-Lt.otf in Resources */ = {isa = PBXBuildFile; fileRef = 765052A518294C9F008313E1 /* HelveticaNeueLTStd-Lt.otf */; };
@ -699,7 +687,6 @@
765052B1182BF839008313E1 /* HelveticaNeueLTStd-Th.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "HelveticaNeueLTStd-Th.otf"; sourceTree = "<group>"; };
768A1A2A17FC9CD300E00ED8 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
76919BF61805D190008C664A /* ContactManagerTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ContactManagerTest.m; path = contact/ContactManagerTest.m; sourceTree = "<group>"; };
76B8189D182C39460088060E /* PreferenceListViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = PreferenceListViewController.xib; path = ../PreferenceListViewController.xib; sourceTree = "<group>"; };
76C87F18181EFCE600C4ACAB /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; };
76D713E5182D3E3F00C9C9C8 /* PreferenceListTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PreferenceListTableViewCell.h; sourceTree = "<group>"; };
76D713E6182D3E3F00C9C9C8 /* PreferenceListTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PreferenceListTableViewCell.m; sourceTree = "<group>"; };
@ -910,22 +897,15 @@
76EB04FB18170B33006006FC /* Util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Util.h; sourceTree = "<group>"; };
76EB04FC18170B33006006FC /* Zid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Zid.h; sourceTree = "<group>"; };
76EB04FD18170B33006006FC /* Zid.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Zid.m; sourceTree = "<group>"; };
76EB050318170B33006006FC /* ContactDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailViewController.h; sourceTree = "<group>"; };
76EB050418170B33006006FC /* ContactDetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailViewController.m; sourceTree = "<group>"; };
76EB050518170B33006006FC /* DialerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DialerViewController.h; sourceTree = "<group>"; };
76EB050618170B33006006FC /* DialerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DialerViewController.m; sourceTree = "<group>"; };
76EB050B18170B33006006FC /* InCallViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InCallViewController.h; sourceTree = "<group>"; };
76EB050C18170B33006006FC /* InCallViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InCallViewController.m; sourceTree = "<group>"; };
76EB050F18170B33006006FC /* NextResponderScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NextResponderScrollView.h; sourceTree = "<group>"; };
76EB051018170B33006006FC /* NextResponderScrollView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NextResponderScrollView.m; sourceTree = "<group>"; };
76EB051518170B33006006FC /* RegisterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RegisterViewController.h; sourceTree = "<group>"; };
76EB051618170B33006006FC /* RegisterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RegisterViewController.m; sourceTree = "<group>"; };
76EB051D18170B33006006FC /* CallAudioManagerDemo.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CallAudioManagerDemo.xib; sourceTree = "<group>"; };
76EB051F18170B33006006FC /* ContactDetailTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactDetailTableViewCell.xib; sourceTree = "<group>"; };
76EB052018170B33006006FC /* ContactDetailViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ContactDetailViewController.xib; sourceTree = "<group>"; };
76EB052118170B33006006FC /* DialerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = DialerViewController.xib; sourceTree = "<group>"; };
76EB052518170B33006006FC /* InCallViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = InCallViewController.xib; sourceTree = "<group>"; };
76EB052918170B33006006FC /* RegisterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = RegisterViewController.xib; sourceTree = "<group>"; };
76EB052C18170B33006006FC /* ContactDetailTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailTableViewCell.h; sourceTree = "<group>"; };
76EB052D18170B33006006FC /* ContactDetailTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailTableViewCell.m; sourceTree = "<group>"; };
76EB052E18170B33006006FC /* ContactTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactTableViewCell.h; sourceTree = "<group>"; };
@ -2072,8 +2052,6 @@
76EB04FE18170B33006006FC /* view controllers */ = {
isa = PBXGroup;
children = (
76EB050318170B33006006FC /* ContactDetailViewController.h */,
76EB050418170B33006006FC /* ContactDetailViewController.m */,
B97CBFA518860EA3008E0DE9 /* CountryCodeViewController.h */,
B97CBFA618860EA3008E0DE9 /* CountryCodeViewController.m */,
76EB050518170B33006006FC /* DialerViewController.h */,
@ -2082,8 +2060,6 @@
76EB050C18170B33006006FC /* InCallViewController.m */,
76EB050F18170B33006006FC /* NextResponderScrollView.h */,
76EB051018170B33006006FC /* NextResponderScrollView.m */,
76EB051518170B33006006FC /* RegisterViewController.h */,
76EB051618170B33006006FC /* RegisterViewController.m */,
76EB051C18170B33006006FC /* xibs */,
);
path = "view controllers";
@ -2093,13 +2069,9 @@
isa = PBXGroup;
children = (
76EB051D18170B33006006FC /* CallAudioManagerDemo.xib */,
76EB051F18170B33006006FC /* ContactDetailTableViewCell.xib */,
76EB052018170B33006006FC /* ContactDetailViewController.xib */,
B97CBFA718860EA3008E0DE9 /* CountryCodeViewController.xib */,
76EB052118170B33006006FC /* DialerViewController.xib */,
76EB052518170B33006006FC /* InCallViewController.xib */,
76B8189D182C39460088060E /* PreferenceListViewController.xib */,
76EB052918170B33006006FC /* RegisterViewController.xib */,
);
path = xibs;
sourceTree = "<group>";
@ -3543,9 +3515,7 @@
B633C5E91A1D190B0059AC12 /* spinner_connecting_flash.png in Resources */,
B633C5E61A1D190B0059AC12 /* speaker_on@2x.png in Resources */,
B633C5BB1A1D190B0059AC12 /* message_bubble.png in Resources */,
E148750318A06966002CC4F3 /* ContactDetailTableViewCell.xib in Resources */,
B633C5B51A1D190B0059AC12 /* lock@2x.png in Resources */,
E148750418A06966002CC4F3 /* ContactDetailViewController.xib in Resources */,
B633C58E1A1D190B0059AC12 /* contacts.png in Resources */,
B633C5A41A1D190B0059AC12 /* favourite_true_icon@2x.png in Resources */,
E148750518A06966002CC4F3 /* CountryCodeViewController.xib in Resources */,
@ -3555,11 +3525,9 @@
B633C5CE1A1D190B0059AC12 /* quit@2x.png in Resources */,
E148750A18A06966002CC4F3 /* InCallViewController.xib in Resources */,
B633C5E71A1D190B0059AC12 /* spinner_connecting.png in Resources */,
E148750D18A06966002CC4F3 /* PreferenceListViewController.xib in Resources */,
B633C5D01A1D190B0059AC12 /* red-delete@2x.png in Resources */,
B633C59D1A1D190B0059AC12 /* endcall@2x.png in Resources */,
B633C5C91A1D190B0059AC12 /* outgoing_call_icon.png in Resources */,
E148750E18A06966002CC4F3 /* RegisterViewController.xib in Resources */,
B633C5EA1A1D190B0059AC12 /* spinner_connecting_flash@2x.png in Resources */,
B633C5E31A1D190B0059AC12 /* speaker_icon_selected.png in Resources */,
B633C5B01A1D190B0059AC12 /* incoming_call_icon.png in Resources */,
@ -3719,18 +3687,14 @@
B9EB5ACA1884D387007CBB57 /* UnseenWhisperUserCell.xib in Resources */,
76EB067118170B34006006FC /* DialerViewController.xib in Resources */,
76EB067918170B34006006FC /* InCallViewController.xib in Resources */,
76EB068118170B34006006FC /* RegisterViewController.xib in Resources */,
B6850E5A1995A4710068E715 /* whisperFake.cer in Resources */,
B97CBFB218861023008E0DE9 /* CountryCodeTableViewCell.xib in Resources */,
B9A578B5183D610300C17105 /* FavouriteTableViewCell.xib in Resources */,
B9B89C58185A2B7000A24465 /* LeftSideMenuCell.xib in Resources */,
76D713EB182D3E5100C9C9C8 /* PreferenceListTableViewCell.xib in Resources */,
76EB066F18170B34006006FC /* ContactDetailViewController.xib in Resources */,
76EB069318170B34006006FC /* ContactTableViewCell.xib in Resources */,
76EB066918170B34006006FC /* CallAudioManagerDemo.xib in Resources */,
765052B3182BF839008313E1 /* HelveticaNeueLTStd-Th.otf in Resources */,
76B818A1182C39460088060E /* PreferenceListViewController.xib in Resources */,
76EB066D18170B34006006FC /* ContactDetailTableViewCell.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3817,7 +3781,6 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
76EB064E18170B34006006FC /* ContactDetailViewController.m in Sources */,
76EB063E18170B33006006FC /* Operation.m in Sources */,
76EB05F618170B33006006FC /* CallConnectUtil.m in Sources */,
76EB061218170B33006006FC /* LoggingUtil.m in Sources */,
@ -4025,7 +3988,6 @@
76EB058818170B33006006FC /* PropertyListPreferences.m in Sources */,
B6B096821A1D25ED008BFAA6 /* TSSubmitMessageRequest.m in Sources */,
76EB05B218170B33006006FC /* DH3KKeyAgreementProtocol.m in Sources */,
76EB066018170B34006006FC /* RegisterViewController.m in Sources */,
76EB060618170B33006006FC /* PhoneNumberDirectoryFilterManager.m in Sources */,
B63761EC19E1FBE8005735D1 /* HttpRequest.m in Sources */,
B6B096941A1D25ED008BFAA6 /* NSString+escape.m in Sources */,
@ -4060,7 +4022,6 @@
76EB064918170B33006006FC /* Zid.m in Sources */,
76EB05AF18170B33006006FC /* SrtpStream.m in Sources */,
76EB061318170B33006006FC /* LoggingUtil.m in Sources */,
76EB064F18170B34006006FC /* ContactDetailViewController.m in Sources */,
76EB05A718170B33006006FC /* RtpPacket.m in Sources */,
76EB05BF18170B33006006FC /* ConfirmPacket.m in Sources */,
76EB05E518170B33006006FC /* UdpSocket.m in Sources */,
@ -4180,7 +4141,6 @@
76EB060918170B33006006FC /* ResponderSessionDescriptor.m in Sources */,
76EB062518170B33006006FC /* PriorityQueue.m in Sources */,
A157077917F0CD6D007C2BD6 /* CryptoToolsTest.m in Sources */,
76EB066118170B34006006FC /* RegisterViewController.m in Sources */,
BFB074C119A4BCA400F2947C /* FutureUtilTest.m in Sources */,
B684A46D19C3446200B11029 /* PushManagerTest.m in Sources */,
76EB05A918170B33006006FC /* RtpSocket.m in Sources */,

View file

@ -533,7 +533,7 @@ Lorem ipsum : Quick explanation of Fingerprints</string>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="sd1-mY-rAe" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="3165" y="-261"/>
<point key="canvasLocation" x="3082.5" y="-261"/>
</scene>
<!--Initial View Controller-->
<scene sceneID="t5l-Kr-ojc">

View file

@ -1,28 +0,0 @@
#import <UIKit/UIKit.h>
#import "Contact.h"
#import "ContactDetailTableViewCell.h"
#import "PhoneNumberDirectoryFilterManager.h"
/**
*
* ContactDetailViewController displays information about a contact in a table view such as additional non-encryped communication methods.
* Any additional non-encrypted information is opened in an external application (Email, SMS, Phone)
*
*/
@interface ContactDetailViewController : UIViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) IBOutlet UIButton *favouriteButton;
@property (nonatomic, strong) IBOutlet UIView *secureInfoHeaderView;
@property (nonatomic, strong) IBOutlet UILabel *contactNameLabel;
@property (nonatomic, strong) IBOutlet UIImageView *contactImageView;
@property (nonatomic, strong) IBOutlet UITableView *contactInfoTableView;
@property (nonatomic, readonly) Contact *contact;
+ (ContactDetailViewController *)contactDetailViewControllerWithContact:(Contact *)contact;
- (IBAction)favouriteButtonTapped;
@end

View file

@ -1,163 +0,0 @@
#import "ContactDetailViewController.h"
#import "ContactsManager.h"
#import "InCallViewController.h"
#import "UIUtil.h"
#define CONTACT_DETAIL_CELL_HEIGHT 49
static NSString *const DEFAULT_CONTACT_IMAGE = @"DefaultContactImage.png";
static NSString *const DETAIL_TABLE_CELL_IDENTIFIER = @"ContactDetailTableViewCell";
static NSString *const MAIL_URL_PREFIX = @"mailto://";
static NSString *const FAVOURITE_TRUE_ICON_NAME = @"favourite_true_icon";
static NSString *const FAVOURITE_FALSE_ICON_NAME = @"favourite_false_icon";
@implementation ContactDetailViewController
+ (ContactDetailViewController *)contactDetailViewControllerWithContact:(Contact *)contact {
ContactDetailViewController *contactDetailViewController = [ContactDetailViewController new];
contactDetailViewController->_contact = contact;
return contactDetailViewController;
}
- (void)viewDidLoad {
[super viewDidLoad];
_contactInfoTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}
- (void)viewWillAppear:(BOOL)animated {
if (_contact) {
self.navigationController.navigationBar.barTintColor = [UIUtil darkBackgroundColor];
self.navigationController.navigationBar.tintColor = UIColor.whiteColor;
self.navigationController.navigationBar.translucent = NO;
_contactNameLabel.text = _contact.fullName;
if (_contact.image) {
_contactImageView.image = _contact.image;
}
[UIUtil applyRoundedBorderToImageView:&_contactImageView];
[self configureFavouritesButton];
[_contactInfoTableView reloadData];
}
[super viewWillAppear:animated];
}
#pragma mark - UITableViewDelegate
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
return _secureInfoHeaderView;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return _secureInfoHeaderView.bounds.size.height;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSInteger secureNumberCount = (NSInteger)_contact.userTextPhoneNumbers.count + (NSInteger)_contact.emails.count;
return _contact.notes != nil ? secureNumberCount + 1 : secureNumberCount;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
ContactDetailTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:DETAIL_TABLE_CELL_IDENTIFIER];
if (!cell) {
cell = [[ContactDetailTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:DETAIL_TABLE_CELL_IDENTIFIER];
}
if ((NSUInteger)indexPath.row < _contact.userTextPhoneNumbers.count) {
PhoneNumber *phoneNumber = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:_contact.userTextPhoneNumbers[(NSUInteger)indexPath.row]];
BOOL isSecure = [Environment.getCurrent.phoneDirectoryManager.getCurrentFilter containsPhoneNumber:phoneNumber];
[cell configureWithPhoneNumber:phoneNumber isSecure:isSecure];
} else if ((NSUInteger)indexPath.row < _contact.userTextPhoneNumbers.count + _contact.emails.count) {
NSUInteger emailIndex = (NSUInteger)indexPath.row - _contact.userTextPhoneNumbers.count;
[cell configureWithEmailString:_contact.emails[emailIndex]];
} else {
[cell configureWithNotes:_contact.notes];
return cell;
}
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView deselectRowAtIndexPath:indexPath animated:YES];
if (indexPath.row < (NSInteger)[[_contact userTextPhoneNumbers] count]) {
NSString *numberString = _contact.userTextPhoneNumbers[(NSUInteger)indexPath.row];
PhoneNumber *number = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:numberString];
BOOL sercureNumberTapped = [self phoneNumberIsSecure:number];
if (sercureNumberTapped) {
[self startSecureCallWithNumber:number];
} else {
[self openPhoneAppWithPhoneNumber:number];
}
} else if ((NSUInteger)indexPath.row < _contact.userTextPhoneNumbers.count + _contact.emails.count) {
NSUInteger emailIndex = (NSUInteger)indexPath.row - _contact.userTextPhoneNumbers.count;
[self openEmailAppWithEmail:_contact.emails[emailIndex]];
}
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL cellNeedsHeightForText = indexPath.row == (NSInteger)[[_contact userTextPhoneNumbers] count] + (NSInteger)[[_contact emails] count];
if (cellNeedsHeightForText) {
CGSize size = [_contact.notes sizeWithAttributes:@{NSFontAttributeName:[UIUtil helveticaRegularWithSize:17]}];
return size.height + CONTACT_DETAIL_CELL_HEIGHT;
} else {
return CONTACT_DETAIL_CELL_HEIGHT;
}
}
- (void)favouriteButtonTapped {
[Environment.getCurrent.contactsManager toggleFavourite:_contact];
[self configureFavouritesButton];
}
- (void)configureFavouritesButton {
if (_contact.isFavourite) {
UIImage *favouriteImage = [UIImage imageNamed:FAVOURITE_TRUE_ICON_NAME];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:favouriteImage
style:UIBarButtonItemStylePlain
target:self
action:@selector(favouriteButtonTapped)];
self.navigationItem.rightBarButtonItem.tintColor = [UIColor yellowColor];
} else {
UIImage *favouriteImage = [UIImage imageNamed:FAVOURITE_FALSE_ICON_NAME];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:favouriteImage
style:UIBarButtonItemStylePlain
target:self
action:@selector(favouriteButtonTapped)];
self.navigationItem.rightBarButtonItem.tintColor = UIColor.whiteColor;
}
}
- (void)openPhoneAppWithPhoneNumber:(PhoneNumber *)phoneNumber {
if (phoneNumber) {
[UIApplication.sharedApplication openURL:phoneNumber.toSystemDialerURL];
}
}
- (void)openEmailAppWithEmail:(NSString *)email {
NSString *mailURL = [NSString stringWithFormat:@"%@%@",MAIL_URL_PREFIX, email];
[UIApplication.sharedApplication openURL:[NSURL URLWithString:mailURL]];
}
- (void)startSecureCallWithNumber:(PhoneNumber *)number {
[Environment.phoneManager initiateOutgoingCallToContact:_contact atRemoteNumber:number];
}
- (BOOL)phoneNumberIsSecure:(PhoneNumber *)phoneNumber {
PhoneNumberDirectoryFilter* directory = Environment.getCurrent.phoneDirectoryManager.getCurrentFilter;
return phoneNumber != nil && [directory containsPhoneNumber:phoneNumber];
}
@end

View file

@ -1,35 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="PreferenceListViewController">
<connections>
<outlet property="optionTableView" destination="iaf-8A-Gui" id="gHB-sT-bzI"/>
<outlet property="view" destination="1" id="3"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" fixedFrame="YES" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="iaf-8A-Gui">
<rect key="frame" x="0.0" y="0.0" width="320" height="568"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<connections>
<outlet property="dataSource" destination="-1" id="tHd-A5-v0y"/>
<outlet property="delegate" destination="-1" id="hZI-Ea-GEC"/>
</connections>
</tableView>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</objects>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,39 +0,0 @@
#import <UIKit/UIKit.h>
#import "CollapsingFutures.h"
#import "CountryCodeViewController.h"
@interface RegisterViewController : UIViewController <CountryCodeViewControllerDelegate, UITextFieldDelegate> {
@private TOCFutureSource* registered;
@private TOCFutureSource* futureChallengeAcceptedSource;
@private TOCCancelTokenSource* life;
}
@property (nonatomic, strong) IBOutlet UIButton *registerButton;
@property (nonatomic, strong) IBOutlet UIButton *challengeButton;
@property (nonatomic, strong) IBOutlet UITextField *phoneNumberTextField;
@property (nonatomic, strong) IBOutlet UILabel *countryCodeLabel;
@property (nonatomic, strong) IBOutlet UILabel *countryNameLabel;
@property (nonatomic, strong) IBOutlet UITextField *challengeTextField;
@property (nonatomic, strong) IBOutlet UIActivityIndicatorView *registerActivityIndicator;
@property (nonatomic, strong) IBOutlet UIActivityIndicatorView *challengeActivityIndicator;
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) IBOutlet UIView *containerView;
@property (nonatomic, strong) IBOutlet UIButton *registerCancelButton;
@property (nonatomic, strong) IBOutlet UIButton *continueToWhisperButton;
@property (nonatomic, strong) IBOutlet UILabel *challengeNumberLabel;
@property (nonatomic, strong) IBOutlet UILabel *voiceChallengeTextLabel;
@property (nonatomic, strong) IBOutlet UIButton *initiateVoiceVerificationButton;
- (IBAction)registerPhoneNumberTapped;
- (IBAction)registerCancelButtonTapped;
- (IBAction)verifyChallengeTapped;
- (IBAction)dismissTapped;
- (IBAction)changeNumberTapped;
- (IBAction)changeCountryCodeTapped;
- (IBAction)initiateVoiceVerificationButtonHandler;
+ (RegisterViewController*)registerViewController;
@end

View file

@ -1,377 +0,0 @@
#import "RPServerRequestsManager.h"
#import "Environment.h"
#import "HttpManager.h"
#import "LocalizableText.h"
#import "NBAsYouTypeFormatter.h"
#import "PhoneNumber.h"
#import "PhoneNumberDirectoryFilterManager.h"
#import "PhoneNumberUtil.h"
#import "PreferencesUtil.h"
#import "PushManager.h"
#import "RegisterViewController.h"
#import "RPServerRequestsManager.h"
#import "SignalUtil.h"
#import "SGNKeychainUtil.h"
#import "ThreadManager.h"
#import "Util.h"
#import <Pastelog.h>
#define REGISTER_VIEW_NUMBER 0
#define CHALLENGE_VIEW_NUMBER 1
#define COUNTRY_CODE_CHARACTER_MAX 3
#define SERVER_TIMEOUT_SECONDS 20
#define SMS_VERIFICATION_TIMEOUT_SECONDS 4*60
#define VOICE_VERIFICATION_COOLDOWN_SECONDS 4
#define IPHONE_BLUE [UIColor colorWithRed:22 green:173 blue:214 alpha:1]
@interface RegisterViewController () {
NSTimer* countdownTimer;
NSDate *timeoutDate;
}
@end
@implementation RegisterViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self localizeButtonText];
DDLogInfo(@"Opened Registration View");
[self populateDefaultCountryNameAndCode];
_scrollView.contentSize = _containerView.bounds.size;
BOOL isRegisteredAlready = Environment.isRegistered;
_registerCancelButton.hidden = !isRegisteredAlready;
[self initializeKeyboardHandlers];
[self setPlaceholderTextColor:[UIColor lightGrayColor]];
}
+ (RegisterViewController*)registerViewController {
RegisterViewController *viewController = [RegisterViewController new];
viewController->life = [TOCCancelTokenSource new];
viewController->registered = [TOCFutureSource futureSourceUntil:viewController->life.token];
return viewController;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
- (void)setPlaceholderTextColor:(UIColor *)color {
NSAttributedString *placeholder = _phoneNumberTextField.attributedPlaceholder;
if (placeholder.length) {
NSDictionary * attributes = [placeholder attributesAtIndex:0
effectiveRange:NULL];
NSMutableDictionary *newAttributes = [[NSMutableDictionary alloc] initWithDictionary:attributes];
newAttributes[NSForegroundColorAttributeName] = color;
NSString *placeholderString = [placeholder string];
_phoneNumberTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderString
attributes:newAttributes];
}
}
- (void)localizeButtonText {
[_registerCancelButton setTitle:TXT_CANCEL_TITLE forState:UIControlStateNormal];
[_continueToWhisperButton setTitle:CONTINUE_TO_WHISPER_TITLE forState:UIControlStateNormal];
[_registerButton setTitle:REGISTER_BUTTON_TITLE forState:UIControlStateNormal];
[_challengeButton setTitle:CHALLENGE_CODE_BUTTON_TITLE forState:UIControlStateNormal];
}
- (IBAction)registerCancelButtonTapped {
[self dismissView];
}
- (void) dismissView {
[self stopVoiceVerificationCountdownTimer];
[self dismissViewControllerAnimated:YES completion:nil];
}
- (void)populateDefaultCountryNameAndCode {
NSLocale *locale = NSLocale.currentLocale;
NSString *countryCode = [locale objectForKey:NSLocaleCountryCode];
NSNumber *cc = [NBPhoneNumberUtil.sharedInstance getCountryCodeForRegion:countryCode];
_countryCodeLabel.text = [NSString stringWithFormat:@"%@%@",COUNTRY_CODE_PREFIX, cc];
_countryNameLabel.text = [PhoneNumberUtil countryNameFromCountryCode:countryCode];
}
- (IBAction)changeNumberTapped {
[self showViewNumber:REGISTER_VIEW_NUMBER];
}
- (IBAction)changeCountryCodeTapped {
CountryCodeViewController *countryCodeController = [CountryCodeViewController new];
countryCodeController.delegate = self;
[self presentViewController:countryCodeController animated:YES completion:nil];
}
- (void)registerPhoneNumberTapped {
NSString *phoneNumber = [NSString stringWithFormat:@"%@%@", _countryCodeLabel.text, _phoneNumberTextField.text];
PhoneNumber* localNumber = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:phoneNumber];
if(localNumber==nil){ return; }
[_phoneNumberTextField resignFirstResponder];
[_registerActivityIndicator startAnimating];
_registerButton.enabled = NO;
[SGNKeychainUtil setLocalNumberTo:localNumber];
[[RPServerRequestsManager sharedInstance]performRequest:[RPAPICall requestVerificationCode] success:^(NSURLSessionDataTask *task, id responseObject) {
[self showViewNumber:CHALLENGE_VIEW_NUMBER];
[self.challengeNumberLabel setText:[phoneNumber description]];
[_registerCancelButton removeFromSuperview];
[self startVoiceVerificationCountdownTimer];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
[_registerActivityIndicator stopAnimating];
_registerButton.enabled = YES;
DDLogError(@"Registration failed with information %@", error.description);
UIAlertView *registrationErrorAV = [[UIAlertView alloc]initWithTitle:REGISTER_ERROR_ALERT_VIEW_TITLE message:REGISTER_ERROR_ALERT_VIEW_BODY delegate:nil cancelButtonTitle:REGISTER_ERROR_ALERT_VIEW_DISMISS otherButtonTitles:nil, nil];
[registrationErrorAV show];
}];
}
- (void)dismissTapped {
[self dismissView];
}
- (void)verifyChallengeTapped {
[_challengeTextField resignFirstResponder];
_challengeButton.enabled = NO;
[_challengeActivityIndicator startAnimating];
[[RPServerRequestsManager sharedInstance] performRequest:[RPAPICall verifyVerificationCode:_challengeTextField.text] success:^(NSURLSessionDataTask *task, id responseObject) {
[PushManager.sharedManager registrationWithSuccess:^{
[futureChallengeAcceptedSource trySetResult:@YES];
[Environment setRegistered:YES];
[registered trySetResult:@YES];
[Environment.getCurrent.phoneDirectoryManager forceUpdate];
[self dismissView];
} failure:^{
_challengeButton.enabled = YES;
[_challengeActivityIndicator stopAnimating];
}];
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSString *alertTitle = NSLocalizedString(@"REGISTRATION_ERROR", @"");
NSHTTPURLResponse* badResponse = (NSHTTPURLResponse*)task.response;
if (badResponse.statusCode == 401) {
SignalAlertView(alertTitle, REGISTER_CHALLENGE_ALERT_VIEW_BODY);
} else if (badResponse.statusCode == 413){
SignalAlertView(alertTitle, NSLocalizedString(@"REGISTER_RATE_LIMITING_BODY", @""));
} else {
NSString *alertBodyString = [NSString stringWithFormat:@"%@ %lu", NSLocalizedString(@"SERVER_CODE", @""),(unsigned long)badResponse.statusCode];
SignalAlertView (alertTitle, alertBodyString);
}
_challengeButton.enabled = YES;
[_challengeActivityIndicator stopAnimating];
}];
}
- (void)showViewNumber:(NSInteger)viewNumber {
if (viewNumber == REGISTER_VIEW_NUMBER) {
[_registerActivityIndicator stopAnimating];
_registerButton.enabled = YES;
}
[self stopVoiceVerificationCountdownTimer];
[_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width*viewNumber, 0) animated:YES];
}
- (void)presentInvalidCountryCodeError {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:REGISTER_CC_ERR_ALERT_VIEW_TITLE
message:REGISTER_CC_ERR_ALERT_VIEW_MESSAGE
delegate:nil
cancelButtonTitle:REGISTER_CC_ERR_ALERT_VIEW_DISMISS
otherButtonTitles:nil];
[alertView show];
}
- (void) startVoiceVerificationCountdownTimer{
[self.initiateVoiceVerificationButton.titleLabel setTextAlignment:NSTextAlignmentCenter];
self.initiateVoiceVerificationButton.hidden = NO;
NSTimeInterval smsTimeoutTimeInterval = SMS_VERIFICATION_TIMEOUT_SECONDS;
NSDate *now = [NSDate new];
timeoutDate = [[NSDate alloc] initWithTimeInterval:smsTimeoutTimeInterval sinceDate:now];
countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1
target:self
selector:@selector(countdowntimerFired)
userInfo:nil repeats:YES];
}
- (void) stopVoiceVerificationCountdownTimer{
[countdownTimer invalidate];
}
- (void) countdowntimerFired {
NSDate *now = [NSDate new];
NSCalendar *sysCalendar = NSCalendar.currentCalendar;
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:now toDate:timeoutDate options:0];
NSString* timeLeft = [NSString stringWithFormat:@"%ld:%02ld",(long)[conversionInfo minute],(long)[conversionInfo second]];
[self.voiceChallengeTextLabel setText:timeLeft];
if (0 <= [now compare:timeoutDate]) {
[self initiateVoiceVerification];
}
}
- (void) initiateVoiceVerification{
[self stopVoiceVerificationCountdownTimer];
[self.voiceChallengeTextLabel setText:NSLocalizedString(@"REGISTER_CALL_CALLING", @"")];
[[RPServerRequestsManager sharedInstance] performRequest:[RPAPICall requestVerificationCodeWithVoice] success:^(NSURLSessionDataTask *task, id responseObject) {
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, VOICE_VERIFICATION_COOLDOWN_SECONDS * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[self.voiceChallengeTextLabel setText:NSLocalizedString(@"REGISTER_CALL_RECALL", @"")];
});
} failure:^(NSURLSessionDataTask *task, NSError *error) {
[self.voiceChallengeTextLabel setText:error.description];
}];
}
- (IBAction)initiateVoiceVerificationButtonHandler {
[self initiateVoiceVerification];
}
#pragma mark - Keyboard notifications
- (void)initializeKeyboardHandlers{
UITapGestureRecognizer *outsideTabRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboardFromAppropriateSubView)];
[self.view addGestureRecognizer:outsideTabRecognizer];
[self observeKeyboardNotifications];
}
-(void) dismissKeyboardFromAppropriateSubView {
[self.view endEditing:NO];
}
- (void)observeKeyboardNotifications {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
}
- (void)keyboardWillShow:(NSNotification *)notification {
double duration = [[notification userInfo][UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView animateWithDuration:duration animations:^{
CGSize keyboardSize = [[notification userInfo][UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;;
_scrollView.frame = CGRectMake(CGRectGetMinX(_scrollView.frame),
CGRectGetMinY(_scrollView.frame)-keyboardSize.height,
CGRectGetWidth(_scrollView.frame),
CGRectGetHeight(_scrollView.frame));
}];
}
- (void)keyboardWillHide:(NSNotification *)notification {
double duration = [[notification userInfo][UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView animateWithDuration:duration animations:^{
_scrollView.frame = CGRectMake(CGRectGetMinX(_scrollView.frame),
CGRectGetMinY(self.view.frame),
CGRectGetWidth(_scrollView.frame),
CGRectGetHeight(_scrollView.frame));
}];
}
#pragma mark - CountryCodeViewControllerDelegate
- (void)countryCodeViewController:(CountryCodeViewController *)vc
didSelectCountryCode:(NSString *)code
forCountry:(NSString *)country {
_countryCodeLabel.text = code;
_countryNameLabel.text = country;
// Reformat phone number
NSString* digits = _phoneNumberTextField.text.digitsOnly;
NSString* reformattedNumber = [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:digits
withSpecifiedCountryCodeString:_countryCodeLabel.text];
_phoneNumberTextField.text = reformattedNumber;
UITextPosition *pos = _phoneNumberTextField.endOfDocument;
[_phoneNumberTextField setSelectedTextRange:[_phoneNumberTextField textRangeFromPosition:pos toPosition:pos]];
// Done choosing country
[vc dismissViewControllerAnimated:YES completion:nil];
}
- (void)countryCodeViewControllerDidCancel:(CountryCodeViewController *)vc {
[vc dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - UITextFieldDelegate
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString* textBeforeChange = textField.text;
// backspacing should skip over formatting characters
UITextPosition *posIfBackspace = [textField positionFromPosition:textField.beginningOfDocument
offset:(NSInteger)(range.location + range.length)];
UITextRange *rangeIfBackspace = [textField textRangeFromPosition:posIfBackspace toPosition:posIfBackspace];
bool isBackspace = string.length == 0 && range.length == 1 && [rangeIfBackspace isEqual:textField.selectedTextRange];
if (isBackspace) {
NSString* digits = textBeforeChange.digitsOnly;
NSUInteger correspondingDeletePosition = [PhoneNumberUtil translateCursorPosition:range.location + range.length
from:textBeforeChange
to:digits
stickingRightward:true];
if (correspondingDeletePosition > 0) {
textBeforeChange = digits;
range = NSMakeRange(correspondingDeletePosition - 1, 1);
}
}
// make the proposed change
NSString* textAfterChange = [textBeforeChange withCharactersInRange:range replacedBy:string];
NSUInteger cursorPositionAfterChange = range.location + string.length;
// reformat the phone number, trying to keep the cursor beside the inserted or deleted digit
bool isJustDeletion = string.length == 0;
NSString* textAfterReformat = [PhoneNumber bestEffortFormatPartialUserSpecifiedTextToLookLikeAPhoneNumber:textAfterChange.digitsOnly
withSpecifiedCountryCodeString:_countryCodeLabel.text];
NSUInteger cursorPositionAfterReformat = [PhoneNumberUtil translateCursorPosition:cursorPositionAfterChange
from:textAfterChange
to:textAfterReformat
stickingRightward:isJustDeletion];
textField.text = textAfterReformat;
UITextPosition *pos = [textField positionFromPosition:textField.beginningOfDocument
offset:(NSInteger)cursorPositionAfterReformat];
[textField setSelectedTextRange:[textField textRangeFromPosition:pos toPosition:pos]];
return NO; // inform our caller that we took care of performing the change
}
@end

View file

@ -1,47 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="ContactDetailTableViewCell" rowHeight="49" id="cLk-zw-rwJ" customClass="ContactDetailTableViewCell">
<rect key="frame" x="0.0" y="0.0" width="320" height="49"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="cLk-zw-rwJ" id="GlB-vH-wdL">
<rect key="frame" x="0.0" y="0.0" width="320" height="48"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+1 (234)-567-8905" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="rFC-L1-ZvO">
<rect key="frame" x="26" y="23" width="202" height="22"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="16"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="registered mobile" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Jnn-TC-O0d">
<rect key="frame" x="26" y="1" width="267" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="12"/>
<color key="textColor" red="0.0" green="0.73333333333333328" blue="0.87058823529411766" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<view contentMode="scaleToFill" id="RXT-bl-LZn" userLabel="Seperator view">
<rect key="frame" x="9" y="48" width="300" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
</tableViewCellContentView>
<connections>
<outlet property="infoDisplayLabel" destination="rFC-L1-ZvO" id="Ust-Zl-1bg"/>
<outlet property="infoTypeLabel" destination="Jnn-TC-O0d" id="dAQ-zW-kcS"/>
</connections>
</tableViewCell>
</objects>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,69 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="ContactDetailViewController">
<connections>
<outlet property="contactImageView" destination="zfe-la-xIb" id="s2M-bc-Mh3"/>
<outlet property="contactInfoTableView" destination="jNG-R5-r0m" id="Ol8-MV-J7p"/>
<outlet property="contactNameLabel" destination="5qW-wL-wnI" id="VgI-Og-ovR"/>
<outlet property="secureInfoHeaderView" destination="rbM-xj-rv4" id="Gbo-2y-6Ry"/>
<outlet property="view" destination="1" id="3"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" translatesAutoresizingMaskIntoConstraints="NO" id="jNG-R5-r0m">
<rect key="frame" x="0.0" y="0.0" width="320" height="519"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<connections>
<outlet property="dataSource" destination="-1" id="vyd-cy-GMS"/>
<outlet property="delegate" destination="-1" id="r85-1m-zAr"/>
</connections>
</tableView>
</subviews>
<constraints>
<constraint firstItem="jNG-R5-r0m" firstAttribute="top" secondItem="1" secondAttribute="top" id="Swe-PJ-Q3D"/>
<constraint firstAttribute="trailing" secondItem="jNG-R5-r0m" secondAttribute="trailing" id="Xax-WX-nEx"/>
<constraint firstItem="jNG-R5-r0m" firstAttribute="leading" secondItem="1" secondAttribute="leading" id="rGH-rn-ki2"/>
<constraint firstAttribute="bottom" secondItem="jNG-R5-r0m" secondAttribute="bottom" id="rJn-Dd-NeH"/>
</constraints>
<simulatedNavigationBarMetrics key="simulatedTopBarMetrics" prompted="NO"/>
<simulatedTabBarMetrics key="simulatedBottomBarMetrics" translucent="NO"/>
</view>
<view contentMode="scaleToFill" id="rbM-xj-rv4" userLabel="Contact Detail Header View">
<rect key="frame" x="0.0" y="0.0" width="320" height="100"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Moxie Marlinspike" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" preferredMaxLayoutWidth="201" translatesAutoresizingMaskIntoConstraints="NO" id="5qW-wL-wnI">
<rect key="frame" x="80" y="22" width="201" height="55"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="18"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" image="contact_default_feed.png" translatesAutoresizingMaskIntoConstraints="NO" id="zfe-la-xIb">
<rect key="frame" x="17" y="22" width="55" height="55"/>
</imageView>
<view contentMode="scaleToFill" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZNu-c1-4Uj" userLabel="Seperator view">
<rect key="frame" x="0.0" y="98" width="320" height="1"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
</view>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
</view>
</objects>
<resources>
<image name="contact_default_feed.png" width="242" height="242"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>

View file

@ -1,293 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6250" systemVersion="14B25" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6244"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="RegisterViewController">
<connections>
<outlet property="challengeActivityIndicator" destination="19" id="RXt-hH-5kD"/>
<outlet property="challengeButton" destination="zIb-7d-0em" id="G2W-Ef-bev"/>
<outlet property="challengeNumberLabel" destination="deD-LF-4RO" id="RrX-TJ-m8K"/>
<outlet property="challengeTextField" destination="zgO-84-8qR" id="5uc-Fy-5Jr"/>
<outlet property="containerView" destination="6at-WU-Rlw" id="mLe-aM-qhl"/>
<outlet property="countryCodeLabel" destination="Qdk-Nj-eQo" id="sSz-9T-ATi"/>
<outlet property="countryNameLabel" destination="Es8-3I-abE" id="cOc-sq-PER"/>
<outlet property="initiateVoiceVerificationButton" destination="nTJ-jQ-3g7" id="qqV-gC-UKr"/>
<outlet property="phoneNumberTextField" destination="12" id="17"/>
<outlet property="registerActivityIndicator" destination="ZuN-a5-tVs" id="0ut-nh-AIV"/>
<outlet property="registerButton" destination="14" id="18"/>
<outlet property="registerCancelButton" destination="yuJ-T0-mV0" id="5No-Ec-CHs"/>
<outlet property="scrollView" destination="Hwy-85-hms" id="ssk-dZ-0cs"/>
<outlet property="view" destination="1" id="3"/>
<outlet property="voiceChallengeTextLabel" destination="Ofy-FZ-zZt" id="pBC-GW-Z8H"/>
</connections>
</placeholder>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="1">
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" pagingEnabled="YES" id="Hwy-85-hms">
<rect key="frame" x="0.0" y="0.0" width="321" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" id="6at-WU-Rlw" userLabel="Scroll View Container View">
<rect key="frame" x="0.0" y="0.0" width="1280" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<view contentMode="scaleToFill" id="Irc-jT-9Q0" userLabel="Register View">
<rect key="frame" x="0.0" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
<subviews>
<activityIndicatorView hidden="YES" opaque="NO" contentMode="scaleToFill" hidesWhenStopped="YES" style="gray" id="ZuN-a5-tVs" userLabel="Register Activity Indicator">
<rect key="frame" x="281" y="338" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
</activityIndicatorView>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" placeholder="(555)-555-5555" minimumFontSize="17" id="12" userLabel="Number Text Field">
<rect key="frame" x="47" y="336" width="226" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
<color key="textColor" red="0.23529411764705882" green="0.23529411764705882" blue="0.23529411764705882" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="20"/>
<textInputTraits key="textInputTraits" keyboardType="phonePad"/>
<connections>
<outlet property="delegate" destination="-1" id="ogx-dU-jaZ"/>
</connections>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="14">
<rect key="frame" x="0.0" y="423" width="320" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.0" green="0.73333333329999995" blue="0.87058823529999996" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="25"/>
<state key="normal">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="registerPhoneNumberTapped" destination="-1" eventType="touchUpInside" id="CmU-nR-GK0"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="yuJ-T0-mV0">
<rect key="frame" x="249" y="20" width="71" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="14"/>
<state key="normal" title="Cancel">
<color key="titleColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="registerCancelButtonTapped" destination="-1" eventType="touchUpInside" id="ymI-HG-Cb4"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="6FJ-0P-YCb" customClass="HelveticaNeueLTStdMedLabel">
<rect key="frame" x="44" y="100" width="231" height="122"/>
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
<string key="text">to get started making secure call,s please confirm your country code and enter your device's phone number
</string>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="16"/>
<color key="textColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.23529411759999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_TEXTBLOCK"/>
</userDefinedRuntimeAttributes>
</label>
<view contentMode="scaleToFill" id="3vF-HK-Qbz" userLabel="Phone Number Underline View">
<rect key="frame" x="43" y="367" width="225" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.69779311131386856" green="0.69303147810218979" blue="0.69271783759124084" alpha="1" colorSpace="calibratedRGB"/>
</view>
<view contentMode="scaleToFill" id="lDW-EB-Kpq" userLabel="Country Code Underline View">
<rect key="frame" x="43" y="292" width="225" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.69779311129999999" green="0.69303147809999999" blue="0.69271783760000005" alpha="1" colorSpace="calibratedRGB"/>
</view>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="+1" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="Qdk-Nj-eQo">
<rect key="frame" x="47" y="264" width="50" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="19"/>
<color key="textColor" red="0.0" green="0.73333333329999995" blue="0.87058823529999996" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="COUNTRY" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" id="Es8-3I-abE">
<rect key="frame" x="93" y="264" width="148" height="25"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="16"/>
<color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/>
</label>
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="drop_down_arrow_icon.png" id="3ID-XK-RDQ">
<rect key="frame" x="254" y="272" width="14" height="9"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</imageView>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="HHQ-Bq-nQr" userLabel="Change Country Code Button">
<rect key="frame" x="43" y="252" width="249" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<state key="normal">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="changeCountryCodeTapped" destination="-1" eventType="touchUpInside" id="HHu-hS-uXl"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Your number's country code" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Mwc-aC-HdK" customClass="HelveticaNeueLTStdBoldLabel">
<rect key="frame" x="52" y="292" width="253" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_ENTER_COUNTRY_CODE"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Your Phone Number" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="P6Z-S1-zv4" customClass="HelveticaNeueLTStdBoldLabel">
<rect key="frame" x="52" y="367" width="253" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_ENTER_NUMBER"/>
</userDefinedRuntimeAttributes>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</view>
<view contentMode="scaleToFill" id="5w8-fF-dDj" userLabel="Challenge View" customClass="HelveticaNeueLTStdBoldLabel">
<rect key="frame" x="320" y="0.0" width="320" height="480"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/>
<subviews>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" id="zgO-84-8qR" userLabel="Challenge Text Field">
<rect key="frame" x="46" y="338" width="218" height="29"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.23529411759999999" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="HelveticaNeue" family="Helvetica Neue" pointSize="20"/>
<textInputTraits key="textInputTraits" keyboardType="phonePad"/>
</textField>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="zIb-7d-0em" userLabel="Challenge Button">
<rect key="frame" x="0.0" y="423" width="320" height="57"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<color key="backgroundColor" red="0.0" green="0.73333333329999995" blue="0.87058823529999996" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Medium" family="Helvetica Neue" pointSize="25"/>
<state key="normal">
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="verifyChallengeTapped" destination="-1" eventType="touchUpInside" id="eMN-6x-T0q"/>
</connections>
</button>
<view contentMode="scaleToFill" id="XOE-ev-Vjj" userLabel="Country Code Underline View">
<rect key="frame" x="43" y="366" width="225" height="1"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
</view>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" textAlignment="center" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="5um-MZ-rBX" customClass="HelveticaNeueLTStdMedLabel">
<rect key="frame" x="30" y="67" width="263" height="102"/>
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
<string key="text" base64-UTF8="YES">
TGV04oCZcyBtYWtlIHN1cmUgeW914oCZcmUgcmVhbC4gA1dlJ3ZlIHNlbnQgYSBzaXggZGlnaXQgY29k
ZSB0bw
</string>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="highlightedColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.23529411759999999" alpha="1" colorSpace="calibratedRGB"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_CHALLENGE_TEXTBLOCK_PART1"/>
</userDefinedRuntimeAttributes>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="bD4-dS-THH">
<rect key="frame" x="209" y="12" width="180" height="39"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<inset key="contentEdgeInsets" minX="-28" minY="0.0" maxX="0.0" maxY="0.0"/>
<state key="normal" title="Back" image="send_code_icon.png">
<color key="titleColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
</state>
<connections>
<action selector="changeNumberTapped" destination="-1" eventType="touchUpInside" id="h5j-9x-xVH"/>
</connections>
</button>
<activityIndicatorView opaque="NO" contentMode="scaleToFill" hidesWhenStopped="YES" style="gray" id="19" userLabel="Challenge Activity Indicator">
<rect key="frame" x="272" y="335" width="20" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
</activityIndicatorView>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Validation Code" lineBreakMode="wordWrap" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="JM3-8y-Cad" customClass="HelveticaNeueLTStdLightLabel">
<rect key="frame" x="52" y="366" width="268" height="21"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_VALIDATION_ENTER_CODE"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="(902) 999-9999" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="deD-LF-4RO" userLabel="phoneNumber - (902) 999-9999">
<rect key="frame" x="44" y="144" width="225" height="20"/>
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="19"/>
<color key="textColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="To complete your phone verification, please enter the code below." textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="6TI-6p-V4D" customClass="HelveticaNeueLTStdMedLabel">
<rect key="frame" x="20" y="152" width="280" height="77"/>
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Bold" family="Helvetica Neue" pointSize="14"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="highlightedColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_CHALLENGE_TEXTBLOCK_PART2"/>
</userDefinedRuntimeAttributes>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="If you are unable to recieve an SMS a call will be dispatched in" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Jys-8l-1p7" customClass="HelveticaNeueLTStdThinLabel">
<rect key="frame" x="60" y="237" width="193" height="55"/>
<autoresizingMask key="autoresizingMask" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" name="HelveticaNeue-Light" family="Helvetica Neue" pointSize="13"/>
<nil key="highlightedColor"/>
<userDefinedRuntimeAttributes>
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="REGISTER_CHALLENGE_VOICECALL_TEXT"/>
</userDefinedRuntimeAttributes>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" id="nTJ-jQ-3g7">
<rect key="frame" x="94" y="276" width="122" height="29"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="21"/>
<state key="normal">
<color key="titleColor" red="0.08235294118" green="0.67450980390000004" blue="0.83921568629999999" alpha="1" colorSpace="calibratedRGB"/>
</state>
<connections>
<action selector="initiateVoiceVerificationButtonHandler" destination="-1" eventType="touchUpInside" id="54G-Ny-Hrc"/>
</connections>
</button>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Ofy-FZ-zZt">
<rect key="frame" x="43" y="281" width="225" height="24"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
</view>
</subviews>
<color key="backgroundColor" red="0.35294117650000001" green="0.33333333329999998" blue="0.33725490200000002" alpha="1" colorSpace="calibratedRGB"/>
</view>
</subviews>
<connections>
<outlet property="delegate" destination="-1" id="sUp-hY-fgv"/>
</connections>
</scrollView>
</subviews>
<color key="backgroundColor" red="0.13725490200000001" green="0.1215686275" blue="0.12549019610000001" alpha="1" colorSpace="calibratedRGB"/>
<simulatedScreenMetrics key="simulatedDestinationMetrics"/>
</view>
</objects>
<resources>
<image name="drop_down_arrow_icon.png" width="14" height="9"/>
<image name="send_code_icon.png" width="12" height="12"/>
</resources>
<simulatedMetricsContainer key="defaultSimulatedMetrics">
<simulatedStatusBarMetrics key="statusBar"/>
<simulatedOrientationMetrics key="orientation"/>
<simulatedScreenMetrics key="destination" type="retina4"/>
</simulatedMetricsContainer>
</document>