diff --git a/Classes/BuschJaegerCallView.h b/Classes/BuschJaegerCallView.h index be6f94d7f..dced2f831 100644 --- a/Classes/BuschJaegerCallView.h +++ b/Classes/BuschJaegerCallView.h @@ -42,7 +42,9 @@ @property (nonatomic, retain) IBOutlet UIToggleButton* microButton; @property (nonatomic, retain) IBOutlet UIDigitButton* lightsButton; @property (nonatomic, retain) IBOutlet UIDigitButton* openDoorButton; +@property (nonatomic, retain) IBOutlet UIButton* snapshotButton; - (IBAction)takeCall:(id)sender; +- (IBAction)onSnapshotClick:(id)sender; @end diff --git a/Classes/BuschJaegerCallView.m b/Classes/BuschJaegerCallView.m index fda296e72..d6c975e40 100644 --- a/Classes/BuschJaegerCallView.m +++ b/Classes/BuschJaegerCallView.m @@ -34,11 +34,7 @@ @synthesize microButton; @synthesize lightsButton; @synthesize openDoorButton; - - -- (void)didReceiveMemoryWarning { - [super didReceiveMemoryWarning]; -} +@synthesize snapshotButton; #pragma mark - View lifecycle @@ -51,6 +47,7 @@ [microButton release]; [lightsButton release]; [openDoorButton release]; + [snapshotButton release]; // Remove all observer [[NSNotificationCenter defaultCenter] removeObserver:self]; @@ -58,11 +55,6 @@ [super dealloc]; } -// 59x47 -// 54 -// 54 -> 67 -// 59 -> 73 x 58 -// 257 - (void)viewDidLoad { [super viewDidLoad]; @@ -90,8 +82,8 @@ [BuschJaegerUtils createGradientForView:takeCallButton withTopColor:col1 bottomColor:col2]; } - linphone_core_set_native_video_window_id([LinphoneManager getLc],(unsigned long)videoView); - linphone_core_set_native_preview_window_id([LinphoneManager getLc],0); + linphone_core_set_native_video_window_id([LinphoneManager getLc], (unsigned long)videoView); + linphone_core_set_native_preview_window_id([LinphoneManager getLc], 0); videoZoomHandler = [[VideoZoomHandler alloc] init]; [videoZoomHandler setup:videoView]; @@ -227,7 +219,7 @@ [declineButton setHidden:NO]; [endOrRejectCallButton setHidden:YES]; [videoView setHidden:NO]; - + [snapshotButton setHidden:YES]; NSString *contactName = NSLocalizedString(@"Unknown", nil); @@ -259,6 +251,7 @@ [declineButton setHidden:YES]; [endOrRejectCallButton setHidden:NO]; [videoView setHidden:NO]; + [snapshotButton setHidden:YES]; } - (void)displayVideoCall { @@ -268,8 +261,18 @@ [declineButton setHidden:YES]; [endOrRejectCallButton setHidden:NO]; [videoView setHidden:NO]; + [snapshotButton setHidden:NO]; } +- (void)saveImage:(NSString*)imagePath { + UIImage *image = [UIImage imageWithContentsOfFile:imagePath]; + if(image != nil) { + UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); + } +} + +#pragma mark - Actions Functions + - (IBAction)takeCall:(id)sender { const MSList* calls = linphone_core_get_calls([LinphoneManager getLc]); @@ -283,4 +286,15 @@ } } +- (IBAction)onSnapshotClick:(id)sender { + LinphoneCall *call = linphone_core_get_current_call([LinphoneManager getLc]); + if(call != NULL) { + NSString *imagePath = [NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithFormat: @"%.0f.%@", [NSDate timeIntervalSinceReferenceDate] * 1000.0, @"jpg"]]; + int ret = linphone_call_take_video_snapshot(call, [imagePath UTF8String]); + if(ret == 0) { + [self performSelector:@selector(saveImage:) withObject:imagePath afterDelay:0.5]; + } + } +} + @end diff --git a/Classes/BuschJaegerCallView.xib b/Classes/BuschJaegerCallView.xib index f9803d52d..4748ede46 100644 --- a/Classes/BuschJaegerCallView.xib +++ b/Classes/BuschJaegerCallView.xib @@ -50,6 +50,44 @@ IBCocoaTouchFramework + + + 292 + {{266, 20}, {34, 34}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + + 3 + MQA + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + snapshot.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + 292 @@ -70,27 +108,14 @@ IBCocoaTouchFramework 0 0 - - 3 - MQA - - - 3 - MC41AA - + + NSImage bj_start_call.png - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - + + @@ -112,7 +137,7 @@ bj_end_call.png - + @@ -139,7 +164,7 @@ bj_mute_on.png - + @@ -147,6 +172,7 @@ {{207, 0}, {73, 58}} + _NS:225 NO @@ -161,7 +187,7 @@ bj_decline.png - + @@ -188,7 +214,7 @@ bj_door.png - + @@ -220,13 +246,13 @@ bj_light.png - + {{20, 399}, {280, 58}} - + _NS:196 IBCocoaTouchFramework @@ -241,7 +267,7 @@ {320, 42} - + _NS:9 NO YES @@ -374,6 +400,14 @@ 88 + + + snapshotButton + + + + 90 + takeCall: @@ -383,6 +417,15 @@ 68 + + + onSnapshotClick: + + + 7 + + 91 + @@ -410,6 +453,7 @@ + @@ -475,6 +519,7 @@ 4 + VideoView @@ -484,6 +529,12 @@ contactLabel + + 89 + + + Snapshot Button + @@ -514,6 +565,7 @@ IBBuiltInLabel-Red com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin UIMicroButton com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -523,7 +575,7 @@ - 88 + 91 @@ -531,12 +583,12 @@ BuschJaegerCallView UIViewController - id + id id - - startCall: + + onSnapshotClick: id @@ -552,6 +604,7 @@ UIDigitButton UIToggleButton UIDigitButton + UIButton UIButton UIView @@ -584,6 +637,10 @@ openDoorButton UIDigitButton + + snapshotButton + UIButton + takeCallButton UIButton @@ -670,6 +727,7 @@ {160, 98} {160, 98} {16, 16} + {44, 34} 1498 diff --git a/Classes/BuschJaegerHistoryDetailsView.h b/Classes/BuschJaegerHistoryDetailsView.h index 4be669b75..9acb94c43 100644 --- a/Classes/BuschJaegerHistoryDetailsView.h +++ b/Classes/BuschJaegerHistoryDetailsView.h @@ -33,6 +33,9 @@ @property (nonatomic, retain) IBOutlet UITableViewController *tableController; @property (nonatomic, retain) IBOutlet UILabel *stationLabel; @property (nonatomic, retain) IBOutlet UILabel *dateLabel; + +@property (nonatomic, retain) IBOutlet UIView *fullscreenView; +@property (nonatomic, retain) IBOutlet UIButton *saveButton; @property (nonatomic, retain) IBOutlet UIRemoteImageView *imageView; - (IBAction)onBackClick:(id)sender; @@ -40,5 +43,6 @@ - (IBAction)nextImage:(id)sender; - (IBAction)previousImage:(id)sender; - (IBAction)hideImage:(id)sender; +- (IBAction)saveImage:(id)sender; @end diff --git a/Classes/BuschJaegerHistoryDetailsView.m b/Classes/BuschJaegerHistoryDetailsView.m index 115df8f00..959136f92 100644 --- a/Classes/BuschJaegerHistoryDetailsView.m +++ b/Classes/BuschJaegerHistoryDetailsView.m @@ -31,6 +31,8 @@ @synthesize stationLabel; @synthesize dateLabel; @synthesize imageView; +@synthesize saveButton; +@synthesize fullscreenView; #pragma mark - Lifecycle Functions @@ -72,8 +74,9 @@ [backButton release]; [stationLabel release]; [dateLabel release]; - + [fullscreenView release]; [imageView release]; + [saveButton release]; [dateFormatter release]; @@ -98,7 +101,7 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - [imageView setHidden:TRUE]; + [fullscreenView setHidden:TRUE]; } @@ -157,9 +160,12 @@ } - (IBAction)hideImage:(id)sender { - [imageView setHidden:TRUE]; + [fullscreenView setHidden:TRUE]; } +- (IBAction)saveImage:(id)sender { + UIImageWriteToSavedPhotosAlbum([imageView image], nil, nil, nil); +} #pragma mark - UITableViewDataSource Functions @@ -195,7 +201,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [tableView deselectRowAtIndexPath:indexPath animated:NO]; currentIndex = [indexPath row]; - [imageView setHidden:FALSE]; + [fullscreenView setHidden:FALSE]; [imageView setImage:nil]; [imageView loadImage:[[LinphoneManager instance].configuration getImageUrl:BuschJaegerConfigurationRequestType_Local image:[history.images objectAtIndex:currentIndex]]]; } diff --git a/Classes/BuschJaegerHistoryDetailsView.xib b/Classes/BuschJaegerHistoryDetailsView.xib index ddca9a114..1c13c6f59 100644 --- a/Classes/BuschJaegerHistoryDetailsView.xib +++ b/Classes/BuschJaegerHistoryDetailsView.xib @@ -1,7 +1,7 @@ - 1296 + 1280 11E53 2549 1138.47 @@ -98,7 +98,7 @@ {{168, 5}, {112, 21}} - + _NS:9 NO YES @@ -120,7 +120,7 @@ 16 - + 257 {{286, 0}, {34, 34}} @@ -137,7 +137,7 @@ 6 6 6 - + 3 MC41AA @@ -145,11 +145,11 @@ NSImage trash.png - + 2 15 - + Helvetica-Bold 15 16 @@ -194,7 +194,6 @@ {280, 40} - _NS:9 3 @@ -206,9 +205,9 @@ 0 - - - + + + {{20, 410}, {280, 40}} @@ -219,28 +218,72 @@ IBCocoaTouchFramework - + 292 + + + + 292 + {320, 460} + + + + _NS:9 + + 3 + MAA + + 1 + YES + + IBCocoaTouchFramework + + + + 292 + {{266, 406}, {34, 34}} + + + + _NS:9 + NO + IBCocoaTouchFramework + 0 + 0 + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + + NSImage + bj_save.png + + + + + {320, 460} - + _NS:9 - + 3 - MAA + MQA + + 2 + - 1 - YES - IBCocoaTouchFramework {{0, 20}, {320, 460}} - + IBCocoaTouchFramework @@ -310,6 +353,14 @@ 32 + + + fullscreenView + + + + 39 + view @@ -343,6 +394,16 @@ 16 + + + gestureRecognizers + + + NSArray + NO + + 31 + gestureRecognizers @@ -363,16 +424,6 @@ 30 - - - gestureRecognizers - - - NSArray - NO - - 31 - hideImage: @@ -400,12 +451,21 @@ onDeleteClick: - + 7 37 + + + saveImage: + + + 7 + + 41 + @@ -423,8 +483,8 @@ - - + + @@ -482,12 +542,6 @@ - - 21 - - - - 23 @@ -507,9 +561,30 @@ 36 - + - deleteButton + Delete Button + + + 38 + + + + + + + Fullscreen View + + + 21 + + + + + 40 + + + Save Button @@ -531,7 +606,9 @@ com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin com.apple.InterfaceBuilder.IBCocoaTouchPlugin @@ -540,7 +617,7 @@ - 37 + 41 @@ -553,6 +630,7 @@ id id id + id @@ -575,10 +653,15 @@ previousImage: id + + saveImage: + id + UIView UILabel + UIView UIRemoteImageView UILabel UITableViewController @@ -592,6 +675,10 @@ dateLabel UILabel + + fullscreenView + UIView + imageView UIRemoteImageView @@ -622,16 +709,12 @@ 0 IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - YES 3 - - trash.png - {26, 26} - + + {34, 35} + {26, 26} + 1498 diff --git a/Classes/LinphoneManager.m b/Classes/LinphoneManager.m index f26b18bdf..1e2814205 100644 --- a/Classes/LinphoneManager.m +++ b/Classes/LinphoneManager.m @@ -217,7 +217,9 @@ struct codec_name_pref_table codec_pref_table[]={ logs = [[NSMutableArray alloc] init]; database = NULL; speakerEnabled = FALSE; + /* MODIFICATION: Disable database */ [self openDatabase]; + /**/ [self copyDefaultSettings]; /* MODIFICATION: Add buschjaeger configuration */ diff --git a/Resources/bj_save.png b/Resources/bj_save.png new file mode 100644 index 000000000..c8271408e Binary files /dev/null and b/Resources/bj_save.png differ diff --git a/Resources/snapshot.png b/Resources/snapshot.png new file mode 100644 index 000000000..8151dd3e8 Binary files /dev/null and b/Resources/snapshot.png differ diff --git a/linphone.xcodeproj/project.pbxproj b/linphone.xcodeproj/project.pbxproj index 8bb172103..a434b9690 100755 --- a/linphone.xcodeproj/project.pbxproj +++ b/linphone.xcodeproj/project.pbxproj @@ -159,6 +159,10 @@ D376EAF116008454007C8226 /* ringtone_05_1600.wav in Resources */ = {isa = PBXBuildFile; fileRef = D376EAE716008454007C8226 /* ringtone_05_1600.wav */; }; D376EAF416008DF1007C8226 /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = D376EAF316008DF1007C8226 /* User.m */; }; D376EAF516008DF1007C8226 /* User.m in Sources */ = {isa = PBXBuildFile; fileRef = D376EAF316008DF1007C8226 /* User.m */; }; + D376EAF816009E2A007C8226 /* bj_save.png in Resources */ = {isa = PBXBuildFile; fileRef = D376EAF616009E2A007C8226 /* bj_save.png */; }; + D376EAF916009E2A007C8226 /* bj_save.png in Resources */ = {isa = PBXBuildFile; fileRef = D376EAF616009E2A007C8226 /* bj_save.png */; }; + D376EAFA16009E2A007C8226 /* snapshot.png in Resources */ = {isa = PBXBuildFile; fileRef = D376EAF716009E2A007C8226 /* snapshot.png */; }; + D376EAFB16009E2A007C8226 /* snapshot.png in Resources */ = {isa = PBXBuildFile; fileRef = D376EAF716009E2A007C8226 /* snapshot.png */; }; D37CD2DF15E21CB30028869A /* bj_barcode.png in Resources */ = {isa = PBXBuildFile; fileRef = D37CD2C615E21CB30028869A /* bj_barcode.png */; }; D37CD2E015E21CB30028869A /* bj_barcode.png in Resources */ = {isa = PBXBuildFile; fileRef = D37CD2C615E21CB30028869A /* bj_barcode.png */; }; D37CD2E115E21CB30028869A /* bj_decline.png in Resources */ = {isa = PBXBuildFile; fileRef = D37CD2C715E21CB30028869A /* bj_decline.png */; }; @@ -593,6 +597,8 @@ D376EAE716008454007C8226 /* ringtone_05_1600.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; name = ringtone_05_1600.wav; path = Resources/ringtone_05_1600.wav; sourceTree = ""; }; D376EAF216008DF1007C8226 /* User.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = User.h; path = Model/User.h; sourceTree = ""; }; D376EAF316008DF1007C8226 /* User.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = User.m; path = Model/User.m; sourceTree = ""; }; + D376EAF616009E2A007C8226 /* bj_save.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bj_save.png; path = Resources/bj_save.png; sourceTree = ""; }; + D376EAF716009E2A007C8226 /* snapshot.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = snapshot.png; path = Resources/snapshot.png; sourceTree = ""; }; D37CD2C615E21CB30028869A /* bj_barcode.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bj_barcode.png; path = Resources/bj_barcode.png; sourceTree = ""; }; D37CD2C715E21CB30028869A /* bj_decline.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bj_decline.png; path = Resources/bj_decline.png; sourceTree = ""; }; D37CD2C815E21CB30028869A /* bj_door_hl.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = bj_door_hl.png; path = Resources/bj_door_hl.png; sourceTree = ""; }; @@ -1268,6 +1274,7 @@ D37CD2CB15E21CB30028869A /* bj_light_hl.png */, D37CD2CD15E21CB30028869A /* bj_mute_off.png */, D37CD2CE15E21CB30028869A /* bj_mute_on.png */, + D376EAF616009E2A007C8226 /* bj_save.png */, D37CD2CF15E21CB30028869A /* bj_settings.png */, D37CD2D015E21CB30028869A /* bj_start_call.png */, D384466E15E64B9E00DF89DF /* bj_station.png */, @@ -1287,6 +1294,7 @@ D376EAE616008454007C8226 /* ringtone_04_1600.wav */, D376EAE716008454007C8226 /* ringtone_05_1600.wav */, D33BEE1E15FF711B004ED2AF /* rootca.pem */, + D376EAF716009E2A007C8226 /* snapshot.png */, D376EAE0160082A4007C8226 /* trash.png */, ); name = Resources; @@ -1538,6 +1546,8 @@ D376EAEC16008454007C8226 /* ringtone_03_1600.wav in Resources */, D376EAEE16008454007C8226 /* ringtone_04_1600.wav in Resources */, D376EAF016008454007C8226 /* ringtone_05_1600.wav in Resources */, + D376EAF816009E2A007C8226 /* bj_save.png in Resources */, + D376EAFA16009E2A007C8226 /* snapshot.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1590,6 +1600,8 @@ D376EAED16008454007C8226 /* ringtone_03_1600.wav in Resources */, D376EAEF16008454007C8226 /* ringtone_04_1600.wav in Resources */, D376EAF116008454007C8226 /* ringtone_05_1600.wav in Resources */, + D376EAF916009E2A007C8226 /* bj_save.png in Resources */, + D376EAFB16009E2A007C8226 /* snapshot.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; };