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 zcmV-e2B-OnP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm000IbNkl<ZXo2OL zPl#LB8O47`48ja$T8z-9VF-bm)?{r=@xl@e-gQdB#qJ{67@K+NP`W6g^BT;MO2O-) zQaZF7LtD2Cmv-lx>P=cNj5jS=xPP(<fo_B-#e~6#GAE1op7bO=NlzNfq4WbW$M@Yo z-+A}k?|%0_!~eMHMR&N@*+F96rUINvil0mLu#Ow`)(ai))C9t4XU*o4#1`nH?ejoY zQpq+TBxCCY(FH#hdW`)L=~1KB`tRpLAnXL2h+W_fpt@u?UEnVGpiygovP=gH6WHtQ zR6zUS8$elrGo9t(0@eq92HbAe+r35nDNG=Y0)T6_4<uD$d4MElVhLevftZJT$h$)K z8nt3;r4WIz6O@e)fSZYTkT_ZhFK&lIyN!CQKd<6k0$~(v0KWq+1F<gBRz>jgb_8rU zYOQCpD$N`w>;xN#hlUFSP22Nj!_pEO#rTQDR-@LQN@6O3L^cmd-~33cl}jjVN0P2I zYWZ@?C6FxGpOR`mYpa*gN%FUpDLVvi<t^;eL<wMX&G=^OOZpyT?4*th;<%+vAq+eQ zm&VF(8m{H}I`N*uD5%)}8&Jt>uv*i7@Hyc1oQFM0Uu)D_Bl|?&4D3s)Na7{`{)+s8 zq}QiBuNd|xC};l>Mmw7}A4w|P>28|jGYsXkP!t;GLP_}~mgoXC+Ydmm%&6Z7eWg)r z4bqO$8L)PNay;-*%cGcqlf`hVZBN5};40=@z$<g=modA!GZ03>8t^Z0bp=`WEW2g% zdx?Jl8wKijfiI_7Y<31N0oC-yC6f?Gk`bJVFoiG-qRkk#-2x5;x4|2Eb#ibu@s)7` zTiJnEFCmTu-?#ay@r^k$8*jUnj<c2_a8XJVh80W5e2lmX^aXc7YjfL-+Qk%<Al`YC zlhk1MU!jCPHQtWnxh~s$qkwEiF`Q4bg;YXb2dXbYLMJwFHtX#V!zd`(zEfN_8EjWE z>ySvurXndN!wMy|->9|jCu4qF(uF1aDH&IQPtrx4-X5$>LYVu&j{(9cI0L-5kZi`W zW1k0$XE^x@)`)0^*g17)VFBnv@SBZVJIyq|i+I(8=joWmaXLUs;Q54TlEcNoli`VG zyyk2(UBh;>-u@I|FAC0LeyEW?7snRQAz8!{J>!$CdxJz+<2Zd@2=@_JoAuVm8Ak6I z&N}l}7sZGZtloeC)-lk{I>EqkkK&Aj^RUGC8nxD+(y}lLUIT(<Wi#;0?jnu{1RC`g zLQj>{6(9?t_;39C5Acqp5OXN;2jK65<B@j5@!ki$j8D9a$H<1B%tr_JPamfZm# z1NAhB8Y2`>osFa~fqnqI1#UKK?ewjdkgB#f1+N-5L0=TSn>_-CQE(v+ox?Xdko1CB zv9Dw%2f|Kp*&@P@59HGpYh3(GNjvkdJTlH>`_D+1M)#Q|v8grdts}@LbK;SpJ5@p{ z1|)q4`!8W9_<9inw!bNK=~S{A;;zJ_wC@3dB)`79Kook-_=CMp@T24`k!xWTlqK#g z6K(P^;%@dvd+bc?14Ms;D71!n*Y+R7DA=6B;fCSdX(La9`@liA^NIayFA9Dl2nN#2 z+sN`Su>Nh>k@TB%@rF^bf%yozI(UUL%VNu|X082J*58R+37OmA-Vz(xSxLVJejav$ zFC^t}Tk*Gp(@F@@lXZK--|+%~y=dne@T<IM=?;}M16lk}NpIW!1=9MdBaemT>y29b z-ncutH*-Swgbt@hq4~daz;6ZXFC_AaL!$}j$<UmzFbc}R1H<KHBTJUROT3+q@sX`7 z%_-jsa%TV_xeeY1o-CUSjo{@X&l9ZeY0l3ikdSyLyahU1P(qoUYH0}_3AP&b*}MHr z0x^m9Gr<+xhfAc>OGO^X*XdV^q$+a>#3WjMNw<LOKyPIdf}Y?y=vI;MW0~f~EsTPS zVPED3xI90ks=y}YzLk7tt*z)YYYvf3>|LZcY*%BS7mh+*&|Tmld*l342xN$?5#LpA z0T+$WW2#7{k<{Ee0lJ8%iu3u0z~}d04W?Nb1z^@KS3qZyed9Ut+Bt3({DA#`W1j(? 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 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 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