From 9867e2e819279269dd3123fbee59b32913935127 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 25 Oct 2017 15:07:34 +0200 Subject: [PATCH] Started new file picked/upload UI allowing to send multiple files + text at the same time --- .../chat_attachment_default.png | Bin 4044 -> 2210 bytes res/drawable-xhdpi/chat_attachment_over.png | Bin 3504 -> 1772 bytes res/drawable-xhdpi/chat_send_default.png | Bin 4263 -> 2617 bytes res/drawable-xhdpi/chat_send_over.png | Bin 3864 -> 2165 bytes res/drawable/clean_field.xml | 8 + res/layout/chat.xml | 25 ++- res/layout/chat_bubble.xml | 9 +- res/layout/chat_create.xml | 2 +- res/layout/file_upload_cell.xml | 25 +++ res/layout/image_upload_cell.xml | 21 +++ .../org/linphone/chat/GroupChatFragment.java | 142 +++++++++++++++++- 11 files changed, 223 insertions(+), 9 deletions(-) create mode 100644 res/drawable/clean_field.xml create mode 100644 res/layout/file_upload_cell.xml create mode 100644 res/layout/image_upload_cell.xml diff --git a/res/drawable-xhdpi/chat_attachment_default.png b/res/drawable-xhdpi/chat_attachment_default.png index 8cba3b8c9f44e2c423ce3871e1151d0ed26cc41f..30513f83d04a22f30ef7a7e362888afc20fa5cf9 100644 GIT binary patch delta 2194 zcmV;D2yOSwAEFT$~PyrQCRjG)y0hA9xE{zq6WtFy} zKqgwuHN_`#pCGbp%SH>{#3n}HUp`jtFtE(R@a59;kDTFuxJj;XCHLdmcqS5GI z@>%D`WZf4)DfNmF;@U%i1*j5298*el%$zyX=;`SxjfLa!IGIewwr%@3u!N~0R|xS; zBoaAUbPJoNDQ(-nK80Wbe=M!_`%0-F78N*=NX!M2z#~je{YEMED*&x^VJ@9aCg%wu z{+;ieghC+_i3I)q{iM@rX3w5YEEdCYoO`}p9@;LYY|9Jy!i5V|R#r-_buyosZQG`! zqk}_-4srA5O-$272tg*3!8A=;TU%MRYE>zqeS}a8nb52V&%$}Jo)641Ofr#@i=e4{Wc$b@ByZ25)OyizI}TsEIm^QaU&9m+#Y=I z0{aT^Vm`BUb#?LHe|zr%uw=;+UVH5|YHDh*EDO^#sjjZ3rKN>*I?ct47fGknc%GNb z!vPG#K!}2~-tS5&cYbD+P9zd2rNY3rd;`?s!-p|VliJ!^)~#DdI-Q>ITsoa*&6+hd zH#Z}MpuN2v%d!9%85v>k-o5PGw~x!0FBbyboJ=NP{!HMkDS*F#vjcdPpXd4ZzY;%qWB?Mi9zdTI(&@ z`3-=krY3|CZKas3r>BR52M_Y*n{N^b1RfUi`a1=!mr5~{Qi`KTkMhnt?>tQ4kWy+{ zDwV>}TBDTuCSdW!){FJ^^%y__$;zH_Tfx0V6$f0vX}v$DWXlmReW>u(uKsi!Fu z2_fbiLWpL{M~#NoI#Nc!bq4U2G6JqLfQm8#t}vKnG5&Kd(*V+C1e`V)yPqu=-7tX5 zWduBE03VhSaKaEm{Hu(B|6@cVkrBo&o68}!{9ATQI#Le6kx1l}(c9Y#aC8csWJ*27 zaR8&Sf3cBi)21CN_UOLv1LW?Jgb)+z)T5)LxhiKc7zDs^oKhA1{+KHOR8>{EK*3!y zrfH(J#xM-7UAqQ=loHSL2nK_6badqETDEP|-ri0y7{qm5=FFJ`z?CakFbw0ik5CNN z)YR;Q@%AF66u@o@?AeG$qdB;1hUwOqe`o&EdwlS-wKQgZ(Mc}|}` zjb&NPojaFDAAOWeCd28|rwIfCq|<2{8yj<;QlO56LLr^Au#^%h^Som4o`^&u-PumQ3DH3*HN;pyWL~l? zi}mZ*^YOFFXy(t?-L9L*}Hcy$B!S!G)?Bso5zL? z8*-QE1?sE5@1GsND7+o`qmMpfWMt$UKvzK-`i&d3wY6aw2CnO}c=2Lhc;N-Y;V_=( zUYV z$ZCKGfV$BD&acL(n6 z?ZxxFKqwTtS!gxHbzOGv-p$FACkcf@cTG54*JZ_u6|7#px>)NL;8`iDap=v!rq9Xw;6o{8Q?`eD(iXl2 zdMmJTs>5b7nWqiINRM|j+)?+H%19|+)mpEg!m$64Qa0TS_P&9~^WhM2YeZr##krs{}?L~Uj^d8Ij!|yqtWP@Qmu*q1Fr@= UG-W}ry#N3J07*qoM6N<$f>d-ZBme*a delta 4043 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
-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 diff --git a/res/drawable-xhdpi/chat_attachment_over.png b/res/drawable-xhdpi/chat_attachment_over.png index 97245b742e21df582c8fbb619f4c62811897a7d0..c8c75feafb3d1c13a74aab982c5882b5fbbe9e77 100644 GIT binary patch delta 1753 zcmV;~1}6Ei8|)1siBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-h^e*gz` zNliru;R+cH9s@Ez^)dhe26;(DK~!ko<(q3zRaF##zkRqoL`TYH6Z2I;c}KW)DY09iuWU%x7qm4@?9F z?(WAvcrFMRxaVBK?)r1rJ?y*JfBDYZd+ojUItctAG8M!eQ%|5Rk{BdCfDXW&fXi%J z4qO7xAUTTUfXJp0Kmx)K_vToiayE!}K_(DN1v-LJz)&B%+l3$pi6IP1WGsj+O$}Hl z7MKk@piPm7yf3c?G;xVan z0a$elU;)B`bg6TNzZqu62mg9ljs+qRl#&C)(zvpnGDgyjGLhjg4+rxArCezOumHme z<|1W0=$9cabw&Y)&7sv)q&b2^QfHi_z*1)>u#u)K*;40CN9M59c@=oir`xCif`ec{ z9JIL)T)}WEAM&;;%g*mCf8G!Vi+u)`I%9xOeKPF|fy7ntNPNwI&rO51vmnTE=mcSq z*&tv!5h$Y%f**Y{*`_lr`4wED-rHR&gjrpotkh}f{uFaSY^n#aoCusJh)9Zn<_$I# z90n`SLx>sMzRiT~OW@cMWvxel82>(WGdE;~M2wEZoh-AA@ zuoXb!N(*+y7)Vcmzm7l{5DNU62X8+NU!|)y?V@35lE)J_Q;Kq1z+u47>aaI?SWX76 zF%;P8+eTHuCvK(h$$*tFT6s}TK3H)ATHg!*9Ea&$)C1`<07fr{pkP?`ERly+EzxxI^k^{mO3+l zmOdM3*Td3Jovge4@q?CrS66?m&k<7Rb#HTcfvxUcA?92zuiqMby~NUkT>jdW%)bd( zZU(6n?^B?vI)rYH3~n=+x&4`qdzDZbPf`_Np{Cv|&Y$%Fe@{$->FXfjLnv#cjiaMU0eG!|lFYxeT3kzP`#qcw-!B=Y~4M9-i#JOF@)djby*0N{ZDnvAD6 z0U}bTzlQWfuxh%}R|C2S5O8-5Xdghp?KPlv00Fns%)BK~q?vZhcC<}Hga%v-AmCCB zxDY_V7d7B)e*gg&YQP@>1YDpYI21S`i$j{oBrjlqcko?hwiF1^`Qn_F9_BVq`XZ~0 zH+9W#)^a`b;Y^3-h!V|ZeZO9;^yaP9VVwF1_4#x5xHd zdcWt@=N`kV4!*nrX6C>PX^?&zI`>o8H_w3(RQYA#7{%!S z)|p+L`5BUXt9ntVKCqyc%4_~kSU5}pM-76Mz3Teb`LHR)k)6IUtX`^D9#U=f>;iVA zDZN84e|Tn^I+{I|4=+W+HyLpG9F$*Eqv7L3SY*OVV8&LfuP@$lDy>;mQ<$mrum)Vm zZe4!mzYx~K)F;5#*{c5QHb;RpEmYRZLc$^S2Wa0@eK)4Vm&=_1b`wmPSYwp{v}&$* z0|~ax%o}LwQ?lT-&mr<21?xh2RG9FCC#nK^e zZ<7RJjWC$xt%29)E8{>IOaoTm2C!MeV3JJo-pDJk*mwgv32GlEO+e-e16{^}SXICL zrhd~yXC#o*#9&7Yqy8_xHh6iL#E8s>ow_zWMrsrZgKpqGIQUtn z34_kah95E8+Q7*Pgd>;_%)CXQ%P1#BtmBHW9oSn1qqr&zlF&wIRfM&*&wpm=j8o44?G0KZc|Sn3^zkiuS9i2FV&)3 vV!Z%YjQUr+LR3NEATD-`3`(l^<&^vf#oxVfiaZa900000NkvXXu0mjf;MXoD delta 3499 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 P0000IyBY{vW8H$>=LpjyRk20-sL#A+Yi{ds9t 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 B8EOCk diff --git a/res/drawable-xhdpi/chat_send_over.png b/res/drawable-xhdpi/chat_send_over.png index a3354fa2bf9c4dffc84c18a5f2346a3e7bcc91f3..dd66994a01c5f966230d70bb8edb14f3b7f1189e 100644 GIT binary patch delta 2149 zcmV-r2%7hp9`z6*iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-h^e*gz` zNliru;R+cH9we7FKv@6)2m(n&K~!ko)tY;771bTbKWB6E;*o@4q%`P^(@JX{Duh0K zv}h}m1X5yEIu*#}q0*re6Jm-=k*O#OR8k@$R7xOwLCXXJ2!uxfi_o#oSYQgZ)`1u> zOHdzFsyz3Eu1b6{>*kVz30}F-Dwwp>=P6DwKq?570A|L~MaSyJt42b2? zb)rQ~bh2mk{ZKkN1+0kyS&Xr-ODE^K&M*Ku(PqMO3Wy4jPTm9l27Ha!BOTZ)ovanB zK>pH3la>YCf#6f)pMU1SI>|;**M-Oeq#`*cos6`Uuypbau$``pt#Sgt zw#1~Rlc#~@bPp5?owuVVe=MEk0yT6eNPaF{Y>bGooCLIRCxS2Nj%ed9dhxkf76xJY zB+vsvGv|%DuRG#0kdA{^Q4zvviT8nKHgrj{61WCj57{yWsPQKops;)tNZ}{Io-ReS z8Awfo+~;9L5nR0lCAWi=q3+Bkk)7UQs0iYy8eGQ?HNev7kFQRh&0c8 zO6XL0ytH@=fTEbGe|a6q%7@?WgJn(dvzJV=Qo^pc;gugiTteXe`&UKt)FNMn$I};$ zb1@m4BZ|}~sh98d;|E}8IqcOTEd$ExA)$wn`ZqwI0qXd---U+5kv~6<{$eGk9mZ@t z$@a0CTM7ezqWo;m>u0@C|I*>O{G*EASC%XC&pe-B48eoeIU6foEAv_@I4 z<}He3c5&d?{PI)SUIzQ#SM^H`NB~m%DP`U5t6qZo1CVOe8MZEnj;zViL---f)Vy~z zjGO@jAMm~2asz4?L(Kv>*Qf}3*E55WT{jPAZZX?@_-<#)j`smLWC3^Es^%B_VaFff z<7zbt3PVl&f5{&ACA(oBr1XG$4CC8hsa|R)>a5a9mII9}q>XBxZ&XUQSDj92hpYq0 zo^H0=_GT0%#{gtGkPM87XmT&edr>LsujW_(fQ@tDX~l(2kXcJT+o0soi`NYduKU3odF9*z`ysI*T44|B=t7Q{`uwLWc{7h zuBBE-_h&TVsHI&d0spLpSB61xChS>e)}F4Mh02%PpSF?{y_}WHN@wN9Q4PsKTQa41 zf8gRtsF(_Cf1`fuodHAcZ-3g$F7b-2EOl1yndYD{VoZsh5CT>iF8lBfn3oe+T)GCV zIH!UQ>z$RtIpW;!@Q|&9TP1vC6p06ALt5V;&gwxkvWl!`6)yfIYG`v4ws&Pv12)Yu z&qvSl9iJ_zQmh+${%FU)*ao0UW!o;>e`{GMkHfJ~)NyvPZ%~q)41@E0(?F}y#u_;V zGy#Z8K11!5vJVMOJQfy@VH#B7Q>v;|skf56bk z)VWhwxK+-Ba-mZkps-ZI!fe}BZk4carBP7GgCY5Lq=DW6%}hBaFbYNhVg=WMDYj2h z8@-&DX6!SqvBgZjBToh9w%Ii>{^0C2zU zQ`F|U=J}2?JDkon9f074mwvBW%FwLcM-?C9w_x^;?S>IlziVjH6Lv0DR z$$=T((qW%hj)<^9dJQm^?tyBd^LR%K6dn3SIR=EzI0$YYT@0Iq&f{`&$0~M6SX3EX zhIO8R7(`;7Gvi0)7`45*;~GF%bGK?J3mAup@wSN2e{Q01Q5o(!Tf~8!e;iK+8V8AF ziN+qBMlwXWI2~!+6KP%Otk4;NU5#gA0i_gmBM~ON*aRswuhr8R-#cVR&k*- zk!|!yqefBOl$OHJFT!s=|T{TJ@fW3U@B@)MeiuP{4Y?0 zV2P;YBhM6BWkGgo`S2PKJHqheasrvaLr4Y#w*y}XZuN?-T7X926mSAKL>qq*t7-7> b%PRaIQcP?6x63V~00000NkvXXu0mjf#cKfJ delta 3861 zcmV+w59;vs5SShziBL{Q4GJ0x0000DNk~Le0001Z0001Z2nGNE06Anf(vcx4e-5}w zL_t(|+U=ctbX4`V$3MR_lNX{qj1*TA6i`99YDE!52+yuwy%dWIL`)_iigGcx)K=m4 zp?IZM7p>YNipV3Gi6W%fC9Sttp31W=h%Ew&6qG`+_@DtH33<%#{_#snGIQpcIWy;+ zobOs$E1ArBe$L*%z4z~N1U8iff59}m&_EZUbBM21A*rGl{}gla+wndK%Y&TEWw^K& zxE4WQpjXpR_ZWBeIdHh?=ObVbl0Cx5Cl26bT4gZ!T zLg2&8HZxkbsQ}9oGB`yM@E~x5#hSZ4z{}LITvSlw0B#*9b-~T|fSEwH#pAxyz)Qe< z;pMA#4OmX2EA^BBCBVft%TTI-7jf~tSk4#i3b34ji!2@jo&Y*wZ&d^Hso^P6L7nXZ zOAj{#F9P4Bedz##nWBshf3^fH@8v@3c>+NR;HG`b4=h6C$D))f+W>B|+Lb^ajsPlw z0^wz=(Ff8D1q(uYmi@ut|EDE9V-^z%UDzQ|OGJQs8!nXITB7G>XMiPFe=A zoWkWu-a^vP;TM$-0%L`jk4^8QWg$cG^PU4YCS3{qNfwiDYQVCHf7{Sli+O9uW>#k; zYh^JLO$k_fxDUabzy%JgxRrtAHCfCIQ?^hfd$&)%qMa*NbHwPppehW1$1r6zWC;%M#iK zOAog~Vr!)BLRSuf`%7WL33&Dh44aauJ%3wzqU(l@=%Sm(e=2`~>hW+CNgX=FEk!V5 zI^_Oaz|E8}cOZQFULub4cO?CUkF(*v6gliZ&BG4dD6MtGbhv3Eq=zW%2?4zl2Dk?r z{|)>kZVQ(8kc*2CfsPKr5Y{@R5Jpai+-suSX5LUZxGhm

Y-XVi||yvtSpGJ8*S$ z#m&lE2Tg?Ze-6=aSGhltZ~-!D;7Q<~m@QaN<}%zI1kxO$z(w6)*i;xk4Zaa)i{&eU z^)Dp)%o>4yp@#do!&vXb4qTx3VC8}bO^VH0165xOJ6<#53|$Bw1@4R5f@L9>qH!3= zY?n|kyae*^ZJV_QYD+0BnQGJ-*Q0TjDCN`WELh{ef7%^fA)w!A)wT|}9o*@O-Tym_ zjXe7_BtHZmifF-d0_kLNoc7Yso7D-1+@rwuxGwtb4*e0bFNaQ1ECo`zAAZ!|=qoux z4VQ`v&V;w%EXLU$ZoJld`g7Q_95ye5v2#@W9E~)?#w)Nd5aN=(|`;7qi^&di)+~CiT zeEXfnhp8W5@)Tk!rkx^{HjtXHF_l#cjG$gAxC(rY;D0B z!?Duf^?0rI)Ct&H8roW8h5LtJst$(^ol_TF1#2Ww-WsrAq@}EN*i^W*PjuV(8)45M ze_)$8ytM|wT^hQR{`E%`Tu={Lp#EHu%-||eqx1levYoY_Jf@2KJ6=`4M}53#;Qm7W zp3@)t3`=(9Dw0OGYJ=qzy5pz6ZLD?I8|nssxJmsT)58=4T!7*CnIpJrtsb(N-lB{{ z%7PmhjAoK$4db@fqp*Hq?AF>Axal4Af4`fW;40ujX9zR{)=aQwRVu8tEpP#Dyu)n4 zRm+U{I>6W524BT6Z+lbPfv*Nuy8 zL)u?=I^4G`I=Dt#Ypifr|1|tQfAqH9wOT!(W|Bs>8)?uA>lbuY!Bp5t&#x@y_fID- zXfhgZ_p6}qh~UpREyi?`WNSz+GGync{sEutj2ywdV2Cw#)+8odH9O%~`q9f4y!pG$7ru z1N^fR7Tg81a$wb*$Z1Y`2L<70AHWm4;1&v0UIx$o9VR{vU2@`sJKYyL6`>SKMgrq6rDt_~Qow&PV;RA_Gd)woqdrtY>RjGCbU1Qs7!=BNwXu)LQ$Lsi!T_y5|%@b+_Nze82ROPA&% z$04kylgE^0e!qvBIbXRi_&YssQ1$M3b;EZEFInS$2*tD+ z@O#)n>lOrmcJ)ZeyEgWH zsb$B%0E@Z!e}OHQ2P`FQSQz~Ikiy8LOIqs2JA=PpS8bKx3IyAm-!|Sd#N1>HH@&qi zc;I<@mcGjkm-_~4=Wop1Ef`dWY5qlPQT4C~;My~=S*HVj%uF>7I-20B?{J-4w%9uN zz|Y2Dz&`fbq8$d+=^z7&a~Jne!+7l;T*235sQ{}Le_)|r_^{d*fImN^CVU6#TP5)Y zSMM&dP#nSUF611@7bRxDfUY46$)Dbq|l2UnH! zZvCD^t+fFoXjD;KtVOcZ7JyIuO+RHC(;{Wk>lU; z0Qkz%kl$SjCk~$f``lTzR+qVT8jVS!f0US3ii>LzaOq(zuqNK^O`!|Aszp^YE`aUj zYG#DFRUo{qjJ>&z*VB3UIWPxD$q1?ziZULGZ_~CkXC4+ndM$haspX&;B6$s93BbPd$<`HZN6)a1veK#>bL`Vf8Sw} zur_x;ZpO70ZbAS9h!uQECPRU@96D{*TB;c&mT^20J4@I)m0~f~)NniSio+;w%YB_1 zz7zPG_O|UZ!IB{G@Hp_eLo6oE$IEPy;33O~6)I#A4|Ijtpw&H zSt5L#P34K0ro&!NAe{~rG=aX-qF|3Am`63G&FfU9TBaM3Axp@hig9QZA^CS8&E!xU zfwe$6HTLE9BI-NMj?MRA%(Iz@y32Z>%L$F4aV%n(?mKjqe3%LRpqmYaO zMgrZEdZU(MJauv<5tWS*FJqYYUvIEH` z%Go0 + + + + + diff --git a/res/layout/chat.xml b/res/layout/chat.xml index e19254454..b38220a9b 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -99,18 +99,33 @@ android:orientation="vertical" android:layout_alignParentBottom="true"> + + + + + + + + + android:layout_height="wrap_content" + android:gravity="center_vertical"> @@ -134,12 +149,12 @@ android:id="@+id/send_message" android:src="@drawable/chat_send_message" android:contentDescription="@string/content_description_send_message" - android:padding="5dp" - android:layout_weight="0.1" + android:padding="5dp" android:layout_width="wrap_content" android:layout_height="wrap_content"/> + + + + + + android:layout_marginTop="2dp" /> + + diff --git a/res/layout/chat_create.xml b/res/layout/chat_create.xml index 0d7b501c2..9d548bd5c 100644 --- a/res/layout/chat_create.xml +++ b/res/layout/chat_create.xml @@ -109,7 +109,7 @@ android:layout_centerVertical="true" android:paddingLeft="5dp" android:paddingRight="5dp" - android:src="@drawable/clean_field_default"/> + android:src="@drawable/clean_field"/> diff --git a/res/layout/file_upload_cell.xml b/res/layout/file_upload_cell.xml new file mode 100644 index 000000000..ce9ae039f --- /dev/null +++ b/res/layout/file_upload_cell.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/res/layout/image_upload_cell.xml b/res/layout/image_upload_cell.xml new file mode 100644 index 000000000..737de0816 --- /dev/null +++ b/res/layout/image_upload_cell.xml @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 9602062c1..a07b727da 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -19,9 +19,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. package org.linphone.chat; +import android.app.Activity; import android.app.Dialog; import android.app.Fragment; +import android.content.CursorLoader; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; import android.os.Bundle; +import android.os.Environment; +import android.os.Parcelable; +import android.provider.MediaStore; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; @@ -30,11 +40,13 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import org.linphone.LinphoneManager; import org.linphone.LinphoneService; +import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; import org.linphone.contacts.ContactAddress; @@ -52,12 +64,15 @@ import org.linphone.core.EventLog; import org.linphone.core.Participant; import org.linphone.receivers.ContactsUpdatedListener; +import java.io.File; import java.util.ArrayList; import java.util.List; import static org.linphone.fragments.FragmentsAvailable.CHAT; public class GroupChatFragment extends Fragment implements ChatRoomListener, ContactsUpdatedListener { + private static final int ADD_PHOTO = 1337; + private ImageView mBackButton, mCallButton, mBackToCallButton, mGroupInfosButton, mEditButton; private ImageView mCancelEditButton, mSelectAllButton, mDeselectAllButton, mDeleteSelectionButton; private ImageView mAttachImageButton, mSendMessageButton; @@ -65,7 +80,9 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con private EditText mMessageTextToSend; private LayoutInflater mInflater; private ListView mChatEventsList; + private LinearLayout mFilesUploadLayout; + private Uri imageToUploadUri; private ChatEventsAdapter mMessagesAdapter; private String mRemoteSipUri; private Address mRemoteSipAddress; @@ -178,11 +195,14 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con mRoomLabel = view.findViewById(R.id.subject); mParticipantsLabel = view.findViewById(R.id.participants); + mFilesUploadLayout = view.findViewById(R.id.file_upload_layout); + mAttachImageButton = view.findViewById(R.id.send_picture); mAttachImageButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - //TODO + LinphoneActivity.instance().checkAndRequestPermissionsToSendImage(); + pickImage(); } }); @@ -238,6 +258,61 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con super.onPause(); } + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (data != null) { + if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) { + String fileToUploadPath = null; + if (data != null && data.getData() != null) { + /*if (data.getData().toString().contains("com.android.contacts/contacts/")) { + if (getCVSPathFromLookupUri(data.getData()) != null) { + fileToUploadPath = getCVSPathFromLookupUri(data.getData()).toString(); + } else { + LinphoneActivity.instance().displayCustomToast("Something wrong happened", Toast.LENGTH_LONG); + return; + } + } else { + fileToUploadPath = getRealPathFromURI(data.getData()); + }*/ + fileToUploadPath = getRealPathFromURI(data.getData()); + if (fileToUploadPath == null) { + fileToUploadPath = data.getData().toString(); + } + } else if (imageToUploadUri != null) { + fileToUploadPath = imageToUploadUri.getPath(); + } + if (LinphoneUtils.isExtensionImage(fileToUploadPath)) { + addImageToPendingList(fileToUploadPath); + } + else { + if (fileToUploadPath.startsWith("content://")) { + fileToUploadPath = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileToUploadPath)); + } + addFileToPendingList(fileToUploadPath); + } + } else { + super.onActivityResult(requestCode, resultCode, data); + } + } else { + if (LinphoneUtils.isExtensionImage(imageToUploadUri.getPath())) { + addImageToPendingList(imageToUploadUri.getPath()); + } + } + } + + private String getRealPathFromURI(Uri contentUri) { + String[] proj = {MediaStore.Images.Media.DATA}; + CursorLoader loader = new CursorLoader(getActivity(), contentUri, proj, null, null, null); + Cursor cursor = loader.loadInBackground(); + if (cursor != null && cursor.moveToFirst()) { + int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + String result = cursor.getString(column_index); + cursor.close(); + return result; + } + return null; + } + private void getContactsForParticipants() { mParticipants = new ArrayList<>(); if (mChatRoom.getNbParticipants() > 1) { @@ -326,6 +401,70 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con mChatEventsList.setAdapter(mMessagesAdapter); } + private void pickImage() { + List cameraIntents = new ArrayList(); + Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + File file = new File(Environment.getExternalStorageDirectory(), getString(R.string.temp_photo_name_with_date).replace("%s", String.valueOf(System.currentTimeMillis())+".jpeg")); + imageToUploadUri = Uri.fromFile(file); + captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri); + cameraIntents.add(captureIntent); + + Intent galleryIntent = new Intent(); + galleryIntent.setType("image/*"); + galleryIntent.setAction(Intent.ACTION_PICK); + + Intent fileIntent = new Intent(); + fileIntent.setType("*/*"); + fileIntent.setAction(Intent.ACTION_GET_CONTENT); + cameraIntents.add(fileIntent); + + Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.image_picker_title)); + chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{})); + + startActivityForResult(chooserIntent, ADD_PHOTO); + } + + private void addFileToPendingList(String path) { + View pendingFile = mInflater.inflate(R.layout.file_upload_cell, mFilesUploadLayout, false); + + TextView text = pendingFile.findViewById(R.id.pendingFileForUpload); + String extension = path.substring(path.lastIndexOf('.')); + text.setText(extension); + + ImageView remove = pendingFile.findViewById(R.id.remove); + remove.setTag(pendingFile); + remove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + View pendingImage = (View)view.getTag(); + mFilesUploadLayout.removeView(pendingImage); + } + }); + + mFilesUploadLayout.addView(pendingFile); + } + + private void addImageToPendingList(String path) { + View pendingImage = mInflater.inflate(R.layout.image_upload_cell, mFilesUploadLayout, false); + + ImageView image = pendingImage.findViewById(R.id.pendingImageForUpload); + Bitmap bm = BitmapFactory.decodeFile(path); + if (bm == null) return; + image.setImageBitmap(bm); + + ImageView remove = pendingImage.findViewById(R.id.remove); + remove.setTag(pendingImage); + remove.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + View pendingImage = (View)view.getTag(); + mFilesUploadLayout.removeView(pendingImage); + } + }); + + mFilesUploadLayout.addView(pendingImage); + } + private void sendMessage() { String text = mMessageTextToSend.getText().toString(); ChatMessage msg = mChatRoom.createMessage(text); @@ -372,6 +511,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } }); msg.send(); + mFilesUploadLayout.removeAllViews(); mMessageTextToSend.setText(""); }