forked from mirrors/linphone-iphone
Merge branch 'master' into dev_vcard
Conflicts: .gitmodules submodules/linphone
This commit is contained in:
commit
87fb94fdbc
182 changed files with 1515 additions and 984 deletions
|
|
@ -5,47 +5,53 @@
|
|||
|
||||
# From https://github.com/tatsuhiro-t/nghttp2/blob/master/pre-commit
|
||||
|
||||
function invalid-format-detected {
|
||||
cat git-clang-format.diff
|
||||
echo "*****************"
|
||||
echo "$0: Invalid coding style detected (see git-clang-format.diff for issues). Please correct it using one of the following:"
|
||||
echo "1) Apply patch located at git-clang-format.diff using:"
|
||||
echo " cd $(git rev-parse --show-toplevel) && $1"
|
||||
echo "2) Use clang-format to correctly format source code using:"
|
||||
echo " $2"
|
||||
echo "3) Reformat these lines manually."
|
||||
echo "*** Aborting commit.***"
|
||||
exit 1
|
||||
}
|
||||
git_clang_format_path="$(which git-clang-format)"
|
||||
clang_format_path=$(find /usr/bin /usr/local/bin/ -name 'clang-format-diff*' -type f -maxdepth 1 | tail -n1)
|
||||
|
||||
|
||||
function git-clang-format-diffing {
|
||||
format_diff=$(which git-clang-format)
|
||||
format_diff_options="--style=file"
|
||||
options="--style=file"
|
||||
|
||||
#only diffing commited files, ignored staged one
|
||||
$format_diff $format_diff_options --diff $(git --no-pager diff --cached --name-status | grep -v '^D' | cut -f2) > git-clang-format.diff
|
||||
$git_clang_format_path $options --diff $(git --no-pager diff --cached --name-status | grep -v '^D' | cut -f2) > diff-format.patch
|
||||
|
||||
if ! grep -q -E '(no modified files to format|clang-format did not modify any files)' git-clang-format.diff; then
|
||||
invalid-format-detected "git apply git-clang-format.diff" "clang-format $format_diff_options -i <some_file.c>"
|
||||
if grep -q -E '(no modified files to format|clang-format did not modify any files)' diff-format.patch; then
|
||||
rm diff-format.patch
|
||||
fi
|
||||
}
|
||||
|
||||
function clang-format-diff-diffing {
|
||||
format_diff=$(find /usr/bin/ -name 'clang-format-diff*' -type f | tail -n1)
|
||||
format_diff_options="-style file"
|
||||
options="-style file"
|
||||
|
||||
git diff-index --cached --diff-filter=ACMR -p HEAD -- | $format_diff $format_diff_options -p1 > git-clang-format.diff
|
||||
if [ -s git-clang-format.diff ]; then
|
||||
invalid-format-detected "patch -p0 < git-clang-format.diff" "${format_diff/-diff/} $format_diff_options -i <some_file.cpp>"
|
||||
git diff-index --cached --diff-filter=ACMR -p HEAD -- | $clang_format_path $options -p1 > file-format.patch
|
||||
if [ ! -s file-format.patch ]; then
|
||||
rm file-format.patch
|
||||
fi
|
||||
}
|
||||
|
||||
set -e
|
||||
if which git-clang-format &>/dev/null; then
|
||||
git-clang-format-diffing $@
|
||||
elif [ ! -z "$(find /usr/bin/ /usr/local/bin/ /opt/bin/ -name 'clang-format-diff*' -type f 2>/dev/null)" ]; then
|
||||
# Warning! We need at least version 1.6...
|
||||
clang-format-diff-diffing $@
|
||||
else
|
||||
|
||||
if [ -z "$git_clang_format_path$clang_format_path" ]; then
|
||||
echo "$0: Please install clang-format (coding style checker) - could not find git-clang-format nor clang-format-diff in PATH. Skipping code verification..."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -z "$git_clang_format_path" ]; then
|
||||
git-clang-format-diffing
|
||||
fi
|
||||
|
||||
if [ ! -z "$clang_format_path" ]; then
|
||||
# Warning! We need at least version 1.6...
|
||||
clang-format-diff-diffing
|
||||
fi
|
||||
|
||||
if [ -f diff-format.patch ] || [ -f file-format.patch ]; then
|
||||
[ -f diff-format.patch ] && cat diff-format.patch
|
||||
echo "**********************************************************************"
|
||||
echo "$0: Invalid coding style detected. Please correct it using one of the following:"
|
||||
echo "* Reformat these lines manually."
|
||||
[ -f diff-format.patch ] && printf "* Apply diff patch using:\n\tcd $(git rev-parse --show-toplevel) && git apply diff-format.patch\n"
|
||||
[ -f file-format.patch ] && printf "* Apply diff patch using:\n\tpatch -p0 < file-format.patch\n"
|
||||
echo "*** Aborting commit.***"
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
|||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -16,3 +16,4 @@ submodules/tunnel
|
|||
submodules/binaries/dummy-*.a
|
||||
linphone-iphone.ipa
|
||||
TutorialHellowWorld/hello-world.xcodeproj/project.xcworkspace/
|
||||
diff-format.patch
|
||||
|
|
|
|||
3
.gitmodules
vendored
3
.gitmodules
vendored
|
|
@ -91,3 +91,6 @@
|
|||
[submodule "submodules/belcard"]
|
||||
path = submodules/belcard
|
||||
url = git://git.linphone.org/belcard
|
||||
[submodule "submodules/bctoolbox"]
|
||||
path = submodules/bctoolbox
|
||||
url = git://git.linphone.org/bctoolbox
|
||||
|
|
|
|||
|
|
@ -21,18 +21,12 @@
|
|||
|
||||
#import "UICompositeView.h"
|
||||
|
||||
@interface AboutView : UIViewController <UICompositeViewDelegate, UIWebViewDelegate> {
|
||||
}
|
||||
|
||||
@property(nonatomic, strong) IBOutlet UILabel *linphoneLabel;
|
||||
@property(nonatomic, strong) IBOutlet UILabel *linphoneIphoneVersionLabel;
|
||||
@property(nonatomic, strong) IBOutlet UILabel *linphoneCoreVersionLabel;
|
||||
@property(nonatomic, strong) IBOutlet UILabel *linkLabel;
|
||||
@property(nonatomic, strong) IBOutlet UILabel *copyrightLabel;
|
||||
@property(nonatomic, strong) IBOutlet UILabel *licenseLabel;
|
||||
@property(weak, nonatomic) IBOutlet UIView *contentView;
|
||||
@property(nonatomic, strong) IBOutlet UIWebView *licensesView;
|
||||
@interface AboutView : TPMultiLayoutViewController <UICompositeViewDelegate>
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *descriptionLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *appVersionLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *libVersionLabel;
|
||||
- (IBAction)onLinkTap:(id)sender;
|
||||
- (IBAction)onDialerBackClick:(id)sender;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,43 +19,10 @@
|
|||
|
||||
#import "PhoneMainView.h"
|
||||
#import "LinphoneManager.h"
|
||||
#include "linphone/lpconfig.h"
|
||||
#include "LinphoneIOSVersion.h"
|
||||
#import "LinphoneIOSVersion.h"
|
||||
|
||||
@implementation AboutView
|
||||
|
||||
#pragma mark - ViewController Functions
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
UIScrollView *scrollView = (UIScrollView *)self.view;
|
||||
[scrollView addSubview:_contentView];
|
||||
[scrollView setContentSize:[_contentView bounds].size];
|
||||
|
||||
[_linphoneLabel setText:[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"]];
|
||||
|
||||
[_linphoneIphoneVersionLabel
|
||||
setText:[NSString stringWithFormat:@"%@ iPhone %@",
|
||||
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"],
|
||||
[NSString stringWithUTF8String:LINPHONE_IOS_VERSION]]];
|
||||
|
||||
[_linphoneCoreVersionLabel
|
||||
setText:[NSString stringWithFormat:@"%@ Core %s",
|
||||
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"],
|
||||
linphone_core_get_version()]];
|
||||
|
||||
[AboutView removeBackground:_licensesView];
|
||||
|
||||
// Create a request to the resource
|
||||
NSURLRequest *request =
|
||||
[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[LinphoneManager bundleFile:@"licenses.html"]]];
|
||||
// Load the resource using the request
|
||||
[_licensesView setDelegate:self];
|
||||
[_licensesView loadRequest:request];
|
||||
[[AboutView defaultScrollView:_licensesView] setScrollEnabled:FALSE];
|
||||
}
|
||||
|
||||
#pragma mark - UICompositeViewDelegate Functions
|
||||
|
||||
static UICompositeViewDescription *compositeDescription = nil;
|
||||
|
|
@ -77,54 +44,24 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
return self.class.compositeViewDescription;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
#pragma mark - ViewController Functions
|
||||
|
||||
+ (void)removeBackground:(UIView *)view {
|
||||
for (UIView *subview in [view subviews]) {
|
||||
[subview setOpaque:NO];
|
||||
[subview setBackgroundColor:[UIColor clearColor]];
|
||||
}
|
||||
[view setOpaque:NO];
|
||||
[view setBackgroundColor:[UIColor clearColor]];
|
||||
}
|
||||
|
||||
+ (UIScrollView *)defaultScrollView:(UIWebView *)webView {
|
||||
return webView.scrollView;
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
NSString *name = [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
||||
_nameLabel.text = name;
|
||||
_appVersionLabel.text = [NSString stringWithFormat:@"%@ iOS %s", name, LINPHONE_IOS_VERSION];
|
||||
_libVersionLabel.text = [NSString stringWithFormat:@"%@ Core %s", name, linphone_core_get_version()];
|
||||
}
|
||||
|
||||
#pragma mark - Action Functions
|
||||
|
||||
- (IBAction)onLinkTap:(id)sender {
|
||||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:_linkLabel.text]];
|
||||
}
|
||||
|
||||
#pragma mark - UIWebViewDelegate Functions
|
||||
|
||||
- (void)webViewDidFinishLoad:(UIWebView *)webView {
|
||||
CGSize size = [webView sizeThatFits:CGSizeMake(self.view.bounds.size.width, 10000.0f)];
|
||||
float diff = size.height - webView.bounds.size.height;
|
||||
|
||||
CGRect contentFrame = [self.view bounds];
|
||||
contentFrame.size.height += diff;
|
||||
[_contentView setAutoresizesSubviews:FALSE];
|
||||
[_contentView setFrame:contentFrame];
|
||||
[_contentView setAutoresizesSubviews:TRUE];
|
||||
[(UIScrollView *)self.view setContentSize:contentFrame.size];
|
||||
|
||||
CGRect licensesViewFrame = [_licensesView frame];
|
||||
licensesViewFrame.size.height += diff;
|
||||
[_licensesView setFrame:licensesViewFrame];
|
||||
}
|
||||
|
||||
- (BOOL)webView:(UIWebView *)inWeb
|
||||
shouldStartLoadWithRequest:(NSURLRequest *)inRequest
|
||||
navigationType:(UIWebViewNavigationType)inType {
|
||||
if (inType == UIWebViewNavigationTypeLinkClicked) {
|
||||
[[UIApplication sharedApplication] openURL:[inRequest URL]];
|
||||
return NO;
|
||||
UIGestureRecognizer *gest = sender;
|
||||
NSString *url = ((UILabel *)gest.view).text;
|
||||
if (![UIApplication.sharedApplication openURL:[NSURL URLWithString:url]]) {
|
||||
LOGE(@"Failed to open %@, invalid URL", url);
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (IBAction)onDialerBackClick:(id)sender {
|
||||
|
|
|
|||
|
|
@ -70,6 +70,4 @@
|
|||
- (IBAction)onRemoteProvisioningLoginClick:(id)sender;
|
||||
- (IBAction)onRemoteProvisioningDownloadClick:(id)sender;
|
||||
|
||||
- (IBAction)onTransportChange:(id)sender;
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -225,6 +225,16 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
}
|
||||
|
||||
// set transport
|
||||
UISegmentedControl *transports = (UISegmentedControl *)[self findView:ViewElement_Transport
|
||||
inView:self.contentView
|
||||
ofType:UISegmentedControl.class];
|
||||
if (transports) {
|
||||
NSString *type = [transports titleForSegmentAtIndex:[transports selectedSegmentIndex]];
|
||||
linphone_account_creator_set_transport(account_creator,
|
||||
linphone_transport_parse(type.lowercaseString.UTF8String));
|
||||
}
|
||||
|
||||
new_config = linphone_account_creator_configure(account_creator);
|
||||
|
||||
if (new_config) {
|
||||
|
|
@ -233,6 +243,17 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
// reload address book to prepend proxy config domain to contacts' phone number
|
||||
// todo: STOP doing that!
|
||||
[[LinphoneManager.instance fastAddressBook] reload];
|
||||
} else {
|
||||
UIAlertView *error = [[UIAlertView alloc]
|
||||
initWithTitle:NSLocalizedString(@"Assistant error", nil)
|
||||
message:NSLocalizedString(
|
||||
@"Could not configure your account, please check parameters or try again later", nil)
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
|
||||
otherButtonTitles:nil];
|
||||
[error show];
|
||||
_waitView.hidden = YES;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -477,9 +498,11 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
UIAssistantTextField *displayName = [self findTextField:ViewElement_DisplayName];
|
||||
[displayName showError:[AssistantView errorForStatus:LinphoneAccountCreatorDisplayNameInvalid]
|
||||
when:^BOOL(NSString *inputEntry) {
|
||||
LinphoneAccountCreatorStatus s =
|
||||
linphone_account_creator_set_display_name(account_creator, inputEntry.UTF8String);
|
||||
displayName.errorLabel.text = [AssistantView errorForStatus:s];
|
||||
LinphoneAccountCreatorStatus s = LinphoneAccountCreatorOK;
|
||||
if (inputEntry.length > 0) {
|
||||
s = linphone_account_creator_set_display_name(account_creator, inputEntry.UTF8String);
|
||||
displayName.errorLabel.text = [AssistantView errorForStatus:s];
|
||||
}
|
||||
return s != LinphoneAccountCreatorOK;
|
||||
}];
|
||||
|
||||
|
|
@ -516,9 +539,6 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
case LinphoneRegistrationFailed: {
|
||||
_waitView.hidden = true;
|
||||
if ([message isEqualToString:@"Forbidden"]) {
|
||||
message = NSLocalizedString(@"Incorrect username or password.", nil);
|
||||
}
|
||||
DTAlertView *alert = [[DTAlertView alloc] initWithTitle:NSLocalizedString(@"Registration failure", nil)
|
||||
message:message
|
||||
delegate:nil
|
||||
|
|
@ -728,12 +748,6 @@ void assistant_validation_tested(LinphoneAccountCreator *creator, LinphoneAccoun
|
|||
[self resetLiblinphone];
|
||||
}
|
||||
|
||||
- (IBAction)onTransportChange:(id)sender {
|
||||
UISegmentedControl *transports = sender;
|
||||
NSString *type = [transports titleForSegmentAtIndex:[transports selectedSegmentIndex]];
|
||||
linphone_account_creator_set_transport(account_creator, linphone_transport_parse(type.lowercaseString.UTF8String));
|
||||
}
|
||||
|
||||
- (IBAction)onBackClick:(id)sender {
|
||||
if ([historyViews count] > 0) {
|
||||
UIView *view = [historyViews lastObject];
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,21 +1,19 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="AboutView">
|
||||
<connections>
|
||||
<outlet property="contentView" destination="HJH-1o-RXN" id="cpg-X4-yj1"/>
|
||||
<outlet property="copyrightLabel" destination="58" id="72"/>
|
||||
<outlet property="licenseLabel" destination="61" id="wfl-pd-xb6"/>
|
||||
<outlet property="licensesView" destination="69" id="70"/>
|
||||
<outlet property="linkLabel" destination="57" id="60"/>
|
||||
<outlet property="linphoneCoreVersionLabel" destination="66" id="67"/>
|
||||
<outlet property="linphoneIphoneVersionLabel" destination="65" id="68"/>
|
||||
<outlet property="linphoneLabel" destination="56" id="71"/>
|
||||
<outlet property="view" destination="62" id="fyD-fm-fE1"/>
|
||||
<outlet property="appVersionLabel" destination="gLk-Bc-zvx" id="81L-RE-1ad"/>
|
||||
<outlet property="descriptionLabel" destination="lTF-yt-Uqp" id="z8Q-Rk-T1S"/>
|
||||
<outlet property="landscapeView" destination="sVO-4a-t1s" id="9ye-NV-onQ"/>
|
||||
<outlet property="libVersionLabel" destination="ZYk-v1-CYZ" id="E4g-U8-zyp"/>
|
||||
<outlet property="nameLabel" destination="dFa-fl-SAE" id="kIv-p3-ga8"/>
|
||||
<outlet property="portraitView" destination="HJH-1o-RXN" id="Hoa-uk-q9s"/>
|
||||
<outlet property="view" destination="HJH-1o-RXN" id="t5Y-ob-1WC"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
|
|
@ -23,23 +21,21 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" id="HJH-1o-RXN">
|
||||
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<view tag="1" contentMode="scaleToFill" id="HJH-1o-RXN">
|
||||
<rect key="frame" x="0.0" y="66" width="375" height="601"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" id="Whz-oo-Pwx" userLabel="topBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="374" height="66"/>
|
||||
<view tag="2" contentMode="scaleToFill" id="Whz-oo-Pwx" userLabel="topBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="h54-RV-eE6" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="374" height="66"/>
|
||||
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="h54-RV-eE6" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
</imageView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ETk-tB-ZNl" userLabel="dialerBackButton" customClass="UIIconButton">
|
||||
<rect key="frame" x="299" y="0.0" width="75" height="66"/>
|
||||
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ETk-tB-ZNl" userLabel="dialerBackButton" customClass="UIIconButton">
|
||||
<rect key="frame" x="299" y="0.0" width="76" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<accessibility key="accessibilityConfiguration" label="Add contact"/>
|
||||
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
|
||||
<state key="normal" image="dialer_back_default.png">
|
||||
|
|
@ -51,117 +47,244 @@
|
|||
<action selector="onDialerBackClick:" destination="-1" eventType="touchUpInside" id="PJX-d2-pSh"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iNt-9d-7si" userLabel="titleLabel">
|
||||
<rect key="frame" x="83" y="0.0" width="208" height="66"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="iNt-9d-7si" userLabel="titleLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<animations/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="ZIC-nr-lzF">
|
||||
<rect key="frame" x="0.0" y="66" width="375" height="559"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<view clipsSubviews="YES" multipleTouchEnabled="YES" tag="6" contentMode="scaleToFill" id="er6-WR-NP1">
|
||||
<rect key="frame" x="0.0" y="66" width="375" height="535"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="linphone_logo.png" id="55" userLabel="iconImageView">
|
||||
<rect key="frame" x="145" y="20" width="84" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_C.png" id="fbO-x9-0Ue" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="392"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Linphone" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="56" userLabel="linphoneLabel">
|
||||
<rect key="frame" x="10" y="79" width="355" height="40"/>
|
||||
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splashscreen.png" id="wSQ-YD-dIQ" userLabel="logoImage">
|
||||
<rect key="frame" x="0.0" y="8" width="375" height="166"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="35"/>
|
||||
<color key="textColor" red="0.35686275360000003" green="0.3960784376" blue="0.43529412150000002" alpha="1" colorSpace="deviceRGB"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="9" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LINPHONE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="dFa-fl-SAE" userLabel="nameLabel">
|
||||
<rect key="frame" x="0.0" y="182" width="375" height="47"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="41"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" text="http://www.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="57" userLabel="linkLabel">
|
||||
<rect key="frame" x="10" y="164" width="355" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="lTF-yt-Uqp" userLabel="descriptionLabel">
|
||||
<rect key="frame" x="0.0" y="237" width="375" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<attributedString key="attributedText">
|
||||
<fragment content="The ">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content="libre">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue-Italic"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content=" SIP client">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone iOS 3.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="gLk-Bc-zvx" userLabel="appVersionLabel">
|
||||
<rect key="frame" x="0.0" y="304" width="375" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.81176471709999998" green="0.29803922770000002" blue="0.16078431900000001" alpha="1" colorSpace="deviceRGB"/>
|
||||
<color key="textColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="12" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone Core 3.9.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZYk-v1-CYZ" userLabel="libVersionLabel">
|
||||
<rect key="frame" x="0.0" y="333" width="375" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://www.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1pe-zf-cQh" userLabel="siteURLLabel">
|
||||
<rect key="frame" x="0.0" y="400" width="375" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<connections>
|
||||
<outletCollection property="gestureRecognizers" destination="l7c-wq-pii" appends="YES" id="KgK-0M-UKA"/>
|
||||
<outletCollection property="gestureRecognizers" destination="l7c-wq-pii" appends="YES" id="olo-CD-gM3"/>
|
||||
</connections>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Linphone iPhone 1.0 (placeholder)" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="65" userLabel="linphoneIphoneVersionLabel">
|
||||
<rect key="frame" x="10" y="122" width="355" height="18"/>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="gVK-Xc-S59" userLabel="licenseLabel">
|
||||
<rect key="frame" x="0.0" y="437" width="375" height="98"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.35686275360000003" green="0.3960784376" blue="0.43529412150000002" alpha="1" colorSpace="deviceRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Linphone Core 1.0 (placeholder)" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="66" userLabel="linphoneCoreVersionLabel">
|
||||
<rect key="frame" x="10" y="140" width="355" height="17"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.35686275360000003" green="0.3960784376" blue="0.43529412150000002" alpha="1" colorSpace="deviceRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="© 2010 Belledonne Communications " textAlignment="center" lineBreakMode="tailTruncation" minimumFontSize="10" id="58" userLabel="copyrightLabel">
|
||||
<rect key="frame" x="10" y="247" width="355" height="18"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<string key="text">GNU General Public License V2
|
||||
© 2010-2016 Belledonne Communications</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="GNU General Public License V2 " textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="61" userLabel="licenseLabel">
|
||||
<rect key="frame" x="10" y="199" width="355" height="28"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<webView contentMode="scaleToFill" id="69" userLabel="licenseView">
|
||||
<rect key="frame" x="10" y="278" width="355" height="273"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<dataDetectorType key="dataDetectorTypes" link="YES"/>
|
||||
</webView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
<point key="canvasLocation" x="235.5" y="362.5"/>
|
||||
<point key="canvasLocation" x="235.5" y="318.5"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="FcM-rg-Qrt" userLabel="iphone6MetricsView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view tag="1" contentMode="scaleToFill" id="sVO-4a-t1s">
|
||||
<rect key="frame" x="0.0" y="66" width="667" height="309"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view tag="2" contentMode="scaleToFill" id="OGe-ZS-scH" userLabel="topBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="3" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="Vi5-Wh-iOm" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<button opaque="NO" tag="4" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="vX8-wO-ZEN" userLabel="dialerBackButton" customClass="UIIconButton">
|
||||
<rect key="frame" x="532" y="0.0" width="135" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Add contact"/>
|
||||
<inset key="titleEdgeInsets" minX="0.0" minY="18" maxX="0.0" maxY="0.0"/>
|
||||
<state key="normal" image="dialer_back_default.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="disabled" image="dialer_back_disabled.png"/>
|
||||
<state key="highlighted" backgroundImage="color_E.png"/>
|
||||
<connections>
|
||||
<action selector="onDialerBackClick:" destination="-1" eventType="touchUpInside" id="vfB-jG-YPr"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ABOUT" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wKp-iH-ojJ" userLabel="titleLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="27"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</view>
|
||||
<view clipsSubviews="YES" multipleTouchEnabled="YES" tag="6" contentMode="scaleToFill" id="Wvv-4f-Oa6">
|
||||
<rect key="frame" x="0.0" y="66" width="667" height="243"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_C.png" id="UBx-Gi-qTi" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="178"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="splashscreen.png" id="UhZ-5i-eU5" userLabel="logoImage">
|
||||
<rect key="frame" x="8" y="8" width="212" height="161"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="9" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="LINPHONE" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="fss-Tl-kRy" userLabel="nameLabel">
|
||||
<rect key="frame" x="228" y="16" width="439" height="47"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="41"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.10000000149011612" id="ASG-VC-Riv" userLabel="descLabel">
|
||||
<rect key="frame" x="228" y="71" width="439" height="34"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<attributedString key="attributedText">
|
||||
<fragment content="The ">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content="libre">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue-Italic"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content=" SIP client">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<font key="NSFont" size="26" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="truncatingTail" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone iPhone 3.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oYk-ih-BBi" userLabel="appVersionLabel">
|
||||
<rect key="frame" x="228" y="115" width="439" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="12" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Linphone Core 3.9.0" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="g2W-u5-yxg" userLabel="libVersionLabel">
|
||||
<rect key="frame" x="228" y="144" width="439" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="https://www.linphone.org" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="uis-xz-Qsa" userLabel="siteURLLabel">
|
||||
<rect key="frame" x="0.0" y="177" width="333" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="14" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="7" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="ToT-OI-B2F" userLabel="licenseLabel">
|
||||
<rect key="frame" x="333" y="177" width="334" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<string key="text">GNU General Public License V2
|
||||
© 2010-2016 Belledonne Communications</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" red="1" green="1" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
<point key="canvasLocation" x="801.5" y="280.5"/>
|
||||
</view>
|
||||
<tapGestureRecognizer id="l7c-wq-pii" userLabel="onLinkTap">
|
||||
<connections>
|
||||
<action selector="onLinkTap:" destination="-1" id="Ay5-Uz-RDo"/>
|
||||
</connections>
|
||||
</tapGestureRecognizer>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" bounces="NO" showsHorizontalScrollIndicator="NO" id="62">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
<inset key="contentInset" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
|
||||
<inset key="scrollIndicatorInsets" minX="0.0" minY="0.0" maxX="0.0" maxY="10"/>
|
||||
<point key="canvasLocation" x="672.5" y="218.5"/>
|
||||
</scrollView>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="color_C.png" width="2" height="2"/>
|
||||
<image name="color_E.png" width="2" height="2"/>
|
||||
<image name="color_F.png" width="2" height="2"/>
|
||||
<image name="dialer_back_default.png" width="27" height="27"/>
|
||||
<image name="dialer_back_disabled.png" width="27" height="27"/>
|
||||
<image name="linphone_logo.png" width="26" height="22"/>
|
||||
<image name="splashscreen.png" width="181" height="165"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
|
|
@ -577,9 +577,6 @@ Once it is done, come back here and click on the button.</string>
|
|||
<segment title="TLS"/>
|
||||
</segments>
|
||||
<color key="tintColor" red="0.40000000000000002" green="0.40000000000000002" blue="0.40000000000000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<connections>
|
||||
<action selector="onTransportChange:" destination="-1" eventType="valueChanged" id="l9Y-fd-ja8"/>
|
||||
</connections>
|
||||
</segmentedControl>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DISPLAY NAME (OPTIONAL)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="F0s-Da-L59" userLabel="displayNameLabel">
|
||||
<rect key="frame" x="38" y="356" width="299" height="14"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
@ -138,7 +137,7 @@
|
|||
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="Ebl-hM-8F9"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="26e-Pj-2Oh" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="26e-Pj-2Oh" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="188" y="0.0" width="94" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Accept"/>
|
||||
|
|
@ -338,7 +337,7 @@
|
|||
<action selector="onDeclineClick:" destination="-1" eventType="touchUpInside" id="voJ-Cd-XHg"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jLg-1u-ulZ" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="jLg-1u-ulZ" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="334" y="0.0" width="167" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Accept"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
@ -122,8 +121,8 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleAspectFit" image="avatar.png" id="fZy-K5-yQp" userLabel="avatarImage" customClass="UIRoundedImageView">
|
||||
<rect key="frame" x="62" y="210" width="250" height="250"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="62" y="140" width="250" height="320"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact avatar">
|
||||
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
|
|
@ -250,11 +249,11 @@
|
|||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" alpha="0.79999999999999982" tag="24" contentMode="scaleToFill" id="ukG-i4-YMY" userLabel="numpadView">
|
||||
<rect key="frame" x="0.0" y="66" width="375" height="539"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="499"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="25" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="qZ8-m9-B0N" userLabel="1" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="128"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="1"/>
|
||||
|
|
@ -266,7 +265,7 @@
|
|||
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="26" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="U6v-Cg-9b8" userLabel="2" customClass="UIDigitButton">
|
||||
<rect key="frame" x="127" y="0.0" width="121" height="128"/>
|
||||
<rect key="frame" x="127" y="0.0" width="121" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="2"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -276,7 +275,7 @@
|
|||
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="27" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="R2h-PD-GN2" userLabel="3" customClass="UIDigitButton">
|
||||
<rect key="frame" x="254" y="0.0" width="121" height="128"/>
|
||||
<rect key="frame" x="254" y="0.0" width="121" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="3"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -286,7 +285,7 @@
|
|||
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="28" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="653-Vb-YzA" userLabel="4" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="137" width="120" height="128"/>
|
||||
<rect key="frame" x="0.0" y="126" width="120" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="4"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -296,7 +295,7 @@
|
|||
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="29" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="8Da-zK-V7e" userLabel="5" customClass="UIDigitButton">
|
||||
<rect key="frame" x="127" y="137" width="121" height="128"/>
|
||||
<rect key="frame" x="127" y="126" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -306,7 +305,7 @@
|
|||
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="30" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="0fB-uk-rXS" userLabel="6" customClass="UIDigitButton">
|
||||
<rect key="frame" x="254" y="137" width="121" height="128"/>
|
||||
<rect key="frame" x="254" y="126" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="6"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -316,7 +315,7 @@
|
|||
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="31" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="alZ-Kz-AVL" userLabel="7" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="271" width="120" height="128"/>
|
||||
<rect key="frame" x="0.0" y="250" width="120" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="7"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -326,7 +325,7 @@
|
|||
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="32" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="DRh-kc-UVM" userLabel="8" customClass="UIDigitButton">
|
||||
<rect key="frame" x="127" y="271" width="121" height="128"/>
|
||||
<rect key="frame" x="127" y="250" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="8"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -336,7 +335,7 @@
|
|||
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="33" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="b8R-7P-jHK" userLabel="9" customClass="UIDigitButton">
|
||||
<rect key="frame" x="254" y="271" width="121" height="128"/>
|
||||
<rect key="frame" x="254" y="250" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="9"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -346,7 +345,7 @@
|
|||
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="34" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="prH-qj-h0v" userLabel="*" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="406" width="120" height="128"/>
|
||||
<rect key="frame" x="0.0" y="375" width="120" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Star"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -356,7 +355,7 @@
|
|||
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="35" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="CUt-2U-nro" userLabel="0" customClass="UIDigitButton">
|
||||
<rect key="frame" x="127" y="406" width="121" height="128"/>
|
||||
<rect key="frame" x="127" y="375" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="0"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -366,7 +365,7 @@
|
|||
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="36" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="DqJ-35-h1Y" userLabel="#" customClass="UIDigitButton">
|
||||
<rect key="frame" x="254" y="406" width="121" height="128"/>
|
||||
<rect key="frame" x="254" y="375" width="121" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Hash"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -539,7 +538,7 @@
|
|||
<rect key="frame" x="26" y="15" width="37" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
</activityIndicatorView>
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="pRH-Ao-h65" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="pRH-Ao-h65" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="94" y="0.0" width="94" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Micro"/>
|
||||
|
|
@ -635,7 +634,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="70" contentMode="scaleToFill" id="d9Y-2a-CDI" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="337" y="8" width="22" height="22"/>
|
||||
<rect key="frame" x="331" y="1" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="71" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="nPO-PM-4zJ" userLabel="chatNotificationImage">
|
||||
|
|
@ -717,7 +716,7 @@
|
|||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleAspectFit" image="avatar.png" id="gyO-uH-sSi" userLabel="avatarImage" customClass="UIRoundedImageView">
|
||||
<rect key="frame" x="253" y="80" width="161" height="161"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact avatar">
|
||||
<accessibilityTraits key="traits" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
|
|
@ -844,11 +843,11 @@
|
|||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" alpha="0.80000001192092896" tag="24" contentMode="scaleToFill" id="qmh-Lu-UBi" userLabel="numpadView">
|
||||
<rect key="frame" x="5" y="5" width="657" height="260"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="657" height="270"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="25" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iVs-Uz-333" userLabel="1" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="0.0" width="209" height="61"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="209" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="1"/>
|
||||
|
|
@ -860,7 +859,7 @@
|
|||
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="26" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ybz-Ka-W5D" userLabel="2" customClass="UIDigitButton">
|
||||
<rect key="frame" x="222" y="0.0" width="212" height="61"/>
|
||||
<rect key="frame" x="222" y="0.0" width="212" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="2"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -870,7 +869,7 @@
|
|||
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="27" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="T4K-WZ-66j" userLabel="3" customClass="UIDigitButton">
|
||||
<rect key="frame" x="445" y="0.0" width="212" height="61"/>
|
||||
<rect key="frame" x="445" y="0.0" width="212" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="3"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -880,7 +879,7 @@
|
|||
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="28" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="faH-y3-mMq" userLabel="4" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="66" width="209" height="61"/>
|
||||
<rect key="frame" x="0.0" y="69" width="209" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="4"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -890,7 +889,7 @@
|
|||
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="29" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="nxY-sd-bDZ" userLabel="5" customClass="UIDigitButton">
|
||||
<rect key="frame" x="222" y="66" width="212" height="61"/>
|
||||
<rect key="frame" x="222" y="69" width="212" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -900,7 +899,7 @@
|
|||
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="30" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Iqo-km-7vX" userLabel="6" customClass="UIDigitButton">
|
||||
<rect key="frame" x="445" y="66" width="212" height="61"/>
|
||||
<rect key="frame" x="445" y="69" width="212" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="6"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -910,7 +909,7 @@
|
|||
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="31" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="4fZ-jb-DoW" userLabel="7" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="130" width="209" height="62"/>
|
||||
<rect key="frame" x="0.0" y="136" width="209" height="64"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="7"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -920,7 +919,7 @@
|
|||
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="32" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Wf5-HW-Q9e" userLabel="8" customClass="UIDigitButton">
|
||||
<rect key="frame" x="222" y="130" width="212" height="62"/>
|
||||
<rect key="frame" x="222" y="136" width="212" height="64"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="8"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -930,7 +929,7 @@
|
|||
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="33" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="gu3-J6-J0R" userLabel="9" customClass="UIDigitButton">
|
||||
<rect key="frame" x="445" y="130" width="212" height="62"/>
|
||||
<rect key="frame" x="445" y="136" width="212" height="64"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="9"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -940,7 +939,7 @@
|
|||
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="34" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="c9R-s8-egN" userLabel="*" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="195" width="209" height="63"/>
|
||||
<rect key="frame" x="0.0" y="203" width="209" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Star"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -950,7 +949,7 @@
|
|||
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="35" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="b32-Dc-aHe" userLabel="0" customClass="UIDigitButton">
|
||||
<rect key="frame" x="222" y="195" width="212" height="63"/>
|
||||
<rect key="frame" x="222" y="203" width="212" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="0"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -960,7 +959,7 @@
|
|||
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="36" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Uek-Ye-aAA" userLabel="#" customClass="UIDigitButton">
|
||||
<rect key="frame" x="445" y="195" width="212" height="63"/>
|
||||
<rect key="frame" x="445" y="203" width="212" height="65"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Hash"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -1129,7 +1128,7 @@
|
|||
<outlet property="waitView" destination="PFh-Rq-z48" id="q07-6z-jsc"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Pgq-7X-X64" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Pgq-7X-X64" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="83" y="0.0" width="83" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Micro"/>
|
||||
|
|
@ -1231,7 +1230,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="70" contentMode="scaleToFill" id="1pd-et-5dy" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="302" y="8" width="22" height="22"/>
|
||||
<rect key="frame" x="294" y="2" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="71" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="7ZF-Ch-AL1" userLabel="chatNotificationImage">
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
@ -552,7 +551,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="70" contentMode="scaleToFill" id="d9Y-2a-CDI" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="353" y="8" width="44" height="22"/>
|
||||
<rect key="frame" x="353" y="0.0" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="71" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="nPO-PM-4zJ" userLabel="chatNotificationImage">
|
||||
|
|
@ -601,7 +600,7 @@
|
|||
<rect key="frame" x="31" y="15" width="37" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
</activityIndicatorView>
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="pRH-Ao-h65" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="pRH-Ao-h65" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="100" y="0.0" width="100" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Micro"/>
|
||||
|
|
@ -843,11 +842,11 @@
|
|||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" alpha="0.80000001192092896" tag="24" contentMode="scaleToFill" id="qmh-Lu-UBi" userLabel="numpadView">
|
||||
<rect key="frame" x="10" y="11" width="1270" height="592"/>
|
||||
<rect key="frame" x="395" y="100" width="500" height="500"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="25" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iVs-Uz-333" userLabel="1" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="0.0" width="404" height="140"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="159" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.40000001000000002" green="1" blue="1" alpha="0.0" colorSpace="calibratedRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="1"/>
|
||||
|
|
@ -859,7 +858,7 @@
|
|||
<state key="highlighted" image="numpad_1_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="26" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="ybz-Ka-W5D" userLabel="2" customClass="UIDigitButton">
|
||||
<rect key="frame" x="430" y="0.0" width="410" height="140"/>
|
||||
<rect key="frame" x="169" y="0.0" width="161" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="2"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -869,7 +868,7 @@
|
|||
<state key="highlighted" image="numpad_2_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="27" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="T4K-WZ-66j" userLabel="3" customClass="UIDigitButton">
|
||||
<rect key="frame" x="860" y="0.0" width="410" height="140"/>
|
||||
<rect key="frame" x="338" y="0.0" width="162" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="3"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -879,7 +878,7 @@
|
|||
<state key="highlighted" image="numpad_3_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="28" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="faH-y3-mMq" userLabel="4" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="150" width="404" height="140"/>
|
||||
<rect key="frame" x="0.0" y="126" width="159" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="4"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -889,7 +888,7 @@
|
|||
<state key="highlighted" image="numpad_4_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="29" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="nxY-sd-bDZ" userLabel="5" customClass="UIDigitButton">
|
||||
<rect key="frame" x="430" y="150" width="410" height="140"/>
|
||||
<rect key="frame" x="169" y="126" width="161" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -899,7 +898,7 @@
|
|||
<state key="highlighted" image="numpad_5_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="30" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Iqo-km-7vX" userLabel="6" customClass="UIDigitButton">
|
||||
<rect key="frame" x="860" y="150" width="410" height="140"/>
|
||||
<rect key="frame" x="338" y="126" width="162" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="6"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -909,7 +908,7 @@
|
|||
<state key="highlighted" image="numpad_6_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="31" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="4fZ-jb-DoW" userLabel="7" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="296" width="404" height="140"/>
|
||||
<rect key="frame" x="0.0" y="250" width="159" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="7"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -919,7 +918,7 @@
|
|||
<state key="highlighted" image="numpad_7_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="32" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Wf5-HW-Q9e" userLabel="8" customClass="UIDigitButton">
|
||||
<rect key="frame" x="430" y="296" width="410" height="140"/>
|
||||
<rect key="frame" x="169" y="250" width="161" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="8"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -929,7 +928,7 @@
|
|||
<state key="highlighted" image="numpad_8_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="33" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="gu3-J6-J0R" userLabel="9" customClass="UIDigitButton">
|
||||
<rect key="frame" x="860" y="296" width="410" height="140"/>
|
||||
<rect key="frame" x="338" y="250" width="162" height="118"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="9"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -939,7 +938,7 @@
|
|||
<state key="highlighted" image="numpad_9_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="34" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="c9R-s8-egN" userLabel="*" customClass="UIDigitButton">
|
||||
<rect key="frame" x="0.0" y="445" width="404" height="141"/>
|
||||
<rect key="frame" x="0.0" y="375" width="159" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Star"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -949,7 +948,7 @@
|
|||
<state key="highlighted" image="numpad_star_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="35" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="b32-Dc-aHe" userLabel="0" customClass="UIDigitButton">
|
||||
<rect key="frame" x="430" y="445" width="410" height="141"/>
|
||||
<rect key="frame" x="169" y="375" width="161" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="0"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -959,7 +958,7 @@
|
|||
<state key="highlighted" image="numpad_0_over.png" backgroundImage="numpad_over_background.png"/>
|
||||
</button>
|
||||
<button opaque="NO" clearsContextBeforeDrawing="NO" tag="36" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Uek-Ye-aAA" userLabel="#" customClass="UIDigitButton">
|
||||
<rect key="frame" x="860" y="445" width="410" height="141"/>
|
||||
<rect key="frame" x="338" y="375" width="162" height="119"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Hash"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
|
|
@ -1128,7 +1127,7 @@
|
|||
<outlet property="waitView" destination="PFh-Rq-z48" id="q07-6z-jsc"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Pgq-7X-X64" userLabel="microButton" customClass="UIMicroButton">
|
||||
<button opaque="NO" tag="52" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Pgq-7X-X64" userLabel="microButton" customClass="UIMutedMicroButton">
|
||||
<rect key="frame" x="590" y="0.0" width="100" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Micro"/>
|
||||
|
|
@ -1228,7 +1227,7 @@
|
|||
</connections>
|
||||
</button>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="70" contentMode="scaleToFill" id="1pd-et-5dy" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="357" y="8" width="25" height="22"/>
|
||||
<rect key="frame" x="352" y="1" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="71" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="7ZF-Ch-AL1" userLabel="chatNotificationImage">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
|
|
@ -161,7 +161,7 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" tag="13" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="60" sectionHeaderHeight="22" sectionFooterHeight="22" id="8" userLabel="messagesTableView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="399"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="405"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<gestureRecognizers/>
|
||||
|
|
@ -173,10 +173,10 @@
|
|||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" tag="14" contentMode="scaleToFill" id="fx4-ao-53M" userLabel="composeIndicatorView">
|
||||
<rect key="frame" x="0.0" y="404" width="375" height="22"/>
|
||||
<rect key="frame" x="0.0" y="405" width="375" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="fpY-Fv-ht2" userLabel="composeLabel">
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="fpY-Fv-ht2" userLabel="composeLabel">
|
||||
<rect key="frame" x="0.0" y="1" width="375" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label=""/>
|
||||
|
|
@ -187,7 +187,7 @@
|
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="16" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No conversation." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="p7C-WH-uR1" userLabel="emptyTableLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="430"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="427"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
|
|
@ -381,7 +381,7 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" tag="13" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="none" allowsSelection="NO" allowsSelectionDuringEditing="YES" allowsMultipleSelectionDuringEditing="YES" rowHeight="60" sectionHeaderHeight="22" sectionFooterHeight="22" id="CU7-Za-RwN" userLabel="messagesTableView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="646" height="222"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="646" height="218"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<gestureRecognizers/>
|
||||
|
|
@ -391,7 +391,7 @@
|
|||
</connections>
|
||||
</tableView>
|
||||
<label hidden="YES" opaque="NO" userInteractionEnabled="NO" tag="16" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="No conversation." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="pzm-tk-LH0" userLabel="emptyTableLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="646" height="210"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="646" height="240"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
|
|
@ -399,11 +399,11 @@
|
|||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view hidden="YES" tag="14" contentMode="scaleToFill" id="nTf-7h-Z4z" userLabel="composeIndicatorView">
|
||||
<rect key="frame" x="0.0" y="220" width="646" height="22"/>
|
||||
<rect key="frame" x="0.0" y="218" width="646" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="I34-aL-yuS" userLabel="composeLabel">
|
||||
<rect key="frame" x="0.0" y="1" width="646" height="22"/>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="15" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="%@ is composing..." lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="I34-aL-yuS" userLabel="composeLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="646" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label=""/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
|
|
@ -121,7 +121,7 @@
|
|||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="19" userLabel="tableView">
|
||||
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="19" userLabel="tableView">
|
||||
<rect key="frame" x="0.0" y="156" width="375" height="337"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
|
|
@ -247,7 +247,7 @@
|
|||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="WMA-Yo-NbI" userLabel="tableView">
|
||||
<tableView clipsSubviews="YES" tag="10" contentMode="scaleToFill" directionalLockEnabled="YES" alwaysBounceVertical="YES" showsHorizontalScrollIndicator="NO" style="plain" allowsSelection="NO" allowsSelectionDuringEditing="YES" showsSelectionImmediatelyOnTouchBegin="NO" rowHeight="44" sectionHeaderHeight="1" sectionFooterHeight="1" id="WMA-Yo-NbI" userLabel="tableView">
|
||||
<rect key="frame" x="0.0" y="84" width="667" height="183"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,178 +1,308 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9060" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9051"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="FirstLoginView">
|
||||
<connections>
|
||||
<outlet property="domainField" destination="w8z-ad-o8e" id="QC5-dU-UKn"/>
|
||||
<outlet property="landscapeView" destination="fFD-iL-Jo0" id="RoE-70-E4p"/>
|
||||
<outlet property="loginButton" destination="8H9-Gf-7ZL" id="e1g-x6-PCO"/>
|
||||
<outlet property="passwordField" destination="BBC-uD-FIM" id="JEo-he-9QU"/>
|
||||
<outlet property="portraitView" destination="Wa7-dw-UAu" id="cFs-v7-z1R"/>
|
||||
<outlet property="usernameField" destination="vaw-qL-SCR" id="KTu-qn-3am"/>
|
||||
<outlet property="view" destination="a69-69-lDX" id="8iL-eI-bnx"/>
|
||||
<outlet property="view" destination="Wa7-dw-UAu" id="6r1-Cb-nOi"/>
|
||||
<outlet property="waitView" destination="31" id="57"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" id="a69-69-lDX">
|
||||
<view contentMode="scaleToFill" id="Wa7-dw-UAu">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="linphone_logo.png" id="JsZ-cm-gih" userLabel="logoImage">
|
||||
<rect key="frame" x="20" y="46" width="93" height="93"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Welcome" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="ddC-mF-O2L" userLabel="titleLabel">
|
||||
<rect key="frame" x="121" y="46" width="254" height="48"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<accessibility key="accessibilityConfiguration" label="Welcome"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="24"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Enter your credentials" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="h9m-R1-9c4" userLabel="subtitleLabel">
|
||||
<rect key="frame" x="121" y="97" width="254" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<accessibility key="accessibilityConfiguration" label=""/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="120" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="aM8-yf-s5d" userLabel="usernameLabel">
|
||||
<rect key="frame" x="20" y="186" width="335" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="100" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="vaw-qL-SCR" userLabel="usernameField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="214" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Username"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="Fml-De-aww"/>
|
||||
<outlet property="errorLabel" destination="Ym3-AJ-VDD" id="YzJ-Uo-FtX"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="410" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Ym3-AJ-VDD" userLabel="usernameErrorLabel">
|
||||
<rect key="frame" x="20" y="259" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kjU-P0-ji6" userLabel="passwordLabel">
|
||||
<rect key="frame" x="20" y="288" width="335" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="101" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="BBC-uD-FIM" userLabel="passwordField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="312" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Password"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="e4F-kt-Udb"/>
|
||||
<outlet property="errorLabel" destination="zTY-fc-a6l" id="uAR-NP-WXe"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="410" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="zTY-fc-a6l" userLabel="passwordErrorLabel">
|
||||
<rect key="frame" x="20" y="357" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DOMAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="FdB-x1-lgt" userLabel="domainLabel">
|
||||
<rect key="frame" x="20" y="386" width="335" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="104" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="w8z-ad-o8e" userLabel="domainField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="408" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Domain"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="CgQ-c2-2d9"/>
|
||||
<outlet property="errorLabel" destination="sng-3P-5z8" id="DHj-OF-TIc"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<button opaque="NO" tag="130" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="8H9-Gf-7ZL" userLabel="downloadButton" customClass="UIRoundBorderedButton">
|
||||
<rect key="frame" x="20" y="498" width="335" height="54"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<accessibility key="accessibilityConfiguration" label="Fetch and apply">
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="LOGIN">
|
||||
<color key="titleColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<state key="disabled">
|
||||
<color key="titleColor" red="0.76862745099999996" green="0.76862745099999996" blue="0.76862745099999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="onLoginClick:" destination="-1" eventType="touchUpInside" id="BX7-xj-kmf"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="410" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid domain" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="sng-3P-5z8" userLabel="domainErrorLabel">
|
||||
<rect key="frame" x="20" y="459" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view hidden="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="31" userLabel="waitView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="55" height="667"/>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="1" contentMode="scaleToFill" id="Be1-UD-ZIL" customClass="TPKeyboardAvoidingScrollView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="linphone_logo.png" id="JsZ-cm-gih" userLabel="logoImage">
|
||||
<rect key="frame" x="20" y="46" width="93" height="93"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="3" contentMode="left" text="Welcome" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="ddC-mF-O2L" userLabel="titleLabel">
|
||||
<rect key="frame" x="121" y="46" width="254" height="48"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Welcome"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="33"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="4" contentMode="left" text="Enter your credentials" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="h9m-R1-9c4" userLabel="subtitleLabel">
|
||||
<rect key="frame" x="121" y="98" width="254" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label=""/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="19"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="aM8-yf-s5d" userLabel="usernameLabel">
|
||||
<rect key="frame" x="20" y="186" width="335" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="vaw-qL-SCR" userLabel="usernameField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="214" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Username"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="Fml-De-aww"/>
|
||||
<outlet property="errorLabel" destination="Ym3-AJ-VDD" id="YzJ-Uo-FtX"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="7" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Ym3-AJ-VDD" userLabel="usernameErrorLabel">
|
||||
<rect key="frame" x="20" y="259" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="8" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DOMAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="FdB-x1-lgt" userLabel="domainLabel">
|
||||
<rect key="frame" x="20" y="288" width="335" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="sip.linphone.org" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="w8z-ad-o8e" userLabel="domainField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="312" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Domain"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="CgQ-c2-2d9"/>
|
||||
<outlet property="errorLabel" destination="sng-3P-5z8" id="DHj-OF-TIc"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid domain" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="sng-3P-5z8" userLabel="domainErrorLabel">
|
||||
<rect key="frame" x="20" y="357" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="kjU-P0-ji6" userLabel="passwordLabel">
|
||||
<rect key="frame" x="20" y="386" width="335" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="BBC-uD-FIM" userLabel="passwordField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="20" y="408" width="335" height="43"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Password"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="e4F-kt-Udb"/>
|
||||
<outlet property="errorLabel" destination="zTY-fc-a6l" id="uAR-NP-WXe"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="zTY-fc-a6l" userLabel="passwordErrorLabel">
|
||||
<rect key="frame" x="20" y="459" width="335" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" tag="14" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="8H9-Gf-7ZL" userLabel="downloadButton" customClass="UIRoundBorderedButton">
|
||||
<rect key="frame" x="20" y="498" width="335" height="54"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Fetch and apply">
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="LOGIN"/>
|
||||
<connections>
|
||||
<action selector="onLoginClick:" destination="-1" eventType="touchUpInside" id="BX7-xj-kmf"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</scrollView>
|
||||
<view hidden="YES" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" id="31" userLabel="waitView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<activityIndicatorView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="scaleToFill" animating="YES" style="whiteLarge" id="32" userLabel="activityIndicator">
|
||||
<rect key="frame" x="9" y="314" width="37" height="37"/>
|
||||
<activityIndicatorView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" tag="17" contentMode="scaleToFill" animating="YES" style="whiteLarge" id="32" userLabel="activityIndicator">
|
||||
<rect key="frame" x="169" y="314" width="37" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<animations/>
|
||||
</activityIndicatorView>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="1" alpha="0.66000000000000003" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<animations/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
<point key="canvasLocation" x="509.5" y="325.5"/>
|
||||
</scrollView>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="fFD-iL-Jo0">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<scrollView clipsSubviews="YES" multipleTouchEnabled="YES" tag="1" contentMode="scaleToFill" id="i7c-YH-msu" customClass="TPKeyboardAvoidingScrollView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="2" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="linphone_logo.png" id="eAY-9z-N0l" userLabel="logoImage">
|
||||
<rect key="frame" x="158" y="23" width="64" height="64"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="3" contentMode="left" text="Welcome" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="HUU-k8-6kx" userLabel="titleLabel">
|
||||
<rect key="frame" x="238" y="23" width="270" height="31"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Welcome"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="33"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" tag="4" contentMode="left" text="Enter your credentials" lineBreakMode="tailTruncation" numberOfLines="3" baselineAdjustment="alignBaselines" minimumFontSize="10" id="0qN-Jr-OXT" userLabel="subtitleLabel">
|
||||
<rect key="frame" x="238" y="62" width="270" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label=""/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="19"/>
|
||||
<color key="textColor" red="1" green="0.36862745099999999" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
<size key="shadowOffset" width="-1" height="-1"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="5" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="USERNAME" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="qbs-8f-pLW" userLabel="usernameLabel">
|
||||
<rect key="frame" x="158" y="105" width="350" height="20"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="6" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="0Yf-d2-ElR" userLabel="usernameField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="158" y="123" width="350" height="24"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Username"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="98R-AI-m4z"/>
|
||||
<outlet property="errorLabel" destination="Bgv-t3-ZGF" id="s0p-Zx-jPj"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="7" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid username" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Bgv-t3-ZGF" userLabel="usernameErrorLabel">
|
||||
<rect key="frame" x="158" y="146" width="350" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="8" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DOMAIN" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="1GT-Pk-UQT" userLabel="domainLabel">
|
||||
<rect key="frame" x="158" y="182" width="350" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="9" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="sip.linphone.org" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="xOE-NA-3hm" userLabel="domainField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="158" y="200" width="350" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Domain"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="next"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="65y-5D-Gja"/>
|
||||
<outlet property="errorLabel" destination="Q6W-CO-Qyo" id="SeN-ng-mAi"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="10" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid domain" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="Q6W-CO-Qyo" userLabel="domainErrorLabel">
|
||||
<rect key="frame" x="158" y="223" width="350" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="11" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="PASSWORD" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="3ie-wD-Jq5" userLabel="passwordLabel">
|
||||
<rect key="frame" x="158" y="259" width="350" height="14"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="13"/>
|
||||
<color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<textField opaque="NO" clipsSubviews="YES" tag="12" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="roundedRect" adjustsFontSizeToFit="NO" minimumFontSize="10" id="iFV-rZ-JMe" userLabel="passwordField" customClass="UIAssistantTextField">
|
||||
<rect key="frame" x="158" y="277" width="350" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.88235294119999996" green="0.88235294119999996" blue="0.88235294119999996" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Password"/>
|
||||
<color key="textColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<textInputTraits key="textInputTraits" autocorrectionType="no" returnKeyType="done" secureTextEntry="YES"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="-1" id="EGl-fH-SOC"/>
|
||||
<outlet property="errorLabel" destination="sac-b3-hPk" id="Cfh-39-Ehh"/>
|
||||
</connections>
|
||||
</textField>
|
||||
<label opaque="NO" userInteractionEnabled="NO" tag="13" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Invalid password" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="sac-b3-hPk" userLabel="passwordErrorLabel">
|
||||
<rect key="frame" x="158" y="300" width="350" height="15"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="9"/>
|
||||
<color key="textColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" tag="14" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" lineBreakMode="middleTruncation" id="0lR-zp-xF9" userLabel="downloadButton" customClass="UIRoundBorderedButton">
|
||||
<rect key="frame" x="158" y="328" width="350" height="39"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.2666666667" green="0.2666666667" blue="0.2666666667" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Fetch and apply">
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||
<state key="normal" title="LOGIN"/>
|
||||
<connections>
|
||||
<action selector="onLoginClick:" destination="-1" eventType="touchUpInside" id="mzP-1O-F9z"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</scrollView>
|
||||
<view hidden="YES" clearsContextBeforeDrawing="NO" tag="16" contentMode="scaleToFill" id="lh1-8l-fdW" userLabel="waitView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="375"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<activityIndicatorView opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" tag="17" contentMode="scaleToFill" animating="YES" style="whiteLarge" id="U6u-rm-UlH" userLabel="activityIndicator">
|
||||
<rect key="frame" x="315" y="168" width="37" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
</activityIndicatorView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.66000000000000003" colorSpace="custom" customColorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<simulatedOrientationMetrics key="simulatedOrientationMetrics" orientation="landscapeRight"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
</view>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="linphone_logo.png" width="26" height="22"/>
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
@property(weak, nonatomic) IBOutlet UIBluetoothButton *routesBluetoothButton;
|
||||
@property(weak, nonatomic) IBOutlet UIButton *routesEarpieceButton;
|
||||
@property(weak, nonatomic) IBOutlet UISpeakerButton *routesSpeakerButton;
|
||||
@property(weak, nonatomic) IBOutlet UIMicroButton *microButton;
|
||||
@property(weak, nonatomic) IBOutlet UIMutedMicroButton *microButton;
|
||||
|
||||
- (IBAction)onDeclineClick:(id)sender;
|
||||
|
||||
|
|
|
|||
|
|
@ -59,16 +59,16 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
LinphoneCall *call = linphone_core_get_current_call(LC);
|
||||
if (!call) {
|
||||
[PhoneMainView.instance popCurrentView];
|
||||
} else {
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr];
|
||||
char *uri = linphone_address_as_string_uri_only(addr);
|
||||
_addressLabel.text = [NSString stringWithUTF8String:uri];
|
||||
ms_free(uri);
|
||||
[_avatarImage setImage:[FastAddressBook imageForAddress:addr thumbnail:NO] bordered:YES withRoundedRadius:YES];
|
||||
return;
|
||||
}
|
||||
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr];
|
||||
char *uri = linphone_address_as_string_uri_only(addr);
|
||||
_addressLabel.text = [NSString stringWithUTF8String:uri];
|
||||
ms_free(uri);
|
||||
[_avatarImage setImage:[FastAddressBook imageForAddress:addr thumbnail:NO] bordered:YES withRoundedRadius:YES];
|
||||
|
||||
[self hideSpeaker:LinphoneManager.instance.bluetoothAvailable];
|
||||
|
||||
[_speakerButton update];
|
||||
|
|
@ -76,6 +76,17 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
[_routesButton update];
|
||||
}
|
||||
|
||||
- (void)viewDidAppear:(BOOL)animated {
|
||||
[super viewDidAppear:animated];
|
||||
// if there is no call (for whatever reason), we must wait viewDidAppear method
|
||||
// before popping current view, because UICompositeView cannot handle view change
|
||||
// directly in viewWillAppear (this would lead to crash in deallocated memory - easily
|
||||
// reproductible on iPad mini).
|
||||
if (!linphone_core_get_current_call(LC)) {
|
||||
[PhoneMainView.instance popCurrentView];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self];
|
||||
|
|
|
|||
|
|
@ -68,6 +68,20 @@
|
|||
}
|
||||
}
|
||||
|
||||
+ (NSString *)mediaEncryptionToString:(LinphoneMediaEncryption)enc {
|
||||
switch (enc) {
|
||||
case LinphoneMediaEncryptionDTLS:
|
||||
return @"DTLS";
|
||||
case LinphoneMediaEncryptionSRTP:
|
||||
return @"SRTP";
|
||||
case LinphoneMediaEncryptionZRTP:
|
||||
return @"ZRTP";
|
||||
case LinphoneMediaEncryptionNone:
|
||||
break;
|
||||
}
|
||||
return NSLocalizedString(@"None", nil);
|
||||
}
|
||||
|
||||
- (NSString *)updateStatsForCall:(LinphoneCall *)call stream:(LinphoneStreamType)stream {
|
||||
NSMutableString *result = [[NSMutableString alloc] init];
|
||||
const PayloadType *payload = NULL;
|
||||
|
|
@ -109,14 +123,29 @@
|
|||
[result appendString:@"\n"];
|
||||
|
||||
if (stats != NULL) {
|
||||
[result appendString:[NSString stringWithFormat:@"Upload bandwidth: %1.1f kbits/s", stats->upload_bandwidth]];
|
||||
[result appendString:@"\n"];
|
||||
[result
|
||||
appendString:[NSString stringWithFormat:@"Download bandwidth: %1.1f kbits/s", stats->download_bandwidth]];
|
||||
[result appendString:@"\n"];
|
||||
[result appendString:[NSString stringWithFormat:@"Upload bandwidth: %1.1f kbits/s", stats->upload_bandwidth]];
|
||||
[result appendString:@"\n"];
|
||||
[result appendString:[NSString stringWithFormat:@"ICE state: %@", [self.class iceToString:stats->ice_state]]];
|
||||
[result appendString:@"\n"];
|
||||
|
||||
// RTP stats section (packet loss count, etc)
|
||||
rtp_stats_t rtp_stats = linphone_call_stats_get_rtp_stats(stats);
|
||||
[result
|
||||
appendString:[NSString stringWithFormat:
|
||||
@"RTP packets: %llu total, %lld cum loss, %llu discarded, %llu OOT, %llu bad",
|
||||
rtp_stats.packet_recv, rtp_stats.cum_packet_loss, rtp_stats.discarded,
|
||||
rtp_stats.outoftime, rtp_stats.bad]];
|
||||
[result appendString:@"\n"];
|
||||
[result appendString:[NSString stringWithFormat:@"Sender loss rate: %.2f%%",
|
||||
linphone_call_stats_get_sender_loss_rate(stats)]];
|
||||
[result appendString:@"\n"];
|
||||
[result appendString:[NSString stringWithFormat:@"Receiver loss rate: %.2f%%",
|
||||
linphone_call_stats_get_receiver_loss_rate(stats)]];
|
||||
[result appendString:@"\n"];
|
||||
|
||||
if (stream == LinphoneStreamTypeVideo) {
|
||||
MSVideoSize sentSize = linphone_call_params_get_sent_video_size(params);
|
||||
MSVideoSize recvSize = linphone_call_params_get_received_video_size(params);
|
||||
|
|
@ -146,7 +175,7 @@
|
|||
LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call));
|
||||
if (enc != LinphoneMediaEncryptionNone) {
|
||||
[stats appendString:[NSString
|
||||
stringWithFormat:@"Call encrypted using %s", linphone_media_encryption_to_string(enc)]];
|
||||
stringWithFormat:@"Call encrypted using %@", [self.class mediaEncryptionToString:enc]]];
|
||||
}
|
||||
|
||||
[stats appendString:[self updateStatsForCall:call stream:LinphoneStreamTypeAudio]];
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14F1021" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="CallSideMenuView">
|
||||
|
|
@ -20,14 +20,14 @@
|
|||
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.69999999999999973" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="30" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZYY-EM-M2s" userLabel="statsLabel">
|
||||
<label opaque="NO" userInteractionEnabled="NO" alpha="0.69999999999999973" contentMode="center" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="100" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" id="ZYY-EM-M2s" userLabel="statsLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="300" height="625"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<string key="text">Audio: upr
|
||||
Video: down</string>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
|
|
@ -47,9 +47,4 @@ Video: down</string>
|
|||
</connections>
|
||||
</tapGestureRecognizer>
|
||||
</objects>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||
</simulatedMetricsContainer>
|
||||
</document>
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#import "UICompositeView.h"
|
||||
#import "CallPausedTableView.h"
|
||||
|
||||
#import "UIMicroButton.h"
|
||||
#import "UIMutedMicroButton.h"
|
||||
#import "UIPauseButton.h"
|
||||
#import "UISpeakerButton.h"
|
||||
#import "UIVideoButton.h"
|
||||
|
|
@ -57,7 +57,7 @@
|
|||
@property(nonatomic, strong) IBOutlet UIPauseButton *callPauseButton;
|
||||
@property(nonatomic, strong) IBOutlet UIButton *optionsConferenceButton;
|
||||
@property(nonatomic, strong) IBOutlet UIVideoButton *videoButton;
|
||||
@property(nonatomic, strong) IBOutlet UIMicroButton *microButton;
|
||||
@property(nonatomic, strong) IBOutlet UIMutedMicroButton *microButton;
|
||||
@property(nonatomic, strong) IBOutlet UISpeakerButton *speakerButton;
|
||||
@property(nonatomic, strong) IBOutlet UIToggleButton *routesButton;
|
||||
@property(nonatomic, strong) IBOutlet UIToggleButton *optionsButton;
|
||||
|
|
|
|||
|
|
@ -125,12 +125,10 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
[_hashButton setDtmf:true];
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
- (void)dealloc {
|
||||
[PhoneMainView.instance.view removeGestureRecognizer:singleFingerTap];
|
||||
// Remove all observer
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self];
|
||||
|
||||
[super viewDidUnload];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
|
|
@ -258,26 +256,12 @@ static void hideSpinner(LinphoneCall *call, void *user_data) {
|
|||
[_videoButton update];
|
||||
[_hangupButton update];
|
||||
|
||||
_optionsButton.enabled = (!call || !linphone_call_media_in_progress(call));
|
||||
_optionsTransferButton.enabled = call && !linphone_call_media_in_progress(call);
|
||||
// Show Pause/Conference button following call count
|
||||
if (linphone_core_get_calls_nb(LC) > 1) {
|
||||
bool enabled = ((linphone_core_get_current_call(LC) != NULL) || linphone_core_is_in_conference(LC));
|
||||
const MSList *list = linphone_core_get_calls(LC);
|
||||
while (list != NULL) {
|
||||
LinphoneCall *call = (LinphoneCall *)list->data;
|
||||
LinphoneCallState state = linphone_call_get_state(call);
|
||||
if (state == LinphoneCallIncomingReceived || state == LinphoneCallOutgoingInit ||
|
||||
state == LinphoneCallOutgoingProgress || state == LinphoneCallOutgoingRinging ||
|
||||
state == LinphoneCallOutgoingEarlyMedia || state == LinphoneCallConnected) {
|
||||
enabled = false;
|
||||
}
|
||||
list = list->next;
|
||||
}
|
||||
_optionsConferenceButton.enabled = enabled;
|
||||
} else {
|
||||
_optionsConferenceButton.enabled = NO;
|
||||
}
|
||||
_optionsButton.enabled = (!call || !linphone_core_sound_resources_locked(LC));
|
||||
_optionsTransferButton.enabled = call && !linphone_core_sound_resources_locked(LC);
|
||||
// enable conference button if 2 calls are presents and at least one is not in the conference
|
||||
int confSize = linphone_core_get_conference_size(LC) - (linphone_core_is_in_conference(LC) ? 1 : 0);
|
||||
_optionsConferenceButton.enabled =
|
||||
((linphone_core_get_calls_nb(LC) > 1) && (linphone_core_get_calls_nb(LC) != confSize));
|
||||
|
||||
// Disable transfert in conference
|
||||
if (linphone_core_get_current_call(LC) == NULL) {
|
||||
|
|
@ -720,6 +704,14 @@ static void hideSpinner(LinphoneCall *call, void *user_data) {
|
|||
}
|
||||
}
|
||||
|
||||
- (IBAction)onOptionsClick:(id)sender {
|
||||
if ([_optionsView isHidden]) {
|
||||
[self hideOptions:FALSE animated:ANIMATED];
|
||||
} else {
|
||||
[self hideOptions:TRUE animated:ANIMATED];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)onOptionsTransferClick:(id)sender {
|
||||
[self hideOptions:TRUE animated:TRUE];
|
||||
DialerView *view = VIEW(DialerView);
|
||||
|
|
@ -736,15 +728,8 @@ static void hideSpinner(LinphoneCall *call, void *user_data) {
|
|||
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
|
||||
}
|
||||
|
||||
- (IBAction)onOptionsClick:(id)sender {
|
||||
if ([_optionsView isHidden]) {
|
||||
[self hideOptions:FALSE animated:ANIMATED];
|
||||
} else {
|
||||
[self hideOptions:TRUE animated:ANIMATED];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)onOptionsConferenceClick:(id)sender {
|
||||
[self hideOptions:TRUE animated:TRUE];
|
||||
linphone_core_add_all_to_conference(LC);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@
|
|||
NSString *address = (NSString *)key;
|
||||
ABRecordRef person = (__bridge ABRecordRef)(value);
|
||||
NSString *name = [FastAddressBook displayNameForContact:person];
|
||||
if ((filter.length == 0) || ([name.lowercaseString containsString:filter.lowercaseString]) ||
|
||||
([address.lowercaseString containsString:filter.lowercaseString])) {
|
||||
if ((filter.length == 0) || ([name.lowercaseString containsSubstring:filter.lowercaseString]) ||
|
||||
([address.lowercaseString containsSubstring:filter.lowercaseString])) {
|
||||
_contacts[address] = name;
|
||||
}
|
||||
|
||||
|
|
@ -95,6 +95,11 @@
|
|||
[view setChatRoom:room];
|
||||
[PhoneMainView.instance popCurrentView];
|
||||
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
|
||||
// refresh list of chatrooms if we are using fragment
|
||||
if (IPAD) {
|
||||
ChatsListView *listView = VIEW(ChatsListView);
|
||||
[listView.tableController loadData];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,16 +32,15 @@
|
|||
|
||||
@interface ChatConversationTableView : UICheckBoxTableView {
|
||||
@private
|
||||
LinphoneChatRoom *chatRoom;
|
||||
MSList *messageList;
|
||||
}
|
||||
|
||||
@property(nonatomic) LinphoneChatRoom *chatRoom;
|
||||
@property(nonatomic, strong) id<ChatConversationDelegate> chatRoomDelegate;
|
||||
|
||||
- (void)addChatEntry:(LinphoneChatMessage *)chat;
|
||||
- (void)scrollToBottom:(BOOL)animated;
|
||||
- (void)scrollToLastUnread:(BOOL)animated;
|
||||
- (void)updateChatEntry:(LinphoneChatMessage *)chat;
|
||||
- (void)setChatRoom:(LinphoneChatRoom *)room;
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -45,16 +45,16 @@
|
|||
}
|
||||
|
||||
- (void)updateData {
|
||||
if (!chatRoom)
|
||||
if (!_chatRoom)
|
||||
return;
|
||||
[self clearMessageList];
|
||||
messageList = linphone_chat_room_get_history(chatRoom, 0);
|
||||
messageList = linphone_chat_room_get_history(_chatRoom, 0);
|
||||
|
||||
// also append transient upload messages because they are not in history yet!
|
||||
for (FileTransferDelegate *ftd in [LinphoneManager.instance fileTransferDelegates]) {
|
||||
const LinphoneAddress *ftd_peer =
|
||||
linphone_chat_room_get_peer_address(linphone_chat_message_get_chat_room(ftd.message));
|
||||
const LinphoneAddress *peer = linphone_chat_room_get_peer_address(chatRoom);
|
||||
const LinphoneAddress *peer = linphone_chat_room_get_peer_address(_chatRoom);
|
||||
if (linphone_address_equal(ftd_peer, peer) && linphone_chat_message_is_outgoing(ftd.message)) {
|
||||
LOGI(@"Appending transient upload message %p", ftd.message);
|
||||
messageList = ms_list_append(messageList, linphone_chat_message_ref(ftd.message));
|
||||
|
|
@ -109,7 +109,7 @@
|
|||
}
|
||||
|
||||
- (void)scrollToLastUnread:(BOOL)animated {
|
||||
if (messageList == nil || chatRoom == nil) {
|
||||
if (messageList == nil || _chatRoom == nil) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +127,7 @@
|
|||
index = count - 1;
|
||||
}
|
||||
|
||||
linphone_chat_room_mark_as_read(chatRoom);
|
||||
linphone_chat_room_mark_as_read(_chatRoom);
|
||||
TabBarView *tab = (TabBarView *)[PhoneMainView.instance.mainViewController
|
||||
getCachedController:NSStringFromClass(TabBarView.class)];
|
||||
[tab update:YES];
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
#pragma mark - Property Functions
|
||||
|
||||
- (void)setChatRoom:(LinphoneChatRoom *)room {
|
||||
chatRoom = room;
|
||||
_chatRoom = room;
|
||||
[self reloadData];
|
||||
}
|
||||
|
||||
|
|
@ -197,7 +197,7 @@
|
|||
if (editingStyle == UITableViewCellEditingStyleDelete) {
|
||||
[tableView beginUpdates];
|
||||
LinphoneChatMessage *chat = ms_list_nth_data(messageList, (int)[indexPath row]);
|
||||
linphone_chat_room_delete_message(chatRoom, chat);
|
||||
linphone_chat_room_delete_message(_chatRoom, chat);
|
||||
messageList = ms_list_remove(messageList, chat);
|
||||
|
||||
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
|
||||
|
|
@ -209,7 +209,7 @@
|
|||
- (void)removeSelectionUsing:(void (^)(NSIndexPath *))remover {
|
||||
[super removeSelectionUsing:^(NSIndexPath *indexPath) {
|
||||
LinphoneChatMessage *chat = ms_list_nth_data(messageList, (int)[indexPath row]);
|
||||
linphone_chat_room_delete_message(chatRoom, chat);
|
||||
linphone_chat_room_delete_message(_chatRoom, chat);
|
||||
messageList = ms_list_remove(messageList, chat);
|
||||
}];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,12 +33,13 @@
|
|||
@interface ChatConversationView
|
||||
: TPMultiLayoutViewController <HPGrowingTextViewDelegate, UICompositeViewDelegate, ImagePickerDelegate,
|
||||
ChatConversationDelegate, UISearchBarDelegate> {
|
||||
LinphoneChatRoom *chatRoom;
|
||||
OrderedDictionary *imageQualities;
|
||||
BOOL scrollOnGrowingEnabled;
|
||||
BOOL composingVisible;
|
||||
}
|
||||
|
||||
@property(nonatomic) LinphoneChatRoom *chatRoom;
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UIIconButton *backButton;
|
||||
@property(nonatomic, strong) IBOutlet ChatConversationTableView *tableController;
|
||||
@property(weak, nonatomic) IBOutlet HPGrowingTextView *messageField;
|
||||
|
|
@ -65,6 +66,4 @@
|
|||
- (IBAction)onDeleteClick:(id)sender;
|
||||
- (IBAction)onEditionChangeClick:(id)sender;
|
||||
|
||||
- (void)setChatRoom:(LinphoneChatRoom *)room;
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
self = [super initWithNibName:NSStringFromClass(self.class) bundle:[NSBundle mainBundle]];
|
||||
if (self != nil) {
|
||||
scrollOnGrowingEnabled = TRUE;
|
||||
chatRoom = NULL;
|
||||
_chatRoom = NULL;
|
||||
imageQualities = [[OrderedDictionary alloc]
|
||||
initWithObjectsAndKeys:[NSNumber numberWithFloat:0.9], NSLocalizedString(@"Maximum", nil),
|
||||
[NSNumber numberWithFloat:0.5], NSLocalizedString(@"Average", nil),
|
||||
|
|
@ -152,16 +152,16 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
#pragma mark -
|
||||
|
||||
- (void)setChatRoom:(LinphoneChatRoom *)room {
|
||||
chatRoom = room;
|
||||
- (void)setChatRoom:(LinphoneChatRoom *)chatRoom {
|
||||
_chatRoom = chatRoom;
|
||||
[_messageField setText:@""];
|
||||
[_tableController setChatRoom:room];
|
||||
[_tableController setChatRoom:_chatRoom];
|
||||
|
||||
if (chatRoom != NULL) {
|
||||
if (_chatRoom != NULL) {
|
||||
_chatView.hidden = NO;
|
||||
[self update];
|
||||
linphone_chat_room_mark_as_read(chatRoom);
|
||||
[self setComposingVisible:linphone_chat_room_is_remote_composing(chatRoom) withDelay:0];
|
||||
linphone_chat_room_mark_as_read(_chatRoom);
|
||||
[self setComposingVisible:linphone_chat_room_is_remote_composing(_chatRoom) withDelay:0];
|
||||
TabBarView *tab = (TabBarView *)[PhoneMainView.instance.mainViewController
|
||||
getCachedController:NSStringFromClass(TabBarView.class)];
|
||||
[tab update:YES];
|
||||
|
|
@ -172,8 +172,8 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (void)applicationWillEnterForeground:(NSNotification *)notif {
|
||||
if (chatRoom != nil) {
|
||||
linphone_chat_room_mark_as_read(chatRoom);
|
||||
if (_chatRoom != nil) {
|
||||
linphone_chat_room_mark_as_read(_chatRoom);
|
||||
TabBarView *tab = (TabBarView *)[PhoneMainView.instance.mainViewController
|
||||
getCachedController:NSStringFromClass(TabBarView.class)];
|
||||
[tab update:YES];
|
||||
|
|
@ -186,12 +186,12 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (void)update {
|
||||
if (chatRoom == NULL) {
|
||||
if (_chatRoom == NULL) {
|
||||
LOGW(@"Cannot update chat room header: null contact");
|
||||
return;
|
||||
}
|
||||
|
||||
const LinphoneAddress *addr = linphone_chat_room_get_peer_address(chatRoom);
|
||||
const LinphoneAddress *addr = linphone_chat_room_get_peer_address(_chatRoom);
|
||||
if (addr == NULL) {
|
||||
[PhoneMainView.instance popCurrentView];
|
||||
UIAlertView *error = [[UIAlertView alloc]
|
||||
|
|
@ -211,12 +211,12 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (BOOL)sendMessage:(NSString *)message withExterlBodyUrl:(NSURL *)externalUrl withInternalURL:(NSURL *)internalUrl {
|
||||
if (chatRoom == NULL) {
|
||||
if (_chatRoom == NULL) {
|
||||
LOGW(@"Cannot send message: No chatroom");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
LinphoneChatMessage *msg = linphone_chat_room_create_message(chatRoom, [message UTF8String]);
|
||||
LinphoneChatMessage *msg = linphone_chat_room_create_message(_chatRoom, [message UTF8String]);
|
||||
if (externalUrl) {
|
||||
linphone_chat_message_set_external_body_url(msg, [[externalUrl absoluteString] UTF8String]);
|
||||
}
|
||||
|
|
@ -226,8 +226,11 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
[LinphoneManager setValueInMessageAppData:[internalUrl absoluteString] forKey:@"localimage" inMessage:msg];
|
||||
}
|
||||
|
||||
linphone_chat_room_send_chat_message(chatRoom, msg);
|
||||
// we must ref & unref message because in case of error, it will be destroy otherwise
|
||||
linphone_chat_room_send_chat_message(_chatRoom, linphone_chat_message_ref(msg));
|
||||
[_tableController addChatEntry:msg];
|
||||
linphone_chat_message_unref(msg);
|
||||
|
||||
[_tableController scrollToBottom:true];
|
||||
|
||||
return TRUE;
|
||||
|
|
@ -307,6 +310,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
completion:^(BOOL finished) {
|
||||
[_tableController scrollToBottom:TRUE];
|
||||
_composeIndicatorView.hidden = !visible;
|
||||
}];
|
||||
}
|
||||
|
||||
|
|
@ -322,7 +326,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
char *fromStr = linphone_address_as_string_uri_only(from);
|
||||
const LinphoneAddress *cr_from = linphone_chat_room_get_peer_address(chatRoom);
|
||||
const LinphoneAddress *cr_from = linphone_chat_room_get_peer_address(_chatRoom);
|
||||
char *cr_from_string = linphone_address_as_string_uri_only(cr_from);
|
||||
|
||||
if (fromStr && cr_from_string) {
|
||||
|
|
@ -341,7 +345,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
- (void)textComposeEvent:(NSNotification *)notif {
|
||||
LinphoneChatRoom *room = [[[notif userInfo] objectForKey:@"room"] pointerValue];
|
||||
if (room && room == chatRoom) {
|
||||
if (room && room == _chatRoom) {
|
||||
BOOL composing = linphone_chat_room_is_remote_composing(room);
|
||||
[self setComposingVisible:composing withDelay:0.3];
|
||||
}
|
||||
|
|
@ -363,8 +367,8 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (void)growingTextChanged:(HPGrowingTextView *)growingTextView text:(NSString *)text {
|
||||
if ([text length] > 0 && chatRoom)
|
||||
linphone_chat_room_compose(chatRoom);
|
||||
if ([text length] > 0 && _chatRoom)
|
||||
linphone_chat_room_compose(_chatRoom);
|
||||
}
|
||||
|
||||
- (void)growingTextView:(HPGrowingTextView *)growingTextView willChangeHeight:(float)height {
|
||||
|
|
@ -426,7 +430,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
- (void)textViewDidChange:(UITextView *)textView {
|
||||
if ([textView.text length] > 0) {
|
||||
linphone_chat_room_compose(chatRoom);
|
||||
linphone_chat_room_compose(_chatRoom);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -515,7 +519,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (IBAction)onCallClick:(id)sender {
|
||||
[LinphoneManager.instance call:linphone_chat_room_get_peer_address(chatRoom)];
|
||||
[LinphoneManager.instance call:linphone_chat_room_get_peer_address(_chatRoom)];
|
||||
}
|
||||
|
||||
- (IBAction)onListSwipe:(id)sender {
|
||||
|
|
@ -539,7 +543,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
- (BOOL)startImageUpload:(UIImage *)image url:(NSURL *)url {
|
||||
FileTransferDelegate *fileTransfer = [[FileTransferDelegate alloc] init];
|
||||
[fileTransfer upload:image withURL:url forChatRoom:chatRoom];
|
||||
[fileTransfer upload:image withURL:url forChatRoom:_chatRoom];
|
||||
[_tableController addChatEntry:linphone_chat_message_ref(fileTransfer.message)];
|
||||
[_tableController scrollToBottom:true];
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -119,11 +119,16 @@ static void chatTable_free_chatrooms(void *data) {
|
|||
[super loadData];
|
||||
|
||||
if (IPAD) {
|
||||
// reset conversation view since in fragment mode, conversations are relative to current data
|
||||
// select first conversation if any
|
||||
// if conversation view is using a chatroom that does not exist anymore, update it
|
||||
if (data != NULL) {
|
||||
ChatConversationView *view = VIEW(ChatConversationView);
|
||||
[view setChatRoom:(LinphoneChatRoom *)ms_list_nth_data(data, 0)];
|
||||
LinphoneChatRoom *current = [view chatRoom];
|
||||
// cannot find it anymore: replace it with the first one
|
||||
if (ms_list_find(data, current) == NULL) {
|
||||
[view setChatRoom:(LinphoneChatRoom *)ms_list_nth_data(data, 0)];
|
||||
}
|
||||
} else {
|
||||
[PhoneMainView.instance changeCurrentView:ChatConversationCreateView.compositeViewDescription];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -150,6 +150,8 @@
|
|||
[cell.editTextfield setDelegate:self];
|
||||
}
|
||||
|
||||
cell.selectionStyle = UITableViewCellSelectionStyleNone;
|
||||
|
||||
cell.indexPath = indexPath;
|
||||
[cell hideDeleteButton:NO];
|
||||
[cell.editTextfield setKeyboardType:UIKeyboardTypeDefault];
|
||||
|
|
@ -278,7 +280,7 @@
|
|||
[tempView addSubview:tempLabel];
|
||||
|
||||
if (canAddEntry) {
|
||||
frame.origin.x = tableView.frame.size.width / 2 - 28;
|
||||
frame.origin.x = (tableView.frame.size.width - 30 /*image size*/) / 2 - 5 /*right offset*/;
|
||||
UIIconButton *tempAddButton = [[UIIconButton alloc] initWithFrame:frame];
|
||||
[tempAddButton setImage:[UIImage imageNamed:@"add_field_default.png"] forState:UIControlStateNormal];
|
||||
[tempAddButton setImage:[UIImage imageNamed:@"add_field_over.png"] forState:UIControlStateHighlighted];
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
|
|||
_emptyLabel.hidden = YES;
|
||||
} else {
|
||||
_emptyLabel.hidden = NO;
|
||||
if (!IPAD) {
|
||||
[PhoneMainView.instance popCurrentView];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -144,13 +144,13 @@ static int ms_strcmpfuz(const char *fuzzy_word, const char *sentence) {
|
|||
}
|
||||
}
|
||||
[super loadData];
|
||||
|
||||
if (IPAD) {
|
||||
// reset details view since in fragment mode, details are relative to current data
|
||||
// select first contact if any
|
||||
// if contact details view is using a contact that does not exist anymore, update it
|
||||
ContactDetailsView *view = VIEW(ContactDetailsView);
|
||||
ABRecordRef contact = ([self totalNumberOfItems] > 0)
|
||||
? [self contactForIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]]
|
||||
: nil;
|
||||
ContactDetailsView *view = VIEW(ContactDetailsView);
|
||||
[view setContact:contact];
|
||||
}
|
||||
}
|
||||
|
|
@ -247,7 +247,7 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
|
|||
OrderedDictionary *subDic = [addressBookMap objectForKey:[addressBookMap keyAtIndex:[indexPath section]]];
|
||||
NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
|
||||
ABRecordRef contact = (__bridge ABRecordRef)([subDic objectForKey:key]);
|
||||
NSString *firstChar = [[self displayNameForContact:contact] substringToIndex:1];
|
||||
NSString *firstChar = [[self displayNameForContact:contact] substringToIndex:1].uppercaseString;
|
||||
[[addressBookMap objectForKey:firstChar] removeObjectForKey:[self displayNameForContact:contact]];
|
||||
if ([tableView numberOfRowsInSection:indexPath.section] == 1) {
|
||||
[addressBookMap removeObjectForKey:firstChar];
|
||||
|
|
@ -268,7 +268,7 @@ static void sync_address_book(ABAddressBookRef addressBook, CFDictionaryRef info
|
|||
OrderedDictionary *subDic = [addressBookMap objectForKey:[addressBookMap keyAtIndex:[indexPath section]]];
|
||||
NSString *key = [[subDic allKeys] objectAtIndex:[indexPath row]];
|
||||
ABRecordRef contact = (__bridge ABRecordRef)([subDic objectForKey:key]);
|
||||
NSString *firstChar = [[self displayNameForContact:contact] substringToIndex:1];
|
||||
NSString *firstChar = [[self displayNameForContact:contact] substringToIndex:1].uppercaseString;
|
||||
[[addressBookMap objectForKey:firstChar] removeObjectForKey:[self displayNameForContact:contact]];
|
||||
if ([self.tableView numberOfRowsInSection:indexPath.section] == 1) {
|
||||
[addressBookMap removeObjectForKey:firstChar];
|
||||
|
|
|
|||
|
|
@ -254,8 +254,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
block:^{
|
||||
NSString *appName =
|
||||
[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"];
|
||||
NSString *logsAddress =
|
||||
[mgr lpConfigStringForKey:@"debug_popup_email" withDefault:@"linphone-ios@linphone.org"];
|
||||
NSString *logsAddress = [mgr lpConfigStringForKey:@"debug_popup_email" withDefault:@""];
|
||||
[self presentMailViewWithTitle:appName forRecipients:@[ logsAddress ] attachLogs:true];
|
||||
}];
|
||||
|
||||
|
|
@ -271,22 +270,30 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
[Log enableLogs:newDebugLevel];
|
||||
}];
|
||||
|
||||
[alertView addButtonWithTitle:NSLocalizedString(@"Remove account(s) and self destruct", nil)
|
||||
block:^{
|
||||
linphone_core_clear_proxy_config([LinphoneManager getLc]);
|
||||
linphone_core_clear_all_auth_info([LinphoneManager getLc]);
|
||||
[LinphoneManager.instance destroyLinphoneCore];
|
||||
if ([NSFileManager.defaultManager
|
||||
isDeletableFileAtPath:[LinphoneManager documentFile:@"linphonerc"]] == YES) {
|
||||
[NSFileManager.defaultManager
|
||||
removeItemAtPath:[LinphoneManager documentFile:@"linphonerc"]
|
||||
error:nil];
|
||||
}
|
||||
[alertView
|
||||
addButtonWithTitle:NSLocalizedString(@"Remove account(s) and self destruct", nil)
|
||||
block:^{
|
||||
linphone_core_clear_proxy_config([LinphoneManager getLc]);
|
||||
linphone_core_clear_all_auth_info([LinphoneManager getLc]);
|
||||
@try {
|
||||
[LinphoneManager.instance destroyLinphoneCore];
|
||||
} @catch (NSException *e) {
|
||||
LOGW(@"Exception while destroying linphone core: %@", e);
|
||||
} @finally {
|
||||
if ([NSFileManager.defaultManager
|
||||
isDeletableFileAtPath:[LinphoneManager documentFile:@"linphonerc"]] == YES) {
|
||||
[NSFileManager.defaultManager
|
||||
removeItemAtPath:[LinphoneManager documentFile:@"linphonerc"]
|
||||
error:nil];
|
||||
}
|
||||
#ifdef DEBUG
|
||||
[LinphoneManager instanceRelease];
|
||||
[LinphoneManager instanceRelease];
|
||||
#endif
|
||||
[UIApplication sharedApplication].keyWindow.rootViewController = nil;
|
||||
}];
|
||||
}
|
||||
[UIApplication sharedApplication].keyWindow.rootViewController = nil;
|
||||
// make the application crash to be sure that user restart it properly
|
||||
LOGF(@"Self-destructing in 3..2..1..0!");
|
||||
}];
|
||||
|
||||
[alertView show];
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#import "UICompositeView.h"
|
||||
#import "UIAssistantTextField.h"
|
||||
|
||||
@interface FirstLoginView : UIViewController <UITextFieldDelegate, UICompositeViewDelegate> {
|
||||
@interface FirstLoginView : TPMultiLayoutViewController <UITextFieldDelegate, UICompositeViewDelegate> {
|
||||
LinphoneAccountCreator *account_creator;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
tabBar:nil
|
||||
sideMenu:nil
|
||||
fullscreen:false
|
||||
isLeftFragment:NO
|
||||
isLeftFragment:YES
|
||||
fragmentWith:nil];
|
||||
}
|
||||
return compositeDescription;
|
||||
|
|
@ -48,19 +48,28 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
#pragma mark - ViewController Functions
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
NSString *siteUrl =
|
||||
[[LinphoneManager instance] lpConfigStringForKey:@"first_login_view_url"] ?: @"http://www.linphone.org";
|
||||
[_siteButton setTitle:siteUrl forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
// Set observer
|
||||
[NSNotificationCenter.defaultCenter addObserver:self
|
||||
selector:@selector(registrationUpdateEvent:)
|
||||
name:kLinphoneRegistrationUpdate
|
||||
object:nil];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(registrationUpdateEvent:)
|
||||
name:kLinphoneRegistrationUpdate
|
||||
object:nil];
|
||||
|
||||
[_usernameField setText:[LinphoneManager.instance lpConfigStringForKey:@"assistant_username"]];
|
||||
[_passwordField setText:[LinphoneManager.instance lpConfigStringForKey:@"assistant_password"]];
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(configureStateUpdateEvent:)
|
||||
name:kLinphoneConfiguringStateUpdate
|
||||
object:nil];
|
||||
|
||||
// Update on show
|
||||
const MSList *list = linphone_core_get_proxy_config_list(LC);
|
||||
const MSList *list = linphone_core_get_proxy_config_list([LinphoneManager getLc]);
|
||||
if (list != NULL) {
|
||||
LinphoneProxyConfig *config = (LinphoneProxyConfig *)list->data;
|
||||
if (config) {
|
||||
|
|
@ -68,27 +77,34 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
}
|
||||
|
||||
[_usernameField showError:[AssistantView errorForStatus:LinphoneAccountCreatorUsernameInvalid]
|
||||
if (account_creator) {
|
||||
linphone_account_creator_unref(account_creator);
|
||||
}
|
||||
NSString *siteUrl =
|
||||
[[LinphoneManager instance] lpConfigStringForKey:@"first_login_view_url"] ?: @"http://www.linphone.org";
|
||||
account_creator = linphone_account_creator_new([LinphoneManager getLc], siteUrl.UTF8String);
|
||||
|
||||
[_usernameField showError:[self.class errorForStatus:LinphoneAccountCreatorUsernameInvalid]
|
||||
when:^BOOL(NSString *inputEntry) {
|
||||
LinphoneAccountCreatorStatus s =
|
||||
linphone_account_creator_set_username(account_creator, inputEntry.UTF8String);
|
||||
_usernameField.errorLabel.text = [AssistantView errorForStatus:s];
|
||||
_usernameField.errorLabel.text = [self.class errorForStatus:s];
|
||||
return s != LinphoneAccountCreatorOK;
|
||||
}];
|
||||
|
||||
[_passwordField showError:[AssistantView errorForStatus:LinphoneAccountCreatorPasswordTooShort]
|
||||
[_passwordField showError:[self.class errorForStatus:LinphoneAccountCreatorPasswordTooShort]
|
||||
when:^BOOL(NSString *inputEntry) {
|
||||
LinphoneAccountCreatorStatus s =
|
||||
linphone_account_creator_set_password(account_creator, inputEntry.UTF8String);
|
||||
_passwordField.errorLabel.text = [AssistantView errorForStatus:s];
|
||||
_passwordField.errorLabel.text = [self.class errorForStatus:s];
|
||||
return s != LinphoneAccountCreatorOK;
|
||||
}];
|
||||
|
||||
[_domainField showError:[AssistantView errorForStatus:LinphoneAccountCreatorDomainInvalid]
|
||||
[_domainField showError:[self.class errorForStatus:LinphoneAccountCreatorDomainInvalid]
|
||||
when:^BOOL(NSString *inputEntry) {
|
||||
LinphoneAccountCreatorStatus s =
|
||||
linphone_account_creator_set_domain(account_creator, inputEntry.UTF8String);
|
||||
_domainField.errorLabel.text = [AssistantView errorForStatus:s];
|
||||
_domainField.errorLabel.text = [self.class errorForStatus:s];
|
||||
return s != LinphoneAccountCreatorOK;
|
||||
}];
|
||||
}
|
||||
|
|
@ -97,18 +113,50 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
[super viewWillDisappear:animated];
|
||||
|
||||
// Remove observer
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneRegistrationUpdate object:nil];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self name:kLinphoneRegistrationUpdate object:nil];
|
||||
}
|
||||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
|
||||
NSString *siteUrl = [LinphoneManager.instance lpConfigStringForKey:@"first_login_view_url"];
|
||||
if (siteUrl == nil) {
|
||||
siteUrl = @"http://www.linphone.org";
|
||||
+ (NSString *)errorForStatus:(LinphoneAccountCreatorStatus)status {
|
||||
BOOL usePhoneNumber = [[LinphoneManager instance] lpConfigBoolForKey:@"use_phone_number" inSection:@"assistant"];
|
||||
switch (status) {
|
||||
case LinphoneAccountCreatorEmailInvalid:
|
||||
return NSLocalizedString(@"Invalid email.", nil);
|
||||
case LinphoneAccountCreatorUsernameInvalid:
|
||||
return usePhoneNumber ? NSLocalizedString(@"Invalid phone number.", nil)
|
||||
: NSLocalizedString(@"Invalid username.", nil);
|
||||
case LinphoneAccountCreatorUsernameTooShort:
|
||||
return usePhoneNumber ? NSLocalizedString(@"Phone number too short.", nil)
|
||||
: NSLocalizedString(@"Username too short.", nil);
|
||||
case LinphoneAccountCreatorUsernameTooLong:
|
||||
return usePhoneNumber ? NSLocalizedString(@"Phone number too long.", nil)
|
||||
: NSLocalizedString(@"Username too long.", nil);
|
||||
case LinphoneAccountCreatorUsernameInvalidSize:
|
||||
return usePhoneNumber ? NSLocalizedString(@"Phone number length invalid.", nil)
|
||||
: NSLocalizedString(@"Username length invalid.", nil);
|
||||
case LinphoneAccountCreatorPasswordTooShort:
|
||||
return NSLocalizedString(@"Password too short.", nil);
|
||||
case LinphoneAccountCreatorPasswordTooLong:
|
||||
return NSLocalizedString(@"Password too long.", nil);
|
||||
case LinphoneAccountCreatorDomainInvalid:
|
||||
return NSLocalizedString(@"Invalid domain.", nil);
|
||||
case LinphoneAccountCreatorRouteInvalid:
|
||||
return NSLocalizedString(@"Invalid route.", nil);
|
||||
case LinphoneAccountCreatorDisplayNameInvalid:
|
||||
return NSLocalizedString(@"Invalid display name.", nil);
|
||||
case LinphoneAccountCreatorReqFailed:
|
||||
return NSLocalizedString(@"Failed to query the server. Please try again later", nil);
|
||||
case LinphoneAccountCreatorTransportNotSupported:
|
||||
return NSLocalizedString(@"Unsupported transport", nil);
|
||||
case LinphoneAccountCreatorAccountCreated:
|
||||
case LinphoneAccountCreatorAccountExist:
|
||||
case LinphoneAccountCreatorAccountNotCreated:
|
||||
case LinphoneAccountCreatorAccountNotExist:
|
||||
case LinphoneAccountCreatorAccountNotValidated:
|
||||
case LinphoneAccountCreatorAccountValidated:
|
||||
case LinphoneAccountCreatorOK:
|
||||
break;
|
||||
}
|
||||
[_siteButton setTitle:siteUrl forState:UIControlStateNormal];
|
||||
account_creator = linphone_account_creator_new(LC, siteUrl.UTF8String);
|
||||
return nil;
|
||||
}
|
||||
|
||||
- (void)shouldEnableNextButton {
|
||||
|
|
@ -121,6 +169,35 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
#pragma mark - Event Functions
|
||||
|
||||
- (void)configureStateUpdateEvent:(NSNotification *)notif {
|
||||
LinphoneConfiguringState state = [[notif.userInfo objectForKey:@"state"] intValue];
|
||||
switch (state) {
|
||||
case LinphoneConfiguringFailed: {
|
||||
[_waitView setHidden:true];
|
||||
DTAlertView *alertView = [[DTAlertView alloc]
|
||||
initWithTitle:NSLocalizedString(@"Configuration failed", nil)
|
||||
message:
|
||||
NSLocalizedString(
|
||||
@"Cannot retrieve your configuration. Please check credentials or try again later",
|
||||
nil)
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"OK", nil)
|
||||
otherButtonTitles:nil];
|
||||
[alertView show];
|
||||
linphone_core_set_provisioning_uri([LinphoneManager getLc], NULL);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (account_creator) {
|
||||
linphone_account_creator_unref(account_creator);
|
||||
}
|
||||
NSString *siteUrl =
|
||||
[[LinphoneManager instance] lpConfigStringForKey:@"first_login_view_url"] ?: @"http://www.linphone.org";
|
||||
account_creator = linphone_account_creator_new([LinphoneManager getLc], siteUrl.UTF8String);
|
||||
}
|
||||
|
||||
- (void)registrationUpdateEvent:(NSNotification *)notif {
|
||||
[self registrationUpdate:[[notif.userInfo objectForKey:@"state"] intValue]];
|
||||
}
|
||||
|
|
@ -128,7 +205,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
- (void)registrationUpdate:(LinphoneRegistrationState)state {
|
||||
switch (state) {
|
||||
case LinphoneRegistrationOk: {
|
||||
[LinphoneManager.instance lpConfigSetBool:FALSE forKey:@"enable_first_login_view_preference"];
|
||||
[[LinphoneManager instance] lpConfigSetBool:FALSE forKey:@"enable_first_login_view_preference"];
|
||||
[_waitView setHidden:true];
|
||||
[PhoneMainView.instance changeCurrentView:DialerView.compositeViewDescription];
|
||||
break;
|
||||
|
|
@ -140,10 +217,6 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
case LinphoneRegistrationFailed: {
|
||||
[_waitView setHidden:true];
|
||||
|
||||
// erase uername passwd
|
||||
[LinphoneManager.instance lpConfigSetString:nil forKey:@"assistant_username"];
|
||||
[LinphoneManager.instance lpConfigSetString:nil forKey:@"assistant_password"];
|
||||
break;
|
||||
}
|
||||
case LinphoneRegistrationProgress: {
|
||||
|
|
@ -164,7 +237,21 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (void)onLoginClick:(id)sender {
|
||||
if (!linphone_core_is_network_reachable(LC)) {
|
||||
UIAlertView *error =
|
||||
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Network Error", nil)
|
||||
message:NSLocalizedString(@"There is no network connection available, enable "
|
||||
@"WIFI or WWAN prior to configure an account",
|
||||
nil)
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
|
||||
otherButtonTitles:nil];
|
||||
[error show];
|
||||
return;
|
||||
}
|
||||
|
||||
_waitView.hidden = NO;
|
||||
|
||||
[XMLRPCHelper GetProvisioningURL:_usernameField.text
|
||||
password:_passwordField.text
|
||||
domain:_domainField.text
|
||||
|
|
@ -180,9 +267,18 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
#pragma mark - UITextFieldDelegate Functions
|
||||
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField {
|
||||
// When the user presses return, take focus away from the text field so that the keyboard is dismissed.
|
||||
[theTextField resignFirstResponder];
|
||||
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
|
||||
[textField resignFirstResponder];
|
||||
if (textField.returnKeyType == UIReturnKeyNext) {
|
||||
if (textField == _usernameField) {
|
||||
[_domainField becomeFirstResponder];
|
||||
} else if (textField == _domainField) {
|
||||
[_passwordField becomeFirstResponder];
|
||||
}
|
||||
} else if (textField.returnKeyType == UIReturnKeyDone) {
|
||||
[_loginButton sendActionsForControlEvents:UIControlEventTouchUpInside];
|
||||
}
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -101,6 +101,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
- (UIUserNotificationCategory *)getMessageNotificationCategory {
|
||||
NSArray *actions;
|
||||
|
||||
|
|
@ -195,6 +196,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
|
||||
|
||||
|
|
@ -415,6 +417,7 @@
|
|||
|
||||
#pragma mark - User notifications
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
- (void)application:(UIApplication *)application
|
||||
didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
|
||||
LOGI(@"%@", NSStringFromSelector(_cmd));
|
||||
|
|
@ -471,6 +474,7 @@
|
|||
LinphoneChatMessage *msg = linphone_chat_room_create_message(room, replyText.UTF8String);
|
||||
linphone_chat_room_send_chat_message(room, msg);
|
||||
linphone_chat_room_mark_as_read(room);
|
||||
[PhoneMainView.instance updateApplicationBadgeNumber];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -482,6 +486,7 @@
|
|||
LOGI(@"%@", NSStringFromSelector(_cmd));
|
||||
completionHandler();
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
#pragma mark - Remote configuration Functions (URL Handler)
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,6 @@ NSString *const kLinphoneFileTransferRecvUpdate = @"LinphoneFileTransferRecvUpda
|
|||
|
||||
const int kLinphoneAudioVbrCodecDefaultBitrate = 36; /*you can override this from linphonerc or linphonerc-factory*/
|
||||
|
||||
extern void libmsilbc_init(MSFactory *factory);
|
||||
extern void libmsamr_init(MSFactory *factory);
|
||||
extern void libmsx264_init(MSFactory *factory);
|
||||
extern void libmsopenh264_init(MSFactory *factory);
|
||||
|
|
@ -279,6 +278,7 @@ struct codec_name_pref_table codec_pref_table[] = {{"speex", 8000, "speex_8k_pre
|
|||
[NSNotificationCenter.defaultCenter removeObserver:self];
|
||||
}
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
- (void)silentPushFailed:(NSTimer *)timer {
|
||||
if (_silentPushCompletion) {
|
||||
LOGI(@"silentPush failed, silentPushCompletion block: %p", _silentPushCompletion);
|
||||
|
|
@ -286,6 +286,7 @@ struct codec_name_pref_table codec_pref_table[] = {{"speex", 8000, "speex_8k_pre
|
|||
_silentPushCompletion = nil;
|
||||
}
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
#pragma mark - Migration
|
||||
|
||||
|
|
@ -515,7 +516,8 @@ static void migrateWizardToAssistant(const char *entry, void *user_data) {
|
|||
}
|
||||
|
||||
- (void)migrationFromVersion2To3 {
|
||||
lp_config_for_each_entry(_configDb, "wizard", migrateWizardToAssistant, (__bridge void *)(self));
|
||||
// DONT DO THAT!
|
||||
// lp_config_for_each_entry(_configDb, "wizard", migrateWizardToAssistant, (__bridge void *)(self));
|
||||
}
|
||||
|
||||
#pragma mark - Linphone Core Functions
|
||||
|
|
@ -599,14 +601,15 @@ static void linphone_iphone_display_status(struct _LinphoneCore *lc, const char
|
|||
linphone_call_set_user_data(call, (void *)CFBridgingRetain(data));
|
||||
}
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
if (_silentPushCompletion) {
|
||||
|
||||
// we were woken up by a silent push. Call the completion handler with NEWDATA
|
||||
// so that the push is notified to the user
|
||||
LOGI(@"onCall - handler %p", _silentPushCompletion);
|
||||
_silentPushCompletion(UIBackgroundFetchResultNewData);
|
||||
_silentPushCompletion = nil;
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
NSString *address = [FastAddressBook displayNameForAddress:addr];
|
||||
|
|
@ -819,6 +822,14 @@ static void linphone_iphone_configuring_status_changed(LinphoneCore *lc, Linphon
|
|||
- (void)configuringStateChangedNotificationHandler:(NSNotification *)notif {
|
||||
_wasRemoteProvisioned = ((LinphoneConfiguringState)[[[notif userInfo] valueForKey:@"state"] integerValue] ==
|
||||
LinphoneConfiguringSuccessful);
|
||||
if (_wasRemoteProvisioned) {
|
||||
LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC);
|
||||
if (cfg) {
|
||||
linphone_proxy_config_edit(cfg);
|
||||
[self configurePushTokenForProxyConfig:cfg];
|
||||
linphone_proxy_config_done(cfg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Registration State Functions
|
||||
|
|
@ -826,13 +837,71 @@ static void linphone_iphone_configuring_status_changed(LinphoneCore *lc, Linphon
|
|||
- (void)onRegister:(LinphoneCore *)lc
|
||||
cfg:(LinphoneProxyConfig *)cfg
|
||||
state:(LinphoneRegistrationState)state
|
||||
message:(const char *)message {
|
||||
LOGI(@"New registration state: %s (message: %s)", linphone_registration_state_to_string(state), message);
|
||||
message:(const char *)cmessage {
|
||||
LOGI(@"New registration state: %s (message: %s)", linphone_registration_state_to_string(state), cmessage);
|
||||
|
||||
LinphoneReason reason = linphone_proxy_config_get_error(cfg);
|
||||
NSString *message = nil;
|
||||
switch (reason) {
|
||||
case LinphoneReasonBadCredentials:
|
||||
message = NSLocalizedString(@"Bad credentials, check your account settings", nil);
|
||||
break;
|
||||
case LinphoneReasonNoResponse:
|
||||
message = NSLocalizedString(@"No response received from remote", nil);
|
||||
break;
|
||||
case LinphoneReasonUnsupportedContent:
|
||||
message = NSLocalizedString(@"Unsupported content", nil);
|
||||
break;
|
||||
case LinphoneReasonIOError:
|
||||
message = NSLocalizedString(
|
||||
@"Cannot reach the server: either it is an invalid address or it may be temporary down.", nil);
|
||||
break;
|
||||
|
||||
case LinphoneReasonUnauthorized:
|
||||
message = NSLocalizedString(@"Operation is unauthorized because missing credential", nil);
|
||||
break;
|
||||
case LinphoneReasonNoMatch:
|
||||
message = NSLocalizedString(@"Operation could not be executed by server or remote client because it "
|
||||
@"didn't have any context for it",
|
||||
nil);
|
||||
break;
|
||||
case LinphoneReasonMovedPermanently:
|
||||
message = NSLocalizedString(@"Resource moved permanently", nil);
|
||||
break;
|
||||
case LinphoneReasonGone:
|
||||
message = NSLocalizedString(@"Resource no longer exists", nil);
|
||||
break;
|
||||
case LinphoneReasonTemporarilyUnavailable:
|
||||
message = NSLocalizedString(@"Temporarily unavailable", nil);
|
||||
break;
|
||||
case LinphoneReasonAddressIncomplete:
|
||||
message = NSLocalizedString(@"Address incomplete", nil);
|
||||
break;
|
||||
case LinphoneReasonNotImplemented:
|
||||
message = NSLocalizedString(@"Not implemented", nil);
|
||||
break;
|
||||
case LinphoneReasonBadGateway:
|
||||
message = NSLocalizedString(@"Bad gateway", nil);
|
||||
break;
|
||||
case LinphoneReasonServerTimeout:
|
||||
message = NSLocalizedString(@"Server timeout", nil);
|
||||
break;
|
||||
case LinphoneReasonNotAcceptable:
|
||||
case LinphoneReasonDoNotDisturb:
|
||||
case LinphoneReasonDeclined:
|
||||
case LinphoneReasonNotFound:
|
||||
case LinphoneReasonNotAnswered:
|
||||
case LinphoneReasonBusy:
|
||||
case LinphoneReasonNone:
|
||||
case LinphoneReasonUnknown:
|
||||
message = NSLocalizedString(@"Unknown error", nil);
|
||||
break;
|
||||
}
|
||||
|
||||
// Post event
|
||||
NSDictionary *dict = [NSDictionary
|
||||
dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:state], @"state", [NSValue valueWithPointer:cfg], @"cfg",
|
||||
[NSString stringWithUTF8String:message], @"message", nil];
|
||||
NSDictionary *dict =
|
||||
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:state], @"state",
|
||||
[NSValue valueWithPointer:cfg], @"cfg", message, @"message", nil];
|
||||
[NSNotificationCenter.defaultCenter postNotificationName:kLinphoneRegistrationUpdate object:self userInfo:dict];
|
||||
}
|
||||
|
||||
|
|
@ -897,6 +966,7 @@ static void linphone_iphone_popup_password_request(LinphoneCore *lc, const char
|
|||
#pragma mark - Text Received Functions
|
||||
|
||||
- (void)onMessageReceived:(LinphoneCore *)lc room:(LinphoneChatRoom *)room message:(LinphoneChatMessage *)msg {
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
if (_silentPushCompletion) {
|
||||
// we were woken up by a silent push. Call the completion handler with NEWDATA
|
||||
// so that the push is notified to the user
|
||||
|
|
@ -904,16 +974,14 @@ static void linphone_iphone_popup_password_request(LinphoneCore *lc, const char
|
|||
_silentPushCompletion(UIBackgroundFetchResultNewData);
|
||||
_silentPushCompletion = nil;
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
NSString *callID = [NSString stringWithUTF8String:linphone_chat_message_get_custom_header(msg, "Call-ID")];
|
||||
const LinphoneAddress *remoteAddress = linphone_chat_message_get_from_address(msg);
|
||||
NSString *from = [FastAddressBook displayNameForAddress:remoteAddress];
|
||||
const char *chat = linphone_chat_message_get_text(msg);
|
||||
if (chat == NULL)
|
||||
chat = "";
|
||||
|
||||
char *c_address = linphone_address_as_string_uri_only(remoteAddress);
|
||||
NSString *remote_uri = [NSString stringWithUTF8String:c_address];
|
||||
|
||||
ms_free(c_address);
|
||||
|
||||
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
|
||||
|
|
@ -923,7 +991,9 @@ static void linphone_iphone_popup_password_request(LinphoneCore *lc, const char
|
|||
NSString *chat = [UIChatBubbleTextCell TextMessageForChat:msg];
|
||||
notif.repeatInterval = 0;
|
||||
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8) {
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
notif.category = @"incoming_msg";
|
||||
#pragma deploymate pop
|
||||
}
|
||||
if ([LinphoneManager.instance lpConfigBoolForKey:@"show_msg_in_notif" withDefault:YES]) {
|
||||
notif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"IM_FULLMSG", nil), from, chat];
|
||||
|
|
@ -1254,6 +1324,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
NSNumber *number = (NSNumber *)[dataNetworkItemView valueForKey:@"dataNetworkType"];
|
||||
return [number intValue];
|
||||
} else {
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init];
|
||||
NSString *currentRadio = info.currentRadioAccessTechnology;
|
||||
if ([currentRadio isEqualToString:CTRadioAccessTechnologyEdge]) {
|
||||
|
|
@ -1261,6 +1332,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
|
|||
} else if ([currentRadio isEqualToString:CTRadioAccessTechnologyLTE]) {
|
||||
return network_4g;
|
||||
}
|
||||
#pragma deploymate pop
|
||||
return network_3g;
|
||||
}
|
||||
}
|
||||
|
|
@ -1305,11 +1377,14 @@ static LinphoneCoreVTable linphonec_vtable = {
|
|||
// get default config from bundle
|
||||
NSString *zrtpSecretsFileName = [LinphoneManager documentFile:@"zrtp_secrets"];
|
||||
NSString *chatDBFileName = [LinphoneManager documentFile:kLinphoneInternalChatDBFilename];
|
||||
const char *lRootCa = [[LinphoneManager bundleFile:@"rootca.pem"] UTF8String];
|
||||
|
||||
NSString *device = [NSString
|
||||
stringWithFormat:@"%@_%@_iOS%@", [NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"],
|
||||
[LinphoneUtils deviceName], UIDevice.currentDevice.systemVersion];
|
||||
NSMutableString *device = [[NSMutableString alloc]
|
||||
initWithString:[NSString
|
||||
stringWithFormat:@"%@_%@_iOS%@",
|
||||
[NSBundle.mainBundle objectForInfoDictionaryKey:@"CFBundleDisplayName"],
|
||||
[LinphoneUtils deviceName], UIDevice.currentDevice.systemVersion]];
|
||||
[device stringByReplacingOccurrencesOfString:@"," withString:@"."];
|
||||
[device stringByReplacingOccurrencesOfString:@" " withString:@"."];
|
||||
linphone_core_set_user_agent(theLinphoneCore, device.UTF8String, LINPHONE_IOS_VERSION);
|
||||
|
||||
_contactSipField = [self lpConfigStringForKey:@"contact_im_type_value" withDefault:@"SIP"];
|
||||
|
|
@ -1318,8 +1393,6 @@ static LinphoneCoreVTable linphonec_vtable = {
|
|||
_fastAddressBook = [[FastAddressBook alloc] init];
|
||||
}
|
||||
|
||||
linphone_core_set_root_ca(theLinphoneCore, lRootCa);
|
||||
|
||||
linphone_core_set_zrtp_secrets_file(theLinphoneCore, [zrtpSecretsFileName UTF8String]);
|
||||
linphone_core_set_chat_database_path(theLinphoneCore, [chatDBFileName UTF8String]);
|
||||
linphone_core_set_call_logs_database_path(theLinphoneCore, [chatDBFileName UTF8String]);
|
||||
|
|
@ -1426,43 +1499,39 @@ static BOOL libStarted = FALSE;
|
|||
[Log enableLogs:[self lpConfigIntForKey:@"debugenable_preference"]];
|
||||
connectivity = none;
|
||||
|
||||
ms_init(); // Need to initialize mediastreamer2 before loading the plugins
|
||||
// Load plugins if available in the linphone SDK - otherwise these calls will do nothing
|
||||
libmsilbc_init(ms_factory_get_fallback());
|
||||
libmssilk_init(ms_factory_get_fallback());
|
||||
libmsamr_init(ms_factory_get_fallback());
|
||||
libmsx264_init(ms_factory_get_fallback());
|
||||
libmsopenh264_init(ms_factory_get_fallback());
|
||||
libmsbcg729_init(ms_factory_get_fallback());
|
||||
libmswebrtc_init(ms_factory_get_fallback());
|
||||
// Set audio assets
|
||||
NSString *ring =
|
||||
([LinphoneManager bundleFile:[self lpConfigStringForKey:@"local_ring" inSection:@"sound"].lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"notes_of_the_optimistic.caf"])
|
||||
.lastPathComponent;
|
||||
NSString *ringback =
|
||||
([LinphoneManager bundleFile:[self lpConfigStringForKey:@"remote_ring" inSection:@"sound"].lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"ringback.wav"])
|
||||
.lastPathComponent;
|
||||
NSString *hold =
|
||||
([LinphoneManager bundleFile:[self lpConfigStringForKey:@"hold_music" inSection:@"sound"].lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"hold.mkv"])
|
||||
.lastPathComponent;
|
||||
[self lpConfigSetString:[LinphoneManager bundleFile:ring] forKey:@"local_ring" inSection:@"sound"];
|
||||
[self lpConfigSetString:[LinphoneManager bundleFile:ringback] forKey:@"remote_ring" inSection:@"sound"];
|
||||
[self lpConfigSetString:[LinphoneManager bundleFile:hold] forKey:@"hold_music" inSection:@"sound"];
|
||||
|
||||
theLinphoneCore = linphone_core_new_with_config(&linphonec_vtable, _configDb, (__bridge void *)(self));
|
||||
LOGI(@"Create linphonecore %p", theLinphoneCore);
|
||||
|
||||
// Set audio assets
|
||||
NSString *ring =
|
||||
([LinphoneManager
|
||||
bundleFile:[NSString stringWithUTF8String:linphone_core_get_ring(theLinphoneCore) ?: ""].lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"notes_of_the_optimistic.caf"])
|
||||
.lastPathComponent;
|
||||
NSString *ringback =
|
||||
([LinphoneManager bundleFile:[NSString stringWithUTF8String:linphone_core_get_ringback(theLinphoneCore) ?: ""]
|
||||
.lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"ringback.wav"])
|
||||
.lastPathComponent;
|
||||
NSString *hold =
|
||||
([LinphoneManager bundleFile:[NSString stringWithUTF8String:linphone_core_get_play_file(theLinphoneCore) ?: ""]
|
||||
.lastPathComponent]
|
||||
?: [LinphoneManager bundleFile:@"hold.mkv"])
|
||||
.lastPathComponent;
|
||||
linphone_core_set_ring(theLinphoneCore, [LinphoneManager bundleFile:ring].UTF8String);
|
||||
linphone_core_set_ringback(theLinphoneCore, [LinphoneManager bundleFile:ringback].UTF8String);
|
||||
linphone_core_set_play_file(theLinphoneCore, [LinphoneManager bundleFile:hold].UTF8String);
|
||||
// Load plugins if available in the linphone SDK - otherwise these calls will do nothing
|
||||
MSFactory *f = linphone_core_get_ms_factory(theLinphoneCore);
|
||||
libmssilk_init(f);
|
||||
libmsamr_init(f);
|
||||
libmsx264_init(f);
|
||||
libmsopenh264_init(f);
|
||||
libmsbcg729_init(f);
|
||||
libmswebrtc_init(f);
|
||||
linphone_core_reload_ms_plugins(theLinphoneCore, NULL);
|
||||
|
||||
/* set the CA file no matter what, since the remote provisioning could be hitting an HTTPS server */
|
||||
const char *lRootCa = [[LinphoneManager bundleFile:@"rootca.pem"] UTF8String];
|
||||
linphone_core_set_root_ca(theLinphoneCore, lRootCa);
|
||||
linphone_core_set_user_certificates_path(theLinphoneCore, [[LinphoneManager cacheDirectory] UTF8String]);
|
||||
linphone_core_set_root_ca(theLinphoneCore, [LinphoneManager bundleFile:@"rootca.pem"].UTF8String);
|
||||
linphone_core_set_user_certificates_path(theLinphoneCore, [LinphoneManager cacheDirectory].UTF8String);
|
||||
|
||||
/* The core will call the linphone_iphone_configuring_status_changed callback when the remote provisioning is loaded
|
||||
(or skipped).
|
||||
|
|
@ -1505,7 +1574,6 @@ static BOOL libStarted = FALSE;
|
|||
linphone_core_destroy(theLinphoneCore);
|
||||
LOGI(@"Destroy linphonecore %p", theLinphoneCore);
|
||||
theLinphoneCore = nil;
|
||||
ms_exit(); // Uninitialize mediastreamer2
|
||||
|
||||
// Post event
|
||||
NSDictionary *dict =
|
||||
|
|
@ -1784,7 +1852,7 @@ static int comp_call_state_paused(const LinphoneCall *call, const void *param) {
|
|||
OSStatus lStatus = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &lNewRouteSize, &lNewRoute);
|
||||
if (!lStatus && lNewRouteSize > 0) {
|
||||
NSString *route = (__bridge NSString *)lNewRoute;
|
||||
allow = ![route containsString:@"Heads"] && ![route isEqualToString:@"Lineout"];
|
||||
allow = ![route containsSubstring:@"Heads"] && ![route isEqualToString:@"Lineout"];
|
||||
CFRelease(lNewRoute);
|
||||
}
|
||||
return allow;
|
||||
|
|
@ -2003,7 +2071,7 @@ static int comp_call_state_paused(const LinphoneCall *call, const void *param) {
|
|||
// NSLocalizedString(@"IC_MSG", nil); // Fake for genstrings
|
||||
// NSLocalizedString(@"IM_MSG", nil); // Fake for genstrings
|
||||
// NSLocalizedString(@"IM_FULLMSG", nil); // Fake for genstrings
|
||||
#ifdef USE_APN_DEV
|
||||
#ifdef DEBUG
|
||||
#define APPMODE_SUFFIX @"dev"
|
||||
#else
|
||||
#define APPMODE_SUFFIX @"prod"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
</imageView>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" id="37" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="338" y="0.0" width="22" height="22"/>
|
||||
<rect key="frame" x="317" y="0.0" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="39" userLabel="chatNotificationImage">
|
||||
|
|
@ -105,7 +105,7 @@
|
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="10" contentMode="scaleToFill" id="32" userLabel="historyNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="68" y="0.0" width="22" height="22"/>
|
||||
<rect key="frame" x="48" y="0.0" width="22" height="22"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="11" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="33" userLabel="historyNotificationImage">
|
||||
|
|
@ -192,7 +192,7 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="7" contentMode="scaleToFill" id="djA-EL-HUt" userLabel="chatNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="68" y="233" width="21" height="21"/>
|
||||
<rect key="frame" x="48" y="233" width="21" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="8" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="EKN-Nr-bdt" userLabel="chatNotificationImage">
|
||||
|
|
@ -213,7 +213,7 @@
|
|||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view hidden="YES" autoresizesSubviews="NO" userInteractionEnabled="NO" tag="10" contentMode="scaleToFill" id="Ldd-jk-0kY" userLabel="historyNotificationView" customClass="UIBouncingView">
|
||||
<rect key="frame" x="68" y="35" width="21" height="21"/>
|
||||
<rect key="frame" x="46" y="35" width="21" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" tag="11" contentMode="scaleAspectFit" image="history_chat_indicator.png" id="toi-dz-eTS" userLabel="historyNotificationImage">
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<development version="6000" identifier="xcode"/>
|
||||
|
|
@ -38,11 +38,6 @@
|
|||
<outletCollection property="gestureRecognizers" destination="40" appends="YES" id="41"/>
|
||||
</connections>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="14" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="3" contentMode="scaleToFill" id="16" userLabel="tabBar">
|
||||
<rect key="frame" x="0.0" y="601" width="375" height="66"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
|
|
@ -52,6 +47,11 @@
|
|||
<rect key="frame" x="-375" y="42" width="375" height="625"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="14" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
|
||||
|
|
@ -71,11 +71,6 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="22" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="3" contentMode="scaleToFill" id="21" userLabel="tabBar">
|
||||
<rect key="frame" x="0.0" y="42" width="90" height="333"/>
|
||||
<autoresizingMask key="autoresizingMask" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
|
|
@ -85,6 +80,11 @@
|
|||
<rect key="frame" x="0.0" y="42" width="667" height="333"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="22" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="667" height="42"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<development version="6000" identifier="xcode"/>
|
||||
|
|
@ -38,11 +38,6 @@
|
|||
<outletCollection property="gestureRecognizers" destination="40" appends="YES" id="41"/>
|
||||
</connections>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="14" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="800" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="3" contentMode="scaleToFill" id="16" userLabel="tabBar">
|
||||
<rect key="frame" x="0.0" y="1190" width="800" height="100"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES"/>
|
||||
|
|
@ -52,6 +47,11 @@
|
|||
<rect key="frame" x="-800" y="60" width="800" height="1290"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="14" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="800" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
|
|
@ -71,11 +71,6 @@
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="22" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1290" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="3" contentMode="scaleToFill" id="21" userLabel="tabBar">
|
||||
<rect key="frame" x="0.0" y="60" width="100" height="740"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" heightSizable="YES"/>
|
||||
|
|
@ -85,6 +80,11 @@
|
|||
<rect key="frame" x="0.0" y="60" width="1290" height="740"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</view>
|
||||
<view autoresizesSubviews="NO" tag="2" contentMode="scaleToFill" id="22" userLabel="statusBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="1290" height="60"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>
|
||||
|
|
@ -26,16 +26,17 @@
|
|||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" minimumFontSize="17" id="dTn-Hc-bGM" userLabel="editTextField">
|
||||
<rect key="frame" x="8" y="7" width="326" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="8" y="7" width="327" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" red="0.90588235289999997" green="0.90588235289999997" blue="0.90588235289999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<rect key="contentStretch" x="1.3877787807814457e-17" y="0.0" width="1" height="1"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="14"/>
|
||||
<textInputTraits key="textInputTraits" returnKeyType="done"/>
|
||||
</textField>
|
||||
<button opaque="NO" contentMode="scaleAspectFit" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="C2f-aP-xjR" userLabel="deleteButton" customClass="UIIconButton">
|
||||
<rect key="frame" x="340" y="7" width="30" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<rect key="frame" x="335" y="7" width="40" height="30"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<inset key="contentEdgeInsets" minX="5" minY="0.0" maxX="5" maxY="0.0"/>
|
||||
<state key="normal" image="delete_field_default.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
|
|
|
|||
|
|
@ -55,6 +55,10 @@
|
|||
selector:@selector(notifyReceived:)
|
||||
name:kLinphoneNotifyReceived
|
||||
object:nil];
|
||||
[NSNotificationCenter.defaultCenter addObserver:self
|
||||
selector:@selector(mainViewChanged:)
|
||||
name:kLinphoneMainViewChange
|
||||
object:nil];
|
||||
|
||||
[NSNotificationCenter.defaultCenter addObserver:self
|
||||
selector:@selector(callUpdate:)
|
||||
|
|
@ -82,6 +86,7 @@
|
|||
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneGlobalStateUpdate object:nil];
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneNotifyReceived object:nil];
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneCallUpdate object:nil];
|
||||
[NSNotificationCenter.defaultCenter removeObserver:self name:kLinphoneMainViewChange object:nil];
|
||||
|
||||
if (callQualityTimer != nil) {
|
||||
[callQualityTimer invalidate];
|
||||
|
|
@ -106,7 +111,11 @@
|
|||
}
|
||||
|
||||
- (void)globalStateUpdate:(NSNotification *)notif {
|
||||
[self registrationUpdate:notif];
|
||||
[self registrationUpdate:nil];
|
||||
}
|
||||
|
||||
- (void)mainViewChanged:(NSNotification *)notif {
|
||||
[self registrationUpdate:nil];
|
||||
}
|
||||
|
||||
- (void)onCallEncryptionChanged:(NSNotification *)notif {
|
||||
|
|
@ -174,16 +183,16 @@
|
|||
NSString *message = nil;
|
||||
LinphoneGlobalState gstate = linphone_core_get_global_state(LC);
|
||||
|
||||
if (gstate == LinphoneGlobalConfiguring) {
|
||||
if ([PhoneMainView.instance.currentView equal:AssistantView.compositeViewDescription]) {
|
||||
message = NSLocalizedString(@"Configuring account", nil);
|
||||
} else if (gstate == LinphoneGlobalOn && !linphone_core_is_network_reachable(LC)) {
|
||||
message = NSLocalizedString(@"Network down", nil);
|
||||
} else if (gstate == LinphoneGlobalConfiguring) {
|
||||
message = NSLocalizedString(@"Fetching remote configuration", nil);
|
||||
} else if (config == NULL) {
|
||||
state = LinphoneRegistrationNone;
|
||||
if (linphone_core_get_proxy_config_list(LC) != NULL) {
|
||||
if (linphone_core_is_network_reachable(LC)) {
|
||||
message = NSLocalizedString(@"No default account", nil);
|
||||
} else {
|
||||
message = NSLocalizedString(@"Network down", nil);
|
||||
}
|
||||
message = NSLocalizedString(@"No default account", nil);
|
||||
} else {
|
||||
message = NSLocalizedString(@"No account configured", nil);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,6 +227,7 @@ static void message_status(LinphoneChatMessage *msg, LinphoneChatMessageState st
|
|||
if (!text || text.length == 0)
|
||||
return CGSizeMake(0, 0);
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
|
||||
if ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 7) {
|
||||
return [text boundingRectWithSize:size
|
||||
|
|
@ -239,6 +240,7 @@ static void message_status(LinphoneChatMessage *msg, LinphoneChatMessageState st
|
|||
.size;
|
||||
}
|
||||
#endif
|
||||
#pragma deploymate pop
|
||||
{ return [text sizeWithFont:font constrainedToSize:size lineBreakMode:NSLineBreakByCharWrapping]; }
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -575,9 +575,9 @@
|
|||
statusBarFrame.origin.y = origin - statusBarFrame.size.height;
|
||||
}
|
||||
|
||||
// 2. side menu - fixed size, always starting below status bar
|
||||
// 2. side menu - fixed size, always starting below status bar (hack: except in fullscreen)
|
||||
CGRect sideMenuFrame = viewFrame;
|
||||
sideMenuFrame.origin.y = origin + statusBarFrame.size.height;
|
||||
sideMenuFrame.origin.y = origin + (currentViewDescription.fullscreen ? 0 : statusBarFrame.size.height);
|
||||
sideMenuFrame.size.height -= sideMenuFrame.origin.y;
|
||||
if (!currentViewDescription.sideMenuEnabled) {
|
||||
// really hide; -width won't be enough since some animations may use this...
|
||||
|
|
|
|||
|
|
@ -55,8 +55,14 @@
|
|||
}
|
||||
|
||||
- (void)hideDeleteButton:(BOOL)hidden {
|
||||
CGRect newFrame = CGRectMake(8, 7, self.editView.frame.size.width - 16, self.editView.frame.size.height - 14);
|
||||
if (!hidden) {
|
||||
if (_deleteButton.hidden == hidden)
|
||||
return;
|
||||
|
||||
CGRect newFrame = _editTextfield.frame;
|
||||
newFrame.size.width = _editView.frame.size.width - newFrame.origin.x;
|
||||
if (hidden) {
|
||||
newFrame.size.width -= newFrame.origin.x; /* center view in super view */
|
||||
} else {
|
||||
newFrame.size.width -= _deleteButton.frame.size.width;
|
||||
}
|
||||
_editTextfield.frame = newFrame;
|
||||
|
|
|
|||
|
|
@ -1,28 +1,27 @@
|
|||
/* UIMicroButton.h
|
||||
/* UIMutedMicroButton.h
|
||||
*
|
||||
* Copyright (C) 2011 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "UIToggleButton.h"
|
||||
|
||||
@interface UIMicroButton : UIToggleButton<UIToggleButtonDelegate> {
|
||||
|
||||
@interface UIMutedMicroButton : UIToggleButton <UIToggleButtonDelegate> {
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
/* UIMicroButton.m
|
||||
/* UIMutedMicroButton.m
|
||||
*
|
||||
* Copyright (C) 2011 Belledonne Comunications, Grenoble, France
|
||||
*
|
||||
|
|
@ -17,11 +17,11 @@
|
|||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "UIMicroButton.h"
|
||||
#import "UIMutedMicroButton.h"
|
||||
|
||||
#import "LinphoneManager.h"
|
||||
|
||||
@implementation UIMicroButton
|
||||
@implementation UIMutedMicroButton
|
||||
|
||||
- (void)onOn {
|
||||
linphone_core_enable_mic(LC, false);
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
}
|
||||
|
||||
- (bool)onUpdate {
|
||||
return !(linphone_core_get_current_call(LC) && linphone_core_mic_enabled(LC));
|
||||
return (linphone_core_get_current_call(LC) || linphone_core_is_in_conference(LC)) && !linphone_core_mic_enabled(LC);
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -152,7 +152,8 @@
|
|||
if (c != nil) {
|
||||
LinphoneCallState state = linphone_call_get_state(c);
|
||||
ret = (state == LinphoneCallPaused || state == LinphoneCallPausing);
|
||||
self.enabled = (state == LinphoneCallPaused || state == LinphoneCallPausing ||
|
||||
self.enabled = !linphone_core_sound_resources_locked(LC) &&
|
||||
(state == LinphoneCallPaused || state == LinphoneCallPausing ||
|
||||
state == LinphoneCallStreamsRunning);
|
||||
} else {
|
||||
self.enabled = FALSE;
|
||||
|
|
|
|||
|
|
@ -41,10 +41,13 @@ INIT_WITH_COMMON_CF {
|
|||
#pragma mark - UIToggleButtonDelegate Functions
|
||||
|
||||
- (void)audioRouteChangeListenerCallback:(NSNotification *)notif {
|
||||
if ([[notif.userInfo valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue] ==
|
||||
AVAudioSessionRouteChangeReasonRouteConfigurationChange) {
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
if (UIDevice.currentDevice.systemVersion.doubleValue < 7 ||
|
||||
[[notif.userInfo valueForKey:AVAudioSessionRouteChangeReasonKey] integerValue] ==
|
||||
AVAudioSessionRouteChangeReasonRouteConfigurationChange) {
|
||||
[self update];
|
||||
}
|
||||
#pragma deploymate pop
|
||||
}
|
||||
|
||||
- (void)onOn {
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ INIT_WITH_COMMON_CF {
|
|||
bool video_enabled = false;
|
||||
LinphoneCall *currentCall = linphone_core_get_current_call(LC);
|
||||
if (linphone_core_video_supported(LC)) {
|
||||
if (linphone_core_video_display_enabled(LC) && currentCall && !linphone_call_media_in_progress(currentCall) &&
|
||||
if (linphone_core_video_display_enabled(LC) && currentCall && !linphone_core_sound_resources_locked(LC) &&
|
||||
linphone_call_get_state(currentCall) == LinphoneCallStreamsRunning) {
|
||||
video_enabled = TRUE;
|
||||
}
|
||||
|
|
|
|||
BIN
Classes/LinphoneUI/zh_CN.lproj/StatusBarView.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/StatusBarView.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/TabBarView.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/TabBarView.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UICallConferenceCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UICallConferenceCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UICallPausedCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UICallPausedCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatBubblePhotoCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatBubblePhotoCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatBubbleTextCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatBubbleTextCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatCreateCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIChatCreateCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIConfirmationDialog.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIConfirmationDialog.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIContactCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIContactCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIContactDetailsCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIContactDetailsCell.strings
Normal file
Binary file not shown.
BIN
Classes/LinphoneUI/zh_CN.lproj/UIHistoryCell.strings
Normal file
BIN
Classes/LinphoneUI/zh_CN.lproj/UIHistoryCell.strings
Normal file
Binary file not shown.
|
|
@ -261,25 +261,37 @@ static RootViewManager *rootViewManagerInstance = nil;
|
|||
- (void)textReceived:(NSNotification *)notif {
|
||||
LinphoneAddress *from = [[notif.userInfo objectForKey:@"from_address"] pointerValue];
|
||||
NSString *callID = [notif.userInfo objectForKey:@"call-id"];
|
||||
if (from != nil) {
|
||||
[self playMessageSoundForCallID:callID];
|
||||
}
|
||||
[self updateApplicationBadgeNumber];
|
||||
LinphoneChatRoom *room = from ? linphone_core_get_chat_room(LC, from) : NULL;
|
||||
|
||||
if (from == nil || room == NULL)
|
||||
return;
|
||||
|
||||
ChatConversationView *view = VIEW(ChatConversationView);
|
||||
// if we already are in the conversation, we should not ring/vibrate
|
||||
if (view.chatRoom && linphone_address_weak_equal(linphone_chat_room_get_peer_address(room),
|
||||
linphone_chat_room_get_peer_address(view.chatRoom)))
|
||||
return;
|
||||
|
||||
if ([UIApplication sharedApplication].applicationState == UIApplicationStateBackground)
|
||||
return;
|
||||
|
||||
LinphoneManager *lm = LinphoneManager.instance;
|
||||
// if the message was already received through a push notif, we don't need to ring
|
||||
if (![lm popPushCallID:callID]) {
|
||||
[lm playMessageSound];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)registrationUpdate:(NSNotification *)notif {
|
||||
LinphoneRegistrationState state = [[notif.userInfo objectForKey:@"state"] intValue];
|
||||
LinphoneProxyConfig *cfg = [[notif.userInfo objectForKey:@"cfg"] pointerValue];
|
||||
// Only report bad credential issue
|
||||
if (state == LinphoneRegistrationFailed &&
|
||||
[UIApplication sharedApplication].applicationState == UIApplicationStateBackground &&
|
||||
linphone_proxy_config_get_error(cfg) == LinphoneReasonBadCredentials) {
|
||||
UIAlertView *error =
|
||||
[[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Registration failure", nil)
|
||||
message:NSLocalizedString(@"Bad credentials, check your account settings", nil)
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"Continue", nil)
|
||||
otherButtonTitles:nil, nil];
|
||||
if (state == LinphoneRegistrationFailed && ![currentView equal:AssistantView.compositeViewDescription] &&
|
||||
[UIApplication sharedApplication].applicationState != UIApplicationStateBackground) {
|
||||
UIAlertView *error = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Registration failure", nil)
|
||||
message:[notif.userInfo objectForKey:@"message"]
|
||||
delegate:nil
|
||||
cancelButtonTitle:NSLocalizedString(@"Continue", nil)
|
||||
otherButtonTitles:nil, nil];
|
||||
[error show];
|
||||
}
|
||||
}
|
||||
|
|
@ -496,28 +508,30 @@ static RootViewManager *rootViewManagerInstance = nil;
|
|||
}
|
||||
|
||||
- (void)updateStatusBar:(UICompositeViewDescription *)to_view {
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
|
||||
// In iOS7, the app has a black background on dialer, incoming and incall, so we have to adjust the
|
||||
// status bar style for each transition to/from these views
|
||||
BOOL toLightStatus = (to_view != NULL) && ![to_view darkBackground];
|
||||
if (!toLightStatus) {
|
||||
// black bg: white text on black background
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
if (UIDevice.currentDevice.systemVersion.doubleValue >= 7.) {
|
||||
// In iOS7, the app has a black background on dialer, incoming and incall, so we have to adjust the
|
||||
// status bar style for each transition to/from these views
|
||||
BOOL toLightStatus = (to_view != NULL) && ![to_view darkBackground];
|
||||
if (!toLightStatus) {
|
||||
// black bg: white text on black background
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
|
||||
|
||||
[UIView animateWithDuration:0.3f
|
||||
animations:^{
|
||||
statusBarBG.backgroundColor = [UIColor blackColor];
|
||||
}];
|
||||
[UIView animateWithDuration:0.3f
|
||||
animations:^{
|
||||
statusBarBG.backgroundColor = [UIColor blackColor];
|
||||
}];
|
||||
|
||||
} else {
|
||||
// light bg: black text on white bg
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
|
||||
[UIView animateWithDuration:0.3f
|
||||
animations:^{
|
||||
statusBarBG.backgroundColor = [UIColor colorWithWhite:0.935 alpha:1];
|
||||
}];
|
||||
} else {
|
||||
// light bg: black text on white bg
|
||||
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
|
||||
[UIView animateWithDuration:0.3f
|
||||
animations:^{
|
||||
statusBarBG.backgroundColor = [UIColor colorWithWhite:0.935 alpha:1];
|
||||
}];
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#pragma deploymate pop
|
||||
}
|
||||
|
||||
- (void)fullScreen:(BOOL)enabled {
|
||||
|
|
@ -642,16 +656,6 @@ static RootViewManager *rootViewManagerInstance = nil;
|
|||
|
||||
#pragma mark - ActionSheet Functions
|
||||
|
||||
- (void)playMessageSoundForCallID:(NSString *)callID {
|
||||
if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground) {
|
||||
LinphoneManager *lm = LinphoneManager.instance;
|
||||
// if the message was already received through a push notif, we don't need to ring
|
||||
if (![lm popPushCallID:callID]) {
|
||||
[lm playMessageSound];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)displayIncomingCall:(LinphoneCall *)call {
|
||||
LinphoneCallLog *callLog = linphone_call_get_call_log(call);
|
||||
NSString *callId = [NSString stringWithUTF8String:linphone_call_log_get_call_id(callLog)];
|
||||
|
|
|
|||
|
|
@ -815,7 +815,10 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
|
||||
[picker setSubject:NSLocalizedString(@"<Please describe your problem or you will be ignored>",
|
||||
@"Email title for people wanting to send a bug report")];
|
||||
[picker setToRecipients:[NSArray arrayWithObjects:@"linphone-iphone@belledonne-communications.com", nil]];
|
||||
[picker setToRecipients:[NSArray
|
||||
arrayWithObjects:[LinphoneManager.instance lpConfigStringForKey:@"debug_popup_email"
|
||||
withDefault:@""],
|
||||
nil]];
|
||||
[picker setMessageBody:NSLocalizedString(@"Here are information about an issue I had on my device.\nI was "
|
||||
@"doing ...\nI expected Linphone to ...\nInstead, I got an "
|
||||
@"unexpected result: ...",
|
||||
|
|
|
|||
|
|
@ -14,14 +14,17 @@
|
|||
|
||||
- (void)viewDidLoad {
|
||||
[super viewDidLoad];
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
|
||||
// it's better to detect only pan from screen edges
|
||||
UIScreenEdgePanGestureRecognizer *pan =
|
||||
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(onLateralSwipe:)];
|
||||
pan.edges = UIRectEdgeRight;
|
||||
[self.view addGestureRecognizer:pan];
|
||||
_swipeGestureRecognizer.enabled = NO;
|
||||
#endif
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
if (UIDevice.currentDevice.systemVersion.doubleValue >= 7) {
|
||||
// it's better to detect only pan from screen edges
|
||||
UIScreenEdgePanGestureRecognizer *pan =
|
||||
[[UIScreenEdgePanGestureRecognizer alloc] initWithTarget:self action:@selector(onLateralSwipe:)];
|
||||
pan.edges = UIRectEdgeRight;
|
||||
[self.view addGestureRecognizer:pan];
|
||||
_swipeGestureRecognizer.enabled = NO;
|
||||
}
|
||||
#pragma deploymate pop
|
||||
}
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
|
|
@ -65,9 +68,11 @@
|
|||
_avatarImage.image = [LinphoneUtils selfAvatar];
|
||||
}
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
- (void)onLateralSwipe:(UIScreenEdgePanGestureRecognizer *)pan {
|
||||
[PhoneMainView.instance.mainViewController hideSideMenu:YES];
|
||||
}
|
||||
#pragma deploymate pop
|
||||
|
||||
- (IBAction)onHeaderClick:(id)sender {
|
||||
[PhoneMainView.instance changeCurrentView:SettingsView.compositeViewDescription];
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
|
||||
#import "IASKAppSettingsViewController.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
|
@ -905,3 +906,5 @@ CGRect IASKCGRectSwap(CGRect rect) {
|
|||
return newRect;
|
||||
}
|
||||
@end
|
||||
|
||||
#pragma deploymate pop
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
//
|
||||
|
||||
#import "IASKAppSettingsWebViewController.h"
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
@implementation IASKAppSettingsWebViewController
|
||||
|
||||
@synthesize url;
|
||||
|
|
@ -145,7 +145,6 @@
|
|||
- (void)mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {
|
||||
[self dismissModalViewControllerAnimated:YES];
|
||||
}
|
||||
|
||||
|
||||
#pragma deploymate pop
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -97,21 +97,6 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
- (void)didReceiveMemoryWarning {
|
||||
// Releases the view if it doesn't have a superview.
|
||||
[super didReceiveMemoryWarning];
|
||||
|
||||
// Release any cached data, images, etc that aren't in use.
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
[super viewDidUnload];
|
||||
// Release any retained subviews of the main view.
|
||||
// e.g. self.myOutlet = nil;
|
||||
self.tableView = nil;
|
||||
}
|
||||
|
||||
|
||||
- (void)dealloc {
|
||||
_currentSpecifier = nil;
|
||||
_checkedItem = nil;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
// This code is licensed under the BSD license that is available at: http://www.opensource.org/licenses/bsd-license.php
|
||||
//
|
||||
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
#import "IASKPSTextFieldSpecifierViewCell.h"
|
||||
#import "IASKTextField.h"
|
||||
#import "IASKSettingsReader.h"
|
||||
|
|
@ -66,8 +67,6 @@
|
|||
}
|
||||
_textField.frame = textFieldFrame;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#pragma deploymate pop
|
||||
|
||||
@end
|
||||
|
|
|
|||
|
|
@ -37,13 +37,6 @@
|
|||
self.landscapeView = nil;
|
||||
}
|
||||
|
||||
- (void)viewDidUnload {
|
||||
[super viewDidUnload];
|
||||
|
||||
portraitAttributes = nil;
|
||||
landscapeAttributes = nil;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
portraitAttributes = nil;
|
||||
landscapeAttributes = nil;
|
||||
|
|
|
|||
|
|
@ -54,9 +54,10 @@ typedef enum {
|
|||
|
||||
@end
|
||||
|
||||
@interface NSString (md5)
|
||||
@interface NSString (linphoneExt)
|
||||
|
||||
- (NSString *)md5;
|
||||
- (BOOL)containsSubstring:(NSString *)str;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
|||
|
|
@ -374,6 +374,15 @@
|
|||
return output;
|
||||
}
|
||||
|
||||
- (BOOL)containsSubstring:(NSString *)str {
|
||||
if (UIDevice.currentDevice.systemVersion.doubleValue >= 8.0) {
|
||||
#pragma deploymate push "ignored-api-availability"
|
||||
return [self containsString:str];
|
||||
#pragma deploymate pop
|
||||
}
|
||||
return ([self rangeOfString:str].location != NSNotFound);
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation ContactDisplay
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Classes/es.lproj/AboutView.strings
Normal file
BIN
Classes/es.lproj/AboutView.strings
Normal file
Binary file not shown.
BIN
Classes/es.lproj/ContactsListView.strings
Normal file
BIN
Classes/es.lproj/ContactsListView.strings
Normal file
Binary file not shown.
BIN
Classes/es.lproj/SettingsView.strings
Normal file
BIN
Classes/es.lproj/SettingsView.strings
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Classes/zh_CN.lproj/AboutView.strings
Normal file
BIN
Classes/zh_CN.lproj/AboutView.strings
Normal file
Binary file not shown.
BIN
Classes/zh_CN.lproj/AssistantView.strings
Normal file
BIN
Classes/zh_CN.lproj/AssistantView.strings
Normal file
Binary file not shown.
BIN
Classes/zh_CN.lproj/AssistantViewScreens.strings
Normal file
BIN
Classes/zh_CN.lproj/AssistantViewScreens.strings
Normal file
Binary file not shown.
BIN
Classes/zh_CN.lproj/CallIncomingView.strings
Normal file
BIN
Classes/zh_CN.lproj/CallIncomingView.strings
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue