forked from mirrors/linphone-iphone
pause call
This commit is contained in:
parent
c379d132c1
commit
6496e27a3c
22 changed files with 304 additions and 1422 deletions
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@
|
|||
<outlet property="optionsTransferButton" destination="S0k-bn-1bs" id="2fo-RR-nKy"/>
|
||||
<outlet property="optionsView" destination="sHZ-53-Hta" id="HjK-Gc-HB2"/>
|
||||
<outlet property="pauseButton" destination="7f5-7T-fV3" id="c3P-vq-8ux"/>
|
||||
<outlet property="pausedCallsTableView" destination="162" id="4Zj-Gb-Pdt"/>
|
||||
<outlet property="routesBluetoothButton" destination="6uv-FV-mUL" id="c0F-7q-0m5"/>
|
||||
<outlet property="routesButton" destination="nQp-5y-kTy" id="2u8-g5-6T1"/>
|
||||
<outlet property="routesReceiverButton" destination="jSA-bD-bCs" id="v17-cH-SBj"/>
|
||||
|
|
@ -49,7 +50,7 @@
|
|||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<tableViewController id="162" userLabel="pausedCallsTableController" customClass="PausedCallsTableView">
|
||||
<tableViewController id="162" userLabel="pausedCallsTableController" customClass="CallPausedTableView">
|
||||
<extendedEdge key="edgesForExtendedLayout"/>
|
||||
<connections>
|
||||
<outlet property="view" destination="106" id="166"/>
|
||||
|
|
@ -62,11 +63,11 @@
|
|||
<subviews>
|
||||
<view contentMode="scaleToFill" id="lzH-M1-NdV" userLabel="view">
|
||||
<rect key="frame" x="0.0" y="42" width="375" height="625"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="9" userLabel="callView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="503"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="john.doe@sip.linphone.org" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="8" id="8bV-K4-3TY" userLabel="addressLabel">
|
||||
<rect key="frame" x="90" y="241" width="194" height="22"/>
|
||||
|
|
@ -77,7 +78,7 @@
|
|||
</label>
|
||||
<imageView userInteractionEnabled="NO" tag="7" contentMode="scaleAspectFit" image="avatar.png" id="fZy-K5-yQp" userLabel="avatarImage" customClass="UIRoundedImageView">
|
||||
<rect key="frame" x="46" y="110" width="283" height="283"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact avatar">
|
||||
<accessibilityTraits key="traits" none="YES" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
|
|
@ -85,30 +86,18 @@
|
|||
</imageView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="John Doe" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="19" id="KPa-Rm-Qni" userLabel="nameLabel">
|
||||
<rect key="frame" x="46" y="236" width="283" height="32"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="37"/>
|
||||
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="01:34" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Oy8-QO-Jwb" userLabel="durationLabel">
|
||||
<rect key="frame" x="0.0" y="450" width="375" height="40"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="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>
|
||||
<tableView hidden="YES" clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" showsHorizontalScrollIndicator="NO" style="grouped" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="106" userLabel="pausedCallsTableView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="503"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<inset key="contentInset" minX="0.0" minY="10" maxX="0.0" maxY="25"/>
|
||||
<inset key="scrollIndicatorInsets" minX="0.0" minY="10" maxX="0.0" maxY="25"/>
|
||||
<color key="separatorColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="162" id="168"/>
|
||||
<outlet property="delegate" destination="162" id="169"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" contentMode="scaleToFill" id="126" userLabel="video">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="503"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
|
|
@ -127,7 +116,7 @@
|
|||
</accessibility>
|
||||
</view>
|
||||
<view contentMode="scaleAspectFit" id="127" userLabel="preview">
|
||||
<rect key="frame" x="254" y="354.99999934763446" width="113" height="140"/>
|
||||
<rect key="frame" x="253.99998625559141" y="355.00002002077525" width="113" height="140"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
|
|
@ -167,6 +156,18 @@
|
|||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" bounces="NO" scrollEnabled="NO" showsHorizontalScrollIndicator="NO" showsVerticalScrollIndicator="NO" style="grouped" allowsSelection="NO" rowHeight="44" sectionHeaderHeight="10" sectionFooterHeight="10" id="106" userLabel="pausedCallsTableView">
|
||||
<rect key="frame" x="0.0" y="393" width="375" height="110"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<inset key="contentInset" minX="0.0" minY="10" maxX="0.0" maxY="25"/>
|
||||
<inset key="scrollIndicatorInsets" minX="0.0" minY="10" maxX="0.0" maxY="25"/>
|
||||
<color key="separatorColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="162" id="168"/>
|
||||
<outlet property="delegate" destination="162" id="169"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<view hidden="YES" contentMode="scaleToFill" id="ukG-i4-YMY" userLabel="numpadView">
|
||||
<rect key="frame" x="0.0" y="75" width="375" height="428"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
|
|
@ -285,7 +286,7 @@
|
|||
</view>
|
||||
<view hidden="YES" tag="33" contentMode="scaleToFill" id="qcR-Qb-Bst" userLabel="routesView">
|
||||
<rect key="frame" x="188" y="305" width="94" height="198"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="bqu-n4-WSS" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="94" height="198"/>
|
||||
|
|
@ -355,7 +356,7 @@
|
|||
</view>
|
||||
<view tag="15" contentMode="scaleToFill" id="sHZ-53-Hta" userLabel="optionsView">
|
||||
<rect key="frame" x="282" y="305" width="94" height="198"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_F.png" id="WcD-wQ-0ml" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="94" height="198"/>
|
||||
|
|
@ -409,7 +410,7 @@
|
|||
</view>
|
||||
<view tag="18" contentMode="scaleToFill" id="mga-O5-mUn" userLabel="bottomBar">
|
||||
<rect key="frame" x="0.0" y="503" width="375" height="122"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" id="OIH-ek-VgL" userLabel="higherBar">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="66"/>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ static UICompositeViewDescription *compositeDescription = nil;
|
|||
}
|
||||
|
||||
- (void)update {
|
||||
[self view]; // Force view load
|
||||
// [self view]; // Force view load
|
||||
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr];
|
||||
|
|
|
|||
|
|
@ -19,11 +19,7 @@
|
|||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "UICallCell.h"
|
||||
|
||||
#include "linphone/linphonecore.h"
|
||||
|
||||
@interface PausedCallsTableView : UITableViewController {
|
||||
@interface CallPausedTableView : UITableViewController {
|
||||
@private
|
||||
NSTimer *updateTime;
|
||||
}
|
||||
86
Classes/CallPausedTableView.m
Normal file
86
Classes/CallPausedTableView.m
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
/* InCallTableViewController.h
|
||||
*
|
||||
* Copyright (C) 2012 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
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "CallPausedTableView.h"
|
||||
#import "UICallPausedCell.h"
|
||||
#import "UIConferenceHeader.h"
|
||||
#import "LinphoneManager.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation CallPausedTableView
|
||||
|
||||
#pragma mark - ViewController Functions
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
updateTime =
|
||||
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(update) userInfo:nil repeats:YES];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
if (updateTime != nil) {
|
||||
[updateTime invalidate];
|
||||
updateTime = nil;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - UI change
|
||||
|
||||
- (void)update {
|
||||
[self.tableView reloadData];
|
||||
|
||||
CGRect newOrigin = self.tableView.frame;
|
||||
newOrigin.size.height =
|
||||
[self tableView:self.tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
|
||||
newOrigin.origin.y = self.tableView.frame.origin.y + self.tableView.frame.size.height - newOrigin.size.height;
|
||||
self.tableView.frame = newOrigin;
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource Functions
|
||||
- (LinphoneCall *)pausedCallForRow:(NSInteger)row {
|
||||
const MSList *calls = linphone_core_get_calls([LinphoneManager getLc]);
|
||||
return (row < ms_list_size(calls) /* - 1*/) ? ms_list_nth_data(calls, (int)row) : NULL;
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDataSource Functions
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
NSString *kCellId = NSStringFromClass(UICallPausedCell.class);
|
||||
UICallPausedCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
|
||||
if (cell == nil) {
|
||||
cell = [[UICallPausedCell alloc] initWithIdentifier:kCellId];
|
||||
}
|
||||
cell.call = [self pausedCallForRow:indexPath.row];
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
return ms_list_size(linphone_core_get_calls([LinphoneManager getLc])) /* - 1*/;
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return 1;
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return [self tableView:tableView cellForRowAtIndexPath:indexPath].frame.size.height;
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
#import "UICamSwitch.h"
|
||||
|
||||
#import "UICompositeView.h"
|
||||
#import "PausedCallsTableView.h"
|
||||
#import "CallPausedTableView.h"
|
||||
|
||||
#import "UIMicroButton.h"
|
||||
#import "UIPauseButton.h"
|
||||
|
|
@ -43,7 +43,7 @@
|
|||
VideoZoomHandler *videoZoomHandler;
|
||||
}
|
||||
|
||||
@property(nonatomic, strong) IBOutlet PausedCallsTableView *pausedCallsTableView;
|
||||
@property(nonatomic, strong) IBOutlet CallPausedTableView *pausedCallsTableView;
|
||||
|
||||
@property(nonatomic, strong) IBOutlet UIView *videoGroup;
|
||||
@property(nonatomic, strong) IBOutlet UIView *videoView;
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
#import <OpenGLES/EAGLDrawable.h>
|
||||
|
||||
#import "CallView.h"
|
||||
#import "UICallCell.h"
|
||||
#import "LinphoneManager.h"
|
||||
#import "PhoneMainView.h"
|
||||
#import "Utils.h"
|
||||
|
|
@ -784,10 +783,8 @@ static void hideSpinner(LinphoneCall *call, void *user_data) {
|
|||
// Go to dialer view
|
||||
DialerView *view = VIEW(DialerView);
|
||||
[PhoneMainView.instance changeCurrentView:view.compositeViewDescription];
|
||||
if (view != nil) {
|
||||
[view setAddress:@""];
|
||||
[view setTransferMode:FALSE];
|
||||
}
|
||||
[view setAddress:@""];
|
||||
[view setTransferMode:FALSE];
|
||||
}
|
||||
|
||||
- (IBAction)onOptionsClick:(id)sender {
|
||||
|
|
|
|||
|
|
@ -1,465 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UICallCell">
|
||||
<connections>
|
||||
<outlet property="addressLabel" destination="17" id="28"/>
|
||||
<outlet property="audioCodecHeaderLabel" destination="85" id="113"/>
|
||||
<outlet property="audioCodecLabel" destination="84" id="114"/>
|
||||
<outlet property="audioDownloadBandwidthHeaderLabel" destination="93" id="115"/>
|
||||
<outlet property="audioDownloadBandwidthLabel" destination="94" id="116"/>
|
||||
<outlet property="audioIceConnectivityHeaderLabel" destination="98" id="117"/>
|
||||
<outlet property="audioIceConnectivityLabel" destination="97" id="118"/>
|
||||
<outlet property="audioStatsView" destination="76" id="119"/>
|
||||
<outlet property="audioUploadBandwidthHeaderLabel" destination="91" id="120"/>
|
||||
<outlet property="audioUploadBandwidthLabel" destination="90" id="121"/>
|
||||
<outlet property="avatarImage" destination="29" id="34"/>
|
||||
<outlet property="avatarView" destination="31" id="41"/>
|
||||
<outlet property="headerBackgroundHighlightImage" destination="56" id="59"/>
|
||||
<outlet property="headerBackgroundImage" destination="52" id="54"/>
|
||||
<outlet property="headerView" destination="36" id="42"/>
|
||||
<outlet property="otherView" destination="77" id="78"/>
|
||||
<outlet property="outgoingRingCountLabel" destination="v7L-WQ-vV7" id="Da8-NN-jxR"/>
|
||||
<outlet property="pauseButton" destination="47" id="48"/>
|
||||
<outlet property="removeButton" destination="49" id="50"/>
|
||||
<outlet property="stateImage" destination="18" id="33"/>
|
||||
<outlet property="stateLabel" destination="19" id="32"/>
|
||||
<outlet property="videoCodecHeaderLabel" destination="105" id="122"/>
|
||||
<outlet property="videoCodecLabel" destination="106" id="123"/>
|
||||
<outlet property="videoDownloadBandwidthHeaderLabel" destination="110" id="124"/>
|
||||
<outlet property="videoDownloadBandwidthLabel" destination="109" id="125"/>
|
||||
<outlet property="videoIceConnectivityHeaderLabel" destination="111" id="126"/>
|
||||
<outlet property="videoIceConnectivityLabel" destination="112" id="127"/>
|
||||
<outlet property="videoRecvSizeFPSHeaderLabel" destination="nNJ-4U-pl2" id="mMd-r3-eEC"/>
|
||||
<outlet property="videoRecvSizeFPSLabel" destination="RxS-YG-dqM" id="paX-s0-Cjs"/>
|
||||
<outlet property="videoSentSizeFPSHeaderLabel" destination="6PM-O1-cYd" id="I9e-1I-e8q"/>
|
||||
<outlet property="videoSentSizeFPSLabel" destination="CCZ-g0-5g1" id="uzZ-aa-lnu"/>
|
||||
<outlet property="videoStatsView" destination="99" id="128"/>
|
||||
<outlet property="videoUploadBandwidthHeaderLabel" destination="107" id="129"/>
|
||||
<outlet property="videoUploadBandwidthLabel" destination="108" id="130"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="16">
|
||||
<rect key="frame" x="0.0" y="0.0" width="360" height="537"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" id="77" userLabel="otherView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="360" height="300"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" id="31" userLabel="avatarView">
|
||||
<rect key="frame" x="0.0" y="63" width="360" height="237"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" image="avatar.png" id="29" userLabel="avatarImage" customClass="UIRoundedImageView">
|
||||
<rect key="frame" x="90" y="0.0" width="180" height="170"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact avatar">
|
||||
<accessibilityTraits key="traits" none="YES" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
</imageView>
|
||||
</subviews>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="76" userLabel="audioStatsView">
|
||||
<rect key="frame" x="0.0" y="63" width="372" height="237"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Audio" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="95" userLabel="audioLabel">
|
||||
<rect key="frame" x="17" y="21" width="337" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Audio section"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="22"/>
|
||||
<color key="textColor" red="0.35686275360000003" green="0.3960784376" blue="0.43529412150000002" alpha="1" colorSpace="deviceRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" id="83" userLabel="audioCodecView">
|
||||
<rect key="frame" x="11" y="50" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Codec:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="85" userLabel="audioCodecHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="67" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="SILK" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="84" userLabel="audioCodecLabel">
|
||||
<rect key="frame" x="77" y="0.0" width="272" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Audio codec">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="89" userLabel="audioUploadBandwidthView">
|
||||
<rect key="frame" x="11" y="80" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Upload bandwidth:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="91" userLabel="audioUploadBandwidthHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="2 KB/s" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="90" userLabel="audioUploadBandwidthLabel">
|
||||
<rect key="frame" x="189" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Audio upload bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="92" userLabel="audioDownloadBandwidthView">
|
||||
<rect key="frame" x="11" y="110" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Download bandwidth:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="93" userLabel="audioDownloadBandwidthHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="205" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="10.0 KB/s" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="94" userLabel="audioDownloadBandwidthLabel">
|
||||
<rect key="frame" x="214" y="0.0" width="135" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video upload bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="96" userLabel="audioIceConnectivityView">
|
||||
<rect key="frame" x="11" y="140" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="ICE connectivity:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="98" userLabel="audioIceConnectivityHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="not activated" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="97" userLabel="audioIceConnectivityLabel">
|
||||
<rect key="frame" x="169" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Audio ICE connectivity state">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="99" userLabel="videoStatsView">
|
||||
<rect key="frame" x="0.0" y="63" width="372" height="237"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Video" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="101" userLabel="videoLabel">
|
||||
<rect key="frame" x="17" y="21" width="337" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video section"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="22"/>
|
||||
<color key="textColor" red="0.35686275360000003" green="0.3960784376" blue="0.43529412150000002" alpha="1" colorSpace="deviceRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<view contentMode="scaleToFill" id="104" userLabel="videoCodecView">
|
||||
<rect key="frame" x="11" y="50" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Codec:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="105" userLabel="videoCodecHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="67" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="SILK" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="106" userLabel="videoCodecLabel">
|
||||
<rect key="frame" x="77" y="0.0" width="272" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video codec">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="j5j-bZ-C2L" userLabel="videoSentSizeFPSView">
|
||||
<rect key="frame" x="11" y="80" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Size sent (FPS):" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="6PM-O1-cYd" userLabel="videoSentSizeFPSHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="320x240 (15FPS)" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="CCZ-g0-5g1" userLabel="videoSentSizeFPSLabel">
|
||||
<rect key="frame" x="189" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video upload bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="6oX-23-Ivn" userLabel="videoRecvSizeFPSView">
|
||||
<rect key="frame" x="11" y="110" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Size received (FPS):" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="nNJ-4U-pl2" userLabel="videoRecvSizeFPSHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="320x240 (15FPS)" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="RxS-YG-dqM" userLabel="videoRecvSizeFPSLabel">
|
||||
<rect key="frame" x="189" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video upload bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="103" userLabel="videoUploadBandwidthView">
|
||||
<rect key="frame" x="11" y="140" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Upload bandwidth:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="107" userLabel="videoUploadBandwidthHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="2 KB/s" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="108" userLabel="videoUploadBandwidthLabel">
|
||||
<rect key="frame" x="189" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video upload bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="102" userLabel="videoDownloadBandwidthView">
|
||||
<rect key="frame" x="11" y="170" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="Download bandwidth:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="110" userLabel="videoDownloadBandwidthHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="205" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="10.0 KB/s" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="109" userLabel="videoDownloadBandwidthLabel">
|
||||
<rect key="frame" x="214" y="0.0" width="135" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Audio download bandwidth">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="100" userLabel="videoIceConnectivityView">
|
||||
<rect key="frame" x="11" y="200" width="349" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="ICE connectivity:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="111" userLabel="videoIceConnectivityHeaderLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<bool key="isElement" value="NO"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="not activated" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="112" userLabel="videoIceConnectivityLabel">
|
||||
<rect key="frame" x="169" y="0.0" width="180" height="21"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Video ICE connectivity state">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" id="36" userLabel="headerView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="360" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="cell_call_first.png" id="52" userLabel="headerBackgroundImage">
|
||||
<rect key="frame" x="0.0" y="0.0" width="360" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<imageView userInteractionEnabled="NO" alpha="0.0" contentMode="scaleToFill" id="56" userLabel="headerBackgroundHighlightImage">
|
||||
<rect key="frame" x="0.0" y="0.0" width="360" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<label autoresizesSubviews="NO" opaque="NO" userInteractionEnabled="NO" contentMode="left" text="0102030405" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="17" userLabel="addressLabel">
|
||||
<rect key="frame" x="95" y="0.0" width="165" height="51"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact name">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="30"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" id="18" userLabel="stateImage">
|
||||
<rect key="frame" x="264" y="14" width="25" height="25"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Call state">
|
||||
<accessibilityTraits key="traits" none="YES" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
</imageView>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="49" userLabel="removeButton" customClass="UIPauseButton">
|
||||
<rect key="frame" x="256" y="6" width="41" height="41"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Remove"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<inset key="contentEdgeInsets" minX="8" minY="8" maxX="8" maxY="8"/>
|
||||
<state key="normal" image="call_state_delete_default.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="highlighted" image="call_state_delete_over.png"/>
|
||||
<connections>
|
||||
<action selector="doRemoveClick:" destination="-1" eventType="touchUpInside" id="51"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" adjustsImageWhenHighlighted="NO" adjustsImageWhenDisabled="NO" lineBreakMode="middleTruncation" id="47" userLabel="pauseButton" customClass="UIPauseButton">
|
||||
<rect key="frame" x="256" y="6" width="41" height="41"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Pause"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<inset key="contentEdgeInsets" minX="8" minY="8" maxX="8" maxY="8"/>
|
||||
<state key="normal" image="call_state_play_default.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="selected" image="call_state_pause_default.png"/>
|
||||
<state key="highlighted" image="call_state_play_over.png"/>
|
||||
</button>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" text="12:34" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="19" userLabel="stateLabel">
|
||||
<rect key="frame" x="302" y="12" width="50" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Duration">
|
||||
<accessibilityTraits key="traits" none="YES"/>
|
||||
</accessibility>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<color key="textColor" red="0.43529411764705883" green="0.44313725490196076" blue="0.47450980392156861" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="38" userLabel="toggleButton">
|
||||
<rect key="frame" x="0.0" y="0.0" width="240" height="63"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Expand"/>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
|
||||
<state key="normal">
|
||||
<color key="titleColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="highlighted">
|
||||
<color key="titleColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<connections>
|
||||
<action selector="doHeaderClick:" destination="-1" eventType="touchUpInside" id="39"/>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="v7L-WQ-vV7" userLabel="outgoingRingCountLabel">
|
||||
<rect key="frame" x="293" y="26" width="40" height="29"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" flexibleMaxX="YES" flexibleMaxY="YES"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="15"/>
|
||||
<color key="textColor" red="0.43529411759999997" green="0.4431372549" blue="0.47450980390000003" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<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"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="422" y="415"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="avatar.png" width="261" height="261"/>
|
||||
<image name="call_state_delete_default.png" width="43" height="43"/>
|
||||
<image name="call_state_delete_over.png" width="43" height="43"/>
|
||||
<image name="call_state_pause_default.png" width="43" height="50"/>
|
||||
<image name="call_state_play_default.png" width="43" height="46"/>
|
||||
<image name="call_state_play_over.png" width="43" height="46"/>
|
||||
<image name="cell_call_first.png" width="640" height="125"/>
|
||||
</resources>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||
</simulatedMetricsContainer>
|
||||
</document>
|
||||
|
|
@ -1,114 +0,0 @@
|
|||
/* UICallCell.h
|
||||
*
|
||||
* Copyright (C) 2012 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 Library 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>
|
||||
|
||||
#include "linphone/linphonecore.h"
|
||||
#include "UIPauseButton.h"
|
||||
#import "UITransparentTVCell.h"
|
||||
|
||||
typedef enum _UICallCellOtherView {
|
||||
UICallCellOtherView_Avatar = 0,
|
||||
UICallCellOtherView_AudioStats,
|
||||
UICallCellOtherView_VideoStats,
|
||||
UICallCellOtherView_MAX
|
||||
} UICallCellOtherView;
|
||||
|
||||
@interface UICallCellData : NSObject {
|
||||
@public
|
||||
UICallCellOtherView view;
|
||||
LinphoneCall *call;
|
||||
}
|
||||
|
||||
- (id)init:(LinphoneCall *)call;
|
||||
|
||||
@property (nonatomic, strong) UIImage *image;
|
||||
@property (nonatomic, strong) NSString *address;
|
||||
|
||||
@end
|
||||
|
||||
@interface UICallCell : UITransparentTVCell {
|
||||
}
|
||||
|
||||
@property (nonatomic, strong) UICallCellData *data;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UIImageView* headerBackgroundImage;
|
||||
@property (nonatomic, strong) IBOutlet UIImageView* headerBackgroundHighlightImage;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UILabel* addressLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* stateLabel;
|
||||
@property (nonatomic, strong) IBOutlet UIImageView* stateImage;
|
||||
@property (nonatomic, strong) IBOutlet UIImageView* avatarImage;
|
||||
@property (nonatomic, strong) IBOutlet UIButton *removeButton;
|
||||
@property (nonatomic, strong) IBOutlet UIPauseButton *pauseButton;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UIView* headerView;
|
||||
@property (nonatomic, strong) IBOutlet UIView* avatarView;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UIView* audioStatsView;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioCodecLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioCodecHeaderLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioUploadBandwidthLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioUploadBandwidthHeaderLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioDownloadBandwidthLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioDownloadBandwidthHeaderLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioIceConnectivityLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* audioIceConnectivityHeaderLabel;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UIView* videoStatsView;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoCodecLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoCodecHeaderLabel;
|
||||
|
||||
@property(strong, nonatomic) IBOutlet UILabel *videoSentSizeFPSHeaderLabel;
|
||||
@property(strong, nonatomic) IBOutlet UILabel *videoSentSizeFPSLabel;
|
||||
@property(strong, nonatomic) IBOutlet UILabel *videoRecvSizeFPSHeaderLabel;
|
||||
@property(strong, nonatomic) IBOutlet UILabel *videoRecvSizeFPSLabel;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoUploadBandwidthLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoUploadBandwidthHeaderLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoDownloadBandwidthLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoDownloadBandwidthHeaderLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoIceConnectivityLabel;
|
||||
@property (nonatomic, strong) IBOutlet UILabel* videoIceConnectivityHeaderLabel;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UIView* otherView;
|
||||
|
||||
@property (nonatomic, strong) IBOutlet UISwipeGestureRecognizer *detailsLeftSwipeGestureRecognizer;
|
||||
@property (nonatomic, strong) IBOutlet UISwipeGestureRecognizer *detailsRightSwipeGestureRecognizer;
|
||||
|
||||
@property (assign) BOOL firstCell;
|
||||
@property (assign) BOOL conferenceCell;
|
||||
@property (nonatomic, assign) BOOL currentCall;
|
||||
@property (strong, nonatomic) IBOutlet UILabel *outgoingRingCountLabel;
|
||||
@property (strong) NSTimer *outgoingRingCountTimer;
|
||||
|
||||
|
||||
- (void)update;
|
||||
|
||||
- (id)initWithIdentifier:(NSString*)identifier;
|
||||
|
||||
- (IBAction)doHeaderClick:(id)sender;
|
||||
- (IBAction)doRemoveClick:(id)sender;
|
||||
- (IBAction)doDetailsSwipe:(UISwipeGestureRecognizer *)sender;
|
||||
|
||||
+ (int)getMaximizedHeight;
|
||||
|
||||
@end
|
||||
|
|
@ -1,518 +0,0 @@
|
|||
/* UICallCell.m
|
||||
*
|
||||
* Copyright (C) 2012 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 Library 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 <QuartzCore/QuartzCore.h>
|
||||
|
||||
#import "UICallCell.h"
|
||||
#import "LinphoneManager.h"
|
||||
#import "FastAddressBook.h"
|
||||
#import "Utils.h"
|
||||
#import "PhoneMainView.h"
|
||||
#import "PausedCallsTableView.h"
|
||||
|
||||
@implementation UICallCellData
|
||||
|
||||
@synthesize address;
|
||||
@synthesize image;
|
||||
|
||||
- (id)init:(LinphoneCall *)acall {
|
||||
self = [super init];
|
||||
if (self != nil) {
|
||||
view = UICallCellOtherView_Avatar;
|
||||
call = acall;
|
||||
image = [UIImage imageNamed:@"avatar_unknown.png"];
|
||||
address = NSLocalizedString(@"Unknown", nil);
|
||||
[self update];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)update {
|
||||
if (call == NULL) {
|
||||
LOGW(@"Cannot update call cell: null call or data");
|
||||
return;
|
||||
}
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
address = [FastAddressBook displayNameForAddress:addr];
|
||||
|
||||
ABRecordRef contact = [FastAddressBook getContactWithLinphoneAddress:addr];
|
||||
UIImage *tmpImage = [FastAddressBook getContactImage:contact thumbnail:false];
|
||||
if (tmpImage != nil) {
|
||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, (unsigned long)NULL), ^(void) {
|
||||
UIImage *tmpImage2 = [UIImage decodedImageWithImage:tmpImage];
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self setImage:tmpImage2];
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation UICallCell
|
||||
|
||||
@synthesize data;
|
||||
|
||||
@synthesize headerBackgroundImage;
|
||||
@synthesize headerBackgroundHighlightImage;
|
||||
|
||||
@synthesize addressLabel;
|
||||
@synthesize stateLabel;
|
||||
@synthesize stateImage;
|
||||
@synthesize avatarImage;
|
||||
@synthesize pauseButton;
|
||||
@synthesize removeButton;
|
||||
|
||||
@synthesize headerView;
|
||||
@synthesize avatarView;
|
||||
|
||||
@synthesize audioStatsView;
|
||||
|
||||
@synthesize audioCodecLabel;
|
||||
@synthesize audioCodecHeaderLabel;
|
||||
@synthesize audioUploadBandwidthLabel;
|
||||
@synthesize audioUploadBandwidthHeaderLabel;
|
||||
@synthesize audioDownloadBandwidthLabel;
|
||||
@synthesize audioDownloadBandwidthHeaderLabel;
|
||||
@synthesize audioIceConnectivityLabel;
|
||||
@synthesize audioIceConnectivityHeaderLabel;
|
||||
|
||||
@synthesize videoStatsView;
|
||||
|
||||
@synthesize videoCodecLabel, videoCodecHeaderLabel;
|
||||
@synthesize videoUploadBandwidthLabel, videoUploadBandwidthHeaderLabel;
|
||||
@synthesize videoDownloadBandwidthLabel, videoDownloadBandwidthHeaderLabel;
|
||||
@synthesize videoIceConnectivityLabel, videoIceConnectivityHeaderLabel;
|
||||
|
||||
@synthesize videoRecvSizeFPSHeaderLabel, videoRecvSizeFPSLabel;
|
||||
@synthesize videoSentSizeFPSHeaderLabel, videoSentSizeFPSLabel;
|
||||
|
||||
@synthesize otherView;
|
||||
|
||||
@synthesize firstCell;
|
||||
@synthesize conferenceCell;
|
||||
@synthesize currentCall;
|
||||
@synthesize detailsLeftSwipeGestureRecognizer;
|
||||
@synthesize detailsRightSwipeGestureRecognizer;
|
||||
|
||||
#pragma mark - Lifecycle Functions
|
||||
|
||||
- (id)initWithIdentifier:(NSString *)identifier {
|
||||
if ((self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]) != nil) {
|
||||
NSArray *arrayOfViews =
|
||||
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil];
|
||||
|
||||
if ([arrayOfViews count] >= 1) {
|
||||
// resize cell to match .nib size. It is needed when resized the cell to
|
||||
// correctly adapt its height too
|
||||
UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]);
|
||||
[self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)];
|
||||
[self addSubview:sub];
|
||||
}
|
||||
|
||||
currentCall = FALSE;
|
||||
|
||||
_outgoingRingCountLabel.hidden = YES;
|
||||
_outgoingRingCountLabel.text = @"0";
|
||||
|
||||
detailsRightSwipeGestureRecognizer =
|
||||
[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doDetailsSwipe:)];
|
||||
[detailsRightSwipeGestureRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
|
||||
[otherView addGestureRecognizer:detailsRightSwipeGestureRecognizer];
|
||||
|
||||
detailsRightSwipeGestureRecognizer =
|
||||
[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(doDetailsSwipe:)];
|
||||
[detailsRightSwipeGestureRecognizer setDirection:UISwipeGestureRecognizerDirectionRight];
|
||||
[otherView addGestureRecognizer:detailsRightSwipeGestureRecognizer];
|
||||
|
||||
[avatarView setHidden:TRUE];
|
||||
[audioStatsView setHidden:TRUE];
|
||||
[videoStatsView setHidden:TRUE];
|
||||
|
||||
[UICallCell adaptSize:audioCodecHeaderLabel field:audioCodecLabel];
|
||||
[UICallCell adaptSize:audioDownloadBandwidthHeaderLabel field:audioDownloadBandwidthLabel];
|
||||
[UICallCell adaptSize:audioUploadBandwidthHeaderLabel field:audioUploadBandwidthLabel];
|
||||
[UICallCell adaptSize:audioIceConnectivityHeaderLabel field:audioIceConnectivityLabel];
|
||||
|
||||
[UICallCell adaptSize:videoCodecHeaderLabel field:videoCodecLabel];
|
||||
[UICallCell adaptSize:videoDownloadBandwidthHeaderLabel field:videoDownloadBandwidthLabel];
|
||||
[UICallCell adaptSize:videoUploadBandwidthHeaderLabel field:videoUploadBandwidthLabel];
|
||||
[UICallCell adaptSize:videoIceConnectivityHeaderLabel field:videoIceConnectivityLabel];
|
||||
|
||||
if (LinphoneManager.runningOnIpad) {
|
||||
[LinphoneUtils adjustFontSize:self.audioStatsView mult:2.22];
|
||||
[LinphoneUtils adjustFontSize:self.videoStatsView mult:2.22];
|
||||
}
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(applicationWillEnterForeground:)
|
||||
name:UIApplicationWillEnterForegroundNotification
|
||||
object:nil];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)dealloc {
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self
|
||||
name:UIApplicationWillEnterForegroundNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
#pragma mark - Properties Functions
|
||||
|
||||
- (void)setData:(UICallCellData *)adata {
|
||||
if (adata == data) {
|
||||
return;
|
||||
}
|
||||
if (data != nil) {
|
||||
data = nil;
|
||||
}
|
||||
if (adata != nil) {
|
||||
data = adata;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setCurrentCall:(BOOL)val {
|
||||
currentCall = val;
|
||||
if (currentCall && ![self isBlinkAnimationRunning:@"blink" target:headerBackgroundHighlightImage]) {
|
||||
[self startBlinkAnimation:@"blink" target:headerBackgroundHighlightImage];
|
||||
}
|
||||
if (!currentCall) {
|
||||
[self stopBlinkAnimation:@"blink" target:headerBackgroundHighlightImage];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Static Functions
|
||||
|
||||
+ (int)getMaximizedHeight {
|
||||
return LinphoneManager.runningOnIpad ? 126 : 63;
|
||||
}
|
||||
|
||||
+ (void)adaptSize:(UILabel *)label field:(UIView *)field {
|
||||
//
|
||||
// Adapt size
|
||||
//
|
||||
CGRect labelFrame = [label frame];
|
||||
CGRect fieldFrame = [field frame];
|
||||
|
||||
fieldFrame.origin.x -= labelFrame.size.width;
|
||||
|
||||
// Compute firstName size
|
||||
CGSize contraints;
|
||||
contraints.height = [label frame].size.height;
|
||||
contraints.width = ([field frame].size.width + [field frame].origin.x) - [label frame].origin.x;
|
||||
CGSize firstNameSize = [[label text] sizeWithFont:[label font] constrainedToSize:contraints];
|
||||
labelFrame.size.width = firstNameSize.width;
|
||||
|
||||
// Compute lastName size & position
|
||||
fieldFrame.origin.x += labelFrame.size.width;
|
||||
fieldFrame.size.width = (contraints.width + [label frame].origin.x) - fieldFrame.origin.x;
|
||||
|
||||
[label setFrame:labelFrame];
|
||||
[field setFrame:fieldFrame];
|
||||
}
|
||||
|
||||
+ (NSString *)iceToString:(LinphoneIceState)state {
|
||||
switch (state) {
|
||||
case LinphoneIceStateNotActivated:
|
||||
return NSLocalizedString(@"Not activated", @"ICE has not been activated for this call");
|
||||
break;
|
||||
case LinphoneIceStateFailed:
|
||||
return NSLocalizedString(@"Failed", @"ICE processing has failed");
|
||||
break;
|
||||
case LinphoneIceStateInProgress:
|
||||
return NSLocalizedString(@"In progress", @"ICE process is in progress");
|
||||
break;
|
||||
case LinphoneIceStateHostConnection:
|
||||
return NSLocalizedString(@"Direct connection", @"ICE has established a direct connection to the remote host");
|
||||
break;
|
||||
case LinphoneIceStateReflexiveConnection:
|
||||
return NSLocalizedString(@"NAT(s) connection",
|
||||
@"ICE has established a connection to the remote host through one or several NATs");
|
||||
break;
|
||||
case LinphoneIceStateRelayConnection:
|
||||
return NSLocalizedString(@"Relay connection", @"ICE has established a connection through a relay");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Event Functions
|
||||
|
||||
- (void)applicationWillEnterForeground:(NSNotification *)notif {
|
||||
if (currentCall) {
|
||||
[self startBlinkAnimation:@"blink" target:headerBackgroundHighlightImage];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Animation Functions
|
||||
|
||||
- (void)startBlinkAnimation:(NSString *)animationID target:(UIView *)target {
|
||||
if ([[LinphoneManager instance] lpConfigBoolForKey:@"animations_preference"]) {
|
||||
CABasicAnimation *blink = [CABasicAnimation animationWithKeyPath:@"opacity"];
|
||||
blink.duration = 1.0;
|
||||
blink.fromValue = [NSNumber numberWithDouble:0.0f];
|
||||
blink.toValue = [NSNumber numberWithDouble:1.0f];
|
||||
blink.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
|
||||
blink.autoreverses = TRUE;
|
||||
blink.repeatCount = HUGE_VALF;
|
||||
[target.layer addAnimation:blink forKey:animationID];
|
||||
} else {
|
||||
[target setAlpha:1.0f];
|
||||
}
|
||||
}
|
||||
|
||||
- (BOOL)isBlinkAnimationRunning:(NSString *)animationID target:(UIView *)target {
|
||||
return [target.layer animationForKey:animationID] != nil;
|
||||
}
|
||||
|
||||
- (void)stopBlinkAnimation:(NSString *)animationID target:(UIView *)target {
|
||||
if ([self isBlinkAnimationRunning:animationID target:target]) {
|
||||
[target.layer removeAnimationForKey:animationID];
|
||||
}
|
||||
[target setAlpha:0.0f];
|
||||
}
|
||||
|
||||
- (void)displayIncrementedOutgoingRingCount {
|
||||
_outgoingRingCountLabel.hidden = NO;
|
||||
[UIView transitionWithView:_outgoingRingCountLabel
|
||||
duration:0.5f
|
||||
options:UIViewAnimationOptionTransitionCrossDissolve
|
||||
animations:^{
|
||||
_outgoingRingCountLabel.text = [@(_outgoingRingCountLabel.text.intValue + 1) stringValue];
|
||||
}
|
||||
completion:nil];
|
||||
}
|
||||
|
||||
- (void)stopOutgoingRingCount {
|
||||
if (_outgoingRingCountTimer != nil)
|
||||
[_outgoingRingCountTimer invalidate];
|
||||
_outgoingRingCountLabel.hidden = YES;
|
||||
_outgoingRingCountLabel.text = @"0";
|
||||
_outgoingRingCountTimer = nil;
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)update {
|
||||
if (data == nil || data->call == NULL) {
|
||||
LOGW(@"Cannot update call cell: null call or data");
|
||||
return;
|
||||
}
|
||||
LinphoneCall *call = data->call;
|
||||
|
||||
[pauseButton setType:UIPauseButtonType_Call call:call];
|
||||
|
||||
[addressLabel setText:data.address];
|
||||
[avatarImage setImage:data.image];
|
||||
|
||||
LinphoneCallState state = linphone_call_get_state(call);
|
||||
if (!conferenceCell) {
|
||||
if (state == LinphoneCallOutgoingRinging) {
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_ringing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
if (_outgoingRingCountTimer == nil) {
|
||||
_outgoingRingCountTimer =
|
||||
[NSTimer scheduledTimerWithTimeInterval:2.0f
|
||||
target:self
|
||||
selector:@selector(displayIncrementedOutgoingRingCount)
|
||||
userInfo:nil
|
||||
repeats:YES];
|
||||
[_outgoingRingCountTimer fire];
|
||||
}
|
||||
} else if (state == LinphoneCallOutgoingInit || state == LinphoneCallOutgoingProgress) {
|
||||
[stateImage setImage:[UIImage imageNamed:@"call_state_outgoing_default.png"]];
|
||||
[stateImage setHidden:false];
|
||||
[pauseButton setHidden:true];
|
||||
[self stopOutgoingRingCount];
|
||||
} else {
|
||||
[stateImage setHidden:true];
|
||||
[pauseButton setHidden:false];
|
||||
[pauseButton update];
|
||||
[self stopOutgoingRingCount];
|
||||
}
|
||||
[removeButton setHidden:true];
|
||||
if (firstCell) {
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call_first.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_first_highlight.png"]];
|
||||
} else {
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_call.png"]];
|
||||
[headerBackgroundHighlightImage setImage:[UIImage imageNamed:@"cell_call_highlight.png"]];
|
||||
}
|
||||
} else {
|
||||
[stateImage setHidden:true];
|
||||
[pauseButton setHidden:true];
|
||||
[removeButton setHidden:false];
|
||||
[headerBackgroundImage setImage:[UIImage imageNamed:@"cell_conference.png"]];
|
||||
}
|
||||
|
||||
int duration = linphone_call_get_duration(call);
|
||||
[stateLabel setText:[NSString stringWithFormat:@"%02i:%02i", (duration / 60), (duration % 60), nil]];
|
||||
|
||||
CGRect frame = [self frame];
|
||||
frame.size.height = [UICallCell getMaximizedHeight];
|
||||
[self setFrame:frame];
|
||||
frame = otherView.frame;
|
||||
frame.size.height = [UICallCell getMaximizedHeight];
|
||||
[otherView setHidden:false];
|
||||
otherView.frame = frame;
|
||||
|
||||
[self updateStats];
|
||||
|
||||
[self updateDetailsView];
|
||||
}
|
||||
|
||||
- (void)updateStats {
|
||||
if (data == nil || data->call == NULL) {
|
||||
LOGW(@"Cannot update call cell: null call or data");
|
||||
return;
|
||||
}
|
||||
LinphoneCall *call = data->call;
|
||||
|
||||
const LinphoneCallParams *params = linphone_call_get_current_params(call);
|
||||
{
|
||||
const PayloadType *payload = linphone_call_params_get_used_audio_codec(params);
|
||||
if (payload != NULL) {
|
||||
[audioCodecLabel setText:[NSString stringWithFormat:@"%s/%i/%i", payload->mime_type, payload->clock_rate,
|
||||
payload->channels]];
|
||||
} else {
|
||||
[audioCodecLabel setText:NSLocalizedString(@"No codec", nil)];
|
||||
}
|
||||
const LinphoneCallStats *stats = linphone_call_get_audio_stats(call);
|
||||
if (stats != NULL) {
|
||||
[audioUploadBandwidthLabel setText:[NSString stringWithFormat:@"%1.1f kbits/s", stats->upload_bandwidth]];
|
||||
[audioDownloadBandwidthLabel
|
||||
setText:[NSString stringWithFormat:@"%1.1f kbits/s", stats->download_bandwidth]];
|
||||
[audioIceConnectivityLabel setText:[UICallCell iceToString:stats->ice_state]];
|
||||
} else {
|
||||
[audioUploadBandwidthLabel setText:@""];
|
||||
[audioDownloadBandwidthLabel setText:@""];
|
||||
[audioIceConnectivityLabel setText:@""];
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
const PayloadType *payload = linphone_call_params_get_used_video_codec(params);
|
||||
if (payload != NULL) {
|
||||
[videoCodecLabel setText:[NSString stringWithFormat:@"%s/%i", payload->mime_type, payload->clock_rate]];
|
||||
} else {
|
||||
[videoCodecLabel setText:NSLocalizedString(@"No codec", nil)];
|
||||
}
|
||||
|
||||
const LinphoneCallStats *stats = linphone_call_get_video_stats(call);
|
||||
|
||||
if (stats != NULL && linphone_call_params_video_enabled(params)) {
|
||||
MSVideoSize sentSize = linphone_call_params_get_sent_video_size(params);
|
||||
MSVideoSize recvSize = linphone_call_params_get_received_video_size(params);
|
||||
float sentFPS = linphone_call_params_get_sent_framerate(params);
|
||||
float recvFPS = linphone_call_params_get_received_framerate(params);
|
||||
|
||||
[videoUploadBandwidthLabel setText:[NSString stringWithFormat:@"%1.1f kbits/s", stats->upload_bandwidth]];
|
||||
[videoDownloadBandwidthLabel
|
||||
setText:[NSString stringWithFormat:@"%1.1f kbits/s", stats->download_bandwidth]];
|
||||
[videoIceConnectivityLabel setText:[UICallCell iceToString:stats->ice_state]];
|
||||
[videoSentSizeFPSLabel
|
||||
setText:[NSString stringWithFormat:@"%dx%d (%.1fFPS)", sentSize.width, sentSize.height, sentFPS]];
|
||||
[videoRecvSizeFPSLabel
|
||||
setText:[NSString stringWithFormat:@"%dx%d (%.1fFPS)", recvSize.width, recvSize.height, recvFPS]];
|
||||
} else {
|
||||
[videoUploadBandwidthLabel setText:@""];
|
||||
[videoDownloadBandwidthLabel setText:@""];
|
||||
[videoIceConnectivityLabel setText:@""];
|
||||
[videoSentSizeFPSLabel setText:@"0x0"];
|
||||
[videoRecvSizeFPSLabel setText:@"0x0"];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)updateDetailsView {
|
||||
if (data == nil || data->call == NULL) {
|
||||
LOGW(@"Cannot update call cell: null call or data");
|
||||
return;
|
||||
}
|
||||
if (data->view == UICallCellOtherView_Avatar && avatarView.isHidden) {
|
||||
[avatarView setHidden:FALSE];
|
||||
[audioStatsView setHidden:TRUE];
|
||||
[videoStatsView setHidden:TRUE];
|
||||
} else if (data->view == UICallCellOtherView_AudioStats && audioStatsView.isHidden) {
|
||||
[avatarView setHidden:TRUE];
|
||||
[audioStatsView setHidden:FALSE];
|
||||
[videoStatsView setHidden:TRUE];
|
||||
} else if (data->view == UICallCellOtherView_VideoStats && videoStatsView.isHidden) {
|
||||
[avatarView setHidden:TRUE];
|
||||
[audioStatsView setHidden:TRUE];
|
||||
[videoStatsView setHidden:FALSE];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)selfUpdate {
|
||||
UITableView *tableView = VIEW(CallView).pausedCallsTableView.tableView;
|
||||
NSIndexPath *index = [tableView indexPathForCell:self];
|
||||
[tableView reloadRowsAtIndexPaths:@[ index ] withRowAnimation:false];
|
||||
}
|
||||
|
||||
#pragma mark - Action Functions
|
||||
|
||||
- (IBAction)doHeaderClick:(id)sender {
|
||||
if (data) {
|
||||
[self selfUpdate];
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)doRemoveClick:(id)sender {
|
||||
if (data != nil && data->call != NULL) {
|
||||
linphone_core_remove_from_conference([LinphoneManager getLc], data->call);
|
||||
}
|
||||
}
|
||||
|
||||
- (IBAction)doDetailsSwipe:(UISwipeGestureRecognizer *)sender {
|
||||
CATransition *trans = nil;
|
||||
if (data != nil) {
|
||||
if (sender.direction == UISwipeGestureRecognizerDirectionLeft) {
|
||||
if (data->view == UICallCellOtherView_MAX - 1) {
|
||||
data->view = 0;
|
||||
} else {
|
||||
++data->view;
|
||||
}
|
||||
trans = [CATransition animation];
|
||||
[trans setType:kCATransitionPush];
|
||||
[trans setDuration:0.35];
|
||||
[trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
|
||||
[trans setSubtype:kCATransitionFromRight];
|
||||
} else if (sender.direction == UISwipeGestureRecognizerDirectionRight) {
|
||||
if (data->view == 0) {
|
||||
data->view = UICallCellOtherView_MAX - 1;
|
||||
} else {
|
||||
--data->view;
|
||||
}
|
||||
trans = [CATransition animation];
|
||||
[trans setType:kCATransitionPush];
|
||||
[trans setDuration:0.35];
|
||||
[trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
|
||||
[trans setSubtype:kCATransitionFromLeft];
|
||||
}
|
||||
if (trans) {
|
||||
[otherView.layer removeAnimationForKey:@"transition"];
|
||||
[otherView.layer addAnimation:trans forKey:@"transition"];
|
||||
[self updateDetailsView];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
23
Classes/LinphoneUI/UICallPausedCell.h
Normal file
23
Classes/LinphoneUI/UICallPausedCell.h
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
//
|
||||
// UIPausedCallCell.h
|
||||
// linphone
|
||||
//
|
||||
// Created by Gautier Pelloux-Prayer on 11/09/15.
|
||||
//
|
||||
//
|
||||
|
||||
#import "UITransparentTVCell.h"
|
||||
|
||||
#import "UIRoundedImageView.h"
|
||||
#import "LinphoneManager.h"
|
||||
|
||||
@interface UICallPausedCell : UITransparentTVCell
|
||||
|
||||
@property(weak, nonatomic) IBOutlet UIRoundedImageView *avatarImage;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *nameLabel;
|
||||
@property(weak, nonatomic) IBOutlet UILabel *durationLabel;
|
||||
|
||||
- (id)initWithIdentifier:(NSString *)identifier;
|
||||
- (void)setCall:(LinphoneCall *)call;
|
||||
|
||||
@end
|
||||
45
Classes/LinphoneUI/UICallPausedCell.m
Normal file
45
Classes/LinphoneUI/UICallPausedCell.m
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
//
|
||||
// UIPausedCallCell.m
|
||||
// linphone
|
||||
//
|
||||
// Created by Gautier Pelloux-Prayer on 11/09/15.
|
||||
//
|
||||
//
|
||||
|
||||
#import "UICallPausedCell.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation UICallPausedCell
|
||||
|
||||
- (id)initWithIdentifier:(NSString *)identifier {
|
||||
self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
|
||||
if (self != nil) {
|
||||
NSArray *arrayOfViews =
|
||||
[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self.class) owner:self options:nil];
|
||||
if ([arrayOfViews count] >= 1) {
|
||||
// resize cell to match .nib size. It is needed when resized the cell to
|
||||
// correctly adapt its height too
|
||||
UIView *sub = ((UIView *)[arrayOfViews objectAtIndex:0]);
|
||||
[self setFrame:CGRectMake(0, 0, sub.frame.size.width, sub.frame.size.height)];
|
||||
[self addSubview:sub];
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void)setCall:(LinphoneCall *)call {
|
||||
if (!call) {
|
||||
LOGW(@"Cannot update call cell: null call or data");
|
||||
return;
|
||||
}
|
||||
|
||||
const LinphoneAddress *addr = linphone_call_get_remote_address(call);
|
||||
[ContactDisplay setDisplayNameLabel:_nameLabel forAddress:addr];
|
||||
_avatarImage.image =
|
||||
[FastAddressBook getContactImage:[FastAddressBook getContactWithLinphoneAddress:addr] thumbnail:NO];
|
||||
|
||||
int duration = linphone_call_get_duration(call);
|
||||
[_durationLabel setText:[NSString stringWithFormat:@"%02i:%02i", (duration / 60), (duration % 60), nil]];
|
||||
}
|
||||
|
||||
@end
|
||||
98
Classes/LinphoneUI/UICallPausedCell.xib
Normal file
98
Classes/LinphoneUI/UICallPausedCell.xib
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none">
|
||||
<dependencies>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7703"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="UICallPausedCell">
|
||||
<connections>
|
||||
<outlet property="avatarImage" destination="NBJ-w0-Uvw" id="lGx-U6-4tn"/>
|
||||
<outlet property="durationLabel" destination="tZi-KI-viq" id="TLb-yi-TBY"/>
|
||||
<outlet property="nameLabel" destination="g3t-eS-m7B" id="dKD-7X-u2j"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
<view contentMode="scaleToFill" id="Egc-Di-26M">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" alpha="0.5" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="color_A.png" id="S7U-QZ-e0e" userLabel="backgroundColor">
|
||||
<rect key="frame" x="0.0" y="0.0" width="375" height="50"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinX="YES" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
</imageView>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" image="avatar.png" id="NBJ-w0-Uvw" userLabel="avatarImage" customClass="UIRoundedImageView">
|
||||
<rect key="frame" x="8" y="3" width="45" height="45"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact avatar">
|
||||
<accessibilityTraits key="traits" none="YES" image="YES" notEnabled="YES"/>
|
||||
<bool key="isElement" value="YES"/>
|
||||
</accessibility>
|
||||
</imageView>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="g3t-eS-m7B" userLabel="nameLabel">
|
||||
<rect key="frame" x="61" y="6" width="176" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact name"/>
|
||||
<attributedString key="attributedText">
|
||||
<fragment content="John ">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<font key="NSFont" size="16" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="truncatingTail" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
<fragment content="Doe">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<font key="NSFont" size="16" name="HelveticaNeue-Bold"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="truncatingTail" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" tag="24" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="Izu-Zj-sHi" userLabel="pauseButton" customClass="UIPauseButton">
|
||||
<rect key="frame" x="322" y="3" width="45" height="45"/>
|
||||
<autoresizingMask key="autoresizingMask" flexibleMinY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Pause"/>
|
||||
<state key="normal" image="pause_big_default.png">
|
||||
<color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/>
|
||||
</state>
|
||||
<state key="disabled" image="pause_big_disabled.png"/>
|
||||
<state key="selected" image="pause_big_over_selected.png"/>
|
||||
<state key="highlighted" image="pause_big_over_selected.png"/>
|
||||
</button>
|
||||
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" usesAttributedText="YES" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="10" id="tZi-KI-viq" userLabel="durationLabel">
|
||||
<rect key="frame" x="245" y="7" width="69" height="37"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" flexibleMaxX="YES" flexibleMinY="YES" heightSizable="YES" flexibleMaxY="YES"/>
|
||||
<accessibility key="accessibilityConfiguration" label="Contact name"/>
|
||||
<attributedString key="attributedText">
|
||||
<fragment content="00:02:15">
|
||||
<attributes>
|
||||
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<font key="NSFont" size="16" name="HelveticaNeue"/>
|
||||
<paragraphStyle key="NSParagraphStyle" alignment="right" lineBreakMode="truncatingTail" baseWritingDirection="natural"/>
|
||||
</attributes>
|
||||
</fragment>
|
||||
</attributedString>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
|
||||
<nil key="simulatedStatusBarMetrics"/>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="338.5" y="43"/>
|
||||
</view>
|
||||
</objects>
|
||||
<resources>
|
||||
<image name="avatar.png" width="261" height="261"/>
|
||||
<image name="color_A.png" width="1" height="1"/>
|
||||
<image name="pause_big_default.png" width="52" height="52"/>
|
||||
<image name="pause_big_disabled.png" width="52" height="52"/>
|
||||
<image name="pause_big_over_selected.png" width="52" height="52"/>
|
||||
</resources>
|
||||
<simulatedMetricsContainer key="defaultSimulatedMetrics">
|
||||
<simulatedStatusBarMetrics key="statusBar"/>
|
||||
<simulatedOrientationMetrics key="orientation"/>
|
||||
<simulatedScreenMetrics key="destination" type="retina4"/>
|
||||
</simulatedMetricsContainer>
|
||||
</document>
|
||||
|
|
@ -110,6 +110,8 @@
|
|||
LinphoneChatMessageState state = linphone_chat_message_get_state(message);
|
||||
BOOL outgoing = linphone_chat_message_is_outgoing(message);
|
||||
|
||||
_backgroundColor.image = _bottomBarColor.image = [UIImage imageNamed:outgoing ? @"color_A" : @"color_F"];
|
||||
|
||||
if (!outgoing) {
|
||||
_statusImage.accessibilityValue = @"incoming";
|
||||
_statusImage.hidden = TRUE; // not useful for incoming chats..
|
||||
|
|
@ -159,11 +161,11 @@
|
|||
- (void)layoutSubviews {
|
||||
[super layoutSubviews];
|
||||
if (message != nil) {
|
||||
// BOOL is_outgoing = linphone_chat_message_is_outgoing(message);
|
||||
BOOL is_outgoing = linphone_chat_message_is_outgoing(message);
|
||||
CGRect newFrame;
|
||||
newFrame.size = [ChatConversationTableView viewSize:message width:self.frame.size.width];
|
||||
newFrame.origin.y = 0.0f;
|
||||
// newFrame.origin.x = is_outgoing ? self.contentView.frame.size.width - newFrame.size.width : 0;
|
||||
newFrame.origin.x = is_outgoing ? self.contentView.frame.size.width - newFrame.size.width : 0;
|
||||
self.contentView.frame = self.frame = newFrame;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -1,252 +0,0 @@
|
|||
/* InCallTableViewController.h
|
||||
*
|
||||
* Copyright (C) 2012 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
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#import "PausedCallsTableView.h"
|
||||
#import "UICallCell.h"
|
||||
#import "UIConferenceHeader.h"
|
||||
#import "LinphoneManager.h"
|
||||
#import "Utils.h"
|
||||
|
||||
@implementation PausedCallsTableView
|
||||
|
||||
static NSString *const kLinphoneInCallCellData = @"LinphoneInCallCellData";
|
||||
|
||||
enum TableSection { ConferenceSection = 0, CallSection = 1 };
|
||||
|
||||
#pragma mark - ViewController Functions
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated {
|
||||
[super viewWillAppear:animated];
|
||||
updateTime =
|
||||
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(update) userInfo:nil repeats:YES];
|
||||
}
|
||||
|
||||
- (void)viewWillDisappear:(BOOL)animated {
|
||||
[super viewWillDisappear:animated];
|
||||
if (updateTime != nil) {
|
||||
[updateTime invalidate];
|
||||
updateTime = nil;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Static Functions
|
||||
|
||||
+ (bool)isInConference:(LinphoneCall *)call {
|
||||
if (!call)
|
||||
return false;
|
||||
return linphone_call_is_in_conference(call);
|
||||
}
|
||||
|
||||
+ (int)callCount:(LinphoneCore *)lc {
|
||||
int count = 0;
|
||||
const MSList *calls = linphone_core_get_calls(lc);
|
||||
|
||||
while (calls != 0) {
|
||||
if (![PausedCallsTableView isInConference:((LinphoneCall *)calls->data)]) {
|
||||
count++;
|
||||
}
|
||||
calls = calls->next;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
+ (LinphoneCall *)retrieveCallAtIndex:(NSInteger)index inConference:(bool)conf {
|
||||
const MSList *calls = linphone_core_get_calls([LinphoneManager getLc]);
|
||||
|
||||
while (calls != 0) {
|
||||
if ([PausedCallsTableView isInConference:(LinphoneCall *)calls->data] == conf) {
|
||||
if (index == 0)
|
||||
break;
|
||||
index--;
|
||||
}
|
||||
calls = calls->next;
|
||||
}
|
||||
|
||||
if (calls == 0) {
|
||||
LOGE(@"Cannot find call with index %d (in conf: %d)", index, conf);
|
||||
return nil;
|
||||
} else {
|
||||
return (LinphoneCall *)calls->data;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark -
|
||||
|
||||
- (void)removeCallData:(LinphoneCall *)call {
|
||||
// Remove data associated with the call
|
||||
if (call != NULL) {
|
||||
LinphoneCallAppData *appData = (__bridge LinphoneCallAppData *)linphone_call_get_user_pointer(call);
|
||||
if (appData != NULL) {
|
||||
[appData->userInfos removeObjectForKey:kLinphoneInCallCellData];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (UICallCellData *)addCallData:(LinphoneCall *)call {
|
||||
// Handle data associated with the call
|
||||
UICallCellData *data = nil;
|
||||
if (call != NULL) {
|
||||
LinphoneCallAppData *appData = (__bridge LinphoneCallAppData *)linphone_call_get_user_pointer(call);
|
||||
if (appData != NULL) {
|
||||
data = [appData->userInfos objectForKey:kLinphoneInCallCellData];
|
||||
if (data == nil) {
|
||||
data = [[UICallCellData alloc] init:call];
|
||||
[appData->userInfos setObject:data forKey:kLinphoneInCallCellData];
|
||||
}
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
- (UICallCellData *)getCallData:(LinphoneCall *)call {
|
||||
// Handle data associated with the call
|
||||
UICallCellData *data = nil;
|
||||
if (call != NULL) {
|
||||
LinphoneCallAppData *appData = (__bridge LinphoneCallAppData *)linphone_call_get_user_pointer(call);
|
||||
if (appData != NULL) {
|
||||
data = [appData->userInfos objectForKey:kLinphoneInCallCellData];
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
- (void)update {
|
||||
UITableView *tableView = [self tableView];
|
||||
for (int section = 0; section < [tableView numberOfSections]; section++) {
|
||||
for (int row = 0; row < [tableView numberOfRowsInSection:section]; row++) {
|
||||
NSIndexPath *cellPath = [NSIndexPath indexPathForRow:row inSection:section];
|
||||
UICallCell *cell = (UICallCell *)[tableView cellForRowAtIndexPath:cellPath];
|
||||
[cell update];
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma mark - UITableViewDataSource Functions
|
||||
|
||||
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
static NSString *kCellId = @"UICallCell";
|
||||
UICallCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellId];
|
||||
if (cell == nil) {
|
||||
cell = [[UICallCell alloc] initWithIdentifier:kCellId];
|
||||
}
|
||||
|
||||
bool inConference = indexPath.section == ConferenceSection;
|
||||
|
||||
LinphoneCore *lc = [LinphoneManager getLc];
|
||||
LinphoneCall *currentCall = linphone_core_get_current_call(lc);
|
||||
LinphoneCall *call = [PausedCallsTableView retrieveCallAtIndex:indexPath.row inConference:inConference];
|
||||
[cell setData:[self addCallData:call]];
|
||||
|
||||
// Update cell
|
||||
if ([indexPath section] == CallSection && [indexPath row] == 0 && linphone_core_get_conference_size(lc) == 0) {
|
||||
[cell setFirstCell:true];
|
||||
} else {
|
||||
[cell setFirstCell:false];
|
||||
}
|
||||
[cell setCurrentCall:(currentCall == call)];
|
||||
[cell setConferenceCell:inConference];
|
||||
[cell update];
|
||||
|
||||
/*if (linphone_core_get_calls_nb(lc) > 1 || linphone_core_get_conference_size(lc) > 0) {
|
||||
tableView.scrollEnabled = true;
|
||||
} else {
|
||||
tableView.scrollEnabled = false;
|
||||
}*/
|
||||
return cell;
|
||||
}
|
||||
|
||||
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
|
||||
int count = 0;
|
||||
|
||||
LinphoneCore *lc = [LinphoneManager getLc];
|
||||
|
||||
if (section == CallSection) {
|
||||
count = [PausedCallsTableView callCount:lc];
|
||||
} else {
|
||||
count = linphone_core_get_conference_size(lc);
|
||||
if (linphone_core_is_in_conference(lc)) {
|
||||
count--;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
|
||||
return 2;
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
|
||||
return @"";
|
||||
}
|
||||
|
||||
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section {
|
||||
return @"";
|
||||
}
|
||||
|
||||
#pragma mark - UITableViewDelegate Functions
|
||||
|
||||
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
|
||||
if (section == CallSection) {
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
} else if (section == ConferenceSection) {
|
||||
LinphoneCore *lc = [LinphoneManager getLc];
|
||||
if (linphone_core_get_conference_size(lc) > 0) {
|
||||
UIConferenceHeader *headerController = [[UIConferenceHeader alloc] init];
|
||||
[headerController update];
|
||||
UIView *headerView = [headerController view];
|
||||
return headerView;
|
||||
} else {
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
}
|
||||
}
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
}
|
||||
|
||||
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
|
||||
return [[UIView alloc] initWithFrame:CGRectZero];
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
|
||||
LinphoneCore *lc = [LinphoneManager getLc];
|
||||
if (section == CallSection) {
|
||||
return 0.000001f; // Hack UITableView = 0
|
||||
} else if (section == ConferenceSection) {
|
||||
if (linphone_core_get_conference_size(lc) > 0) {
|
||||
return [UIConferenceHeader getHeight];
|
||||
}
|
||||
}
|
||||
return 0.000001f; // Hack UITableView = 0
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
|
||||
LinphoneCore *lc = [LinphoneManager getLc];
|
||||
if (section == CallSection) {
|
||||
return 0.000001f; // Hack UITableView = 0
|
||||
} else if (section == ConferenceSection) {
|
||||
if (linphone_core_get_conference_size(lc) > 0) {
|
||||
return 20;
|
||||
}
|
||||
}
|
||||
return 0.000001f; // Hack UITableView = 0
|
||||
}
|
||||
|
||||
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
|
||||
return [UICallCell getMaximizedHeight];
|
||||
}
|
||||
|
||||
@end
|
||||
|
|
@ -307,8 +307,6 @@ static RootViewManager *rootViewManagerInstance = nil;
|
|||
LinphoneCallState state = [[notif.userInfo objectForKey:@"state"] intValue];
|
||||
NSString *message = [notif.userInfo objectForKey:@"message"];
|
||||
|
||||
bool canHideInCallView = (linphone_core_get_calls([LinphoneManager getLc]) == NULL);
|
||||
|
||||
// Don't handle call state during incoming call view
|
||||
if ([[self currentView] equal:CallIncomingView.compositeViewDescription] && state != LinphoneCallError &&
|
||||
state != LinphoneCallEnd) {
|
||||
|
|
@ -344,13 +342,15 @@ static RootViewManager *rootViewManagerInstance = nil;
|
|||
[self displayCallError:call message:message];
|
||||
}
|
||||
case LinphoneCallEnd: {
|
||||
if (canHideInCallView) {
|
||||
const MSList *calls = linphone_core_get_calls([LinphoneManager getLc]);
|
||||
if (calls == NULL) {
|
||||
// Go to dialer view
|
||||
DialerView *view = VIEW(DialerView);
|
||||
[self changeCurrentView:view.compositeViewDescription];
|
||||
[view setAddress:@""];
|
||||
[view setTransferMode:FALSE];
|
||||
} else {
|
||||
linphone_core_resume_call([LinphoneManager getLc], (LinphoneCall *)calls->data);
|
||||
[self changeCurrentView:CallView.compositeViewDescription];
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -280,6 +280,8 @@
|
|||
63B81A0F1B57DA33009604A6 /* TPKeyboardAvoidingTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B81A091B57DA33009604A6 /* TPKeyboardAvoidingTableView.m */; };
|
||||
63B81A101B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B81A0B1B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m */; };
|
||||
63BC49D41BA1AA6F004EC273 /* UIChatBubbleTextCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63BC49D31BA1AA6F004EC273 /* UIChatBubbleTextCell.xib */; };
|
||||
63BC49E21BA2CDFC004EC273 /* UICallPausedCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */; };
|
||||
63BC49EA1BA2CEDF004EC273 /* UICallPausedCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 63BC49E91BA2CEDF004EC273 /* UICallPausedCell.xib */; };
|
||||
63CD4B4F1A5AAC8C00B84282 /* DTAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 63CD4B4E1A5AAC8C00B84282 /* DTAlertView.m */; };
|
||||
63CFEDE81B9EDD74007EA5BD /* libantlr3c.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 223CA7E416D9255800EF1BEC /* libantlr3c.a */; };
|
||||
63CFEDE91B9EDD74007EA5BD /* libavcodec.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 22276E8013C73D3100210156 /* libavcodec.a */; };
|
||||
|
|
@ -322,7 +324,7 @@
|
|||
D306459E1611EC2A00BB571E /* UILoadingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = D306459D1611EC2900BB571E /* UILoadingImageView.m */; };
|
||||
D3128FE115AABC7E00A2147A /* ContactDetailsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D3128FDF15AABC7E00A2147A /* ContactDetailsView.m */; };
|
||||
D3196D3E15A32BD8007FEEBA /* UITransferButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D3196D3D15A32BD8007FEEBA /* UITransferButton.m */; };
|
||||
D31AAF5E159B3919002C6B02 /* PausedCallsTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D31AAF5D159B3919002C6B02 /* PausedCallsTableView.m */; };
|
||||
D31AAF5E159B3919002C6B02 /* CallPausedTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */; };
|
||||
D31B4B21159876C0002E6C72 /* UICompositeView.m in Sources */ = {isa = PBXBuildFile; fileRef = D31B4B1F159876C0002E6C72 /* UICompositeView.m */; };
|
||||
D31C9C98158A1CDF00756B45 /* UIHistoryCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D31C9C97158A1CDE00756B45 /* UIHistoryCell.m */; };
|
||||
D3211BB0159C4EF10098460B /* UIConferenceHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = D3211BAE159C4EF00098460B /* UIConferenceHeader.m */; };
|
||||
|
|
@ -340,7 +342,6 @@
|
|||
D35860D615B549B500513429 /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = D35860D515B549B500513429 /* Utils.m */; };
|
||||
D35E7597159460580066B1C1 /* ChatsListView.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E7595159460560066B1C1 /* ChatsListView.m */; };
|
||||
D35E759F159460B70066B1C1 /* SettingsView.m in Sources */ = {isa = PBXBuildFile; fileRef = D35E759D159460B50066B1C1 /* SettingsView.m */; };
|
||||
D36C43C6158F2E5A0048BA40 /* UICallCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D36C43C5158F2E5A0048BA40 /* UICallCell.m */; };
|
||||
D36FB2D51589EF7C0036F6F2 /* UIPauseButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */; };
|
||||
D378906515AC373B00BD776C /* ContactDetailsLabelView.m in Sources */ = {isa = PBXBuildFile; fileRef = D378906315AC373B00BD776C /* ContactDetailsLabelView.m */; };
|
||||
D378AB2A15DCDB4A0098505D /* ImagePickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = D378AB2915DCDB490098505D /* ImagePickerView.m */; };
|
||||
|
|
@ -381,7 +382,6 @@
|
|||
D38187DD15FE348A00C3EDCA /* AssistantView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187E015FE348A00C3EDCA /* AssistantView.xib */; };
|
||||
D38187F015FE354000C3EDCA /* UIConferenceHeader.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187F315FE354000C3EDCA /* UIConferenceHeader.xib */; };
|
||||
D38187F815FE355D00C3EDCA /* TabBarView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D38187FB15FE355D00C3EDCA /* TabBarView.xib */; };
|
||||
D381881115FE3F0B00C3EDCA /* UICallCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D381881415FE3F0B00C3EDCA /* UICallCell.xib */; };
|
||||
D381881915FE3FCA00C3EDCA /* CallView.xib in Resources */ = {isa = PBXBuildFile; fileRef = D381881C15FE3FCA00C3EDCA /* CallView.xib */; };
|
||||
D3A55FBC15877E5E003FD403 /* UIContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A55FBB15877E5E003FD403 /* UIContactCell.m */; };
|
||||
D3A8BB7015A6C7D500F96BE5 /* UIChatBubbleTextCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A8BB6F15A6C7D500F96BE5 /* UIChatBubbleTextCell.m */; };
|
||||
|
|
@ -851,8 +851,6 @@
|
|||
639CEB011A1DF4E4004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIHistoryCell.xib; sourceTree = "<group>"; };
|
||||
639CEB041A1DF4EB004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UICompositeView.xib; sourceTree = "<group>"; };
|
||||
639CEB0A1A1DF4FA004DE38F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIChatCell.xib; sourceTree = "<group>"; };
|
||||
639CEB0C1A1DF528004DE38F /* fr */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/UICallCell.strings; sourceTree = "<group>"; };
|
||||
639CEB0D1A1DF52C004DE38F /* ru */ = {isa = PBXFileReference; fileEncoding = 2483028224; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/UICallCell.strings; sourceTree = "<group>"; };
|
||||
63AADBC51B6A0FF200AA16FD /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
63AADBC61B6A0FF200AA16FD /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
63AADBC71B6A0FF200AA16FD /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
|
|
@ -896,6 +894,9 @@
|
|||
63B81A0A1B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+TPKeyboardAvoidingAdditions.h"; sourceTree = "<group>"; };
|
||||
63B81A0B1B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+TPKeyboardAvoidingAdditions.m"; sourceTree = "<group>"; };
|
||||
63BC49D31BA1AA6F004EC273 /* UIChatBubbleTextCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIChatBubbleTextCell.xib; sourceTree = "<group>"; };
|
||||
63BC49E01BA2CDFC004EC273 /* UICallPausedCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallPausedCell.h; sourceTree = "<group>"; };
|
||||
63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallPausedCell.m; sourceTree = "<group>"; };
|
||||
63BC49E91BA2CEDF004EC273 /* UICallPausedCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UICallPausedCell.xib; sourceTree = "<group>"; };
|
||||
63CD4B4D1A5AAC8C00B84282 /* DTAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DTAlertView.h; sourceTree = "<group>"; };
|
||||
63CD4B4E1A5AAC8C00B84282 /* DTAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DTAlertView.m; sourceTree = "<group>"; };
|
||||
63CFEDE21B9EDD36007EA5BD /* libswresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libswresample.a; path = "liblinphone-sdk/apple-darwin/lib/libswresample.a"; sourceTree = "<group>"; };
|
||||
|
|
@ -921,8 +922,8 @@
|
|||
D3128FDF15AABC7E00A2147A /* ContactDetailsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ContactDetailsView.m; sourceTree = "<group>"; };
|
||||
D3196D3C15A32BD7007FEEBA /* UITransferButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UITransferButton.h; sourceTree = "<group>"; };
|
||||
D3196D3D15A32BD8007FEEBA /* UITransferButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UITransferButton.m; sourceTree = "<group>"; };
|
||||
D31AAF5C159B3919002C6B02 /* PausedCallsTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PausedCallsTableView.h; sourceTree = "<group>"; };
|
||||
D31AAF5D159B3919002C6B02 /* PausedCallsTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PausedCallsTableView.m; sourceTree = "<group>"; };
|
||||
D31AAF5C159B3919002C6B02 /* CallPausedTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallPausedTableView.h; sourceTree = "<group>"; };
|
||||
D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CallPausedTableView.m; sourceTree = "<group>"; };
|
||||
D31B4B1E159876C0002E6C72 /* UICompositeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICompositeView.h; sourceTree = "<group>"; };
|
||||
D31B4B1F159876C0002E6C72 /* UICompositeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICompositeView.m; sourceTree = "<group>"; };
|
||||
D31C9C96158A1CDE00756B45 /* UIHistoryCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIHistoryCell.h; sourceTree = "<group>"; };
|
||||
|
|
@ -955,8 +956,6 @@
|
|||
D35E7595159460560066B1C1 /* ChatsListView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ChatsListView.m; sourceTree = "<group>"; };
|
||||
D35E759C159460B50066B1C1 /* SettingsView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsView.h; sourceTree = "<group>"; };
|
||||
D35E759D159460B50066B1C1 /* SettingsView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SettingsView.m; sourceTree = "<group>"; };
|
||||
D36C43C4158F2E5A0048BA40 /* UICallCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallCell.h; sourceTree = "<group>"; };
|
||||
D36C43C5158F2E5A0048BA40 /* UICallCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UICallCell.m; sourceTree = "<group>"; };
|
||||
D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPauseButton.h; sourceTree = "<group>"; };
|
||||
D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPauseButton.m; sourceTree = "<group>"; };
|
||||
D378906215AC373B00BD776C /* ContactDetailsLabelView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContactDetailsLabelView.h; sourceTree = "<group>"; };
|
||||
|
|
@ -1071,7 +1070,6 @@
|
|||
F09548221883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ImageView.xib; sourceTree = "<group>"; };
|
||||
F09548231883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CallView.xib; sourceTree = "<group>"; };
|
||||
F09548241883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CallIncomingView.xib; sourceTree = "<group>"; };
|
||||
F09548281883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UICallCell.xib; sourceTree = "<group>"; };
|
||||
F09548291883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/UIConferenceHeader.xib; sourceTree = "<group>"; };
|
||||
F095482C1883F15400E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/TabBarView.xib; sourceTree = "<group>"; };
|
||||
F095482E1883F15500E8A69B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AssistantView.xib; sourceTree = "<group>"; };
|
||||
|
|
@ -1116,7 +1114,6 @@
|
|||
F0AF06FB1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/ImageView.strings; sourceTree = "<group>"; };
|
||||
F0AF06FC1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/CallView.strings; sourceTree = "<group>"; };
|
||||
F0AF06FD1A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/CallIncomingView.strings; sourceTree = "<group>"; };
|
||||
F0AF07011A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UICallCell.strings; sourceTree = "<group>"; };
|
||||
F0AF07021A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UIChatCell.strings; sourceTree = "<group>"; };
|
||||
F0AF07041A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UICompositeView.strings; sourceTree = "<group>"; };
|
||||
F0AF07051A24BA770086C9C1 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/UIConferenceHeader.strings; sourceTree = "<group>"; };
|
||||
|
|
@ -1293,8 +1290,8 @@
|
|||
6346100D1B61409800548952 /* CallOutgoingView.h */,
|
||||
6346100E1B61409800548952 /* CallOutgoingView.m */,
|
||||
634610101B6140A500548952 /* CallOutgoingView.xib */,
|
||||
D31AAF5C159B3919002C6B02 /* PausedCallsTableView.h */,
|
||||
D31AAF5D159B3919002C6B02 /* PausedCallsTableView.m */,
|
||||
D31AAF5C159B3919002C6B02 /* CallPausedTableView.h */,
|
||||
D31AAF5D159B3919002C6B02 /* CallPausedTableView.m */,
|
||||
D3F83EE91582021700336684 /* CallView.h */,
|
||||
D3F83EEA1582021700336684 /* CallView.m */,
|
||||
D381881C15FE3FCA00C3EDCA /* CallView.xib */,
|
||||
|
|
@ -1393,9 +1390,9 @@
|
|||
22C7555F1317E59C007BC101 /* UIBluetoothButton.m */,
|
||||
2214EB7812F846B1002A5394 /* UICallButton.h */,
|
||||
2214EB7912F846B1002A5394 /* UICallButton.m */,
|
||||
D36C43C4158F2E5A0048BA40 /* UICallCell.h */,
|
||||
D36C43C5158F2E5A0048BA40 /* UICallCell.m */,
|
||||
D381881415FE3F0B00C3EDCA /* UICallCell.xib */,
|
||||
63BC49E01BA2CDFC004EC273 /* UICallPausedCell.h */,
|
||||
63BC49E11BA2CDFC004EC273 /* UICallPausedCell.m */,
|
||||
63BC49E91BA2CEDF004EC273 /* UICallPausedCell.xib */,
|
||||
22AA8AFF13D83F6300B30535 /* UICamSwitch.h */,
|
||||
22AA8B0013D83F6300B30535 /* UICamSwitch.m */,
|
||||
635173F71BA082A40095EB0A /* UIChatBubblePhotoCell.h */,
|
||||
|
|
@ -2309,6 +2306,7 @@
|
|||
634CEDB61B6630DB00D7A921 /* chat_picture_default.png in Resources */,
|
||||
634CEE0E1B6630DB00D7A921 /* status_away_desktop.png in Resources */,
|
||||
D38187B115FE340500C3EDCA /* ChatsListView.xib in Resources */,
|
||||
63BC49EA1BA2CEDF004EC273 /* UICallPausedCell.xib in Resources */,
|
||||
631560381B69175F0047F4D3 /* color_E.png in Resources */,
|
||||
63AADBFA1B6A0FF200AA16FD /* msg.wav in Resources */,
|
||||
634CEDCE1B6630DB00D7A921 /* edit_list.png in Resources */,
|
||||
|
|
@ -2396,7 +2394,6 @@
|
|||
634CEDD61B6630DB00D7A921 /* history_missed_default.png in Resources */,
|
||||
D37EE10D16035793003608A6 /* ImageView.xib in Resources */,
|
||||
63AADBE81B6A0FF200AA16FD /* Localizable.strings in Resources */,
|
||||
D381881115FE3F0B00C3EDCA /* UICallCell.xib in Resources */,
|
||||
634CEDCA1B6630DB00D7A921 /* deselect_all.png in Resources */,
|
||||
631348321B6FA53300C6BDCB /* rootca.pem in Resources */,
|
||||
634CEDC51B6630DB00D7A921 /* contacts_sip_default.png in Resources */,
|
||||
|
|
@ -2580,7 +2577,6 @@
|
|||
D32648441588F6FC00930C67 /* UIToggleButton.m in Sources */,
|
||||
D36FB2D51589EF7C0036F6F2 /* UIPauseButton.m in Sources */,
|
||||
D31C9C98158A1CDF00756B45 /* UIHistoryCell.m in Sources */,
|
||||
D36C43C6158F2E5A0048BA40 /* UICallCell.m in Sources */,
|
||||
D35E7597159460580066B1C1 /* ChatsListView.m in Sources */,
|
||||
D35E759F159460B70066B1C1 /* SettingsView.m in Sources */,
|
||||
63B81A101B57DA33009604A6 /* UIScrollView+TPKeyboardAvoidingAdditions.m in Sources */,
|
||||
|
|
@ -2594,7 +2590,7 @@
|
|||
D3EA5411159853750037DC6B /* UIChatCell.m in Sources */,
|
||||
D3F26BF115986B73005F9CAB /* CallIncomingView.m in Sources */,
|
||||
D31B4B21159876C0002E6C72 /* UICompositeView.m in Sources */,
|
||||
D31AAF5E159B3919002C6B02 /* PausedCallsTableView.m in Sources */,
|
||||
D31AAF5E159B3919002C6B02 /* CallPausedTableView.m in Sources */,
|
||||
D3211BB0159C4EF10098460B /* UIConferenceHeader.m in Sources */,
|
||||
D32460E6159D9AAD00BA7F3A /* UITransparentView.m in Sources */,
|
||||
D32B9DFC15A2F131000B6DEC /* FastAddressBook.m in Sources */,
|
||||
|
|
@ -2640,6 +2636,7 @@
|
|||
D378AB2A15DCDB4A0098505D /* ImagePickerView.m in Sources */,
|
||||
22405F001601C19200B92522 /* ImageView.m in Sources */,
|
||||
D3ED40191602172200BF332B /* HPGrowingTextView.m in Sources */,
|
||||
63BC49E21BA2CDFC004EC273 /* UICallPausedCell.m in Sources */,
|
||||
D3ED401B1602172200BF332B /* HPTextViewInternal.m in Sources */,
|
||||
D37EE162160377D7003608A6 /* DTActionSheet.m in Sources */,
|
||||
D306459E1611EC2A00BB571E /* UILoadingImageView.m in Sources */,
|
||||
|
|
@ -2990,17 +2987,6 @@
|
|||
path = LinphoneUI;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D381881415FE3F0B00C3EDCA /* UICallCell.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
F09548281883F15400E8A69B /* Base */,
|
||||
639CEB0C1A1DF528004DE38F /* fr */,
|
||||
639CEB0D1A1DF52C004DE38F /* ru */,
|
||||
F0AF07011A24BA770086C9C1 /* ar */,
|
||||
);
|
||||
name = UICallCell.xib;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
D381881C15FE3FCA00C3EDCA /* CallView.xib */ = {
|
||||
isa = PBXVariantGroup;
|
||||
children = (
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue