diff --git a/Classes/ConferenceCallDetailCell.xib b/Classes/ConferenceCallDetailCell.xib
deleted file mode 100644
index 1a406056a..000000000
--- a/Classes/ConferenceCallDetailCell.xib
+++ /dev/null
@@ -1,257 +0,0 @@
-
-
-
- 1280
- 11C74
- 1938
- 1138.23
- 567.00
-
-
- IBUITableViewCell
- IBUIImageView
- IBUILabel
- IBProxyObject
-
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
-
-
-
-
-
-
-
-
-
- conferenceDetailCell
-
-
-
- 7
-
-
-
-
-
- 0
-
-
-
-
-
- -1
-
-
- File's Owner
-
-
- -2
-
-
-
-
- 3
-
-
-
-
-
-
-
-
-
- 5
-
-
-
-
- 8
-
-
-
-
- 6
-
-
-
-
-
-
- ConferenceCallDetailView
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIResponder
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
-
-
-
- 8
-
-
-
-
- ConferenceCallDetailView
- UIViewController
-
- UIButton
- UIButton
- UITableViewCell
- UIButton
- UIButton
- UIButton
- UITableView
-
-
-
- addCall
- UIButton
-
-
- back
- UIButton
-
-
- conferenceDetailCell
- UITableViewCell
-
-
- hangup
- UIButton
-
-
- mute
- UIButton
-
-
- speaker
- UIButton
-
-
- table
- UITableView
-
-
-
- IBProjectSource
- ./Classes/ConferenceCallDetailView.h
-
-
-
-
- 0
- IBCocoaTouchFramework
- YES
- 3
- 933
-
-
diff --git a/Classes/ConferenceCallDetailView-ipad.xib b/Classes/ConferenceCallDetailView-ipad.xib
deleted file mode 100644
index 57f2d7412..000000000
--- a/Classes/ConferenceCallDetailView-ipad.xib
+++ /dev/null
@@ -1,479 +0,0 @@
-
-
-
- 1280
- 11C74
- 1938
- 1138.23
- 567.00
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- 933
-
-
- IBUIButton
- IBUITableView
- IBUIView
- IBProxyObject
-
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
- PluginDependencyRecalculationVersion
-
-
-
-
- IBFilesOwner
- IBIPadFramework
-
-
- IBFirstResponder
- IBIPadFramework
-
-
-
- 274
-
-
-
- 274
- {768, 872}
-
-
-
- _NS:418
-
- 3
- MCAwAA
-
- YES
- IBIPadFramework
- YES
- 0
- NO
- YES
- 44
- 22
- 22
-
-
-
- 292
- {{224, 874}, {107, 66}}
-
-
-
- NO
- IBIPadFramework
- 0
- 0
-
- 3
- MQA
-
-
- 1
- MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA
-
-
- 3
- MC41AA
-
-
- NSImage
- effacer.png
-
-
- Helvetica-Bold
- Helvetica
- 2
- 15
-
-
- Helvetica-Bold
- 15
- 16
-
-
-
-
- 292
- {{437, 873}, {107, 66}}
-
-
-
-
- NO
- NO
- IBIPadFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MzE0IDAuMzA5ODAzOTIxNiAwLjUyMTU2ODYyNzUAA
-
-
-
- NSImage
- HP_inverse.png
-
-
- NSImage
- HP.png
-
-
- 2
- 2
-
-
- Helvetica-Bold
- 18
- 16
-
-
-
-
- 292
- {{224, 938}, {320, 66}}
-
-
-
-
- 1
- MSAwIDAuMDgyMzIwMjU5MDQgMC4xOAA
-
- NO
- NO
- IBIPadFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
-
-
-
- NSImage
- stopcall-red.png
-
-
- NSImage
- clavier-01-106px.png
-
-
-
-
-
-
- 292
- {{331, 873}, {106, 66}}
-
-
-
-
- NO
- NO
- IBIPadFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MzE0IDAuMzA5ODAzOTIxNiAwLjUyMTU2ODYyNzUAA
-
-
-
- NSImage
- mic_active.png
-
-
- NSImage
- micro_inverse.png
-
-
- NSImage
- micro.png
-
-
-
-
-
- {{0, 20}, {768, 1004}}
-
-
-
-
- 3
- MC42NjY2NjY2NjY3AA
-
-
- 2
-
- IBIPadFramework
-
-
-
-
-
-
- back
-
-
-
- 8
-
-
-
- hangup
-
-
-
- 9
-
-
-
- mute
-
-
-
- 10
-
-
-
- speaker
-
-
-
- 11
-
-
-
- table
-
-
-
- 12
-
-
-
- view
-
-
-
- 13
-
-
-
- dataSource
-
-
-
- 14
-
-
-
- delegate
-
-
-
- 15
-
-
-
-
-
- 0
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- -1
-
-
- File's Owner
-
-
- -2
-
-
-
-
- 3
-
-
- Erase
-
-
- 4
-
-
- speaker
-
-
- 5
-
-
-
-
- 6
-
-
- end
-
-
- 7
-
-
- mute
-
-
-
-
- ConferenceCallDetailView
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIResponder
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIEraseButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UISpeakerButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIHangUpButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIMuteButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
-
-
-
-
- 15
-
-
-
-
- ConferenceCallDetailView
- UIViewController
-
- UIButton
- UIButton
- UITableViewCell
- UIButton
- UIButton
- UIButton
- UITableView
-
-
-
- addCall
- UIButton
-
-
- back
- UIButton
-
-
- conferenceDetailCell
- UITableViewCell
-
-
- hangup
- UIButton
-
-
- mute
- UIButton
-
-
- speaker
- UIButton
-
-
- table
- UITableView
-
-
-
- IBProjectSource
- ./Classes/ConferenceCallDetailView.h
-
-
-
- UIEraseButton
- UIButton
-
- IBProjectSource
- ./Classes/UIEraseButton.h
-
-
-
- UIHangUpButton
- UIButton
-
- IBProjectSource
- ./Classes/UIHangUpButton.h
-
-
-
- UIMuteButton
- UIToggleButton
-
- IBProjectSource
- ./Classes/UIMuteButton.h
-
-
-
- UISpeakerButton
- UIToggleButton
-
- IBProjectSource
- ./Classes/UISpeakerButton.h
-
-
-
- UIToggleButton
- UIButton
-
- IBProjectSource
- ./Classes/UIToggleButton.h
-
-
-
-
- 0
- IBIPadFramework
- YES
- 3
-
- {107, 67}
- {107, 67}
- {106, 60}
- {66, 65}
- {20, 20}
- {107, 67}
- {107, 67}
- {62, 54}
-
- 933
-
-
diff --git a/Classes/ConferenceCallDetailView.h b/Classes/ConferenceCallDetailView.h
deleted file mode 100644
index 1c0ff02c0..000000000
--- a/Classes/ConferenceCallDetailView.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ConferenceCallDetailView.h
- *
- * Copyright (C) 2011 Belledonne Comunications, Grenoble, France
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU 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
-#import "LinphoneUI/UIMicroButton.h"
-#import "LinphoneUI/UISpeakerButton.h"
-
-@interface ConferenceCallDetailView : UIViewController {
-
- UIMicroButton* mute;
- UISpeakerButton* speaker;
- UIButton* back;
- UIButton* hangup;
- UITableView* table;
-
- UITableViewCell* conferenceDetailCell;
-}
-
-@property (nonatomic, retain) IBOutlet UIButton* mute;
-@property (nonatomic, retain) IBOutlet UIButton* speaker;
-@property (nonatomic, retain) IBOutlet UIButton* addCall;
-@property (nonatomic, retain) IBOutlet UIButton* back;
-@property (nonatomic, retain) IBOutlet UIButton* hangup;
-@property (nonatomic, retain) IBOutlet UITableView* table;
-
-@property (nonatomic, assign) IBOutlet UITableViewCell* conferenceDetailCell;
-
--(void) updateCallQuality;
-@end
diff --git a/Classes/ConferenceCallDetailView.m b/Classes/ConferenceCallDetailView.m
deleted file mode 100644
index 17769f2e7..000000000
--- a/Classes/ConferenceCallDetailView.m
+++ /dev/null
@@ -1,168 +0,0 @@
-/* ConferenceCallDetailView.m
- *
- * Copyright (C) 2011 Belledonne Comunications, Grenoble, France
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU 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 "ConferenceCallDetailView.h"
-#import "LinphoneManager.h"
-#import "InCallViewController.h"
-
-#include "linphonecore.h"
-
-@implementation ConferenceCallDetailView
-
-@synthesize mute;
-@synthesize speaker;
-@synthesize back;
-@synthesize hangup;
-@synthesize table;
-@synthesize addCall;
-
-@synthesize conferenceDetailCell;
-
-NSTimer *callQualityRefresher;
-
-- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
-{
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- }
- return self;
-}
-
-- (void)didReceiveMemoryWarning
-{
- // Releases the view if it doesn't have a superview.
- [super didReceiveMemoryWarning];
-
- // Release any cached data, images, etc that aren't in use.
-}
-
-#pragma mark - View lifecycle
-
-- (void)viewDidLoad
-{
- [super viewDidLoad];
-
- [back addTarget:self action:@selector(backButtonPressed) forControlEvents:UIControlEventTouchUpInside];
-
- table.rowHeight = 80;
-
- /*[mute initWithOnImage:[UIImage imageNamed:@"micro_inverse.png"] offImage:[UIImage imageNamed:@"micro.png"] debugName:"MUTE button"];
- [speaker initWithOnImage:[UIImage imageNamed:@"HP_inverse.png"] offImage:[UIImage imageNamed:@"HP.png"] debugName:"SPEAKER button"];
- */
-}
-
--(void) backButtonPressed {
- [self dismissModalViewControllerAnimated:YES];
-}
-
-- (void)viewDidUnload
-{
- [super viewDidUnload];
- // Release any retained subviews of the main view.
- // e.g. self.myOutlet = nil;
-}
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
-{
- // Return YES for supported orientations
- return (interfaceOrientation == UIInterfaceOrientationPortrait);
-}
-
--(void) viewWillAppear:(BOOL)animated {
- [table reloadData];
- [mute update];
- [speaker update];
- [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
- [super viewWillAppear:animated];
-}
-
--(void) viewDidAppear:(BOOL)animated {
- [super viewDidAppear:animated];
- callQualityRefresher = [NSTimer scheduledTimerWithTimeInterval:1
- target:self
- selector:@selector(updateCallQuality)
- userInfo:nil
- repeats:YES];
-}
-
--(void) viewDidDisappear:(BOOL)animated {
- [[UIApplication sharedApplication] setIdleTimerDisabled:NO];
-
- if (callQualityRefresher != nil) {
- [callQualityRefresher invalidate];
- callQualityRefresher=nil;
- }
-}
-
--(void) updateCallQuality {
- [table reloadData];
- [table setNeedsDisplay];
-}
-
-#pragma mark - UITableView delegates
--(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
- if (indexPath.row % 2)
- cell.backgroundColor = [UIColor lightGrayColor];
- else
- cell.backgroundColor = [UIColor darkGrayColor];
-}
-
--(UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
- static NSString* identifier = @"ConferenceDetailCellIdentifier";
- UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
- if (cell == nil) {
- [[NSBundle mainBundle] loadNibNamed:@"ConferenceCallDetailCell" owner:self options:nil];
- cell = conferenceDetailCell;
- self.conferenceDetailCell = nil;
- }
- //TODO
- /* retrieve cell's fields using tags */
- //UIImageView* image = (UIImageView*) [cell viewWithTag:1];
- //UILabel* label = (UILabel*) [cell viewWithTag:2];
-
- /* update cell content */
- //LinphoneCall* call = [InCallViewController retrieveCallAtIndex:indexPath.row inConference:YES];
-
- //[InCallViewController updateCellImageView:image Label:label DetailLabel:nil AndAccessoryView:nil withCall:call];
-
- cell.accessoryType = UITableViewCellAccessoryNone;
- if (cell.accessoryView == nil) {
- UIView *containerView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)] autorelease];
- cell.accessoryView = containerView;
- }
- else {
- for (UIView *view in cell.accessoryView.subviews) {
- [view removeFromSuperview];
- }
- }
- //UIImageView* callquality = (UIImageView*) [cell viewWithTag:3];
- //[InCallViewController updateIndicator:callquality withCallQuality:linphone_call_get_average_quality(call)];
- tableView.rowHeight = 80;
-
- return cell;
-}
-
--(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
- LinphoneCore* lc = [LinphoneManager getLc];
- int result = linphone_core_get_conference_size(lc) - (int)linphone_core_is_in_conference(lc);
- return result;
-}
-
-@end
diff --git a/Classes/ConferenceCallDetailView.xib b/Classes/ConferenceCallDetailView.xib
deleted file mode 100644
index 3b80aa096..000000000
--- a/Classes/ConferenceCallDetailView.xib
+++ /dev/null
@@ -1,478 +0,0 @@
-
-
-
- 1280
- 11C74
- 1938
- 1138.23
- 567.00
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- 933
-
-
- IBUITableView
- IBUIButton
- IBUIView
- IBProxyObject
-
-
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
- PluginDependencyRecalculationVersion
-
-
-
-
- IBFilesOwner
- IBCocoaTouchFramework
-
-
- IBFirstResponder
- IBCocoaTouchFramework
-
-
-
- 274
-
-
-
- 274
- {320, 328}
-
-
-
- _NS:418
-
- 3
- MCAwAA
-
- YES
- IBCocoaTouchFramework
- YES
- 0
- NO
- YES
- 44
- 22
- 22
-
-
-
- 292
- {{107, 328}, {106, 66}}
-
-
-
-
- NO
- NO
- IBCocoaTouchFramework
- 0
- 0
-
- 3
- MQA
-
-
- 1
- MC4xOTYwNzg0MzE0IDAuMzA5ODAzOTIxNiAwLjUyMTU2ODYyNzUAA
-
-
- 3
- MC41AA
-
-
- NSImage
- mic_active.png
-
-
- NSImage
- micro_inverse.png
-
-
- NSImage
- micro.png
-
-
- 2
- 2
-
-
- Helvetica-Bold
- 18
- 16
-
-
-
-
- 292
- {{213, 328}, {107, 66}}
-
-
-
-
- NO
- NO
- IBCocoaTouchFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MzE0IDAuMzA5ODAzOTIxNiAwLjUyMTU2ODYyNzUAA
-
-
-
- NSImage
- HP_inverse.png
-
-
- NSImage
- HP.png
-
-
-
-
-
-
- 292
- {{0, 394}, {320, 66}}
-
-
-
-
- 1
- MSAwIDAuMDgyMzIwMjU5MDQgMC4xOAA
-
- NO
- NO
- IBCocoaTouchFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
-
-
-
- NSImage
- stopcall-red.png
-
-
- NSImage
- clavier-01-106px.png
-
-
- Helvetica-Bold
- Helvetica
- 2
- 15
-
-
- Helvetica-Bold
- 15
- 16
-
-
-
-
- 292
- {{0, 328}, {107, 66}}
-
-
-
- NO
- IBCocoaTouchFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA
-
-
-
- NSImage
- effacer.png
-
-
-
-
-
- {{0, 20}, {320, 460}}
-
-
-
-
- 3
- MC42NjY2NjY2NjY3AA
-
-
- IBCocoaTouchFramework
-
-
-
-
-
-
- back
-
-
-
- 16
-
-
-
- hangup
-
-
-
- 17
-
-
-
- mute
-
-
-
- 18
-
-
-
- speaker
-
-
-
- 19
-
-
-
- view
-
-
-
- 20
-
-
-
- table
-
-
-
- 23
-
-
-
- dataSource
-
-
-
- 21
-
-
-
- delegate
-
-
-
- 22
-
-
-
-
-
- 0
-
-
-
-
-
- 1
-
-
-
-
-
-
-
-
-
-
-
- -1
-
-
- File's Owner
-
-
- -2
-
-
-
-
- 7
-
-
-
-
-
- 10
-
-
- mute
-
-
- 11
-
-
- end
-
-
- 12
-
-
- speaker
-
-
- 14
-
-
- Erase
-
-
-
-
- ConferenceCallDetailView
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIResponder
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UIMuteButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
- UIHangUpButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- UISpeakerButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
- UIEraseButton
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
- com.apple.InterfaceBuilder.IBCocoaTouchPlugin
-
-
-
-
-
- 23
-
-
-
-
- ConferenceCallDetailView
- UIViewController
-
- UIButton
- UIButton
- UITableViewCell
- UIButton
- UIButton
- UIButton
- UITableView
-
-
-
- addCall
- UIButton
-
-
- back
- UIButton
-
-
- conferenceDetailCell
- UITableViewCell
-
-
- hangup
- UIButton
-
-
- mute
- UIButton
-
-
- speaker
- UIButton
-
-
- table
- UITableView
-
-
-
- IBProjectSource
- ./Classes/ConferenceCallDetailView.h
-
-
-
- UIEraseButton
- UIButton
-
- IBProjectSource
- ./Classes/UIEraseButton.h
-
-
-
- UIHangUpButton
- UIButton
-
- IBProjectSource
- ./Classes/UIHangUpButton.h
-
-
-
- UIMuteButton
- UIToggleButton
-
- IBProjectSource
- ./Classes/UIMuteButton.h
-
-
-
- UISpeakerButton
- UIToggleButton
-
- IBProjectSource
- ./Classes/UISpeakerButton.h
-
-
-
- UIToggleButton
- UIButton
-
- IBProjectSource
- ./Classes/UIToggleButton.h
-
-
-
-
- 0
- IBCocoaTouchFramework
- YES
- 3
-
- {107, 67}
- {107, 67}
- {106, 60}
- {66, 65}
- {20, 20}
- {107, 67}
- {107, 67}
- {62, 54}
-
- 933
-
-
diff --git a/Classes/DialerViewController.h b/Classes/DialerViewController.h
index 3f9083caf..188c63465 100644
--- a/Classes/DialerViewController.h
+++ b/Classes/DialerViewController.h
@@ -55,6 +55,7 @@
@property (nonatomic, retain) IBOutlet UICallButton* addCallButton;
@property (nonatomic, retain) IBOutlet UIButton* cancelButton;
@property (nonatomic, retain) IBOutlet UIEraseButton* eraseButton;
+
@property (nonatomic, retain) IBOutlet UIButton* oneButton;
@property (nonatomic, retain) IBOutlet UIButton* twoButton;
@property (nonatomic, retain) IBOutlet UIButton* threeButton;
diff --git a/Classes/DialerViewController.m b/Classes/DialerViewController.m
index c66283bf3..f2a3dfc1d 100644
--- a/Classes/DialerViewController.m
+++ b/Classes/DialerViewController.m
@@ -55,11 +55,15 @@
}
- (void)viewWillAppear:(BOOL)animated {
- // [[LinphoneManager instance] setRegistrationDelegate:self];
-
- //TODO
- //[mMainScreenWithVideoPreview showPreview:YES];
-
+ [super viewWillAppear:animated];
+ [self update];
+}
+
+- (void)callUpdate:(NSNotification*)notif {
+ [self update];
+}
+
+- (void)update {
if([LinphoneManager isLcReady]) {
LinphoneCore *lc = [LinphoneManager getLc];
if(linphone_core_get_calls_nb(lc) > 0) {
@@ -74,7 +78,6 @@
[addContactButton setHidden:false];
}
}
- [super viewWillAppear:animated];
}
- (void)viewDidLoad {
@@ -95,6 +98,13 @@
[callButton initWithAddress:addressField];
[addCallButton initWithAddress:addressField];
[eraseButton initWithAddressField:addressField];
+
+ // Set observer
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callUpdate:) name:@"LinphoneCallUpdate" object:nil];
+}
+
+- (void)viewDidUnload {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)setAddress:(NSString*) address {
@@ -121,6 +131,9 @@
[starButton release];
[zeroButton release];
[hashButton release];
+
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+
[super dealloc];
}
diff --git a/Classes/DialerViewController.xib b/Classes/DialerViewController.xib
index c3ef74098..26df9878a 100644
--- a/Classes/DialerViewController.xib
+++ b/Classes/DialerViewController.xib
@@ -224,35 +224,6 @@
-
-
- 292
- {{0, 135}, {107, 54}}
-
-
-
- NO
- NO
- IBCocoaTouchFramework
- 0
- 0
-
-
- 1
- MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
-
-
-
- NSImage
- 7-over.png
-
-
- NSImage
- 7-actif.png
-
-
-
-
292
@@ -282,6 +253,35 @@
+
+
+ 292
+ {{0, 135}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 7-over.png
+
+
+ NSImage
+ 7-actif.png
+
+
+
+
292
@@ -650,7 +650,6 @@
{{214, 0}, {106, 69}}
-
_NS:9
NO
IBCocoaTouchFramework
diff --git a/Classes/InCallTableViewController.m b/Classes/InCallTableViewController.m
index edd9fe1ce..f5802c21f 100644
--- a/Classes/InCallTableViewController.m
+++ b/Classes/InCallTableViewController.m
@@ -31,14 +31,14 @@ enum TableSection {
CallSection = 1
};
-- (void)myInit {
+- (void)initInCallTableViewController {
self->callCellData = [[NSMutableDictionary alloc] init];
}
- (id)init{
self = [super init];
if (self) {
- [self myInit];
+ [self initInCallTableViewController];
}
return self;
}
@@ -46,7 +46,7 @@ enum TableSection {
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
- [self myInit];
+ [self initInCallTableViewController];
}
return self;
}
@@ -54,7 +54,7 @@ enum TableSection {
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self myInit];
+ [self initInCallTableViewController];
}
return self;
}
diff --git a/Classes/InCallViewController.m b/Classes/InCallViewController.m
index ef5b48163..11a16c8f5 100644
--- a/Classes/InCallViewController.m
+++ b/Classes/InCallViewController.m
@@ -52,6 +52,8 @@ const NSInteger SECURE_BUTTON_TAG=5;
return [super initWithNibName:@"InCallViewController" bundle:[NSBundle mainBundle]];
}
+//TODO
+/*
- (void)orientationChanged: (NSNotification*) notif {
int oldLinphoneOrientation = linphone_core_get_device_rotation([LinphoneManager getLc]);
UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
@@ -76,7 +78,7 @@ const NSInteger SECURE_BUTTON_TAG=5;
linphone_core_update_call([LinphoneManager getLc], call, NULL);
- /* animate button images rotation */
+ // animate button images rotation
#define degreesToRadians(x) (M_PI * x / 180.0)
CGAffineTransform transform = CGAffineTransformIdentity;
switch (orientation) {
@@ -105,7 +107,7 @@ const NSInteger SECURE_BUTTON_TAG=5;
[UIView commitAnimations];
}
}
-}
+}*/
- (void)showControls:(id)sender {
if (hideControlsTimer) {
@@ -161,7 +163,8 @@ const NSInteger SECURE_BUTTON_TAG=5;
- (void)enableVideoDisplay:(BOOL)animation {
videoShown = true;
- [self orientationChanged:nil];
+ //TODO
+ //[self orientationChanged:nil];
[videoZoomHandler resetZoom];
@@ -180,9 +183,6 @@ const NSInteger SECURE_BUTTON_TAG=5;
videoView.alpha = 1.0;
videoView.hidden = FALSE;
- linphone_core_set_native_video_window_id([LinphoneManager getLc],(unsigned long)videoView);
- linphone_core_set_native_preview_window_id([LinphoneManager getLc],(unsigned long)videoPreview);
-
[[LinphoneManager instance] fullScreen: true];
[[LinphoneManager instance] showTabBar: false];
@@ -191,11 +191,9 @@ const NSInteger SECURE_BUTTON_TAG=5;
#endif
// [self batteryLevelChanged:nil];
- [self updateUIFromLinphoneState: YES];
videoWaitingForFirstImage.hidden = NO;
[videoWaitingForFirstImage startAnimating];
- // TODO
LinphoneCall *call = linphone_core_get_current_call([LinphoneManager getLc]);
if (call != NULL && call->videostream) {
linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, self);
@@ -222,84 +220,21 @@ const NSInteger SECURE_BUTTON_TAG=5;
[hideControlsTimer invalidate];
hideControlsTimer = nil;
}
-
- /* restore buttons orientation */
- //endCtrl.imageView.transform = CGAffineTransformIdentity;
- //TODO
- //mute.imageView.transform = CGAffineTransformIdentity;
- //speaker.imageView.transform = CGAffineTransformIdentity;
- //pause.imageView.transform = CGAffineTransformIdentity;
- //contacts.imageView.transform = CGAffineTransformIdentity;
- //addCall.imageView.transform = CGAffineTransformIdentity;
- //dialer.imageView.transform = CGAffineTransformIdentity;
- //videoCallQuality.transform = CGAffineTransformIdentity;
[[LinphoneManager instance] fullScreen:false];
}
-/* Update in call view buttons (visibility, state, ...) and call duration text.
- This is called periodically. The fullUpdate boolean is set when called after an event (call state change for instance) */
-- (void)updateUIFromLinphoneState:(BOOL) fullUpdate {
- // check LinphoneCore is initialized
- LinphoneCore* lc = nil;
- if([LinphoneManager isLcReady])
- lc = [LinphoneManager getLc];
-
- // 1 call: show pause button, otherwise show merge btn
- // [LinphoneManager set:mergeCalls hidden:!pause.hidden withName:"MERGE button" andReason:"call count"];
- // reload table (glow update + call duration)
- [callTableView reloadData];
-
- // update conference details view if displayed
- //TODO
- /*if (self.presentedViewController == conferenceDetail) {
- if (!linphone_core_is_in_conference(lc))
- [self dismissModalViewControllerAnimated:YES];
- else
- [conferenceDetail.table reloadData];
- }*/
-}
-
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
+ // Set windows (warn memory leaks)
+ linphone_core_set_native_video_window_id([LinphoneManager getLc],(unsigned long)videoView);
+ linphone_core_set_native_preview_window_id([LinphoneManager getLc],(unsigned long)videoPreview);
+
// Set observer
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callUpdate:) name:@"LinphoneCallUpdate" object:nil];
-
- //Controls
- /*[mute initWithOnImage:[UIImage imageNamed:@"micro_inverse.png"] offImage:[UIImage imageNamed:@"micro.png"] debugName:"MUTE button"];
- [speaker initWithOnImage:[UIImage imageNamed:@"HP_inverse.png"] offImage:[UIImage imageNamed:@"HP.png"] debugName:"SPEAKER button"];
- */
- //Dialer init
- /*[zero initWithNumber:'0'];
- [one initWithNumber:'1'];
- [two initWithNumber:'2'];
- [three initWithNumber:'3'];
- [four initWithNumber:'4'];
- [five initWithNumber:'5'];
- [six initWithNumber:'6'];
- [seven initWithNumber:'7'];
- [eight initWithNumber:'8'];
- [nine initWithNumber:'9'];
- [star initWithNumber:'*'];
- [hash initWithNumber:'#'];
-
- [addCall addTarget:self action:@selector(addCallPressed) forControlEvents:UIControlEventTouchUpInside];
- [mergeCalls addTarget:self action:@selector(mergeCallsPressed) forControlEvents:UIControlEventTouchUpInside];
- [LinphoneManager set:mergeCalls hidden:YES withName:"MERGE button" andReason:"initialisation"];*/
-
- //TODO
- /*
- if ([LinphoneManager runningOnIpad]) {
- ms_message("Running on iPad");
- conferenceDetail = [[ConferenceCallDetailView alloc] initWithNibName:@"ConferenceCallDetailView-ipad"
- bundle:[NSBundle mainBundle]];
- } else {
- conferenceDetail = [[ConferenceCallDetailView alloc] initWithNibName:@"ConferenceCallDetailView"
- bundle:[NSBundle mainBundle]];
- }*/
UITapGestureRecognizer* singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(showControls:)];
[singleFingerTap setNumberOfTapsRequired:1];
@@ -310,30 +245,13 @@ const NSInteger SECURE_BUTTON_TAG=5;
videoZoomHandler = [[VideoZoomHandler alloc] init];
[videoZoomHandler setup:videoGroup];
videoGroup.alpha = 0;
-
- //selectedCall = nil;
-
- //callTableView.rowHeight = 80;
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
+ //[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:UIDeviceOrientationDidChangeNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(batteryLevelChanged:) name:UIDeviceBatteryLevelDidChangeNotification object:nil];
[videoCameraSwitch setPreview:videoPreview];
- //addVideo.videoUpdateIndicator = videoUpdateIndicator;
-
- //[transfer addTarget:self action:@selector(transferPressed) forControlEvents:UIControlEventTouchUpInside];
-
- // prevent buttons resizing
- /*
- endCtrl.imageView.contentMode = UIViewContentModeCenter;
- mute.imageView.contentMode = UIViewContentModeCenter;
- speaker.imageView.contentMode = UIViewContentModeCenter;
- pause.imageView.contentMode = UIViewContentModeCenter;
- contacts.imageView.contentMode = UIViewContentModeCenter;
- addCall.imageView.contentMode = UIViewContentModeCenter;
- dialer.imageView.contentMode = UIViewContentModeCenter;*/
}
- (void)transferPressed {
@@ -441,53 +359,40 @@ const NSInteger SECURE_BUTTON_TAG=5;
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
-- (void)displayPad:(bool) enable {
- /*if (videoView.hidden)
- [LinphoneManager set:callTableView hidden:enable withName:"CALL_TABLE view" andReason:AT];*/
- /*[LinphoneManager set:hangUpView hidden:enable withName:"HANG_UP view" andReason:AT];
- [LinphoneManager set:controlSubView hidden:enable withName:"CONTROL view" andReason:AT];
- [LinphoneManager set:padSubView hidden:!enable withName:"PAD view" andReason:AT];*/
-}
-
- (void)displayVideoCall:(LinphoneCall*) call {
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
- if (call !=nil && linphone_call_get_dir(call)==LinphoneCallIncoming) {
- //if ([speaker isOn]) [speaker toggle];
- }
- [self updateUIFromLinphoneState: YES];
- [self enableVideoDisplay: TRUE];
+ if(!videoShown)
+ [self enableVideoDisplay: TRUE];
}
-- (void)displayInCall:(LinphoneCall*) call {
+- (void)displayTableCall:(LinphoneCall*) call {
UIDevice *device = [UIDevice currentDevice];
device.proximityMonitoringEnabled = YES;
- if (call !=nil && linphone_call_get_dir(call)==LinphoneCallIncoming) {
- //if ([speaker isOn]) [speaker toggle];
- }
- [self updateUIFromLinphoneState: YES];
- [self disableVideoDisplay: TRUE];
+ if(videoShown)
+ [self disableVideoDisplay: TRUE];
}
-static void hideSpinner(LinphoneCall* lc, void* user_data);
-
- (void)hideSpinnerIndicator: (LinphoneCall*)call {
- if (!videoWaitingForFirstImage.hidden) {
- videoWaitingForFirstImage.hidden = TRUE;
- } else {
- linphone_call_set_next_video_frame_decoded_callback(call, hideSpinner, self);
- }
+ videoWaitingForFirstImage.hidden = TRUE;
+}
+
+static void hideSpinner(LinphoneCall* call, void* user_data) {
+ InCallViewController* thiz = (InCallViewController*) user_data;
+ [thiz hideSpinnerIndicator:call];
}
- (void)callUpdate: (NSNotification*) notif {
LinphoneCall *call = [[notif.userInfo objectForKey: @"call"] pointerValue];
LinphoneCallState state = [[notif.userInfo objectForKey: @"state"] intValue];
- // Fake call update: Refresh UI
+ // Update table
+ [callTableView reloadData];
+
+ // Fake call update
if(call == NULL) {
- [self updateUIFromLinphoneState: YES];
return;
}
@@ -506,17 +411,18 @@ static void hideSpinner(LinphoneCall* lc, void* user_data);
[callTableController minimizeAll];
}
}
- case LinphoneCallPausedByRemote:
case LinphoneCallConnected:
case LinphoneCallStreamsRunning:
case LinphoneCallUpdated:
+ {
//check video
if (linphone_call_params_video_enabled(linphone_call_get_current_params(call))) {
[self displayVideoCall:call];
} else {
- [self displayInCall:call];
+ [self displayTableCall:call];
}
break;
+ }
case LinphoneCallUpdatedByRemote:
{
const LinphoneCallParams* current = linphone_call_get_current_params(call);
@@ -529,14 +435,15 @@ static void hideSpinner(LinphoneCall* lc, void* user_data);
linphone_core_defer_call_update([LinphoneManager getLc], call);
[self displayAskToEnableVideoCall:call];
} else if (linphone_call_params_video_enabled(current) && !linphone_call_params_video_enabled(remote)) {
- [self displayInCall:call];
+ [self displayTableCall:call];
}
break;
}
case LinphoneCallPausing:
case LinphoneCallPaused:
+ case LinphoneCallPausedByRemote:
{
- [self disableVideoDisplay: TRUE];
+ [self displayTableCall: call];
break;
}
case LinphoneCallEnd:
@@ -545,7 +452,6 @@ static void hideSpinner(LinphoneCall* lc, void* user_data);
if(linphone_core_get_calls_nb([LinphoneManager getLc]) <= 1) {
[callTableController maximizeAll];
}
- [self updateUIFromLinphoneState: YES];
break;
}
default:
@@ -554,11 +460,6 @@ static void hideSpinner(LinphoneCall* lc, void* user_data);
}
-static void hideSpinner(LinphoneCall* call, void* user_data) {
- InCallViewController* thiz = (InCallViewController*) user_data;
- [thiz hideSpinnerIndicator:call];
-}
-
- (void)dismissActionSheet: (id)o {
if (visibleActionSheet != nil) {
[visibleActionSheet dismissWithClickedButtonIndex:visibleActionSheet.cancelButtonIndex animated:TRUE];
@@ -599,11 +500,6 @@ static void hideSpinner(LinphoneCall* call, void* user_data) {
[visibleActionSheet release];
}
-- (void)firstVideoFrameDecoded: (LinphoneCall*) call {
- // hide video in progress view indicator
- videoWaitingForFirstImage.hidden = TRUE;
-}
-
- (void)dealloc {
[videoGroup release];
[callTableView release];
@@ -620,146 +516,6 @@ static void hideSpinner(LinphoneCall* call, void* user_data) {
[super dealloc];
}
-//TODO
-/*
-+ (void)updateCellImageView:(UIImageView*)imageView Label:(UILabel*)label DetailLabel:(UILabel*)detailLabel AndAccessoryView:(UIView*)accessoryView withCall:(LinphoneCall*) call {
- if (call == NULL) {
- ms_warning("UpdateCell called with null call");
- [label setText:@""];
- return;
- }
- const LinphoneAddress* addr = linphone_call_get_remote_address(call);
-
- label.adjustsFontSizeToFitWidth = YES;
-
- if (addr) {
- const char* lUserNameChars=linphone_address_get_username(addr);
- NSString* lUserName = lUserNameChars?[[[NSString alloc] initWithUTF8String:lUserNameChars] autorelease]:NSLocalizedString(@"Unknown",nil);
- NSMutableString* mss = [[NSMutableString alloc] init];
- // contact name
- const char* n = linphone_address_get_display_name(addr);
- if (n)
- [mss appendFormat:@"%s", n, nil];
- else
- [mss appendFormat:@"%@",lUserName , nil];
-
- if ([mss compare:label.text] != 0 || imageView.image == nil) {
- [label setText:mss];
-
- imageView.image = [[LinphoneManager instance] getImageFromAddressBook:lUserName];
- }
- [mss release];
- } else {
- [label setText:@"plop"];
- imageView.image = nil;
- }
-
- if (detailLabel != nil) {
- NSMutableString* ms = [[NSMutableString alloc] init ];
- if (linphone_call_get_state(call) == LinphoneCallStreamsRunning) {
- int duration = linphone_call_get_duration(call);
- if (duration >= 60)
- [ms appendFormat:@"%02i:%02i", (duration/60), duration - 60*(duration/60), nil];
- else
- [ms appendFormat:@"%02i sec", duration, nil];
- } else {
- switch (linphone_call_get_state(call)) {
- case LinphoneCallPaused:
- if(!linphone_core_sound_resources_locked(linphone_call_get_core(call))) {
- [ms appendFormat:@"%@", NSLocalizedString(@"Paused (tap to resume)", nil), nil];
- } else {
- [ms appendFormat:@"%@", NSLocalizedString(@"Paused", nil), nil];
- }
- break;
- case LinphoneCallOutgoingInit:
- case LinphoneCallOutgoingProgress:
- [ms appendFormat:@"%@...", NSLocalizedString(@"In progress", nil), nil];
- break;
- case LinphoneCallOutgoingRinging:
- [ms appendFormat:@"%@...", NSLocalizedString(@"Ringing...", nil), nil];
- break;
- case LinphoneCallPausedByRemote:
- {
- switch (linphone_call_get_transfer_state(call)) {
- case LinphoneCallOutgoingInit:
- case LinphoneCallOutgoingProgress:
- [ms appendFormat:@"%@...", NSLocalizedString(@"Transfer in progress", nil), nil];
- break;
- case LinphoneCallConnected:
- [ms appendFormat:@"%@", NSLocalizedString(@"Transfer successful", nil), nil];
- break;
- case LinphoneCallError:
- [ms appendFormat:@"%@", NSLocalizedString(@"Transfer failed", nil), nil];
- break;
- case LinphoneCallIdle:
- default:
- [ms appendFormat:@"%@...", NSLocalizedString(@"Paused by remote", nil), nil];
- break;
- }
- break;
- default:
- break;
- }
- }
- }
- [detailLabel setText:ms];
- [ms release];
- }
-}*/
-/*
-- (void)updateConferenceCell:(UITableViewCell*) cell at:(NSIndexPath*)indexPath {
- LinphoneCore* lc = [LinphoneManager getLc];
-
- NSString* t= [NSString stringWithFormat:
- NSLocalizedString(@"Conference", nil),
- linphone_core_get_conference_size(lc) - linphone_core_is_in_conference(lc)];
- [cell.textLabel setText:t];
-
- [self updateActive:NO cell:cell];
- cell.selected = NO;
-
- [callTableView deselectRowAtIndexPath:indexPath animated:NO];
-
- if (!linphone_core_is_in_conference(lc)) {
- [cell.detailTextLabel setText:NSLocalizedString(@"(tap to enter conference)", nil)];
- } else {
- [cell.detailTextLabel setText:
- [NSString stringWithFormat:NSLocalizedString(@"(me + %d participants)", nil), linphone_core_get_conference_size(lc) - linphone_core_is_in_conference(lc)]];
- }
- cell.imageView.image = nil;
-}
-
-- (void)secureIconPressed:(UIControl*) button withEvent: (UIEvent*) evt {
- NSSet* touches = [evt allTouches];
- UITouch* touch = [touches anyObject];
- CGPoint currentTouchPos = [touch locationInView:self.callTableView];
- NSIndexPath *path = [self.callTableView indexPathForRowAtPoint:currentTouchPos];
- if (path) {
- LinphoneCall* call = [InCallViewController retrieveCallAtIndex:path.row inConference:NO];
- // start action sheet to validate/unvalidate zrtp code
- CallDelegate* cd = [[CallDelegate alloc] init];
- cd.eventType = CD_ZRTP;
- cd.delegate = self;
- cd.call = call;
- UIView* container=(UIView*)[callTableView cellForRowAtIndexPath:path].accessoryView;
- UIButton *button=(UIButton*)[container viewWithTag:SECURE_BUTTON_TAG];
- [button setImage:nil forState:UIControlStateNormal];
-
- if (visibleActionSheet != nil) {
- [visibleActionSheet dismissWithClickedButtonIndex:visibleActionSheet.cancelButtonIndex animated:TRUE];
- }
- visibleActionSheet = [[UIActionSheet alloc] initWithTitle:[NSString stringWithFormat:NSLocalizedString(@" Mark auth token '%s' as:",nil),linphone_call_get_authentication_token(call)]
- delegate:cd
- cancelButtonTitle:NSLocalizedString(@"Unverified",nil)
- destructiveButtonTitle:NSLocalizedString(@"Verified",nil)
- otherButtonTitles:nil];
-
- visibleActionSheet.actionSheetStyle = UIActionSheetStyleDefault;
- [visibleActionSheet showInView:[[UIApplication sharedApplication].delegate window]];
- [visibleActionSheet release];
- }
-}
-*/
- (void)actionSheet:(UIActionSheet *)actionSheet ofType:(enum CallDelegateType)type clickedButtonAtIndex:(NSInteger)buttonIndex withUserDatas:(void *)datas {
LinphoneCall* call = (LinphoneCall*)datas;
// maybe we could verify call validity
@@ -819,7 +575,4 @@ static void hideSpinner(LinphoneCall* call, void* user_data) {
}
}
-
-
-
@end
diff --git a/Classes/LinphoneManager.h b/Classes/LinphoneManager.h
index 9975dad3d..a7c527252 100644
--- a/Classes/LinphoneManager.h
+++ b/Classes/LinphoneManager.h
@@ -116,6 +116,8 @@ typedef struct _LinphoneCallAppData {
- (void)fullScreen:(BOOL) enabled;
- (PhoneView) currentView;
+- (void)enableSpeaker:(BOOL)enable;
+
@property (nonatomic, retain) id settingsStore;
@property Connectivity connectivity;
diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m
index 15cbf418d..ee51828a7 100644
--- a/Classes/LinphoneManager.m
+++ b/Classes/LinphoneManager.m
@@ -17,8 +17,6 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#include "linphonecore_utils.h"
-#include "lpconfig.h"
#include
#include
#include
@@ -32,6 +30,10 @@
#import "FastAddressBook.h"
#import "LinphoneCoreSettingsStore.h"
+#include "linphonecore_utils.h"
+#include "lpconfig.h"
+#include "private.h"
+
static LinphoneCore* theLinphoneCore=nil;
static LinphoneManager* theLinphoneManager=nil;
@@ -219,9 +221,9 @@ struct codec_name_pref_table codec_pref_table[]={
return;
}
-- (void)onCall:(LinphoneCall*) call StateChanged: (LinphoneCallState) new_state withMessage: (const char *) message {
+- (void)onCall:(LinphoneCall*)call StateChanged:(LinphoneCallState)state withMessage:(const char *)message {
// Handling wrapper
- if(new_state == LinphoneCallReleased) {
+ if(state == LinphoneCallReleased) {
if(linphone_call_get_user_pointer(call) != NULL) {
free (linphone_call_get_user_pointer(call));
linphone_call_set_user_pointer(call, NULL);
@@ -234,14 +236,19 @@ struct codec_name_pref_table codec_pref_table[]={
linphone_call_set_user_pointer(call, data);
}
- if (new_state == LinphoneCallIncomingReceived) {
+ if (state == LinphoneCallIncomingReceived) {
[self updateCallWithAddressBookData:call]; // display name is updated
}
+ if ((state == LinphoneCallEnd || state == LinphoneCallError)) {
+ if(linphone_core_get_calls_nb([LinphoneManager getLc]) == 0)
+ [self enableSpeaker:FALSE];
+ }
+
// Post event
NSDictionary* dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
[NSValue valueWithPointer:call], @"call",
- [NSNumber numberWithInt:new_state], @"state",
+ [NSNumber numberWithInt:state], @"state",
[NSString stringWithUTF8String:message], @"message", nil] autorelease];
[[NSNotificationCenter defaultCenter] postNotificationName:@"LinphoneCallUpdate" object:self userInfo:dict];
}
@@ -532,7 +539,6 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
}
}
-
//scheduling loop
- (void)iterate {
linphone_core_iterate(theLinphoneCore);
@@ -573,7 +579,7 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
/*************
*lib linphone init method
*/
-- (void)startLibLinphone {
+- (void)startLibLinphone {
//get default config from bundle
NSBundle* myBundle = [NSBundle mainBundle];
@@ -610,11 +616,12 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
linphone_core_set_root_ca(theLinphoneCore, lRootCa);
// Set audio assets
- const char* lRing = [[myBundle pathForResource:@"oldphone-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
+ const char* lRing = [[myBundle pathForResource:@"oldphone-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
linphone_core_set_ring(theLinphoneCore, lRing );
- const char* lRingBack = [[myBundle pathForResource:@"ringback"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
+ const char* lRingBack = [[myBundle pathForResource:@"ringback"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
linphone_core_set_ringback(theLinphoneCore, lRingBack);
-
+ const char* lPlay = [[myBundle pathForResource:@"toy-mono"ofType:@"wav"] cStringUsingEncoding:[NSString defaultCStringEncoding]];
+ linphone_core_set_play_file(theLinphoneCore, lPlay);
linphone_core_set_zrtp_secrets_file(theLinphoneCore, [zrtpSecretsFileName cStringUsingEncoding:[NSString defaultCStringEncoding]]);
@@ -665,11 +672,6 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
}
- if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]
- && [UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
- //go directly to bg mode
- [self enterBackgroundMode];
- }
NSUInteger cpucount = [[NSProcessInfo processInfo] processorCount];
ms_set_cpu_count(cpucount);
@@ -692,7 +694,12 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
ms_warning("Linphone [%s] started on [%s]"
,linphone_core_get_version()
,[[UIDevice currentDevice].model cStringUsingEncoding:[NSString defaultCStringEncoding]] );
-
+
+ if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]
+ && [UIApplication sharedApplication].applicationState == UIApplicationStateBackground) {
+ //go directly to bg mode
+ [self enterBackgroundMode];
+ }
}
- (void)refreshRegisters{
@@ -743,6 +750,21 @@ void networkReachabilityCallBack(SCNetworkReachabilityRef target, SCNetworkReach
//let the user resume the call manually.
}
+- (void)enableSpeaker:(BOOL)enable {
+ //redirect audio to speaker
+ if(enable) {
+ UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
+ AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute
+ , sizeof (audioRouteOverride)
+ , &audioRouteOverride);
+ } else {
+ UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
+ AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute
+ , sizeof (audioRouteOverride)
+ , &audioRouteOverride);
+ }
+}
+
+ (BOOL)runningOnIpad {
#ifdef UI_USER_INTERFACE_IDIOM
return (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad);
diff --git a/Classes/LinphoneUI/UICallBar.h b/Classes/LinphoneUI/UICallBar.h
index b93362fbc..564722771 100644
--- a/Classes/LinphoneUI/UICallBar.h
+++ b/Classes/LinphoneUI/UICallBar.h
@@ -24,6 +24,7 @@
#import "UISpeakerButton.h"
#import "UIVideoButton.h"
#import "UIHangUpButton.h"
+#import "UIDigitButton.h"
@interface UICallBar: UIViewController {
UIPauseButton* pauseButton;
@@ -33,6 +34,21 @@
UISpeakerButton* speakerButton;
UIButton* optionsButton;
UIHangUpButton* hangupButton;
+ UIView* padView;
+
+ //Key pad
+ UIDigitButton* oneButton;
+ UIDigitButton* twoButton;
+ UIDigitButton* threeButton;
+ UIDigitButton* fourButton;
+ UIDigitButton* fiveButton;
+ UIDigitButton* sixButton;
+ UIDigitButton* sevenButton;
+ UIDigitButton* eightButton;
+ UIDigitButton* nineButton;
+ UIDigitButton* starButton;
+ UIDigitButton* zeroButton;
+ UIDigitButton* hashButton;
}
@property (nonatomic, retain) IBOutlet UIPauseButton* pauseButton;
@@ -42,8 +58,23 @@
@property (nonatomic, retain) IBOutlet UISpeakerButton* speakerButton;
@property (nonatomic, retain) IBOutlet UIButton* optionsButton;
@property (nonatomic, retain) IBOutlet UIHangUpButton* hangupButton;
+@property (nonatomic, retain) IBOutlet UIView* padView;
+
+@property (nonatomic, retain) IBOutlet UIButton* oneButton;
+@property (nonatomic, retain) IBOutlet UIButton* twoButton;
+@property (nonatomic, retain) IBOutlet UIButton* threeButton;
+@property (nonatomic, retain) IBOutlet UIButton* fourButton;
+@property (nonatomic, retain) IBOutlet UIButton* fiveButton;
+@property (nonatomic, retain) IBOutlet UIButton* sixButton;
+@property (nonatomic, retain) IBOutlet UIButton* sevenButton;
+@property (nonatomic, retain) IBOutlet UIButton* eightButton;
+@property (nonatomic, retain) IBOutlet UIButton* nineButton;
+@property (nonatomic, retain) IBOutlet UIButton* starButton;
+@property (nonatomic, retain) IBOutlet UIButton* zeroButton;
+@property (nonatomic, retain) IBOutlet UIButton* hashButton;
- (IBAction)onOptionsClick:(id)sender;
- (IBAction)onConferenceClick:(id)sender;
+- (IBAction)onPadClick:(id)sender;
@end
diff --git a/Classes/LinphoneUI/UICallBar.m b/Classes/LinphoneUI/UICallBar.m
index 74e7f2f75..c63769ada 100644
--- a/Classes/LinphoneUI/UICallBar.m
+++ b/Classes/LinphoneUI/UICallBar.m
@@ -20,6 +20,9 @@
#import "UICallBar.h"
#import "LinphoneManager.h"
+#import "CPAnimationSequence.h"
+#import "CPAnimationStep.h"
+
#include "linphonecore.h"
#include "private.h"
@@ -32,6 +35,20 @@
@synthesize speakerButton;
@synthesize optionsButton;
@synthesize hangupButton;
+@synthesize padView;
+
+@synthesize oneButton;
+@synthesize twoButton;
+@synthesize threeButton;
+@synthesize fourButton;
+@synthesize fiveButton;
+@synthesize sixButton;
+@synthesize sevenButton;
+@synthesize eightButton;
+@synthesize nineButton;
+@synthesize starButton;
+@synthesize zeroButton;
+@synthesize hashButton;
- (id)init {
return [super initWithNibName:@"UICallBar" bundle:[NSBundle mainBundle]];
@@ -39,6 +56,20 @@
- (void)viewDidLoad {
[pauseButton setType:UIPauseButtonType_CurrentCall call:nil];
+
+ [zeroButton initWithNumber:'0' addressField:nil dtmf:true];
+ [oneButton initWithNumber:'1' addressField:nil dtmf:true];
+ [twoButton initWithNumber:'2' addressField:nil dtmf:true];
+ [threeButton initWithNumber:'3' addressField:nil dtmf:true];
+ [fourButton initWithNumber:'4' addressField:nil dtmf:true];
+ [fiveButton initWithNumber:'5' addressField:nil dtmf:true];
+ [sixButton initWithNumber:'6' addressField:nil dtmf:true];
+ [sevenButton initWithNumber:'7' addressField:nil dtmf:true];
+ [eightButton initWithNumber:'8' addressField:nil dtmf:true];
+ [nineButton initWithNumber:'9' addressField:nil dtmf:true];
+ [starButton initWithNumber:'*' addressField:nil dtmf:true];
+ [hashButton initWithNumber:'#' addressField:nil dtmf:true];
+
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callUpdate:) name:@"LinphoneCallUpdate" object:nil];
}
@@ -47,6 +78,9 @@
}
- (void)callUpdate: (NSNotification*) notif {
+ //LinphoneCall *call = [[notif.userInfo objectForKey: @"call"] pointerValue];
+ LinphoneCallState state = [[notif.userInfo objectForKey: @"state"] intValue];
+
// check LinphoneCore is initialized
LinphoneCore* lc = nil;
if([LinphoneManager isLcReady])
@@ -72,6 +106,20 @@
[conferenceButton setHidden:true];
}
}
+
+ if(linphone_core_get_current_call(lc) == NULL) {
+ [self hidePad];
+ }
+
+ switch(state) {
+ LinphoneCallEnd:
+ LinphoneCallError:
+ LinphoneCallIncoming:
+ LinphoneCallOutgoing:
+ [self hidePad];
+ default:
+ break;
+ }
}
- (void)dealloc {
@@ -87,6 +135,54 @@
[super dealloc];
}
+- (IBAction)onPadClick:(id)sender {
+ if([padView isHidden]) {
+ [self showPad];
+ } else {
+ [self hidePad];
+ }
+}
+
+- (void)showPad{
+ CGRect frame = [padView frame];
+ int original_y = frame.origin.y;
+ frame.origin.y = [[self view] frame].size.height;
+ [padView setFrame:frame];
+ [padView setHidden:FALSE];
+ CPAnimationSequence* move = [CPAnimationSequence sequenceWithSteps:
+ [CPAnimationStep for:0.5 animate:^{
+ CGRect frame = [padView frame];
+ frame.origin.y = original_y;
+ [padView setFrame:frame];
+ }],
+ nil
+ ];
+ [move run];
+ [move release];
+}
+
+- (void)hidePad{
+ CGRect frame = [padView frame];
+ int original_y = frame.origin.y;
+
+ CPAnimationSequence* move = [CPAnimationSequence sequenceWithSteps:
+ [CPAnimationStep for:0.5 animate:^{
+ CGRect frame = [padView frame];
+ frame.origin.y = [[self view] frame].size.height;
+ [padView setFrame:frame];
+ }],
+ [CPAnimationStep after:0.0 animate:^{
+ CGRect frame = [padView frame];
+ frame.origin.y = original_y;
+ [padView setHidden:TRUE];
+ [padView setFrame:frame];
+ }],
+ nil
+ ];
+ [move run];
+ [move release];
+}
+
- (IBAction)onOptionsClick:(id)sender {
// Go to dialer view
NSDictionary *dict = [[[NSDictionary alloc] initWithObjectsAndKeys:
diff --git a/Classes/LinphoneUI/UICallBar.xib b/Classes/LinphoneUI/UICallBar.xib
index 92d108fa6..529c86679 100644
--- a/Classes/LinphoneUI/UICallBar.xib
+++ b/Classes/LinphoneUI/UICallBar.xib
@@ -38,17 +38,13 @@
-2147483356
- {{0, 10}, {320, 125}}
+ {{0, 335}, {320, 125}}
-
_NS:9
- 3
- MQA
-
- 2
-
+ 1
+ MCAxIDAuMTkxOTQ1NDc1NQA
NO
NO
@@ -57,277 +53,664 @@
NO
IBCocoaTouchFramework
-
+
- 292
- {80, 67}
+ -2147483360
+
+
+
+ 292
+ {{-20, 20}, {107, 54}}
+
+
+
+
+ 1
+ MC40MDAwMDAwMSAxIDEgMAA
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+ 3
+ MQA
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+ 3
+ MC41AA
+
+
+ NSImage
+ 1-over.png
+
+
+ NSImage
+ 1-actif.png
+
+
+ Helvetica-Bold
+ Helvetica
+ 2
+ 15
+
+
+ Helvetica-Bold
+ 15
+ 16
+
+
+
+
+ 292
+ {{87, 20}, {106, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 2-over.png
+
+
+ NSImage
+ 2-actif.png
+
+
+
+
+
+
+ 292
+ {{193, 20}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 3-actif.png
+
+
+
+
+
+
+ 292
+ {{-20, 82}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 4-over.png
+
+
+ NSImage
+ 4-actif.png
+
+
+
+
+
+
+ 292
+ {{87, 82}, {106, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 5-over.png
+
+
+ NSImage
+ 5-actif.png
+
+
+
+
+
+
+ 292
+ {{193, 82}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 6-over.png
+
+
+ NSImage
+ 6-actif.png
+
+
+
+
+
+
+ 292
+ {{-20, 144}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 7-over.png
+
+
+ NSImage
+ 7-actif.png
+
+
+
+
+
+
+ 292
+ {{87, 144}, {106, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 8-over.png
+
+
+ NSImage
+ 8-actif.png
+
+
+
+
+
+
+ 292
+ {{193, 144}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 9-over.png
+
+
+ NSImage
+ 9-actif.png
+
+
+
+
+
+
+ 292
+ {{-20, 206}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ etoile-over.png
+
+
+ NSImage
+ etoile-actif.png
+
+
+
+
+
+
+ 292
+ {{87, 206}, {106, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ 0-over.png
+
+
+ NSImage
+ 0-actif.png
+
+
+
+
+
+
+ 292
+ {{193, 206}, {107, 54}}
+
+
+
+ NO
+ NO
+ IBCocoaTouchFramework
+ 0
+ 0
+
+
+ 1
+ MC4xOTYwNzg0MyAwLjMwOTgwMzkzIDAuNTIxNTY4NjYAA
+
+
+
+ NSImage
+ diese-over.png
+
+
+ NSImage
+ diese-actif.png
+
+
+
+
+
+ {{20, 57}, {281, 260}}
-
_NS:9
- NO
-
- Video
-
- IBCocoaTouchFramework
- 0
- 0
- NO
- NO
-
+
3
- MC41AA
-
-
- NSImage
- video-ON-over.png
-
-
- NSImage
- video-OFF-disabled.png
-
-
- NSImage
- video-ON-actif.png
-
-
- NSImage
- video-OFF-actif.png
-
-
- 2
- 15
-
-
- Helvetica-Bold
- 15
- 16
+ MSAwLjQAA
+
+ 2
+
+ IBCocoaTouchFramework
-
+
292
- {{80, 0}, {80, 67}}
+
+
+
+ 292
+ {80, 67}
+
+
+
+ _NS:9
+ NO
+
+ Video
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+ NO
+
+
+ NSImage
+ video-ON-over.png
+
+
+ NSImage
+ video-OFF-disabled.png
+
+
+ NSImage
+ video-ON-actif.png
+
+
+ NSImage
+ video-OFF-actif.png
+
+
+ 2
+ 15
+
+
+
+
+
+ 292
+ {{80, 0}, {80, 67}}
+
+
+
+ _NS:9
+ NO
+
+ Micro
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ micro-ON-over.png
+
+
+ NSImage
+ micro-ON-actif.png
+
+
+ NSImage
+ micro-OFF-actif.png
+
+
+
+
+
+
+ 292
+ {{160, 0}, {80, 67}}
+
+
+
+ _NS:9
+ NO
+
+ Speaker
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ speacker-ON-over.png
+
+
+ NSImage
+ speacker-ON-actif.png
+
+
+ NSImage
+ speacker-OFF-actif.png
+
+
+
+
+
+
+ 292
+ {{240, 0}, {80, 67}}
+
+
+
+ _NS:9
+ NO
+
+ Add call
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ options_over.png
+
+
+ NSImage
+ add-call-over.png
+
+
+ NSImage
+ options_default.png
+
+
+
+
+
+
+ 264
+ {{0, 67}, {105, 68}}
+
+
+
+ _NS:9
+ NO
+
+ Pause
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ pause-over.png
+
+
+ NSImage
+ play-actif.png
+
+
+ NSImage
+ pause-actif.png
+
+
+
+
+
+
+ -2147483384
+ {{0, 67}, {105, 68}}
+
+
+
+ _NS:9
+ NO
+
+ Start Conference
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+ NO
+
+
+ NSImage
+ start-conference-over.png
+
+
+ NSImage
+ start-conference-actif.png
+
+
+
+
+
+
+ 264
+ {{105, 67}, {111, 68}}
+
+
+
+ _NS:9
+ NO
+
+ Hangup
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ raccrocher-over.png
+
+
+ NSImage
+ raccrocher-actif.png
+
+
+
+
+
+
+ 264
+ {{215, 67}, {105, 68}}
+
+
+
+ _NS:9
+ NO
+
+ Back
+
+ IBCocoaTouchFramework
+ 0
+ 0
+ NO
+
+
+ NSImage
+ clavier-secondaire-over.png
+
+
+ NSImage
+ clavier-secondaire-actif.png
+
+
+
+
+
+
+ {{0, 325}, {320, 135}}
-
+
_NS:9
- NO
-
- Micro
+
+ 3
+ MCAwAA
IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- micro-ON-over.png
-
-
- NSImage
- micro-ON-actif.png
-
-
- NSImage
- micro-OFF-actif.png
-
-
-
-
-
-
- 292
- {{160, 0}, {80, 67}}
-
-
-
- _NS:9
- NO
-
- Speaker
-
- IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- speacker-ON-over.png
-
-
- NSImage
- speacker-ON-actif.png
-
-
- NSImage
- speacker-OFF-actif.png
-
-
-
-
-
-
- 292
- {{240, 0}, {80, 67}}
-
-
-
- _NS:9
- NO
-
- Add call
-
- IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- options_over.png
-
-
- NSImage
- add-call-over.png
-
-
- NSImage
- options_default.png
-
-
-
-
-
-
- 264
- {{0, 67}, {105, 68}}
-
-
-
- _NS:9
- NO
-
- Pause
-
- IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- pause-over.png
-
-
- NSImage
- play-actif.png
-
-
- NSImage
- pause-actif.png
-
-
-
-
-
-
- -2147483384
- {{0, 67}, {105, 68}}
-
-
-
- _NS:9
- NO
-
- Start Conference
-
- IBCocoaTouchFramework
- 0
- 0
- NO
- NO
-
-
- NSImage
- start-conference-over.png
-
-
- NSImage
- start-conference-actif.png
-
-
-
-
-
-
- 264
- {{105, 67}, {111, 68}}
-
-
-
- _NS:9
- NO
-
- Hangup
-
- IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- raccrocher-over.png
-
-
- NSImage
- raccrocher-actif.png
-
-
-
-
-
-
- 264
- {{215, 67}, {105, 68}}
-
-
-
- _NS:9
- NO
-
- Back
-
- IBCocoaTouchFramework
- 0
- 0
- NO
-
-
- NSImage
- clavier-secondaire-over.png
-
-
- NSImage
- clavier-secondaire-actif.png
-
-
-
-
- {320, 135}
+ {320, 460}
-
+
_NS:9
-
- 1
- MCAxIDAuMTkxOTQ1NDc1NSAwAA
-
+
NO
IBCocoaTouchFramework
@@ -344,43 +727,11 @@
- pauseButton
+ hangupButton
-
+
- 15
-
-
-
- videoButton
-
-
-
- 17
-
-
-
- microButton
-
-
-
- 14
-
-
-
- speakerButton
-
-
-
- 16
-
-
-
- optionsButton
-
-
-
- 19
+ 29
@@ -392,11 +743,156 @@
- hangupButton
+ pauseButton
-
+
- 29
+ 15
+
+
+
+ optionsButton
+
+
+
+ 19
+
+
+
+ speakerButton
+
+
+
+ 16
+
+
+
+ microButton
+
+
+
+ 14
+
+
+
+ videoButton
+
+
+
+ 17
+
+
+
+ padView
+
+
+
+ 45
+
+
+
+ zeroButton
+
+
+
+ 47
+
+
+
+ twoButton
+
+
+
+ 48
+
+
+
+ threeButton
+
+
+
+ 49
+
+
+
+ starButton
+
+
+
+ 50
+
+
+
+ sixButton
+
+
+
+ 51
+
+
+
+ sevenButton
+
+
+
+ 52
+
+
+
+ oneButton
+
+
+
+ 53
+
+
+
+ nineButton
+
+
+
+ 54
+
+
+
+ hashButton
+
+
+
+ 55
+
+
+
+ fourButton
+
+
+
+ 56
+
+
+
+ fiveButton
+
+
+
+ 57
+
+
+
+ eightButton
+
+
+
+ 58
+
+
+
+ onPadClick:
+
+
+ 7
+
+ 46
@@ -441,14 +937,8 @@
-
-
-
-
-
-
-
-
+
+
callTabBar
@@ -460,53 +950,161 @@
mask
+
+ 30
+
+
+
+
+
+
+
+
+
+
+
+
+ buttons
+
6
-
+
dialerButton
7
-
+
hangupButton
+
+ 21
+
+
+ conferenceButton
+
8
-
+
pauseButton
10
-
+
optionsButton
-
- 12
-
-
- videoButton
-
-
- 11
-
-
- microButton
-
9
-
+
speakerButton
- 21
-
+ 11
+
+
+ microButton
+
+
+ 12
+
+
+ videoButton
+
+
+ 31
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- conferenceButton
+ pad
+
+
+ 43
+
+
+ 1
+
+
+ 42
+
+
+ 2
+
+
+ 41
+
+
+ 3
+
+
+ 40
+
+
+ 5
+
+
+ 39
+
+
+ 4
+
+
+ 38
+
+
+ 7
+
+
+ 37
+
+
+ 8
+
+
+ 36
+
+
+ 9
+
+
+ 35
+
+
+ #
+
+
+ 34
+
+
+ 0
+
+
+ 33
+
+
+ *
+
+
+ 32
+
+
+ 6
@@ -525,7 +1123,45 @@
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIPassView
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
+ UIDigitButton
+ com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -543,7 +1179,7 @@
- 29
+ 58
@@ -553,6 +1189,7 @@
id
id
+ id
@@ -563,51 +1200,128 @@
onOptionsClick:
id
+
+ onPadClick:
+ id
+
UIButton
+ UIButton
+ UIButton
+ UIButton
UIHangUpButton
+ UIButton
UIMicroButton
+ UIButton
+ UIButton
UIButton
+ UIView
UIPauseButton
+ UIButton
+ UIButton
UISpeakerButton
+ UIButton
+ UIButton
+ UIButton
UIVideoButton
+ UIButton
conferenceButton
UIButton
+
+ eightButton
+ UIButton
+
+
+ fiveButton
+ UIButton
+
+
+ fourButton
+ UIButton
+
hangupButton
UIHangUpButton
+
+ hashButton
+ UIButton
+
microButton
UIMicroButton
+
+ nineButton
+ UIButton
+
+
+ oneButton
+ UIButton
+
optionsButton
UIButton
+
+ padView
+ UIView
+
pauseButton
UIPauseButton
+
+ sevenButton
+ UIButton
+
+
+ sixButton
+ UIButton
+
speakerButton
UISpeakerButton
+
+ starButton
+ UIButton
+
+
+ threeButton
+ UIButton
+
+
+ twoButton
+ UIButton
+
videoButton
UIVideoButton
+
+ zeroButton
+ UIButton
+
IBProjectSource
./Classes/UICallBar.h
+
+ UIDigitButton
+ UILongTouchButton
+
+ IBProjectSource
+ ./Classes/UIDigitButton.h
+
+
UIHangUpButton
UIButton
@@ -616,6 +1330,14 @@
./Classes/UIHangUpButton.h
+
+ UILongTouchButton
+ UIButton
+
+ IBProjectSource
+ ./Classes/UILongTouchButton.h
+
+
UIMicroButton
UIToggleButton
@@ -624,6 +1346,14 @@
./Classes/UIMicroButton.h
+
+ UIPassView
+ UIView
+
+ IBProjectSource
+ ./Classes/UIPassView.h
+
+
UIPauseButton
UIToggleButton
@@ -651,17 +1381,6 @@
UIVideoButton
UIToggleButton
-
- videoUpdateIndicator
- UIActivityIndicatorView
-
-
- videoUpdateIndicator
-
- videoUpdateIndicator
- UIActivityIndicatorView
-
-
IBProjectSource
./Classes/UIVideoButton.h
@@ -678,9 +1397,32 @@
YES
3
+ {220, 113}
+ {220, 113}
+ {210, 113}
+ {210, 113}
+ {220, 113}
+ {220, 113}
+ {210, 113}
+ {210, 113}
+ {210, 113}
+ {220, 113}
+ {220, 113}
+ {210, 113}
+ {210, 113}
+ {210, 113}
+ {210, 113}
+ {220, 113}
+ {220, 113}
+ {210, 113}
+ {210, 113}
{16, 16}
{209, 136}
{209, 136}
+ {210, 113}
+ {210, 113}
+ {210, 113}
+ {210, 113}
{160, 134}
{160, 134}
{160, 134}
diff --git a/Classes/LinphoneUI/UICompositeViewController.h b/Classes/LinphoneUI/UICompositeViewController.h
index c684228e0..0a551c8a7 100644
--- a/Classes/LinphoneUI/UICompositeViewController.h
+++ b/Classes/LinphoneUI/UICompositeViewController.h
@@ -18,6 +18,8 @@
*/
#import
+#import
+
#import "LinphoneManager.h"
@interface UICompositeViewDescription: NSObject{
@@ -35,6 +37,7 @@
tabBar:(NSString*)tabBar
tabBarEnabled:(BOOL) tabBarEnabled
fullscreen:(BOOL) fullscreen;
+
@end
@interface UICompositeViewController : UIViewController {
@@ -49,8 +52,11 @@
NSMutableDictionary *viewControllerCache;
UICompositeViewDescription *currentViewDescription;
+ CATransition *viewTransition;
}
+@property (strong) CATransition *viewTransition;
+
@property (nonatomic, retain) IBOutlet UIView* stateBarView;
@property (nonatomic, retain) IBOutlet UIView* contentView;
@property (nonatomic, retain) IBOutlet UIView* tabBarView;
diff --git a/Classes/LinphoneUI/UICompositeViewController.m b/Classes/LinphoneUI/UICompositeViewController.m
index 6e7cba69b..06286378b 100644
--- a/Classes/LinphoneUI/UICompositeViewController.m
+++ b/Classes/LinphoneUI/UICompositeViewController.m
@@ -19,8 +19,6 @@
#import "UICompositeViewController.h"
-#import
-
@implementation UICompositeViewDescription
- (id)copy {
@@ -56,15 +54,16 @@
@synthesize contentView;
@synthesize tabBarView;
+@synthesize viewTransition;
-- (void)myInit {
+- (void)initUICompositeViewController {
self->viewControllerCache = [[NSMutableDictionary alloc] init];
}
- (id)init{
self = [super init];
if (self) {
- [self myInit];
+ [self initUICompositeViewController];
}
return self;
}
@@ -72,7 +71,7 @@
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
- [self myInit];
+ [self initUICompositeViewController];
}
return self;
}
@@ -80,7 +79,7 @@
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self myInit];
+ [self initUICompositeViewController];
}
return self;
}
@@ -141,19 +140,14 @@
currentViewDescription = description;
// Animate only with a previous screen
- if(oldViewDescription != nil) {
- CATransition* trans = [CATransition animation];
- [trans setType:kCATransitionPush];
- [trans setDuration:0.35];
- [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
- [trans setSubtype:kCATransitionFromRight];
- [contentView.layer addAnimation:trans forKey:@"Transition"];
+ if(oldViewDescription != nil && viewTransition != nil) {
+ [contentView.layer addAnimation:viewTransition forKey:@"Transition"];
if((oldViewDescription->stateBarEnabled == true && currentViewDescription->stateBarEnabled == false) ||
(oldViewDescription->stateBarEnabled == false && currentViewDescription->stateBarEnabled == true)) {
- [stateBarView.layer addAnimation:trans forKey:@"Transition"];
+ [stateBarView.layer addAnimation:viewTransition forKey:@"Transition"];
}
if(oldViewDescription->tabBar != currentViewDescription->tabBar) {
- [tabBarView.layer addAnimation:trans forKey:@"Transition"];
+ [tabBarView.layer addAnimation:viewTransition forKey:@"Transition"];
}
}
@@ -230,11 +224,12 @@
}
} else {
contentFrame.size.height = tabFrame.origin.y + tabFrame.size.height;
- if(currentViewDescription->fullscreen)
- contentFrame.size.height += IPHONE_STATUSBAR_HEIGHT;
tabFrame.origin.y = [[UIScreen mainScreen] bounds].size.height - IPHONE_STATUSBAR_HEIGHT;
}
+ if(currentViewDescription->fullscreen)
+ contentFrame.size.height = [[UIScreen mainScreen] bounds].size.height + IPHONE_STATUSBAR_HEIGHT;
+
// Resize innerView
CGRect innerContentFrame = innerView.frame;
innerContentFrame.size = contentFrame.size;
diff --git a/Classes/LinphoneUI/UICompositeViewController.xib b/Classes/LinphoneUI/UICompositeViewController.xib
index 15ca250eb..1b47e9536 100644
--- a/Classes/LinphoneUI/UICompositeViewController.xib
+++ b/Classes/LinphoneUI/UICompositeViewController.xib
@@ -40,6 +40,7 @@
{{0, 23}, {320, 380}}
+
_NS:9
YES
IBCocoaTouchFramework
@@ -65,6 +66,7 @@
{{0, 400}, {320, 60}}
+
_NS:9
3
@@ -77,6 +79,7 @@
{{0, 20}, {320, 460}}
+
3
MQA
@@ -178,8 +181,10 @@
UIResponder
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIPassView
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
+ UIPassView
com.apple.InterfaceBuilder.IBCocoaTouchPlugin
@@ -217,6 +222,14 @@
./Classes/UICompositeViewController.h
+
+ UIPassView
+ UIView
+
+ IBProjectSource
+ ./Classes/UIPassView.h
+
+
0
diff --git a/Classes/LinphoneUI/UIHangUpButton.m b/Classes/LinphoneUI/UIHangUpButton.m
index bc7b5da2f..c7cb1ddab 100644
--- a/Classes/LinphoneUI/UIHangUpButton.m
+++ b/Classes/LinphoneUI/UIHangUpButton.m
@@ -62,14 +62,14 @@
}
}
-- (void)myInit {
+- (void)initUIHangUpButton {
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
}
- (id)init{
self = [super init];
if (self) {
- [self myInit];
+ [self initUIHangUpButton];
}
return self;
}
@@ -77,7 +77,7 @@
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self myInit];
+ [self initUIHangUpButton];
}
return self;
}
@@ -85,7 +85,7 @@
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
- [self myInit];
+ [self initUIHangUpButton];
}
return self;
}
diff --git a/Classes/LinphoneUI/UIMainBar.xib b/Classes/LinphoneUI/UIMainBar.xib
index 3779c3709..c42a61920 100644
--- a/Classes/LinphoneUI/UIMainBar.xib
+++ b/Classes/LinphoneUI/UIMainBar.xib
@@ -44,11 +44,8 @@
_NS:9
- 3
- MQA
-
- 2
-
+ 1
+ MCAxIDAuMDkwOTI0NTczOTEAA
NO
NO
diff --git a/Classes/LinphoneUI/UIPassView.h b/Classes/LinphoneUI/UIPassView.h
new file mode 100644
index 000000000..839832347
--- /dev/null
+++ b/Classes/LinphoneUI/UIPassView.h
@@ -0,0 +1,24 @@
+/* UIPassView.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
+
+@interface UIPassView : UIView
+
+@end
diff --git a/Classes/LinphoneUI/UIPassView.m b/Classes/LinphoneUI/UIPassView.m
new file mode 100644
index 000000000..201f0fa2d
--- /dev/null
+++ b/Classes/LinphoneUI/UIPassView.m
@@ -0,0 +1,44 @@
+/* UIPassView.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 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 "UIPassView.h"
+
+@implementation UIPassView
+
+- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event {
+ BOOL pointInside = NO;
+
+ for(UIView *child in [self subviews]) {
+ if(![child isHidden]) {
+ if(CGRectContainsPoint(child.frame, point)) {
+ CGPoint newPoint = point;
+ newPoint.x -= child.frame.origin.x;
+ newPoint.y -= child.frame.origin.y;
+ if([child pointInside:newPoint withEvent:event]) {
+ pointInside = YES;
+ break;
+ }
+ }
+ }
+ }
+
+ return pointInside;
+}
+
+@end
diff --git a/Classes/LinphoneUI/UIPauseButton.m b/Classes/LinphoneUI/UIPauseButton.m
index 615babfa7..36fe79341 100644
--- a/Classes/LinphoneUI/UIPauseButton.m
+++ b/Classes/LinphoneUI/UIPauseButton.m
@@ -25,14 +25,14 @@
@implementation UIPauseButton
-- (void)myInit {
+- (void)initUIPauseButton {
self->type = UIPauseButtonType_CurrentCall;
}
- (id)init{
self = [super init];
if (self) {
- [self myInit];
+ [self initUIPauseButton];
}
return self;
}
@@ -40,7 +40,7 @@
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self myInit];
+ [self initUIPauseButton];
}
return self;
}
@@ -48,7 +48,7 @@
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
- [self myInit];
+ [self initUIPauseButton];
}
return self;
}
diff --git a/Classes/LinphoneUI/UISpeakerButton.m b/Classes/LinphoneUI/UISpeakerButton.m
index 6665fb799..d931cb4df 100644
--- a/Classes/LinphoneUI/UISpeakerButton.m
+++ b/Classes/LinphoneUI/UISpeakerButton.m
@@ -17,8 +17,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#import "UISpeakerButton.h"
#import
+#import "UISpeakerButton.h"
+
+#import "LinphoneManager.h"
+
#include "linphonecore.h"
@implementation UISpeakerButton
@@ -35,33 +38,46 @@ static void audioRouteChangeListenerCallback (
}
+- (void)initUISpeakerButton {
+ AudioSessionInitialize(NULL, NULL, NULL, NULL);
+ OSStatus lStatus = AudioSessionAddPropertyListener(routeChangeID, audioRouteChangeListenerCallback, self);
+ if (lStatus) {
+ ms_error ("cannot register route change handler [%ld]",lStatus);
+ }
+}
+
- (id)init {
- if((self = [super init]) != nil) {
-
- AudioSessionInitialize(NULL, NULL, NULL, NULL);
- OSStatus lStatus = AudioSessionAddPropertyListener(routeChangeID, audioRouteChangeListenerCallback, self);
- if (lStatus) {
- ms_error ("cannot register route change handler [%ld]",lStatus);
- }
+ self = [super init];
+ if (self) {
+ [self initUISpeakerButton];
}
return self;
}
+- (id)initWithFrame:(CGRect)frame {
+ self = [super initWithFrame:frame];
+ if (self) {
+ [self initUISpeakerButton];
+ }
+ return self;
+}
+
+- (id)initWithCoder:(NSCoder *)decoder {
+ self = [super initWithCoder:decoder];
+ if (self) {
+ [self initUISpeakerButton];
+ }
+ return self;
+}
- (void)onOn {
- //redirect audio to speaker
- UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
- AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute
- , sizeof (audioRouteOverride)
- , &audioRouteOverride);
-
+ [[LinphoneManager instance] enableSpeaker:TRUE];
}
+
- (void)onOff {
- UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
- AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute
- , sizeof (audioRouteOverride)
- , &audioRouteOverride);
+ [[LinphoneManager instance] enableSpeaker:FALSE];
}
+
- (bool)onUpdate {
CFStringRef lNewRoute=CFSTR("Unknown");
UInt32 lNewRouteSize = sizeof(lNewRoute);
diff --git a/Classes/LinphoneUI/UIToggleButton.m b/Classes/LinphoneUI/UIToggleButton.m
index 5194912bc..92efe199d 100644
--- a/Classes/LinphoneUI/UIToggleButton.m
+++ b/Classes/LinphoneUI/UIToggleButton.m
@@ -53,16 +53,24 @@
return self.selected;
}
-- (id)init {
+
+- (void)initUIToggleButton {
[self update];
[self addTarget:self action:@selector(touchUp:) forControlEvents:UIControlEventTouchUpInside];
- return self;
+}
+
+- (id)init {
+ self = [super init];
+ if (self) {
+ [self initUIToggleButton];
+ }
+ return self;
}
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
- [self init];
+ [self initUIToggleButton];
}
return self;
}
@@ -70,12 +78,11 @@
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self init];
+ [self initUIToggleButton];
}
return self;
}
-
- (void)dealloc {
[super dealloc];
}
diff --git a/Classes/LinphoneUI/UIVideoButton.h b/Classes/LinphoneUI/UIVideoButton.h
index 17d588343..86586ce74 100644
--- a/Classes/LinphoneUI/UIVideoButton.h
+++ b/Classes/LinphoneUI/UIVideoButton.h
@@ -22,10 +22,7 @@
#import "UIToggleButton.h"
@interface UIVideoButton : UIToggleButton {
- UIActivityIndicatorView* videoUpdateIndicator;
+ BOOL locked;
}
-
-@property (nonatomic, retain) IBOutlet UIActivityIndicatorView* videoUpdateIndicator;
-
@end
diff --git a/Classes/LinphoneUI/UIVideoButton.m b/Classes/LinphoneUI/UIVideoButton.m
index 2a7713b0f..961f1686a 100644
--- a/Classes/LinphoneUI/UIVideoButton.m
+++ b/Classes/LinphoneUI/UIVideoButton.m
@@ -22,16 +22,12 @@
@implementation UIVideoButton
-@synthesize videoUpdateIndicator;
-
- (void)onOn {
LinphoneCore* lc = [LinphoneManager getLc];
if (!linphone_core_video_enabled(lc))
return;
- [videoUpdateIndicator startAnimating];
- [videoUpdateIndicator setHidden: FALSE];
[self setEnabled: FALSE];
LinphoneCall* call = linphone_core_get_current_call([LinphoneManager getLc]);
if (call) {
@@ -51,8 +47,6 @@
if (!linphone_core_video_enabled(lc))
return;
- [videoUpdateIndicator startAnimating];
- [videoUpdateIndicator setHidden: FALSE];
[self setEnabled: FALSE];
LinphoneCall* call = linphone_core_get_current_call([LinphoneManager getLc]);
if (call) {
diff --git a/Classes/PhoneMainView.m b/Classes/PhoneMainView.m
index 2992fbcbc..1c0f0ab5e 100644
--- a/Classes/PhoneMainView.m
+++ b/Classes/PhoneMainView.m
@@ -30,7 +30,7 @@
@synthesize mainViewController;
-- (void)myInit {
+- (void)initPhoneMainView {
currentPhoneView = -1;
loadCount = 0; // For avoiding IOS 4 bug
@@ -42,7 +42,7 @@
- (id)init {
self = [super init];
if (self) {
- [self myInit];
+ [self initPhoneMainView];
}
return self;
}
@@ -50,7 +50,7 @@
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
- [self myInit];
+ [self initPhoneMainView];
}
return self;
}
@@ -58,11 +58,52 @@
- (id)initWithCoder:(NSCoder *)decoder {
self = [super initWithCoder:decoder];
if (self) {
- [self myInit];
+ [self initPhoneMainView];
}
return self;
}
+- (CATransition*)getTransition:(PhoneView)old new:(PhoneView)new {
+ CATransition* trans = [CATransition animation];
+ [trans setType:kCATransitionPush];
+ [trans setDuration:0.35];
+ [trans setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
+
+ bool left = false;
+
+ if(old == PhoneView_Chat) {
+ if(new == PhoneView_Contacts ||
+ new == PhoneView_Dialer ||
+ new == PhoneView_Settings ||
+ new == PhoneView_History) {
+ left = true;
+ }
+ } else if(old == PhoneView_Settings) {
+ if(new == PhoneView_Dialer ||
+ new == PhoneView_Contacts ||
+ new == PhoneView_History) {
+ left = true;
+ }
+ } else if(old == PhoneView_Dialer) {
+ if(new == PhoneView_Contacts ||
+ new == PhoneView_History) {
+ left = true;
+ }
+ } else if(old == PhoneView_Contacts) {
+ if(new == PhoneView_History) {
+ left = true;
+ }
+ }
+
+ if(left) {
+ [trans setSubtype:kCATransitionFromLeft];
+ } else {
+ [trans setSubtype:kCATransitionFromRight];
+ }
+
+ return trans;
+}
+
- (void)changeView: (NSNotification*) notif {
NSNumber *viewId = [notif.userInfo objectForKey: @"view"];
NSNumber *tabBar = [notif.userInfo objectForKey: @"tabBar"];
@@ -75,6 +116,7 @@
if(description == nil)
return;
if(view != currentPhoneView) {
+ [mainViewController setViewTransition:[self getTransition:currentPhoneView new:view]];
[mainViewController changeView:description];
currentPhoneView = view;
}
diff --git a/Classes/Utils/CPAnimationSequence.h b/Classes/Utils/CPAnimationSequence.h
new file mode 100755
index 000000000..d018d1dfc
--- /dev/null
+++ b/Classes/Utils/CPAnimationSequence.h
@@ -0,0 +1,26 @@
+
+// Created by Yang Meyer on 26.07.11.
+// Copyright 2011-2012 compeople AG. All rights reserved.
+
+#import
+#import "CPAnimationStep.h"
+
+/**
+ A CPAnimationSequence defines a sequence of CPAnimationStep objects, which can
+ be `-run` animatedly or non-animatedly.
+
+ CPAnimationSequence implements the Composite design pattern, with CPAnimationStep
+ as the base class.
+ */
+@interface CPAnimationSequence : CPAnimationStep
+
+#pragma mark - constructors
+
++ (id) sequenceWithSteps:(CPAnimationStep*)first, ... NS_REQUIRES_NIL_TERMINATION;
+
+#pragma mark - properties
+
+/** Animations steps, from first to last. */
+@property (nonatomic, strong, readonly) NSArray* steps;
+
+@end
diff --git a/Classes/Utils/CPAnimationSequence.m b/Classes/Utils/CPAnimationSequence.m
new file mode 100755
index 000000000..e87e869ec
--- /dev/null
+++ b/Classes/Utils/CPAnimationSequence.m
@@ -0,0 +1,79 @@
+
+// Created by Yang Meyer on 26.07.11.
+// Copyright 2011-2012 compeople AG. All rights reserved.
+
+#import "CPAnimationSequence.h"
+
+@interface CPAnimationStep(hidden)
+- (NSArray*) animationStepArray;
+@end
+
+@interface CPAnimationSequence()
+@property (nonatomic, strong, readwrite) NSArray* steps;
+@end
+
+#pragma mark -
+@implementation CPAnimationSequence
+
+@synthesize steps;
+
+#pragma mark - Object lifecycle
+
++ (id) sequenceWithSteps:(CPAnimationStep*)first, ... {
+ CPAnimationSequence* instance = [[self alloc] init];
+ if (instance) {
+ NSMutableArray* tempSteps = [[NSMutableArray alloc] initWithCapacity:10];
+ va_list args;
+ va_start(args, first);
+ [tempSteps insertObject:first atIndex:0];
+ CPAnimationStep* aStep;
+ while ((aStep = va_arg(args, CPAnimationStep*))) {
+ [tempSteps insertObject:aStep atIndex:0];
+ }
+ instance.steps = [NSArray arrayWithArray:tempSteps];
+ va_end(args);
+ }
+ return instance;
+}
+
+
+#pragma mark - property override
+
+- (void) setDelay:(NSTimeInterval)delay {
+ NSAssert(NO, @"Setting a delay on a sequence is undefined and therefore disallowed!");
+}
+
+- (void) setDuration:(NSTimeInterval)duration {
+ NSAssert(NO, @"Setting a duration on a sequence is undefined and therefore disallowed!");
+}
+
+- (void) setOptions:(UIViewAnimationOptions)options {
+ NSAssert(NO, @"Setting options on a sequence is undefined and therefore disallowed!");
+}
+
+#pragma mark - build the sequence
+
+- (NSArray*) animationStepArray {
+ NSMutableArray* array = [NSMutableArray arrayWithCapacity:[self.steps count]];
+ for (CPAnimationStep* current in self.steps) {
+ [array addObjectsFromArray:[current animationStepArray]];
+ }
+ return array;
+}
+
+#pragma mark - pretty-print
+
+- (NSString*) description {
+ NSMutableString* sequenceBody = [[NSMutableString alloc] initWithCapacity:100*[self.steps count]];
+ for (CPAnimationStep* step in self.steps) {
+ [sequenceBody appendString:[step description]];
+ }
+ // indent
+ [sequenceBody replaceOccurrencesOfString:@"\n"
+ withString:@"\n "
+ options:NSCaseInsensitiveSearch
+ range:NSMakeRange(0, [sequenceBody length])];
+ return [NSString stringWithFormat:@"\n(sequence:%@\n)", sequenceBody];
+}
+
+@end
diff --git a/Classes/Utils/CPAnimationStep.h b/Classes/Utils/CPAnimationStep.h
new file mode 100755
index 000000000..ca67b485c
--- /dev/null
+++ b/Classes/Utils/CPAnimationStep.h
@@ -0,0 +1,46 @@
+
+// Created by Yang Meyer on 26.07.11.
+// Copyright 2011 compeople AG. All rights reserved.
+
+#import
+
+/** Helper type definition for the component. */
+typedef void (^AnimationStep)(void);
+
+/**
+ A CPAnimationStep defines a single animation object with a delay, duration, execution block and animation options.
+ */
+@interface CPAnimationStep : NSObject
+
+#pragma mark - constructors
+
++ (id) after:(NSTimeInterval)delay
+ animate:(AnimationStep)step;
+
++ (id) for:(NSTimeInterval)duration
+ animate:(AnimationStep)step;
+
++ (id) after:(NSTimeInterval)delay
+ for:(NSTimeInterval)duration
+ animate:(AnimationStep)step;
+
++ (id) after:(NSTimeInterval)delay
+ for:(NSTimeInterval)duration
+ options:(UIViewAnimationOptions)theOptions
+ animate:(AnimationStep)step;
+
+#pragma mark - properties (normally already set by the constructor)
+
+@property (nonatomic) NSTimeInterval delay;
+@property (nonatomic) NSTimeInterval duration;
+@property (nonatomic, copy) AnimationStep step;
+@property (nonatomic) UIViewAnimationOptions options;
+
+#pragma mark - execution
+
+/** Starts the step execution. */
+- (void) runAnimated:(BOOL)animated;
+/** Shortcut for [step runAnimated:YES] */
+- (void) run;
+
+@end
diff --git a/Classes/Utils/CPAnimationStep.m b/Classes/Utils/CPAnimationStep.m
new file mode 100755
index 000000000..8ea76a77d
--- /dev/null
+++ b/Classes/Utils/CPAnimationStep.m
@@ -0,0 +1,124 @@
+
+// Created by Yang Meyer on 26.07.11.
+// Copyright 2011-2012 compeople AG. All rights reserved.
+
+#import "CPAnimationStep.h"
+
+@interface CPAnimationStep()
+/** A temporary reverse queue of animation steps, i.e. from last to first.
+ It is created when the step is run, and is modified during the animation,
+ and is destroyed when the animation finishes. */
+@property (nonatomic, strong) NSMutableArray* consumableSteps;
+@end
+
+@implementation CPAnimationStep
+
+@synthesize delay, duration, step, options;
+@synthesize consumableSteps;
+
+#pragma mark overrides
+
+
+#pragma mark construction
+
++ (id) after:(NSTimeInterval)delay animate:(AnimationStep)step {
+ return [self after:delay for:0.0 options:0 animate:step];
+}
+
++ (id) for:(NSTimeInterval)duration animate:(AnimationStep)step {
+ return [self after:0.0 for:duration options:0 animate:step];
+}
+
++ (id) after:(NSTimeInterval)delay for:(NSTimeInterval)duration animate:(AnimationStep)step {
+ return [self after:delay for:duration options:0 animate:step];
+}
+
++ (id) after:(NSTimeInterval)theDelay
+ for:(NSTimeInterval)theDuration
+ options:(UIViewAnimationOptions)theOptions
+ animate:(AnimationStep)theStep {
+
+ CPAnimationStep* instance = [[self alloc] init];
+ if (instance) {
+ instance.delay = theDelay;
+ instance.duration = theDuration;
+ instance.options = theOptions;
+ instance.step = [theStep copy];
+ }
+ return instance;
+}
+
+#pragma mark action
+
+// From http://stackoverflow.com/questions/4007023/blocks-instead-of-performselectorwithobjectafterdelay
++ (void) runBlock:(AnimationStep)block afterDelay:(NSTimeInterval)delay {
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC*delay), dispatch_get_current_queue(), block);
+}
+
+- (NSArray*) animationStepArray {
+ // subclasses must override this!
+ return [NSArray arrayWithObject:self];
+}
+
+- (void) runAnimated:(BOOL)animated {
+ if (!self.consumableSteps) {
+ self.consumableSteps = [[NSMutableArray alloc] initWithArray:[self animationStepArray]];
+ }
+ if (![self.consumableSteps count]) { // recursion anchor
+ self.consumableSteps = nil;
+ return; // we're done
+ }
+ AnimationStep completionStep = ^{
+ [self.consumableSteps removeLastObject];
+ [self runAnimated:animated]; // recurse!
+ };
+ CPAnimationStep* currentStep = [self.consumableSteps lastObject];
+ // Note: do not animate to short steps
+ if (animated && currentStep.duration >= 0.02) {
+ [UIView animateWithDuration:currentStep.duration
+ delay:currentStep.delay
+ options:currentStep.options
+ animations:currentStep.step
+ completion:^(BOOL finished) {
+ if (finished) {
+ completionStep();
+ }
+ }];
+ } else {
+ void (^execution)(void) = ^{
+ currentStep.step();
+ completionStep();
+ };
+
+ if (animated && currentStep.delay) {
+ [CPAnimationStep runBlock:execution afterDelay:currentStep.delay];
+ } else {
+ execution();
+ }
+ }
+}
+
+- (void) run {
+ [self runAnimated:YES];
+}
+
+#pragma mark - pretty-print
+
+- (NSString*) description {
+ NSMutableString* result = [[NSMutableString alloc] initWithCapacity:100];
+ [result appendString:@"\n["];
+ if (self.delay > 0.0) {
+ [result appendFormat:@"after:%.1f ", self.delay];
+ }
+ if (self.duration > 0.0) {
+ [result appendFormat:@"for:%.1f ", self.duration];
+ }
+ if (self.options > 0) {
+ [result appendFormat:@"options:%d ", self.options];
+ }
+ [result appendFormat:@"animate:%@", self.step];
+ [result appendString:@"]"];
+ return result;
+}
+
+@end
diff --git a/Resources/toy-mono.wav b/Resources/toy-mono.wav
new file mode 100644
index 000000000..a225ac2cb
Binary files /dev/null and b/Resources/toy-mono.wav differ
diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj
index e4529577b..b2de10655 100755
--- a/linphone.xcodeproj/project.pbxproj
+++ b/linphone.xcodeproj/project.pbxproj
@@ -147,8 +147,6 @@
34075199150645A300B89C47 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 340751961506459A00B89C47 /* CoreTelephony.framework */; };
340751E7150F38FD00B89C47 /* UIVideoButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 340751E6150F38FD00B89C47 /* UIVideoButton.m */; };
340751E8150F38FD00B89C47 /* UIVideoButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 340751E6150F38FD00B89C47 /* UIVideoButton.m */; };
- 340A75B014C0670B006AA708 /* ConferenceCallDetailView-ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 340A75AF14C0670A006AA708 /* ConferenceCallDetailView-ipad.xib */; };
- 340A75B114C0670B006AA708 /* ConferenceCallDetailView-ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 340A75AF14C0670A006AA708 /* ConferenceCallDetailView-ipad.xib */; };
3418843714C58BB100EA48C7 /* nowebcamCIF.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3418843614C58BB100EA48C7 /* nowebcamCIF.jpg */; };
3418843814C58BB100EA48C7 /* nowebcamCIF.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 3418843614C58BB100EA48C7 /* nowebcamCIF.jpg */; };
341FCA8E149798210084BC26 /* linphonerc-ipad in Resources */ = {isa = PBXBuildFile; fileRef = 341FCA8D149798210084BC26 /* linphonerc-ipad */; };
@@ -159,12 +157,6 @@
3422AA5114975EC9000D4E8A /* InCallViewController-ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3422AA4F14975EC9000D4E8A /* InCallViewController-ipad.xib */; };
3422AA5314978352000D4E8A /* PhoneViewController-ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3422AA5214978352000D4E8A /* PhoneViewController-ipad.xib */; };
3422AA5414978352000D4E8A /* PhoneViewController-ipad.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3422AA5214978352000D4E8A /* PhoneViewController-ipad.xib */; };
- 344ABD72147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 344ABD71147FC438007420B6 /* ConferenceCallDetailView.xib */; };
- 344ABD73147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 344ABD71147FC438007420B6 /* ConferenceCallDetailView.xib */; };
- 344ABD77147FCB68007420B6 /* ConferenceCallDetailView.m in Sources */ = {isa = PBXBuildFile; fileRef = 344ABD76147FCB68007420B6 /* ConferenceCallDetailView.m */; };
- 344ABD78147FCB68007420B6 /* ConferenceCallDetailView.m in Sources */ = {isa = PBXBuildFile; fileRef = 344ABD76147FCB68007420B6 /* ConferenceCallDetailView.m */; };
- 344ABD7A147FD32B007420B6 /* ConferenceCallDetailCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 344ABD79147FD32B007420B6 /* ConferenceCallDetailCell.xib */; };
- 344ABD7B147FD32B007420B6 /* ConferenceCallDetailCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 344ABD79147FD32B007420B6 /* ConferenceCallDetailCell.xib */; };
344ABDE81484E723007420B6 /* libzrtpcpp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 344ABDE71484E723007420B6 /* libzrtpcpp.a */; };
344ABDF114850AE9007420B6 /* libc++.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 344ABDEF14850AE9007420B6 /* libc++.1.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
344ABDF214850AE9007420B6 /* libstdc++.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 344ABDF014850AE9007420B6 /* libstdc++.6.dylib */; settings = {ATTRIBUTES = (Weak, ); }; };
@@ -229,6 +221,12 @@
D3211BC3159CBFD70098460B /* cancel_white_bg_over.png in Resources */ = {isa = PBXBuildFile; fileRef = D3211BBD159CBFD60098460B /* cancel_white_bg_over.png */; };
D32409C3158B49A600C8C119 /* UILongTouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32409C2158B49A600C8C119 /* UILongTouchButton.m */; };
D32409C4158B49A600C8C119 /* UILongTouchButton.m in Sources */ = {isa = PBXBuildFile; fileRef = D32409C2158B49A600C8C119 /* UILongTouchButton.m */; };
+ D32460E6159D9AAD00BA7F3A /* UIPassView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UIPassView.m */; };
+ D32460E7159D9AAD00BA7F3A /* UIPassView.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460E5159D9AAD00BA7F3A /* UIPassView.m */; };
+ D32460ED159DA47700BA7F3A /* CPAnimationSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460EA159DA47700BA7F3A /* CPAnimationSequence.m */; };
+ D32460EE159DA47700BA7F3A /* CPAnimationSequence.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460EA159DA47700BA7F3A /* CPAnimationSequence.m */; };
+ D32460EF159DA47700BA7F3A /* CPAnimationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460EC159DA47700BA7F3A /* CPAnimationStep.m */; };
+ D32460F0159DA47700BA7F3A /* CPAnimationStep.m in Sources */ = {isa = PBXBuildFile; fileRef = D32460EC159DA47700BA7F3A /* CPAnimationStep.m */; };
D326483815887D5200930C67 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483715887D5200930C67 /* OrderedDictionary.m */; };
D326483915887D5200930C67 /* OrderedDictionary.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483715887D5200930C67 /* OrderedDictionary.m */; };
D326483E1588950F00930C67 /* UICallBar.m in Sources */ = {isa = PBXBuildFile; fileRef = D326483C1588950F00930C67 /* UICallBar.m */; };
@@ -396,6 +394,8 @@
D3A55FBD15877E5E003FD403 /* UIContactCell.m in Sources */ = {isa = PBXBuildFile; fileRef = D3A55FBB15877E5E003FD403 /* UIContactCell.m */; };
D3A55FBF15877E69003FD403 /* UIContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3A55FBE15877E69003FD403 /* UIContactCell.xib */; };
D3A55FC015877E69003FD403 /* UIContactCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = D3A55FBE15877E69003FD403 /* UIContactCell.xib */; };
+ D3C714B3159DB84400705B8E /* toy-mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = D3C714B2159DB84400705B8E /* toy-mono.wav */; };
+ D3C714B4159DB84400705B8E /* toy-mono.wav in Resources */ = {isa = PBXBuildFile; fileRef = D3C714B2159DB84400705B8E /* toy-mono.wav */; };
D3D6A39E159B0EEF005F692C /* add_call_more_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39B159B0EEF005F692C /* add_call_more_default.png */; };
D3D6A39F159B0EEF005F692C /* add_call_more_default.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39B159B0EEF005F692C /* add_call_more_default.png */; };
D3D6A3A0159B0EEF005F692C /* add_call_more_disable.png in Resources */ = {isa = PBXBuildFile; fileRef = D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */; };
@@ -903,17 +903,12 @@
340751E4150E4D0200B89C47 /* CallDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CallDelegate.h; sourceTree = ""; };
340751E5150F38FC00B89C47 /* UIVideoButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIVideoButton.h; sourceTree = ""; };
340751E6150F38FD00B89C47 /* UIVideoButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIVideoButton.m; sourceTree = ""; };
- 340A75AF14C0670A006AA708 /* ConferenceCallDetailView-ipad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "ConferenceCallDetailView-ipad.xib"; sourceTree = ""; };
3418843614C58BB100EA48C7 /* nowebcamCIF.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = nowebcamCIF.jpg; path = submodules/linphone/mediastreamer2/src/nowebcamCIF.jpg; sourceTree = ""; };
341FCA8D149798210084BC26 /* linphonerc-ipad */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "linphonerc-ipad"; sourceTree = ""; };
34216F3E1547EBCD00EA9777 /* VideoZoomHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VideoZoomHandler.h; path = LinphoneUI/VideoZoomHandler.h; sourceTree = ""; };
34216F3F1547EBCD00EA9777 /* VideoZoomHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VideoZoomHandler.m; path = LinphoneUI/VideoZoomHandler.m; sourceTree = ""; };
3422AA4F14975EC9000D4E8A /* InCallViewController-ipad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "InCallViewController-ipad.xib"; sourceTree = ""; };
3422AA5214978352000D4E8A /* PhoneViewController-ipad.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = "PhoneViewController-ipad.xib"; sourceTree = ""; };
- 344ABD71147FC438007420B6 /* ConferenceCallDetailView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConferenceCallDetailView.xib; sourceTree = ""; };
- 344ABD75147FCB68007420B6 /* ConferenceCallDetailView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConferenceCallDetailView.h; sourceTree = ""; };
- 344ABD76147FCB68007420B6 /* ConferenceCallDetailView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ConferenceCallDetailView.m; sourceTree = ""; };
- 344ABD79147FD32B007420B6 /* ConferenceCallDetailCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ConferenceCallDetailCell.xib; sourceTree = ""; };
344ABDE71484E723007420B6 /* libzrtpcpp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libzrtpcpp.a; path = "liblinphone-sdk/apple-darwin/lib/libzrtpcpp.a"; sourceTree = ""; };
344ABDEF14850AE9007420B6 /* libc++.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libc++.1.dylib"; path = "usr/lib/libc++.1.dylib"; sourceTree = SDKROOT; };
344ABDF014850AE9007420B6 /* libstdc++.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.6.dylib"; path = "usr/lib/libstdc++.6.dylib"; sourceTree = SDKROOT; };
@@ -957,6 +952,12 @@
D3211BBD159CBFD60098460B /* cancel_white_bg_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = cancel_white_bg_over.png; path = Resources/cancel_white_bg_over.png; sourceTree = ""; };
D32409C1158B49A600C8C119 /* UILongTouchButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UILongTouchButton.h; sourceTree = ""; };
D32409C2158B49A600C8C119 /* UILongTouchButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UILongTouchButton.m; sourceTree = ""; };
+ D32460E4159D9AAD00BA7F3A /* UIPassView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIPassView.h; sourceTree = ""; };
+ D32460E5159D9AAD00BA7F3A /* UIPassView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIPassView.m; sourceTree = ""; };
+ D32460E9159DA47700BA7F3A /* CPAnimationSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPAnimationSequence.h; path = Utils/CPAnimationSequence.h; sourceTree = ""; };
+ D32460EA159DA47700BA7F3A /* CPAnimationSequence.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPAnimationSequence.m; path = Utils/CPAnimationSequence.m; sourceTree = ""; };
+ D32460EB159DA47700BA7F3A /* CPAnimationStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CPAnimationStep.h; path = Utils/CPAnimationStep.h; sourceTree = ""; };
+ D32460EC159DA47700BA7F3A /* CPAnimationStep.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CPAnimationStep.m; path = Utils/CPAnimationStep.m; sourceTree = ""; };
D326483615887D5200930C67 /* OrderedDictionary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderedDictionary.h; path = Utils/OrderedDictionary.h; sourceTree = ""; };
D326483715887D5200930C67 /* OrderedDictionary.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderedDictionary.m; path = Utils/OrderedDictionary.m; sourceTree = ""; };
D326483B1588950F00930C67 /* UICallBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UICallBar.h; sourceTree = ""; };
@@ -1077,6 +1078,7 @@
D3A55FBA15877E5E003FD403 /* UIContactCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIContactCell.h; sourceTree = ""; };
D3A55FBB15877E5E003FD403 /* UIContactCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = UIContactCell.m; sourceTree = ""; };
D3A55FBE15877E69003FD403 /* UIContactCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = UIContactCell.xib; sourceTree = ""; };
+ D3C714B2159DB84400705B8E /* toy-mono.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = "toy-mono.wav"; path = "Resources/toy-mono.wav"; sourceTree = ""; };
D3D6A39B159B0EEF005F692C /* add_call_more_default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_default.png; path = Resources/add_call_more_default.png; sourceTree = ""; };
D3D6A39C159B0EEF005F692C /* add_call_more_disable.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_disable.png; path = Resources/add_call_more_disable.png; sourceTree = ""; };
D3D6A39D159B0EEF005F692C /* add_call_more_over.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = add_call_more_over.png; path = Resources/add_call_more_over.png; sourceTree = ""; };
@@ -1302,11 +1304,6 @@
D35E7594159460560066B1C1 /* ChatViewController.h */,
D35E7595159460560066B1C1 /* ChatViewController.m */,
D35E7596159460570066B1C1 /* ChatViewController.xib */,
- 344ABD79147FD32B007420B6 /* ConferenceCallDetailCell.xib */,
- 340A75AF14C0670A006AA708 /* ConferenceCallDetailView-ipad.xib */,
- 344ABD75147FCB68007420B6 /* ConferenceCallDetailView.h */,
- 344ABD76147FCB68007420B6 /* ConferenceCallDetailView.m */,
- 344ABD71147FC438007420B6 /* ConferenceCallDetailView.xib */,
22E0A820111C44E100B04932 /* ConsoleViewController.h */,
22E0A81F111C44E100B04932 /* ConsoleViewController.m */,
22E0A81E111C44E100B04932 /* ConsoleViewController.xib */,
@@ -1621,6 +1618,8 @@
2214EBF212F86360002A5394 /* UIMicroButton.m */,
D3F34F331599C354005BE94F /* UIModalViewController.h */,
D3F34F341599C354005BE94F /* UIModalViewController.m */,
+ D32460E4159D9AAD00BA7F3A /* UIPassView.h */,
+ D32460E5159D9AAD00BA7F3A /* UIPassView.m */,
D36FB2D31589EF7C0036F6F2 /* UIPauseButton.h */,
D36FB2D41589EF7C0036F6F2 /* UIPauseButton.m */,
22968A5D12F875C600588287 /* UISpeakerButton.h */,
@@ -1950,6 +1949,7 @@
D3EA5402159852080037DC6B /* tchat-new-discussion-over.png */,
D38327FF158100E400FA0D23 /* tchat-over.png */,
D38327F21580FE3A00FA0D23 /* tchat-selectionne.png */,
+ D3C714B2159DB84400705B8E /* toy-mono.wav */,
D3F83F00158205A100336684 /* video-OFF-actif.png */,
D37295DA158B3C9600D2C0C7 /* video-OFF-disabled.png */,
D3F83F01158205A100336684 /* video-OFF-over.png */,
@@ -1972,6 +1972,10 @@
D326483415887D4400930C67 /* Utils */ = {
isa = PBXGroup;
children = (
+ D32460E9159DA47700BA7F3A /* CPAnimationSequence.h */,
+ D32460EA159DA47700BA7F3A /* CPAnimationSequence.m */,
+ D32460EB159DA47700BA7F3A /* CPAnimationStep.h */,
+ D32460EC159DA47700BA7F3A /* CPAnimationStep.m */,
D3F26BEA159869A6005F9CAB /* AbstractCall.h */,
D3F26BEB159869A6005F9CAB /* AbstractCall.m */,
D326483615887D5200930C67 /* OrderedDictionary.h */,
@@ -2157,13 +2161,10 @@
228B19AF130290C500F154D3 /* iTunesArtwork in Resources */,
2214783D1386A2030020F8B8 /* Localizable.strings in Resources */,
70571E1A13FABCB000CDD3C2 /* rootca.pem in Resources */,
- 344ABD72147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */,
- 344ABD7A147FD32B007420B6 /* ConferenceCallDetailCell.xib in Resources */,
34CA852F148F646700503C01 /* MainScreenWithVideoPreview.xib in Resources */,
3422AA5014975EC9000D4E8A /* InCallViewController-ipad.xib in Resources */,
3422AA5314978352000D4E8A /* PhoneViewController-ipad.xib in Resources */,
341FCA8E149798210084BC26 /* linphonerc-ipad in Resources */,
- 340A75B014C0670B006AA708 /* ConferenceCallDetailView-ipad.xib in Resources */,
3418843714C58BB100EA48C7 /* nowebcamCIF.jpg in Resources */,
34C7646C14CD5585008E9607 /* dialer-orange.png in Resources */,
34C7646D14CD5585008E9607 /* history-orange.png in Resources */,
@@ -2340,6 +2341,7 @@
D3211BBE159CBFD60098460B /* cancel_white_bg_default.png in Resources */,
D3211BC0159CBFD70098460B /* cancel_white_bg_disabled.png in Resources */,
D3211BC2159CBFD70098460B /* cancel_white_bg_over.png in Resources */,
+ D3C714B3159DB84400705B8E /* toy-mono.wav in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2364,13 +2366,10 @@
22D8F13D147548E2008C97DB /* Localizable.strings in Resources */,
22D8F142147548E2008C97DB /* rootca.pem in Resources */,
2211DB95147564B400DEE054 /* Settings.bundle in Resources */,
- 344ABD73147FC438007420B6 /* ConferenceCallDetailView.xib in Resources */,
- 344ABD7B147FD32B007420B6 /* ConferenceCallDetailCell.xib in Resources */,
34CA8530148F646700503C01 /* MainScreenWithVideoPreview.xib in Resources */,
3422AA5114975EC9000D4E8A /* InCallViewController-ipad.xib in Resources */,
3422AA5414978352000D4E8A /* PhoneViewController-ipad.xib in Resources */,
341FCA8F149798210084BC26 /* linphonerc-ipad in Resources */,
- 340A75B114C0670B006AA708 /* ConferenceCallDetailView-ipad.xib in Resources */,
3418843814C58BB100EA48C7 /* nowebcamCIF.jpg in Resources */,
57282931154AF1460076F540 /* history-orange.png in Resources */,
57282933154AF14D0076F540 /* dialer-orange.png in Resources */,
@@ -2531,6 +2530,7 @@
D3211BBF159CBFD70098460B /* cancel_white_bg_default.png in Resources */,
D3211BC1159CBFD70098460B /* cancel_white_bg_disabled.png in Resources */,
D3211BC3159CBFD70098460B /* cancel_white_bg_over.png in Resources */,
+ D3C714B4159DB84400705B8E /* toy-mono.wav in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2558,7 +2558,6 @@
223963171393CFAF001DE689 /* FastAddressBook.m in Sources */,
22AA8B0113D83F6300B30535 /* UICamSwitch.m in Sources */,
2211DBBE14769C8300DEE054 /* CallDelegate.m in Sources */,
- 344ABD77147FCB68007420B6 /* ConferenceCallDetailView.m in Sources */,
34CA8539148F692A00503C01 /* MainScreenWithVideoPreview.m in Sources */,
340751E7150F38FD00B89C47 /* UIVideoButton.m in Sources */,
34216F401547EBCD00EA9777 /* VideoZoomHandler.m in Sources */,
@@ -2606,6 +2605,9 @@
D3F34F351599C354005BE94F /* UIModalViewController.m in Sources */,
D31AAF5E159B3919002C6B02 /* InCallTableViewController.m in Sources */,
D3211BB0159C4EF10098460B /* UIConferenceHeader.m in Sources */,
+ D32460E6159D9AAD00BA7F3A /* UIPassView.m in Sources */,
+ D32460ED159DA47700BA7F3A /* CPAnimationSequence.m in Sources */,
+ D32460EF159DA47700BA7F3A /* CPAnimationStep.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2630,7 +2632,6 @@
22D8F157147548E2008C97DB /* FastAddressBook.m in Sources */,
22D8F159147548E2008C97DB /* UICamSwitch.m in Sources */,
2211DBBF14769C8300DEE054 /* CallDelegate.m in Sources */,
- 344ABD78147FCB68007420B6 /* ConferenceCallDetailView.m in Sources */,
34CA853A148F692A00503C01 /* MainScreenWithVideoPreview.m in Sources */,
340751E8150F38FD00B89C47 /* UIVideoButton.m in Sources */,
34216F411547EBCD00EA9777 /* VideoZoomHandler.m in Sources */,
@@ -2678,6 +2679,9 @@
D3F34F361599C354005BE94F /* UIModalViewController.m in Sources */,
D31AAF5F159B3919002C6B02 /* InCallTableViewController.m in Sources */,
D3211BB1159C4EF10098460B /* UIConferenceHeader.m in Sources */,
+ D32460E7159D9AAD00BA7F3A /* UIPassView.m in Sources */,
+ D32460EE159DA47700BA7F3A /* CPAnimationSequence.m in Sources */,
+ D32460F0159DA47700BA7F3A /* CPAnimationStep.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/main.m b/main.m
index 511484655..ecec28813 100644
--- a/main.m
+++ b/main.m
@@ -20,8 +20,6 @@
#import
int main(int argc, char *argv[]) {
-
-
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];