From 1e61e3098308c59caa68e463a2b5a60d5b8d00e9 Mon Sep 17 00:00:00 2001
From: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
Date: Thu, 10 Apr 2014 15:05:03 -0400
Subject: [PATCH] ui: Add feedback when choosing crt file

This commit introduces security check when user chooses a certificate,
displaying an icon showing test result (passed/failed)

Refs #45008
---
 res/drawable-hdpi/ic_error.png                | Bin 0 -> 1490 bytes
 res/drawable-hdpi/ic_good.png                 | Bin 0 -> 1624 bytes
 res/drawable-hdpi/ic_warning.png              | Bin 0 -> 947 bytes
 res/drawable-mdpi/ic_error.png                | Bin 0 -> 687 bytes
 res/drawable-mdpi/ic_good.png                 | Bin 0 -> 645 bytes
 res/drawable-mdpi/ic_warning.png              | Bin 0 -> 532 bytes
 res/drawable-xhdpi/ic_error.png               | Bin 0 -> 1308 bytes
 res/drawable-xhdpi/ic_good.png                | Bin 0 -> 1448 bytes
 res/drawable-xhdpi/ic_warning.png             | Bin 0 -> 945 bytes
 res/drawable-xxhdpi/ic_error.png              | Bin 0 -> 2633 bytes
 res/drawable-xxhdpi/ic_good.png               | Bin 0 -> 3433 bytes
 res/drawable-xxhdpi/ic_warning.png            | Bin 0 -> 1862 bytes
 res/xml/account_tls.xml                       |   9 +-
 src/org/sflphone/account/TLSManager.java      |  95 ++++++++++--------
 src/org/sflphone/client/CallActivity.java     |   3 -
 src/org/sflphone/client/HomeActivity.java     |  26 ++---
 .../fragments/NestedSettingsFragment.java     |   9 ++
 src/org/sflphone/service/ISipService.aidl     |   8 +-
 src/org/sflphone/service/SipService.java      |  69 ++++++++++---
 19 files changed, 133 insertions(+), 86 deletions(-)
 create mode 100644 res/drawable-hdpi/ic_error.png
 create mode 100644 res/drawable-hdpi/ic_good.png
 create mode 100644 res/drawable-hdpi/ic_warning.png
 create mode 100644 res/drawable-mdpi/ic_error.png
 create mode 100644 res/drawable-mdpi/ic_good.png
 create mode 100644 res/drawable-mdpi/ic_warning.png
 create mode 100644 res/drawable-xhdpi/ic_error.png
 create mode 100644 res/drawable-xhdpi/ic_good.png
 create mode 100644 res/drawable-xhdpi/ic_warning.png
 create mode 100644 res/drawable-xxhdpi/ic_error.png
 create mode 100644 res/drawable-xxhdpi/ic_good.png
 create mode 100644 res/drawable-xxhdpi/ic_warning.png

diff --git a/res/drawable-hdpi/ic_error.png b/res/drawable-hdpi/ic_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..fce7a1d289117d003ef674b21a39afae1538cb5a
GIT binary patch
literal 1490
zcmV;@1ugoCP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000G<Nkl<ZXo2mS
zPlyyp6vlsVaQY+*fv|+dLr;((vgDM22a%R_V^|Rp^bijcH96%F5Eda2atJ{XJ;{=T
z#tlghf%pdughd@G5(u&+B0=^f*@nQf<X}LCMS5gj4&6Q7(^K7DGcLJgAN1Cv=T*J;
zb$wOuRV{4Emi)g(HhaJ@@EVFv2}}VK$?J~7njmYwiC%1`zfA!U2HsAEV*;}ZZvhj6
zq6mT}ZWN#c@(8#K+*I^&%XDAL_t*f!z(dhFU>*q4!8A9p+PmguS&&P>b>Bq2apD*Y
zKp1$_zyh#uoc<Ph2z=z5=)tHRM*<KA9-wD|^NM)!05Mg{^#KZ1=`RGm0P@)=>%<vA
z7&JYFMc{-}I5<(rCQBg4TPEtb7&`$71J46)0dwQUG_pJZ4*Di~R%h6#Ge~H&2+V;d
zUo~#s^nB~A?*V=Y18>_)0|3q{aw2w+PFQ~8>hyf;t}DC)oUaS6l0xxrqrU@QIjiLk
z=ni0awVR>U(NW}kK|iRl>4D7nCNgCsm(D;;9Twu?Gtuk|p|GUr5rr8=R<ie*P1X*)
z+W<K%=!XjD>^1_>P;{Y+N~Hi4om1GS2%6;60)>_YIodMa=PlD+7nlKADbisOus~c^
z9P&+MeAA_6x)(ss6>M_4>;_Jb3_y_iECeO5153bB-$c(-d*4Lsip~hSlEEG7+Yvb2
zGF?+}cLDUA%~t|vK4F9#fH3fOf(EwVk|A%kO!s;5x0dOy7wMF1H$V>C`0SeqL4E@1
zWcCAe+NH49831rBPn#lz6ut}t?|oaxBAtq~vGoaq=CndvVY`KLX)ZrL3V>PLRA#z1
zK)+fInpSQW=u}3VBzSKcXbVi1Q7HL*2W&JN+D5~`YXJX%PT01#v_wv(wkL4PH_<n?
z;8ug?Yl6J)o9Nf_;I$1*#^aLnF{JktUTK-`Kz6nP*rD*3&0)S%E+g~=&iE$!x~k8x
zpXRh8ZD7*9m%iOH-QV(WY!sTRn#$oFrkYOn;N565tjkn!EE|A{ssvrK$QmGvVc^w*
z7^DqYl2@q?Y<B@bR<!jqZf-Cgu*>NU(92=ql~N)(#a-4uZFIm>y*?bT4L}E^zjUOa
zQ}PJX0XgEE=<hNBzKH<dlVpp{#&*-=*lGYMx|ZU$eT@>?0IW%>C~2|-UCI177wK!Y
z00dc6w2yR{Fj{;%pruL54kB6ynb8D97G$N~Q}jtK0N+F}1bO5_p@cS-NoqA{p0NGq
zn`j-F8G%lJf;_DS5ToX<1BEJS69(S2LL2zDY<C)sPTXt7Yp5Q8z|9;O2K9Q{#7Roq
zppz2U^o!-SlQW%e*!q{vz+*v{V=z_<ovN;Fq%Fu~j%p2{vUUPy1$kCNp-|zzGk|2O
zE~RjWDWso<f%mE{_@t`L<$^v98h|y~#r2nbuIPk~Lcpa~$<1BWq5eAPLpz0dQ_*%F
zM4mQ-yHrL48=d0d^$O_e%+J7D3xTU;LDn7W_W-{D{WED&o2Ts`iq6J#Ay*y@*x00}
z=qW+I1Fit4?PdTR@lAAlEC2wjLGugX6Cqzt=ZkE8tTBK|+r5JH{|;U{0zE-~Rx~JH
zM&@j;33A4_>^{x_!ob_6=#PTDo1?-|pk?|fwuOGnAp3n2ZB)fq3jkm>@U{bY1@?>@
zl#_#DSpoJ})m5pu+|1E3QAgmQ!ky7$ajtVx+AM=Q1rLq@0DKcY6F4Mr5wvHiiAo-)
zIwxIS*MR-L={f}uW6p3Gcmc4WuzQmz6e{|$Ah)X)tWCzGXuP<Alc4j8>`Di7-Gvf8
zBu<!D^Ot1*34m1MQx<!Zdz%A_?gAPmyHGE#D!B*TP`F=~VO`~=0pun5U%~{)8wyhr
spJ5xsC#f}sC%{u%Rk<ZwvL)lmzi$~q?kU_HRsaA107*qoM6N<$f?IL0zyJUM

literal 0
HcmV?d00001

diff --git a/res/drawable-hdpi/ic_good.png b/res/drawable-hdpi/ic_good.png
new file mode 100644
index 0000000000000000000000000000000000000000..2aa374c3f3464883f25cfdec1743d79672ab7fc2
GIT binary patch
literal 1624
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
W5E{)UA2DJ80000<MNUMnLSTaZofJ6$

literal 0
HcmV?d00001

diff --git a/res/drawable-hdpi/ic_warning.png b/res/drawable-hdpi/ic_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..b9160018ffbb86d24ae29040226d40d95154e115
GIT binary patch
literal 947
zcmV;k15EshP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000AeNkl<ZXo2mR
z&ubJ(6vscW31N^BL_~r_iK0Y}h)511A}S){K}1DlXINy}m1U6}gcT%+h>D0v5d0IS
z4xaoUJn2yoM1+`wc<{6fBC?16dgveNneLwHneLW7^cM=gQ(aZ>y?WoOem&5jL4yVj
z{;%*I+vPY=rwy;p#SI<-E9%x~qqYG2E=MIUOPs{GP?sI6V^QDX8N3D-!>(0{1+T;R
zs%_Ph0fVc+q67-McA9acCR^1)U8V)^F=qN6eKnZ3HlM4sS9t~m%LX$h=xbBJL%C}0
zRT_XCyMQGbV4$$YTyzkJtF&2J0CFJl1fvD9_UYk<Cs^^j)!D5w1E<Y6mm!_r28V%P
zsxn&1A(mr8;*A;mqTM#ucRt0%XEWxl&DXNFtIEKiB%FsF2}Ru43f!u~aOn*Aj?E_C
z1DpC*ehcvqw-5*WrhXSJcpX;D*q<mfImBIA;Czo%#2?n-6@cGm4&!6rm=^FDxLC$`
zDGB+G{lK;8cb;s>@4w)8IbOzxu>+6;gB24KIk!y@a&IN$soeNVD3gKnf>W6<tc;VD
zImSS60QhZOC&mguj+Vq@qGC-!OYxpbVZYK`;(;6+e_jA$$&6iQfmF=GmgId|NcLy6
z%@TKhN&s@qn6aEFmC59NDNwZIIoyoD<k(Yx0OFxwn$XGE&pe)<pT{Q!E2CDcBLyJG
zqQS4ZvSDlqMf1-H&ejru93Jpg7R;$yLJ<d^$T3-Y0EjCRM+(U%;4O8Tl4A<kkPKuX
z7khx~Mcpb?3x!U+17?dZ4EU(W!YFe6M`GUV@MYM*qKp0w%rZ<iz1$Og608DVQ3-{7
zqZ#*#I5so@IkrpOjNU(mB_y7ivBO}u#O?UeFbNTF!tZ`JRl%k(P(tCA_8f6}<icBQ
zvksraby~o`Q2cO)cnO@aHh$iKVHr3kaVcw;3rJ{=^}bn&i4i0e@nbOfU%lLY^@9rW
zHR4b_Qi)l^`I^Bp;y)R85&H%?G5~94ELfXwSq}%5u~!War5vO%p937>3$Dbs-<-q^
z;C|M_%w^@6miS=CmPj@h1|o|;%%KPm=a%BZzj}ME9h|8o^3K2=U`u@S5Ldv(Z=vLd
z6ufzIxtNl8l;vnD19EHvUPw$1+Lcsh^0=)VNxs)c=E4WsUWc`;KpHe?(4fIs_yN=D
V?={C3>hk~q002ovPDHLkV1jSgy66A^

literal 0
HcmV?d00001

diff --git a/res/drawable-mdpi/ic_error.png b/res/drawable-mdpi/ic_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..d7a993eebf9a5e347add3872af87cd30dd004b5e
GIT binary patch
literal 687
zcmV;g0#N;lP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80007ZNkl<ZScUDE
zziSjh6vsb?u!x0-1Pci|g2fdUHVT4)1uX<4`0KEUidd#hA&ST$f<&T!KnnX)G@cM7
z2*O}m3(+oEY#|Zku&@vrmcwE;ce8J2_J;{*k#9NkX1|}AdvE3)Z0jFuN0Z<rj`jf4
zz!cB|CbFp?z#6a$EGupLTMCfG(E;Eda242D5pICzz<s67mrVgAaRe|6EC9Rez&iR3
zbb!Z7n?YlMB#y>`Mc`&bW2qOwjMB!`2FP~)bPLQkv;?$$CovXSFdHyWYnb_t`yz1L
z7hC|y5^lj0+XYTwGd`pgXajdWbDboPT9p9UY?lew1+FP=J^-fz5Gim)X|trXdFX+N
zfCq9>E(fwY|3<#lz5|DpHou&>qrf|0uQYdJz}^cd1>`}c&HBcGJb`J7b-oXHnZ(g>
zTxs)>(Mg2Np9ph+acn*eB>|@J>kRNJ0MQPZ&jr4f^N;|AB&mW>+VmQj7d#}u1m!9~
zG&C=GgzkYdod%A3#wURrO+O|9%4!@&3HM%3C~dwHF43Te1X!zKo=dnSjv@!bt&Wg#
z9ui=+i8=N+e_c|dKIJ?lz%uqduWLR>d5KDh0nl>?asXK;(-n(;0>j24knO(eSjXO?
zxeY395_h2R94B#f82C*7M(ksE^vPrHY6Z9e?8aWzN1VA7IF_AG7$AeV1w0bNec%mn
zJz(xaObT;=d8N%A85{x_1D*kwE6nO@1vsa)DfAQGizw?{X0V;iX7v`h<TDQfWDtf?
zbK&jhDwG2Az*+Yxm#W*Ax3JB`dF+!~rUAB`J2K(^8o&YBkA2U}{+RS+scq}O)*mIG
V>ilZ5TMqyL002ovPDHLkV1n?VDGLAq

literal 0
HcmV?d00001

diff --git a/res/drawable-mdpi/ic_good.png b/res/drawable-mdpi/ic_good.png
new file mode 100644
index 0000000000000000000000000000000000000000..af33e660c97f742d3f9153c8bfeef9fbb3981e6d
GIT binary patch
literal 645
zcmV;00($+4P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80006^Nkl<ZScT2k
zKWG#|6bA60!NMX%3X2pW#KuBIglm&xB{pe{Ac)#1f{<-QgVh!ya-fEQ)fGa}Heit=
zl?Jx(KoC=;u?S)jL_{P6Ng*P^VkhTb?oVzn3&~f_?!GtQ_ujmjdCMW=SP|nSjYlzw
z3Pv#$K5bzGt5~T<wT;pQBxwxOn8kRH^VTtsrD{~`UqF(^r?F6gxSf#O)u^^!SU{4-
zSMU;peUk5D8@H-a?RC4410BfkV6g;pVUEQxXA4>~5F%gfB<=v%!PUK)Xc7?Cd{sG-
z@8T;)!gw2%d`&c>4As6+GWjx2<emqy5V)EJ$hKO))!q&t@dYRMydMu-EdpjsB>#@P
zXj^!Bt^pb+Tv^fo#%0WCPJbTbfwPf;$&$zg;y<{)kKJTmK&2$|=XixV`)}h)UchJx
z<Zti*Q@GHBebW*QbusJ(pK&dWpZ4f8loxOi{KBPbRNKT&oGs$KD`2Zn@*Ui$Mzv2#
z8V}-e0pG2>fKCm>5B%*iNm7k!%VB&U!vzFv!13^~+QH}>F3Qq8CM%pVoWf5$fh3KG
zWd&FSt9bz{9gNQ7J?`N}m+t0~;&;djx!W*F<9E8BhD);UW;6dXN#iqE^FNqgP_IU{
z37U7o{60?8SWD7)?;f8kNZ!PicU+S7aNV*ng11Q;Kf}XdJ5`Xp9=LF@hUA0nvN>0P
zyrm&I^p>oJBpA#Dhcd}$+I7Z9vn{8QiHfXf`bAx~=55Kl3J4<BF(K=4iU_F(pNVdN
fMI3>j(?iEU1PrS5KTg3{00000NkvXXu0mjf7ceI)

literal 0
HcmV?d00001

diff --git a/res/drawable-mdpi/ic_warning.png b/res/drawable-mdpi/ic_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..37c04d3e6dfd857a7e63a8f0c7d17c193b8516dd
GIT binary patch
literal 532
zcmV+v0_**WP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80005oNkl<ZScUD@
zJ!lkB6b0aKmav2%A}K^f#3E`CAr@kxjYY5#Qi&F$R>8t5h@FL4ScphSVPz-0!p_RV
zUeH2_g&4IFk*!2hEFvlLEM}r>va>rs*~&f54Da1J=Wy@4b01@j(Eu?JgH{ucMjzuc
z7Ml<xbw7;36h2@Q$CK209iAo`xQ)ZukGpkAYGoh>hwu?o`O*gFlGIvNuDTg`&?63Q
zJgP%fIRh~`i&q8P7n9VBkr~Ka?hQ^CgsjO*u~C+@Y6-3n5QkaZtU_2i12NbuJ9r23
zrBAq$zdz|QwvMAo>U$a9DjB%bBMv{4)M}DiMYm^tAMTeWEoC4EGgvB1ip3b5+BE~R
z7Hd~9(86*IyI>#&^H``LzJ>F+)W|>#Ca_#Xd<zd_Fj?CGZs24C14nRcP(WcD#$Xzs
zF<lVyRn{5u=WIb-S2is>{Wd2Cn7cPXoNN+4#-^<Gim*pEJFfNH?3;lYoWQ#w2ESoW
zHVNP2*nrqgoJ&%#w{Pq?19|JL3=xM;lKPRPy7)3AwuO~`*SCHm3z#252xnsO48L%p
zOgygQY474cC5S;A?=e$?uns!11NrCIy*(vMBNT^&{&o&_mf$&Fj?e(g-xbFAKkysJ
WmR`(x3}eaw0000<MNUMnLSTaN9pK3T

literal 0
HcmV?d00001

diff --git a/res/drawable-xhdpi/ic_error.png b/res/drawable-xhdpi/ic_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..07ef5b2acd9a8c476396e45304fbd7d12f85031d
GIT binary patch
literal 1308
zcmV+%1>^dOP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000EzNkl<Zc%1E<
zPiP-S6vsaXS&9UaAO$_NYe8&1mV%<Dtd(l*MXdxqdXQSHH!WH`6puj<g($7Xo}`6V
z;-7+2D&m5rXb-`YXoR{A5_$+lLXa{@@i4O`{`}3`H?y<91l;d+XXefKyE8lQy?F~g
zdi3bg<Nu4>MrEifvU`E;z*b;0a5u2QJvP8~;3_Z=%;lx2Mlr9>1gMH^4A==w0egTg
zfkP|;=Yd(^LSCA`)6UQ$xd2s>jRX6E*9a%=!!_UpFq4;NDbbifLIJ8G%YcKxJJ{vj
z1y+Egz;s@kl@tRe5uhrvhk=v8gDJ*SU;%hFFU{9&2WlmN+vjfs?*g~ColFEi0N%(;
zV`2x07N9D!4Zta2U+fr(a1nSWFU|Fs&QStXMRq6f74TS0{|@jousbi!Vra);0o<Ga
zhV?_f#xKBR=qWK4(%9|!Q>;JoU>&S4-3wA9NC4~yZ>{&dghzmxkPhlC;EuZQ(SPk%
zfbo#YBpmDcyfmL_8md-+b8=3iCw~dJ4`_W(153apa44Y9v8u=>G!3;|;2?S@=MwO=
z`xre(I}w(!U-zH#(!7segpI%vO~b}5;C%bv(Yd!Z`Q=spGvISzuVzB4aEtuFeBK1!
zQ}j2${ds8?q(+(*u%Afs0M1JbT?s?UyYaLuA=9)ISAaYAexo_6`vG`rko>?{+LhoX
zKQNwVC9DAVNP$z+3fPG*q}>SIB{fj41TFb7-~q+F#%VaVn*^9r7y&ENcU6&Xk{UIL
z5JLVV;AQ39L=H^?>`@wlb|Q2|9$=T-ena6Ez~%5lGdeLMbV(lI4q%7xp|k?F2O6po
zD#D{3lCR<AA_=fH(ijAYke6m&YLkFGz&76lNr25Q41!Vw35m!9c;_GqkRq`eEkZ)_
zAaIcc2#Tu(1dEWEJP2GQ0YY;H61D)JR)zO88pHw8kryG6yphn(67Wi1s*|@LlO~j|
z;WaD?5S3*e0@XRc8j%5%1TPm!fU5}%2a~UnSOjlKED0c<&k977uaQuMUwscG0p?m5
zRJ*rTk%`A`A`!e?yaKrU`QVEN!hQQ6TSk#hFu-Ns!=|I|e4w$Iz$Qf~E#YEbn!kJx
zn*^8*Fw`ch>rw=fLz4g(u*C^YND<O@A;Jydtkgghz?G$(P#BuSUQl|WbZ<jMIHQ=?
z*`~Wfjk`O8O)g4!5;)__yaf98jUrS<_9FJ8M#4>Cy2)6h08YW9P3?eZ86rYtVB;0R
zk^h9|TdLD}X~b0t`haH|!JArze~HjCs{4-!0pyo~!x|$Ym!o^JMG+c&0lWZwNc*Vn
z3h+4g=2t@=Z2i!2&EP==5>=7S0Iw^XFCb)M0<nm_d(e<Shb@^=4IC;!27Jr<ERX;j
zzdV$e=1*;hm=c)@Y@NWUO5(Iw#Fofh3F#D^^>Ni$yRkJn>jl@aj#v<Rh)jFAYOG1@
zjqqAy9(%XYc;pR3bl%VT2Tx$rS8IiH*gYTo=4+%XmE8v%!+xnpfo0$=;CMiuaVSz2
zOHW|SQVw8?6S}}n;52YJFU=n*2JE6-eiODb<0aBniPcfvbnIUDq01j8>f(ecU>Ek5
zHUtJ+2Rw@+s*A-)ewlF&)DG+|?KZ53IP9011#ALy4!A63a(eXW(W6I?_V@=7c;j29
Sfa%}>0000<MNUMnLSTaXOjN)C

literal 0
HcmV?d00001

diff --git a/res/drawable-xhdpi/ic_good.png b/res/drawable-xhdpi/ic_good.png
new file mode 100644
index 0000000000000000000000000000000000000000..a736d119c68f6e5f985301f7e280cbc44a9e9b83
GIT binary patch
literal 1448
zcmV;Z1y}lsP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000GVNkl<Zc%1E<
zVQ3sh6o5ZVD4|HTRfALsp@`;32?T{eDTM_a5khK^QbdSijKZ{{Rzi{a5k!`@1VL=w
zKh+{d1ks?zhy()zMFK^sHH4CahES@MDk=0w3E>F-n7Pg7Ztre)cJ|zoe1DSN+kJ1|
z+nKj--ps-#8=HHYrAR9AAkYbP0ByhypvC-L0&W2}fkj~6_kw?$(XQMaAeCqX`hWw#
zUZ6dti0i=5z)!%W?*%vAwov2L0aA$;pdT0po@VU{XQc#8180E=-wR5P<hpTyF?<k^
zz-|{Z>#zX$z<C#r$m{^A#D3soU{6+ADVYO~_+D@!ix6uENF`c<F+c!YvNR$Ct3UvZ
z_+GGVBf!c5Qi;caaiGiQ{v4PEp7*`rkF+<Yc7W;f-vB$)-kUQ^z(Cp|k*e!TCHjFW
zif26NHcgo}CMIzYFoM4Vwx(=YvsnQS`Cc%Q<l;mQFx`F%XwA^DX0i-ClVmtFbbtwX
z7b#}9ug4P5(<m_3jREFWH%{@5kDE8_1jdaGHE9$C$0*LLt`=Vd_t*HX3vEM9Y7PN2
z?iK%El9PmTpsN@8R{^h9JcxCG$?bom`RQ#Mt^gyz4+*ZF1G?kp4z-@{AjLL*2{;Ih
zCcJ(R+NLV1dVqQQSIK`?XG;lq79HfiOmW`=@I+-Vi0c9U6xVowcYq7PiIn&4CMH(I
zIbhhLQO)9<?*$*BXP`C@smiu>L%@`={=!`)$0aj>2W$iW#4a}}0gpt>Yn45qk762s
z9X;J$L06q@6SEeyjUkl|IAAF_PwoH*eJ{8nmFNJDW|X(i#!3h5%P2e#hI}u$Wd1)v
z_6gbE=s_3*Ox^yUjKW=W()WUQ0i+U7p(kZ7GSi33>kd(2oel)MWD-5zkxBr3fV;Fj
zv^6TQ!;x?oTmfG6y<pWG_XGPK%I_%u6LmnFLj_q_LI=Iu5N4*Q9P0>ejXGe5V<k3}
zfWs9<j8}0#JVRTf4k*I=f5i8K>GFY8;$Gmr9Q1^?7HO{k8Sr7nx#Q$KG@}l1w%};N
z4Dh<|1>p&)#4g}iPWnPyqYk*0ld?uc)7&WUqx1ee2yKlzAeZ&`2HZif=G=&$luC2~
zFXyN?b~3b>qrzGY`(E&C%=t0$jZcf^f1;6pKBbV$=KgkIyG0{T`d;uw<w>bTFVJft
zFAbrsp_ff=d@Y5Lc3{-^g8P66fG2?g;B9m?{}%0}rI>reG&hP=Vhat**bcZB-G5a1
z?w=v~UY_#8!zaL-X2y0Y?n0@=b|bgL{QW$V=0+JL|8<C&=s{&g=oR2o3!(GC3%(az
zwr!PEVjH>``>3sqgbev!aISn%8E7W4%Lh7vi&BYWrW@Pv7Wo@rLfaU!uCb<8HjN!y
z(NoqRr4kRPxzW@jk6Y?Z!*u0#ySS%yHlvbW;CHD+U&AZc7{%^Ql9npl;v6u6UPQ=3
z8}PkU;&h|cS*gV1z-t-xC1HWJwZxDr2bh%;-;vUz=-5zine7zKnTh&o)&|d`7ZhF4
z1^gnF5T>*hB9+(&Jm*MHJ?79hRT1j|<EbO)rDYeiqBm21XNs@UI$z$bqBm5=zTN6>
zk&#NACVL&elD~nMNWZvg%NgGb-l+9sqp>%FE=Ib{&UT?UT-|mkvlg>x8)~w-Nve?)
zBVYi%_3Un88C_>+xOFyB+G_UK97b<KEIKRb%5tJDvx)O|v-9#0#qJ5qq}U}2o13N6
zmz|7)9(05)3bW{dm-^!gtEsCAE<L~*+$BpkteQ47jP|wI@Sn_NuDqHCbOS?VpG78N
z!RYGFYCLRyHdp8mC$FIkn0L>Ill3U-r?Z=Ebp8W%M4hW|RJhpy0000<MNUMnLSTZD
C9I(;=

literal 0
HcmV?d00001

diff --git a/res/drawable-xhdpi/ic_warning.png b/res/drawable-xhdpi/ic_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd580a2c2d23aec2a9fad97d82fe50d5b5444400
GIT binary patch
literal 945
zcmV;i15W&jP)<h;3K|Lk000e1NJLTq002M$002M;1^@s6s%dfF000AcNkl<Zc%1E;
zO-L0{6vuz_5Rnj(kcfzou(IgG7D+4nfWo3ELRvTxK`u&Khy)?wB0@yO9`4!{ZSJmp
zEou|dD*A#*vqh^G;zC-5h_}VPPxLwOV`k3W;lcfZn|b%1`JdyNbKjivz~k|FJRXn7
z;~uRjXvMZXH5Br^IdBUY%Tqv**NwHJ4Ojr$fP+EE?>uzmnE~U#4xj~?&Pzlt8K4zi
zz;~c|!{t*!$UE0s^2&fBo1F)k)ylmd=Qq@f^T4Huk9vS1$8y|00$R}od<70wSh5Hl
z2tt-!X>y$b!&G)2Oi>(nqy=!80b0=k%mdqNEL{PP1R+1OSLHSX9#PwQFvYQ$v6gk5
zWPny220jB#F}7U@LSAPiX`RdipcMdbfwM8U&H=}QkQHf78*%XnTqVBq0Nt3PnJJlO
zfL63%zVYo%Xkr=I7lbUysoG4|88AX}=K<P*2_Y?!WR?M1u@m#Q*P7DQ8gM)a`IcVQ
zR^n9UxJ**n`S-xHvTIi`^`e{t<~`v|5DKcZWD)?a=ml<8S@J6gc~Q1!577YtI1LN{
zFD3MCM7##rV{bMC+taqFijqYU90X2gV7C((l{P9G0Ig^RrX+2aF{Tx}Bn?Vuzyn~n
zu+5E#2UsisTG0vIm$FxdL9OH-G06;=2KgctLFrf&(Jo>{EBY|Ulq-6H8xn?62f+R(
zW(BmwWzrViR7hmN5T>E&nq9!dv_?_|Kr7mT$7w~RU_`4_FI%ZIpfugdi_}x4!~xKX
z{lL96Hy7fXR*4!eK)MWwn(pL9(as!Vlc*n{75%`gBzrA?V9Wb`m;Fo1-5}&?+)c3q
zpcT!S=}vdty&1EFX`jWKDkXUYhLLf84fqIr09FO;bzo)>v51uccDl2G>D8s-A8<Jc
zd1LMNU|Q$(3{I-CikT|S)w>~X227CNd4T67=K+F{FUY**H4$^FRCfTh;wW<C>xGDG
zQnSE*ts=+ok<=A{4BA}h>b#be8C$GtQt#P0fN4xhaZxK~FrDKS;Ew&1qVy&0Nv(x7
zi=b^p{=oF)8i~J{V{x(CqIyz#l*V%&%+K#?PL--=fNem|lYY9B7i++YAmme}1+_9@
zipF&wjDJO2#49d{#5NuW<uy5{54c|G!)m8M0k|zLCm)>s>dfQucsw4Dr(yUHJSwXp
T?nLp$00000NkvXXu0mjfYJaiW

literal 0
HcmV?d00001

diff --git a/res/drawable-xxhdpi/ic_error.png b/res/drawable-xxhdpi/ic_error.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2d639909a683518ac2ad234a8b2817dfbec9247
GIT binary patch
literal 2633
zcmV-P3byr$P)<h;3K|Lk000e1NJLTq003YB003YJ1^@s6;+S_h000UQNkl<Zc%1E>
ze~29A8OJ}*aXW+~NDM(r3}H64wn$r2k%(=yBUK}jfKqEA5v9b^q)>}m|MHJg#6Mb*
zQe#joF*OpcKdXoq3W)=13)+VEnm;6j>~PQ^LBdf(IA+5={bP17dz;<c_t(r`?0koV
z=Z>BCedm4l`ON$KpjNF~wQAL>RjXF5TD59bDj9bHMkz}gfJ`a6UXU1A2f7;MQqTzi
zMdm?22Tlue6399~XW}%UA4|avwd@>_B@w_nAW^s;*aUioAS<==83A-y0_QacWS~a`
zc^^0o9A9n@SvC&Hl4w0}7w|(xHwrQdpeWKQrl&nG$T5XC1r92Dw3)W6e8hnos{^tm
zngnhFeg@nMOt_?@oPQ7#yQ7a3-7Cl|ahlJ$<Qqa`aX>4HCIxN>9#M3oPg=b=a<pdz
zc^r5yPV=)qWpPpE4#<+m4HOT&DIi`#*e4Vo5qPD__e5n5XeEs`f;<7-jU#G?$reE)
z?8A!gZl>*HA<H;Sr8}UNM1XDueh;h-oqhlW4YJRGJPi75oVH7ihM?cXeq~8x67<)=
z+k&j^hP`yI5H{u5D;0fOk(aY1x+HM5EK+F^&`P3Jz)MoJZc0^P1ohiT6}_XGwvU%k
z^l}`KCDB^YcNDx@I3_9yLH+ipAlsU0{`WG<A5@(V)q9{Dy2&qt7ETCz7WB3_ZT~f7
zeFb$u@y+LbU;_;7{FI`S5!7q{7q~f2^N&K6Jy`v;l4zBn?^S`FUR8vkUi%ctcbjSc
zNr>_XX$56TV^ZKHU}LwHQnV|=wRS3Q1ubP?Ch%64G*)|89045AN+J|_47hc1KuM4F
zg|n{&d7(3w<t6U~fUTgvFc=>GqG_uj4+6jONyO_NkR{O?;9qolxE?KyPZeDw;fJ7?
zvQGkQ{nBAh;JP@?|LIzXz6g4Pp5X<@a6SQCE67gZoJTq~_B80X6n-wqyyd+;HY<RA
zJ}7c_Kr3n7py=I-&&3JgdvTi2#A$v&(VdE(^GkE&H4SWu)AlKWCxHhPo%cxZYG9XZ
zJvt$%<M9vi7*bX^Aw}h9y=k|S=pN90CE@5OMV_a6o(153;CCMBf2Q!&W}2V2txMM#
zsM~=};Eo-E8~ZCCpqb_eO2W}J=%UI8h|`=n&7btd(Hh{P{%0|fbp&KdG^yyvICr>Y
z;5WZtt)y`eu#Ye;wP``N#A*KNun%-2LDAph_QjkP<STKSe`a%&OGY=*)8PWEPLomP
z12oh20XmW3l2?y?RFIpOs(dIS0eDi72ORTSrEuS<=jxYB1iS-mwY`txg?nS1<};T0
z`9#7r=*@B3J~jHI=haH0`vqJgVFvheoaX0DZ?MWBOQQ9P-s;refk$mCAHbt^w9wkI
z%@gz)MUOZ<=X!-(Y;v;o@LhsTfISL;y;&07WSJk}gd-#D3{o+RC;NeG+|b7koBWIs
z)OksL3|wQAL7&b7cf@J_7nhq2apZ)ZPWq9;eu3>S<?Cn`xZHG!i%kTqQ*@(8hXqBa
z6n#BQBC9a%$^b{s*vXP80``M$_k6}x3Y$&yHFkhPBFLmiYou$h1pZV4j=Zp=uwT*b
zo-MBKZ(B_Bwuyl2yM{r>WRyJxyyY4R13GI1J6R?wup`e4Y!C2UU2Se94Ws;x98fF~
z*G-<GSr(3tFn;XxUsr*wG%15&1jrO{MTqe1v%PU7$aTvBJN?fkoq6$5GID?xn<ExH
z8Y)yn;3!V>-1eR_uydiUSDBQ>$N_@HfkQMXj%-vSb{1VAu}OJMU&8Aaz2gZMs=;t%
zqLQ(*$X2-Aq)es=THX7OFE4EUaI}=F!OkLkjY+vo5p-$E2r3mvRbgi_g4AeHuW1BK
zRDhsTa8xCB`fQ`RHSUO2grHu#izDN1eZPwFE7?~eb}q0-$rM38lh!_ge4OIPNyQ|K
z9#SZKqJId60yzNm^IilASlPJQN2OQ@Yu(A}Rh+gDfbJCknKdgL<cvxAOc8W?aZrhs
z?GVD#+P8YaN9PCdw5oMS07fe$OdW8t!oZydwlo7(ephjt9{_e%g(HFgn3T(~6(m_j
z2nvFoVX6{Gie@HdGJFY>NpbeV`M+4$<G{`^RfQt~qx}P>2s)!^cCle+m@2?gu87e-
zV<QK2c8(t@2|>=-$&$uomPFsQy{~wt@^B<@jACwhq%1mO@_z4cHg*}<DTWv1dEjqZ
z(r}zvD+fm)A2d_5QF5Cp$;0ZmiZ~c{x??+9jO|P*c+IR47)QV%)BG(QpvMI{76?IJ
z*x|yl9j~#YkT{}ftQ<DY+t>kd+MZW<lTKFWWsRT^*cmjo(-}J&FOCFBV~b_#Rx9JA
zIB9A*U}xAhb{qi*ZSu5ofTBl1K5|4*XzUC_!8ma=3%p^IpOpiOGuCvE3xX8(lz^RK
zwik{Bc@1RRFs}t$9Zub{-X9>yYl_a;ho<hylITvGybQ4u6h~PStx)t;MX$C*&z!(s
zo4mlm0dbno3G%oDf+FCcsS_-*69h+D60HDU7i6nLUN2JYfv}Q{{>Z?BP67YMaPd)}
zaz%GE)Anmiq~Dpt^;)IetFxeY#A$ozs_f1)y^7oBle54#;xxB*fYT<uIL*&$apIxN
zwPYlCV#f(bJ=odmk~;8|OXY*dK4F1ZKn^>0#0EMc5O%C^<cS>wnE`#&qaNMWN*Y%R
z@(+rKbI}5hO2E!AE#Sx#I{@>FZfmCPcU=qP<p6*ziFPUav_}%TAol{>6fL{*yE-Gt
z4n=>0d*vg@Gr;cHaNuol8lK9M#)Kj-3*0&EoGE4GPV;$1Cq{fGu+2QkgljsAPJ?`>
zndU~5@5AKn0D#WXjvoSF50TzQpwqy$ahiLdq!`2j0Ij5P1;u%BUka7xGS!^GZE@N*
z9`RgC!47UM&efD{g3KDUf-YA3oFMmxs{A6|z{--ww?Y04lzQUq7<3N!ah&FV2$^Vb
z2LNPAv`Nvofy>HBe+-%v_)(m;{}?*qQXBx#N}{g`yailYO{=Cf`!w)_IL(7$r&pyp
z0H8S9QC`5KtvyaDObdKJL~Cc5N_7A%oUZktqQ9azW9?$lydcjiJnY-fAEnYA&{dX1
z8-aa_UcHR)GRU4$bhjYy`t)#3Rha`|AsTi8zr=74RfReWJO%n_oVH8-*7vGX2Xxg+
zqSc@e0Y3#+jiU@*2{NbfqQGOWL&|>nk5Qe2U+)8UYq1#|s0=l;3eO3;7vw}0xEZ9e
zI-slKAV6*bc1Y1;Dl01H6io#=2)r?le_PeBW#NEcWl1!puvv;DUp8y8<==U}L6BpL
zegJYv;IPf2sVcPW9MG%c$QM}&Y>>hcG05c#YXmOQh3&JT=oygHQtV90KtEA91~O~9
rP_|aBTD5A`s#U92ty;Be{U7LmEcm@b9&Ntm00000NkvXXu0mjfvtZQM

literal 0
HcmV?d00001

diff --git a/res/drawable-xxhdpi/ic_good.png b/res/drawable-xxhdpi/ic_good.png
new file mode 100644
index 0000000000000000000000000000000000000000..c1de06d8529abff237432aa86a07020ac5b593e5
GIT binary patch
literal 3433
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
LNkvXXu0mjf6g{AS

literal 0
HcmV?d00001

diff --git a/res/drawable-xxhdpi/ic_warning.png b/res/drawable-xxhdpi/ic_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..4316dd81251a2792d7674c85a3b473373718e2a0
GIT binary patch
literal 1862
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
A^#A|>

literal 0
HcmV?d00001

diff --git a/res/xml/account_tls.xml b/res/xml/account_tls.xml
index e0ba63512..55eefa2e2 100644
--- a/res/xml/account_tls.xml
+++ b/res/xml/account_tls.xml
@@ -60,6 +60,7 @@ as that of the covered work.
         android:key="TLS.certificateListFile"
         android:persistent="false"
         android:title="@string/account_tls_certificate_list_label" />
+
     <Preference
         android:id="@+id/account_tls_certificate_file"
         android:key="TLS.certificateFile"
@@ -95,10 +96,10 @@ as that of the covered work.
         android:title="@string/account_tls_server_name_label" />
 
     <EditTextPreference
-            android:id="@+id/account_tls_timeout_sec"
-            android:key="TLS.negotiationTimeoutSec"
-            android:persistent="false"
-            android:title="@string/account_tls_negotiation_timeout_sec" />
+        android:id="@+id/account_tls_timeout_sec"
+        android:key="TLS.negotiationTimeoutSec"
+        android:persistent="false"
+        android:title="@string/account_tls_negotiation_timeout_sec" />
 
     <CheckBoxPreference
         android:id="@+id/account_tls_verify_server"
diff --git a/src/org/sflphone/account/TLSManager.java b/src/org/sflphone/account/TLSManager.java
index f8404b4d1..2b9b9b6a3 100644
--- a/src/org/sflphone/account/TLSManager.java
+++ b/src/org/sflphone/account/TLSManager.java
@@ -40,16 +40,55 @@ import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceScreen;
 import android.util.Log;
+import org.sflphone.R;
 import org.sflphone.fragments.NestedSettingsFragment;
 import org.sflphone.model.Account;
 
 import java.io.File;
 
 public class TLSManager {
+    private static final String TAG = TLSManager.class.getSimpleName();
+    private static final int SELECT_CA_LIST_RC = 42;
+    private static final int SELECT_PRIVATE_KEY_RC = 43;
+    private static final int SELECT_CERTIFICATE_RC = 44;
+    private OnPreferenceClickListener filePickerListener = new OnPreferenceClickListener() {
+        @Override
+        public boolean onPreferenceClick(Preference preference) {
+            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)) {
+                performFileSearch(SELECT_CA_LIST_RC);
+            }
+            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)) {
+                performFileSearch(SELECT_PRIVATE_KEY_RC);
+            }
+            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE)) {
+                performFileSearch(SELECT_CERTIFICATE_RC);
+            }
+            return true;
+        }
+    };
     PreferenceScreen mScreen;
     private Account mAccount;
     private NestedSettingsFragment mFrag;
-    private static final String TAG = TLSManager.class.getSimpleName();
+    private OnPreferenceChangeListener tlsListener = new OnPreferenceChangeListener() {
+
+        @Override
+        public boolean onPreferenceChange(Preference preference, Object newValue) {
+            Log.i("TLS", "Setting " + preference.getKey() + " to" + newValue);
+
+            if (preference.getKey().contentEquals("TLS.enable")) {
+                togglePreferenceScreen((Boolean) newValue);
+            }
+
+            if (preference instanceof CheckBoxPreference) {
+                mAccount.getTlsDetails().setDetailString(preference.getKey(), Boolean.toString((Boolean) newValue));
+            } else {
+                preference.setSummary((String) newValue);
+                mAccount.getTlsDetails().setDetailString(preference.getKey(), (String) newValue);
+            }
+            mAccount.notifyObservers();
+            return true;
+        }
+    };
 
     public void onCreate(NestedSettingsFragment con, PreferenceScreen preferenceScreen, Account acc) {
         mFrag = con;
@@ -70,8 +109,10 @@ public class TLSManager {
                         mScreen.getPreference(i).getKey()));
             } else {
                 if (current.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)) {
-                    current.setSummary(new File(mAccount.getTlsDetails().getDetailString(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)).getName());
+                    File crt = new File(mAccount.getTlsDetails().getDetailString(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE));
+                    current.setSummary(crt.getName());
                     current.setOnPreferenceClickListener(filePickerListener);
+                    setFeedbackIcon(crt.getAbsolutePath());
                 } else if (current.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)) {
                     current.setSummary(new File(mAccount.getTlsDetails().getDetailString(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)).getName());
                     current.setOnPreferenceClickListener(filePickerListener);
@@ -94,21 +135,13 @@ public class TLSManager {
         }
     }
 
-    private OnPreferenceClickListener filePickerListener = new OnPreferenceClickListener() {
-        @Override
-        public boolean onPreferenceClick(Preference preference) {
-            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE)) {
-                performFileSearch(SELECT_CA_LIST_RC);
-            }
-            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE)) {
-                performFileSearch(SELECT_PRIVATE_KEY_RC);
-            }
-            if (preference.getKey().contentEquals(AccountDetailTls.CONFIG_TLS_CERTIFICATE_FILE)) {
-                performFileSearch(SELECT_CERTIFICATE_RC);
-            }
-            return true;
+    private void setFeedbackIcon(String crtPath) {
+        if(!mFrag.checkCertificate(crtPath)){
+            mScreen.findPreference(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE).setIcon(R.drawable.ic_error);
+        } else {
+            mScreen.findPreference(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE).setIcon(R.drawable.ic_good);
         }
-    };
+    }
 
     public void setTLSListener() {
         for (int i = 0; i < mScreen.getPreferenceCount(); ++i) {
@@ -116,39 +149,12 @@ public class TLSManager {
         }
     }
 
-    private OnPreferenceChangeListener tlsListener = new OnPreferenceChangeListener() {
-
-        @Override
-        public boolean onPreferenceChange(Preference preference, Object newValue) {
-            Log.i("TLS", "Setting " + preference.getKey() + " to" + newValue);
-
-            if (preference.getKey().contentEquals("TLS.enable")) {
-                togglePreferenceScreen((Boolean) newValue);
-            }
-
-            if (preference instanceof CheckBoxPreference) {
-                mAccount.getTlsDetails().setDetailString(preference.getKey(), Boolean.toString((Boolean) newValue));
-            } else {
-                preference.setSummary((String) newValue);
-                mAccount.getTlsDetails().setDetailString(preference.getKey(), (String) newValue);
-            }
-
-
-            mAccount.notifyObservers();
-            return true;
-        }
-    };
-
     private void togglePreferenceScreen(Boolean state) {
         for (int i = 1; i < mScreen.getPreferenceCount(); ++i) {
             mScreen.getPreference(i).setEnabled(state);
         }
     }
 
-    private static final int SELECT_CA_LIST_RC = 42;
-    private static final int SELECT_PRIVATE_KEY_RC = 43;
-    private static final int SELECT_CERTIFICATE_RC = 44;
-
     public void performFileSearch(int requestCodeToSet) {
 
         // ACTION_OPEN_DOCUMENT is the intent to choose a file via the system's file
@@ -173,13 +179,14 @@ public class TLSManager {
         if (resultCode == Activity.RESULT_CANCELED)
             return;
 
-        File myFile = new File(data.getData().toString());
+        File myFile = new File(data.getData().getEncodedPath());
         Log.i(TAG, "file selected:" + data.getData());
         switch (requestCode) {
             case SELECT_CA_LIST_RC:
                 mScreen.findPreference(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE).setSummary(myFile.getName());
                 mAccount.getTlsDetails().setDetailString(AccountDetailTls.CONFIG_TLS_CA_LIST_FILE, myFile.getAbsolutePath());
                 mAccount.notifyObservers();
+                setFeedbackIcon(myFile.getAbsolutePath());
                 break;
             case SELECT_PRIVATE_KEY_RC:
                 mScreen.findPreference(AccountDetailTls.CONFIG_TLS_PRIVATE_KEY_FILE).setSummary(myFile.getName());
diff --git a/src/org/sflphone/client/CallActivity.java b/src/org/sflphone/client/CallActivity.java
index 12188f709..abf145030 100644
--- a/src/org/sflphone/client/CallActivity.java
+++ b/src/org/sflphone/client/CallActivity.java
@@ -182,8 +182,6 @@ public class CallActivity extends FragmentActivity implements IMFragment.Callbac
             if (u != null) {
                 CallContact c = CallContact.ContactBuilder.buildUnknownContact(u.getSchemeSpecificPart());
                 try {
-                    mService.destroyNotification();
-
                     String accountID = (String) mService.getAccountList().get(1); // We use the first account to place outgoing calls
                     HashMap<String, String> details = (HashMap<String, String>) mService.getAccountDetails(accountID);
                     ArrayList<HashMap<String, String>> credentials = (ArrayList<HashMap<String, String>>) mService.getCredentials(accountID);
@@ -219,7 +217,6 @@ public class CallActivity extends FragmentActivity implements IMFragment.Callbac
                     IMBundle.putParcelableArrayList("messages", new ArrayList<SipMessage>());
                     mIMFragment.setArguments(IMBundle);
                 }
-
             }
 
             mSlidingPaneLayout.setCurFragment(mCurrentCallFragment);
diff --git a/src/org/sflphone/client/HomeActivity.java b/src/org/sflphone/client/HomeActivity.java
index 76e30eb03..efd1c9d75 100644
--- a/src/org/sflphone/client/HomeActivity.java
+++ b/src/org/sflphone/client/HomeActivity.java
@@ -116,8 +116,6 @@ public class HomeActivity extends FragmentActivity implements DialingFragment.Ca
     @Override
     protected void onSaveInstanceState(Bundle bundle) {
         super.onSaveInstanceState(bundle);
-        getFragmentManager().putFragment(bundle, "ContactsListFragment", mContactsFragment);
-        Log.w(TAG, "onSaveInstanceState()");
     }
 
     @Override
@@ -133,13 +131,8 @@ public class HomeActivity extends FragmentActivity implements DialingFragment.Ca
             bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
         }
 
-        if (savedInstanceState != null) {
-            mContactsFragment = (ContactListFragment) getFragmentManager().getFragment(savedInstanceState, "ContactsListFragment");
-        }
-        if (mContactsFragment == null) {
-            mContactsFragment = new ContactListFragment();
-            getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
-        }
+        mContactsFragment = new ContactListFragment();
+        getFragmentManager().beginTransaction().replace(R.id.contacts_frame, mContactsFragment).commit();
 
         mContactDrawer = (SlidingUpPanelLayout) findViewById(R.id.contact_panel);
         // mContactDrawer.setShadowDrawable(getResources().getDrawable(R.drawable.above_shadow));
@@ -259,8 +252,8 @@ public class HomeActivity extends FragmentActivity implements DialingFragment.Ca
     }
 
     private static boolean copyAsset(AssetManager assetManager, String fromAssetPath, String toPath) {
-        InputStream in = null;
-        OutputStream out = null;
+        InputStream in;
+        OutputStream out;
         try {
             in = assetManager.open(fromAssetPath);
             new File(toPath).createNewFile();
@@ -382,14 +375,9 @@ public class HomeActivity extends FragmentActivity implements DialingFragment.Ca
         @Override
         public void onServiceConnected(ComponentName className, IBinder binder) {
             service = ISipService.Stub.asInterface(binder);
-            try {
-                fMenu = new MenuFragment();
-                fContent = new HomeFragment();
-                getSupportFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).replace(R.id.main_frame, fContent, "Home").addToBackStack("Home").commit();
-                service.destroyNotification();
-            } catch (RemoteException e) {
-                Log.e(TAG, e.toString());
-            }
+            fMenu = new MenuFragment();
+            fContent = new HomeFragment();
+            getSupportFragmentManager().beginTransaction().replace(R.id.left_drawer, fMenu).replace(R.id.main_frame, fContent, "Home").addToBackStack("Home").commit();
             mBound = true;
             Log.d(TAG, "Service connected service=" + service);
         }
diff --git a/src/org/sflphone/fragments/NestedSettingsFragment.java b/src/org/sflphone/fragments/NestedSettingsFragment.java
index e3d10f5ea..ead7cdae3 100644
--- a/src/org/sflphone/fragments/NestedSettingsFragment.java
+++ b/src/org/sflphone/fragments/NestedSettingsFragment.java
@@ -88,6 +88,15 @@ public class NestedSettingsFragment extends PreferenceFragment {
         return results;
     }
 
+    public boolean checkCertificate(String crt) {
+        try {
+             return mCallbacks.getService().checkCertificateValidity(crt);
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+        return false;
+    }
+
     public interface Callbacks {
 
         public Account getAccount();
diff --git a/src/org/sflphone/service/ISipService.aidl b/src/org/sflphone/service/ISipService.aidl
index 8d6d5e649..5cab757ab 100644
--- a/src/org/sflphone/service/ISipService.aidl
+++ b/src/org/sflphone/service/ISipService.aidl
@@ -30,15 +30,15 @@ interface ISipService {
     String getCurrentAudioCodecName(in String callID);
     void setActiveCodecList(in List codecs, in String accountID);
     Map getRingtoneList();
+
+    boolean checkForPrivateKey(in String pemPath);
+    boolean checkCertificateValidity(in String pemPath);
+    boolean checkHostnameCertificate(in String certificatePath, in String host, in String port);
     
     
     // FIXME
     void toggleSpeakerPhone(in boolean toggle);
 
-    /* Notification */
-    void createNotification();
-    void destroyNotification();
-
     /* Recording */
     void setRecordPath(in String path);
     String getRecordPath();
diff --git a/src/org/sflphone/service/SipService.java b/src/org/sflphone/service/SipService.java
index 85d97afd0..1119910ed 100644
--- a/src/org/sflphone/service/SipService.java
+++ b/src/org/sflphone/service/SipService.java
@@ -1073,6 +1073,63 @@ public class SipService extends Service {
             return null;
         }
 
+        @Override
+        public boolean checkForPrivateKey(final String pemPath) throws RemoteException {
+            class hasPrivateKey extends SipRunnableWithReturn {
+
+                @Override
+                protected Boolean doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return configurationManagerJNI.checkForPrivateKey(pemPath);
+                }
+            }
+
+            hasPrivateKey runInstance = new hasPrivateKey();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Boolean) runInstance.getVal();
+        }
+
+        @Override
+        public boolean checkCertificateValidity(final String pemPath) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Boolean doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return configurationManagerJNI.checkCertificateValidity(pemPath);
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Boolean) runInstance.getVal();
+        }
+
+        @Override
+        public boolean checkHostnameCertificate(final String certificatePath, final String host, final String port) throws RemoteException {
+            class isValid extends SipRunnableWithReturn {
+
+                @Override
+                protected Boolean doRun() throws SameThreadException {
+                    Log.i(TAG, "SipService.isCaptureMuted() thread running...");
+                    return configurationManagerJNI.checkHostnameCertificate(certificatePath, host, port);
+                }
+            }
+
+            isValid runInstance = new isValid();
+            getExecutor().execute(runInstance);
+            while (!runInstance.isDone()) {
+            }
+
+            return (Boolean) runInstance.getVal();
+        }
+
         @Override
         public void setActiveCodecList(final List codecs, final String accountID) throws RemoteException {
             getExecutor().execute(new SipRunnable() {
@@ -1088,18 +1145,6 @@ public class SipService extends Service {
             });
         }
 
-        /***********************
-         * Notification API
-         ***********************/
-        @Override
-        public void createNotification() throws RemoteException {
-
-        }
-
-        @Override
-        public void destroyNotification() throws RemoteException {
-
-        }
 
         @Override
         public Conference getCurrentCall() throws RemoteException {
-- 
GitLab