From a09917f3d3510f41ca8835684085a620d25ca2c3 Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Wed, 22 Jul 2015 16:56:02 +0200 Subject: [PATCH] state bar --- .../Base.lproj/UICompositeViewController.xib | 124 +----------- Classes/LinphoneUI/Base.lproj/UIStateBar.xib | 183 +++++++----------- Classes/LinphoneUI/UIStateBar.h | 10 +- Classes/LinphoneUI/UIStateBar.m | 83 +++----- ResourcesV3/images/menu.png | Bin 0 -> 1491 bytes ResourcesV3/images/voicemail.png | Bin 0 -> 2807 bytes linphone.xcodeproj/project.pbxproj | 26 +-- 7 files changed, 112 insertions(+), 314 deletions(-) create mode 100644 ResourcesV3/images/menu.png create mode 100644 ResourcesV3/images/voicemail.png diff --git a/Classes/LinphoneUI/Base.lproj/UICompositeViewController.xib b/Classes/LinphoneUI/Base.lproj/UICompositeViewController.xib index 77e810de0..e61e38eee 100644 --- a/Classes/LinphoneUI/Base.lproj/UICompositeViewController.xib +++ b/Classes/LinphoneUI/Base.lproj/UICompositeViewController.xib @@ -39,7 +39,6 @@ 290 {360, 40} - _NS:9 @@ -55,7 +54,6 @@ 314 {{0, 40}, {360, 537}} - _NS:9 @@ -68,7 +66,6 @@ 266 {{0, 577}, {360, 63}} - _NS:9 @@ -79,10 +76,9 @@ {360, 640} - - + IBUISimulatedFreeformSizeMetricsSentinel Freeform @@ -97,7 +93,6 @@ 290 {640, 26} - _NS:9 @@ -110,7 +105,6 @@ 314 {{0, 26}, {640, 284}} - _NS:9 @@ -123,7 +117,6 @@ 266 {{0, 310}, {640, 50}} - _NS:9 @@ -134,14 +127,13 @@ {640, 360} - 3 3 - + IBCocoaTouchFramework @@ -303,117 +295,7 @@ 25 - - - - TPMultiLayoutViewController - UIViewController - - UIView - UIView - - - - landscapeView - UIView - - - portraitView - UIView - - - - IBProjectSource - ../Classes/Utils/TPMultiLayoutViewController/TPMultiLayoutViewController.h - - - - UICompositeViewController - TPMultiLayoutViewController - - UIView - UIView - UIView - - - - contentView - UIView - - - stateBarView - UIView - - - tabBarView - UIView - - - - IBProjectSource - ../Classes/LinphoneUI/UICompositeViewController.h - - - - UITransparentView - UIView - - IBProjectSource - ../Classes/LinphoneUI/UITransparentView.h - - - - - - UIGestureRecognizer - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIGestureRecognizer.h - - - - UIResponder - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UIResponder.h - - - - UISearchBar - UIView - - IBFrameworkSource - UIKit.framework/Headers/UISearchBar.h - - - - UISearchDisplayController - NSObject - - IBFrameworkSource - UIKit.framework/Headers/UISearchDisplayController.h - - - - UIView - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIView.h - - - - UIViewController - UIResponder - - IBFrameworkSource - UIKit.framework/Headers/UIViewController.h - - - - + 0 IBCocoaTouchFramework NO diff --git a/Classes/LinphoneUI/Base.lproj/UIStateBar.xib b/Classes/LinphoneUI/Base.lproj/UIStateBar.xib index 59d49c22d..651456a98 100644 --- a/Classes/LinphoneUI/Base.lproj/UIStateBar.xib +++ b/Classes/LinphoneUI/Base.lproj/UIStateBar.xib @@ -1,145 +1,98 @@ - + - - + + - - + + - - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - + + + diff --git a/Classes/LinphoneUI/UIStateBar.h b/Classes/LinphoneUI/UIStateBar.h index 10c179f7b..aa62b16a2 100644 --- a/Classes/LinphoneUI/UIStateBar.h +++ b/Classes/LinphoneUI/UIStateBar.h @@ -25,14 +25,14 @@ DTActionSheet *securitySheet; } -@property (nonatomic, strong) IBOutlet UIImageView* registrationStateImage; -@property (nonatomic, strong) IBOutlet UILabel* registrationStateLabel; +@property(weak, nonatomic) IBOutlet UIButton *registrationState; @property (nonatomic, strong) IBOutlet UIImageView* callQualityImage; -@property (nonatomic, strong) IBOutlet UIImageView* callSecurityImage; @property (nonatomic, strong) IBOutlet UIButton* callSecurityButton; -@property (strong, nonatomic) IBOutlet UILabel *voicemailCount; +@property(weak, nonatomic) IBOutlet UIButton *voicemailButton; + +@property(weak, nonatomic) IBOutlet UIView *incallView; +@property(weak, nonatomic) IBOutlet UIView *outcallView; - (IBAction)doSecurityClick:(id)sender; - @end diff --git a/Classes/LinphoneUI/UIStateBar.m b/Classes/LinphoneUI/UIStateBar.m index 375dc4fd9..ce9394955 100644 --- a/Classes/LinphoneUI/UIStateBar.m +++ b/Classes/LinphoneUI/UIStateBar.m @@ -28,21 +28,14 @@ int messagesUnreadCount; } -@synthesize registrationStateImage; -@synthesize registrationStateLabel; +@synthesize registrationState; @synthesize callQualityImage; -@synthesize callSecurityImage; @synthesize callSecurityButton; #pragma mark - Lifecycle Functions - (id)init { self = [super initWithNibName:@"UIStateBar" bundle:[NSBundle mainBundle]]; - if (self != nil) { - self->callSecurityImage = nil; - self->callQualityImage = nil; - self->securitySheet = nil; - } return self; } @@ -91,9 +84,6 @@ name:kLinphoneCallUpdate object:nil]; - [callQualityImage setHidden:true]; - [callSecurityImage setHidden:true]; - // Update to default state LinphoneProxyConfig *config = NULL; linphone_core_get_default_proxy([LinphoneManager getLc], &config); @@ -161,17 +151,13 @@ } - (void)updateVoicemail { - if (messagesUnreadCount > 0) { - self.voicemailCount.hidden = (linphone_core_get_calls([LinphoneManager getLc]) != NULL); - self.voicemailCount.text = [[NSString - stringWithFormat:NSLocalizedString(@"%d unread messages", @"%d"), messagesUnreadCount] uppercaseString]; - } else { - self.voicemailCount.hidden = TRUE; - } + _voicemailButton.hidden = (messagesUnreadCount <= 0); + _voicemailButton.titleLabel.text = @(messagesUnreadCount).stringValue; } - (void)callUpdate:(NSNotification *)notif { // show voice mail only when there is no call + [self updateUI:linphone_core_get_calls([LinphoneManager getLc]) != NULL]; [self updateVoicemail]; } @@ -214,73 +200,65 @@ } } - registrationStateLabel.hidden = NO; switch (state) { case LinphoneRegistrationFailed: - registrationStateImage.hidden = NO; image = [UIImage imageNamed:@"led_error.png"]; break; case LinphoneRegistrationCleared: case LinphoneRegistrationNone: - registrationStateImage.hidden = NO; image = [UIImage imageNamed:@"led_disconnected.png"]; break; case LinphoneRegistrationProgress: - registrationStateImage.hidden = NO; image = [UIImage imageNamed:@"led_inprogress.png"]; break; case LinphoneRegistrationOk: - registrationStateImage.hidden = NO; image = [UIImage imageNamed:@"led_connected.png"]; break; } - [registrationStateLabel setText:message]; - [registrationStateImage setImage:image]; + registrationState.titleLabel.text = message; + [registrationState setImage:image forState:UIControlStateNormal]; } #pragma mark - +- (void)updateUI:(BOOL)inCall { + _outcallView.hidden = (inCall); + _incallView.hidden = !_incallView.hidden; +} + - (void)callSecurityUpdate { BOOL pending = false; BOOL security = true; const MSList *list = linphone_core_get_calls([LinphoneManager getLc]); - + [self updateUI:(list != NULL)]; if (list == NULL) { if (securitySheet) { [securitySheet dismissWithClickedButtonIndex:securitySheet.destructiveButtonIndex animated:TRUE]; } - [callSecurityImage setHidden:true]; - return; - } - while (list != NULL) { - LinphoneCall *call = (LinphoneCall *)list->data; - LinphoneMediaEncryption enc = linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)); - if (enc == LinphoneMediaEncryptionNone) - security = false; - else if (enc == LinphoneMediaEncryptionZRTP) { - if (!linphone_call_get_authentication_token_verified(call)) { - pending = true; - } - } - list = list->next; - } - - if (security) { - if (pending) { - [callSecurityImage setImage:[UIImage imageNamed:@"security_pending.png"]]; - } else { - [callSecurityImage setImage:[UIImage imageNamed:@"security_ok.png"]]; - } } else { - [callSecurityImage setImage:[UIImage imageNamed:@"security_ko.png"]]; + while (list != NULL) { + LinphoneCall *call = (LinphoneCall *)list->data; + LinphoneMediaEncryption enc = + linphone_call_params_get_media_encryption(linphone_call_get_current_params(call)); + if (enc == LinphoneMediaEncryptionNone) + security = false; + else if (enc == LinphoneMediaEncryptionZRTP) { + if (!linphone_call_get_authentication_token_verified(call)) { + pending = true; + } + } + list = list->next; + } + NSString *imageName = security ? (pending ? @"security_pending.png" : @"security_ok.png") : @"security_ko.png"; + [callSecurityButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal]; } - [callSecurityImage setHidden:false]; } - (void)callQualityUpdate { UIImage *image = nil; LinphoneCall *call = linphone_core_get_current_call([LinphoneManager getLc]); + [self updateUI:(call != NULL)]; if (call != NULL) { // FIXME double check call state before computing, may cause core dump float quality = linphone_call_get_average_quality(call); @@ -293,12 +271,7 @@ } else { image = [UIImage imageNamed:@"call_quality_indicator_3.png"]; } - } - if (image != nil) { - [callQualityImage setHidden:false]; [callQualityImage setImage:image]; - } else { - [callQualityImage setHidden:true]; } } diff --git a/ResourcesV3/images/menu.png b/ResourcesV3/images/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..76c51148eab6d02681c4cd83c4fcc3ef1625dd14 GIT binary patch literal 1491 zcmV;^1uXiBP)4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zFH1y06vZ7;3{V$om`SuqKwEw)uxu$X=R4mhyvC(yI^!eQQ>^nPdF zT<*O0(!g&NMKQ_cSkC|X_?}Yw5JLiNi18d%HDMCpa5R9d32>X_#00DtV}6jCa__8B zUKZdbDvY2q$`=P~SDKc$XYV5&##)xnr90&)(fp8!k2nWJ}zv)2kMd!G^ zUF6h@9@2}x=sY+L*drQ7PVolJl#WYV$PG>lHG$Ry*imL09X+C>z}=!*Gsp|};6^So zdhxV?Y>EtU4`vG%IN?Az5DtU`;XpXhcMjxMZ4vT4WYem_qVIz(HQO^JO{9L*DfET6 zqT|vga)Z-CjiXfozA7_~wg8XOogv^Ed+<6J8G-7>lTDEU?#Xb`0x28_2f~4HARGt> z`pSXas%g|`G^bXrrIplqaD?#+Eos6iPU%N?1gO6ZkBq>&QI>UzD0R=6U6-_iIwtAA tO2InCCoq*002ovPDHLkV1mPa)Bykh literal 0 HcmV?d00001 diff --git a/ResourcesV3/images/voicemail.png b/ResourcesV3/images/voicemail.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ce77be78fb4b3b714072b7de52371df87e34cb GIT binary patch literal 2807 zcmV4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_ zSYddU<1E8793KxjQ|c&UmW!mTC>k>?{om1c9S zUx<6_jj_!T&^M{wWM#>IBbOSf*xP<^F{$j$aOQ5Y{cT zROCL1M7^NKKL z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^ zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&3o zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p& z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oNL9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_| z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p zrk~8W! z?>jShpVhbSIcGX^_S)y3d+(VE?7-&kv(8%I`p(+#b*@r1UPNniL}xD{>YYQ>adC}s znVS>+F@>mSCdw?X*Xlr53c!w)YIsN~y$odu?B}6Oj^GTSencty31yd39ox0Ol4TQe z5eq4gB-9ES@;ZYA=*Mj1w-3Q8}L*+evW^*GQf zK@zo2CMrG+P6sOB6~4nk@LNrEq%ISFM17Y7@bfB&goMIh1lp`8I@OQ~u>gc<`VN+$}}qmAdP?!#1&JbFJm@LzS33Lf}F-RlzUF)tM#E@xlv zd9c6@3iy545?y84qbn~Kl)0OuXVtz#W`{u!J}&sdqLDnwqA@oLcHn1LTQ5_k0D*tp z;p0;a5{g>{WvndK4MWR8AV9<120udgH?O;GdS}B%XnpgE%cfd68sL2)4(P=Lb4M|Q z;WA_^npLAp8CF2*1KXE()a3&DJjZZvj~4XGo|!J2YUTbyCC%fJ21QqVDn^Eh{grky zu9O_N7Vw2$#^*r$f-a_oF~Q=YxZc*xMgr_NY=7Rbqv%lBY%7@eMis`P0)N8B(^!)~ z?}eZ%oL`4-90yt@$e=-^y_xH1v7T8u->F_~JNKGxS(Xx#@C6<-_!t%6_Z`!^?qHT| zqF7otoWT8os0?-N$Lbd$msQ%B37g0MUt$Is-+BVRzRq@%6J%wgUyLX+0{!vSZcL@t+x#^G zLWeD*PFtoWTU)IriR6Pif>lx-va###uw_|Fa<|)Pbl8@80yniZSgdUI>?Feb)1e?> z{J|oA>87|O+k5?>fVa<<{niFqd<5V_Oz}=zHya73eSj1{aE~Z;*5ABhr@zA9xO&Kn zCLf5arRP5A7v@Qr;I`f7m;E_1^o@6DH%^6;Wmo>D5|Ui&2m70B;>}tG!sIO zEIH?f23;fA!Paa{@>$6NBb2I=CMSQWYY$b+&DObf< zTu$LRzNeP|?9aJAG~|=8ITqN47?EE)=O%VzwB+6RLq{`Op+0Ph*sq8C7WB#QmEx>} zIgVePz4ACt@D5&MQ(D?*i3z~~s~dL9l^Sl3VW+sQ=Xq;If+7+J^esvYcwrxB&iJ}{ zWN35q!42=HAAt<}IoCy-q5Fi^nxYzFz*qr6y9+PB4b|yUga1dJHYv641+CX|#~5=t z1IAhydgv{6U!l5mjMasEGl(AfqSli>cD-VFmK2|BU60|i6-N+y1q$ayr3*)h(KNI$ zDOmifi9IYD3x5S_d=4hhK%V&yJL+o!>jUTvnCr|2{IRYzjo;J(i-KYG!|p%73^GjW zrL;0