From d3318bac1ab33fea6d0a64110c73b1566d285b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 2 Jul 2016 11:07:34 +0200 Subject: [PATCH 001/103] probando primer commit --- SWADroid/src/main/res/menu/messages_main_activity_actions.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SWADroid/src/main/res/menu/messages_main_activity_actions.xml b/SWADroid/src/main/res/menu/messages_main_activity_actions.xml index 77992a73c..5ae81543a 100644 --- a/SWADroid/src/main/res/menu/messages_main_activity_actions.xml +++ b/SWADroid/src/main/res/menu/messages_main_activity_actions.xml @@ -6,8 +6,7 @@ android:id="@+id/action_addUser" android:icon="@drawable/ic_action_add_person" android:title="@string/actionBarAddUser" - swadroid:showAsAction="ifRoom|withText" - android:visible="false"/> + swadroid:showAsAction="ifRoom|withText"/> Date: Sat, 16 Jul 2016 17:53:08 +0200 Subject: [PATCH 002/103] creando pantalla principal nuevo mensaje --- .../drawable-hdpi/ic_action_add_receiver.png | Bin 0 -> 689 bytes .../drawable-xhdpi/ic_action_add_receiver.png | Bin 0 -> 804 bytes .../ic_action_add_receiver.png | Bin 0 -> 941 bytes .../src/main/res/layout/messages_screen.xml | 36 ++++++++++++++++-- .../menu/messages_main_activity_actions.xml | 2 +- SWADroid/src/main/res/values-es/strings.xml | 4 +- SWADroid/src/main/res/values/strings.xml | 2 +- 7 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_action_add_receiver.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_action_add_receiver.png create mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_action_add_receiver.png diff --git a/SWADroid/src/main/res/drawable-hdpi/ic_action_add_receiver.png b/SWADroid/src/main/res/drawable-hdpi/ic_action_add_receiver.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0485af4a2ec01bc3f1dfd8e29903f8e6f5f588 GIT binary patch literal 689 zcmV;i0#5yjP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^MzH%UZ6RCwC#*h_0uQ4|H>@20Jl)=F&=#eq^3d{HbKA1Lj_S)Dm{aK!;l=?QUriPy5TLwZ;@GBxwXz*gC6o;f5 z)m9_)2@f&R!rCQF$Mpe>$L2jX-gFux5vdYhVX8ZWjNi0KXg*#5cExd04^4;)LbsvzsI9!KN?{XcT@8ZxR*-VXll>b_*j#&OoWzk4F^Ll^)QXu)ck4m zNo8!oWo%8Yy%j}W$?Mc#Lp>|iPi^g$8)T#_bu9fmYO*?YS$-t=nd&l^R$D^_jIGe1 z!C~CTk2?1jaHZzx$V{jZt?4L^U|*9ok6||+hdI88s8pl-Ij_nFupdXG102i{$)PaA zal8#>K8WkgvfmWucLqDxpgq|WV;RcGslH|{Y*z<6$E1}Sn#a4Cm)c0CD;#;DA={1rhc*bU5`P8& XZqIUIKq$K600000NkvXXu0mjf{^B*w literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xhdpi/ic_action_add_receiver.png b/SWADroid/src/main/res/drawable-xhdpi/ic_action_add_receiver.png new file mode 100644 index 0000000000000000000000000000000000000000..ff069b2a7822ba0be62b539cda875bcf09fc534f GIT binary patch literal 804 zcmV+<1Ka$GP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^Mzs!2paRCwC#nN4fdP!xurq!UJI6+x;Djv(4qYenfGRRn287wSgcbfvDupXADa z(VY~!sFpG!wCX}|Y?a~%2vTb;otebNoM60U$j7~zq?i{jgyftv=gqxu&bfCi&-2*N zu-WG*36uo>cLEjvqS0uijd2dR08B_cH}G;gz#HHduxc{#X0!P(ffP6d+ybsf%;aTY z8dwD8fuBWLLUX`O%ow)V&J{%i)4)^;zbWy}mB27?9k5dPTH-sLCxMedUE??F5+gSP zcFx+<4rHSH^YRvPS&2&mYAaC?8~`2y2Sq0p;JFNA1S|uI_KV>F<3KfV?}O- z6_u=;xgkR~evy2uG;^P`BH#eCz-SEHQQ(?Vg~PDx7pSaSi3%_VOwv1vt0h<(cct>a zrgvKR5%@Kz{Xh*kD`QM!=4vu#fUm%^)P^rv5OCy8PtrS(sv6!%odE6uw}F?^->gL} zu~-Bw;5={xI5mJTRh7Tzr|ZBodWXSo8UiE09SJt*?WQd)`XkZEQ|Vq~*MV8!F>s{- zd*un>ew<|+Brq-lEeh(u;UomQrdwT2cyaQv4WBlcgq2jpyV7u3nx_sX;7C4^d06E? i^(BFlKuI81{22gx@Q5>`RsJ3T0000(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^M!Gf6~2RCwC#+{=p`RTRhZPbU*IgYhvWDj5h7i6R&$LPkQsf%u5T2ZkuPi)0lL z+__V?S>_)IWaU2SMuLgajT+*(@U;mV(9wX8#7SJ_Va9UNXJBZ$N2jMM-Bme1Xd0^e z{_57ZZq+&G)}>oTQAqXHszi{05>Nt4KnW-TC7@eWBb^(jrlzVm&ZF3bCvh9PWv4A% z$H$n(H-i8&Gc&U^pptbb4&ni<{vW>|#a_(g9FE}fP>rAx^(>ykcpq(7<3YTIQ~0oH zfS$%HCHRbo&pbYA%0v2gOqc9A9lnhKbO0Mm_S_i0wFk5XlNI%KGW=@|Xm`c^-CcJ; z6BYM&qV9mQ)JQ<71eAahPy!knjWqPUTG$W+py=3s9e>{HfJX5)#=7h~i^F+~^I%wND!yjekCkB0wZJ%YQn=d2f0VC@p;b{Do| zO~>{%5&pleI?P|G=wf#B-Ghgg>2sg@RMi7+v{z#6*WVgN(e4er8xifFWd?`e zhiwEc%)#u!X6*$}trdFSk9Y7je#9qHdR(i^E!K*w^)Q}`@1g`SoyXV~z+cjyulXLI zx(Q2!M^@13$rvfS!e{NGeN|||cWZq1;3R&E5mpQXpb6ZI=e1YP4>Agl;>CD2&Ef<6 zwt~#PZ$K@qk1O_gbZppCmCblPqSqHu#9k<4RQ(sAalC+?>hYR-RC`VJPJAAq{-_Gj zV=;s`)il4G#uIoiK$Qk)1kYe!0}|oZqVqUj7NFO#qhS@pzDNl^E29>>r=exl`Ycwn znomFpsE+wUrxxZ*t~BU8$MAPwc|!g@PTpb(C;=s)1eAahPy$MI)4u}%eL{`&`*!Yh P00000NkvXXu0mjfZFIbP literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index f85799501..51b83878b 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -13,26 +13,54 @@ android:layout_alignParentRight="true" android:orientation="vertical" > + + + + + android:textColor="@color/foreground1" + android:visibility="gone"/> + + + + diff --git a/SWADroid/src/main/res/menu/messages_main_activity_actions.xml b/SWADroid/src/main/res/menu/messages_main_activity_actions.xml index 5ae81543a..fe1c9d658 100644 --- a/SWADroid/src/main/res/menu/messages_main_activity_actions.xml +++ b/SWADroid/src/main/res/menu/messages_main_activity_actions.xml @@ -4,7 +4,7 @@ SWAD se encuentra en mantenimiento en estos momentos. Por favor, inténtelo más tarde Enviando mensaje… - Debe indicar al menos un destinatario + Debe añadir al menos un destinatario Debe introducir el asunto del mensaje - Destinatarios (separados por comas) + Destinatarios Asunto Mensaje Aviso diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index b7e944563..62177449b 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -101,7 +101,7 @@ Message sent successfully You must specify at least one recipient You must enter the subject of the message - Receivers (separated by comma) + Receivers Subject Message Notice From 94af12bba95e7ae3cf128450b50ac2c5f5674740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 17 Jul 2016 17:37:10 +0200 Subject: [PATCH 003/103] creando pantalla filtrado usuarios --- SWADroid/src/main/AndroidManifest.xml | 10 +++ .../swadroid/modules/messages/Messages.java | 4 +- .../modules/messages/SearchUsers.java | 67 +++++++++++++++++++ SWADroid/src/main/res/layout/search_users.xml | 49 ++++++++++++++ .../src/main/res/menu/search_users_bar.xml | 16 +++++ SWADroid/src/main/res/values-es/strings.xml | 2 +- 6 files changed, 145 insertions(+), 3 deletions(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java create mode 100644 SWADroid/src/main/res/layout/search_users.xml create mode 100644 SWADroid/src/main/res/menu/search_users_bar.xml diff --git a/SWADroid/src/main/AndroidManifest.xml b/SWADroid/src/main/AndroidManifest.xml index 72e89ca78..0dbd4641a 100644 --- a/SWADroid/src/main/AndroidManifest.xml +++ b/SWADroid/src/main/AndroidManifest.xml @@ -172,6 +172,16 @@ android:name="android.support.PARENT_ACTIVITY" android:value="es.ugr.swad.swadroid.SWADMain" /> + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml new file mode 100644 index 000000000..fe1c9d658 --- /dev/null +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 6ab67d713..e4e797c9c 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -263,7 +263,7 @@ No leídas Actualizar Guardar - Agregar usuarios + Añadir usuarios Filtrar usuarios Todo Profesores From 2bd794b08f776cc11a08327ccc73e1be6569ffae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 17 Jul 2016 20:53:00 +0200 Subject: [PATCH 004/103] =?UTF-8?q?a=C3=B1ado=20lupa=20a=20la=20actionbar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../swadroid/modules/messages/SearchUsers.java | 7 +------ .../main/res/drawable-hdpi/ic_search_user.png | Bin 0 -> 849 bytes .../main/res/drawable-xhdpi/ic_search_user.png | Bin 0 -> 1047 bytes .../main/res/drawable-xxhdpi/ic_search_user.png | Bin 0 -> 1434 bytes SWADroid/src/main/res/menu/search_users_bar.xml | 13 ++++--------- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 7 files changed, 7 insertions(+), 15 deletions(-) create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_search_user.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_search_user.png create mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_search_user.png diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index f4870c15c..571d0101e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -50,13 +50,8 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_addUser: - //metodoAdd() - info.setText("Se presionó Añadir"); - return true; - case R.id.action_sendMsg: + case R.id.action_search: //metodoSearch() - info.setText("Se presionó Enviar"); return true; default: diff --git a/SWADroid/src/main/res/drawable-hdpi/ic_search_user.png b/SWADroid/src/main/res/drawable-hdpi/ic_search_user.png new file mode 100644 index 0000000000000000000000000000000000000000..ab1d0bb876d20a599539bae98831ef0783eeb92f GIT binary patch literal 849 zcmV-X1FrmuP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^Mz*GWV{RCwC#*xid&RTu{F-_aQrCde6e3Z2oZ8T<%A!_!4lS4HH7f?kWECI
BQj3OnQ<~lPR;4&J+N8r^D+Aj(*!=S+3a^O)_&Gn z&-=AYwOY+`!V1d_%Z^Z2_Mu!ZHyhiFVGLmtdcr=7yZ8mSFkOVm*x1;=2{ph|cm;d$ zOoK5y<35Sc@Cp9xc!zQ@fWvsM&H0|iA?(7%*ttd1&=B5P0GTX?aVq9m6hi$tiVZpM z{=x*litAVWoilDd-imuiM^?gt*!~nZa1D1tBef9sAYRL8sg8}-et7k*z=(-HH7pT*@Jn#e5L{II*veISXlMBu9w9oF<#dQWi?uoPwnbAJ=3jgldrjHYWvH3ESi2zh$EFx~K|D4Zg7vNAO9{WjUcm8I^--&?;||`9Oh4Ho!Pa8@l?Wes z*cznziq_P1FB!$BG2w8mvYzuEM@4We#Qq?>>g{j>Ihp?iF64>5lM` zs}0KFV@)Fc1kT`Iwhb!UC{|hU zMuU)t5xl(Az5Pt=)Qtw-Is0GyYA literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xhdpi/ic_search_user.png b/SWADroid/src/main/res/drawable-xhdpi/ic_search_user.png new file mode 100644 index 0000000000000000000000000000000000000000..c808cd738a649bda58e961695f5c7e7c980cf5bb GIT binary patch literal 1047 zcmV+y1nB#TP)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^M!ok>JNRCwC#+S_YfRTKvB-)N0ZYGR|M)mDp|iVEH;@vgKY2uf3nB8V3heJFzX zr}*Th^+6v5K|$X{sYtbgRSX!^;-y}KnnqKVn%bI}(($1yFbuQL%$e*lQ_Kg41GCSW zy}!NoTI*YDrc$j|oy<7JNsc7~i;ZRV9}EuM(T*bJ&CTFx6oEU91V~-C7f3>oJ1;_&xU#+KjUjV~4RL&hS*h zcl?T1u`}LjgjI2zviiVE+>jVMf|u|`iFrPccaA2;Z^A$>0)4m=D-!R#iG6L%wGVG4 z#`Xf;@r23_d{Yd!o|4=tc!Em2zwW(X=d?pVr)%;EGbQ3Wg_Z)mm!hu zPb9Au1;@4&fdTX;;{9|60)HmHr#Jj>!3276YQh3JByly7u`9WJ;P1pj``X!|MDlEu zK##|@U;+mdNoN3q83>$^pUy~U7 zDd!RTEb)9_2)s(0{okp=bnTX>8RO^RMFr zTpgw7`hr4a)`{ls7(R{8!-d%1L|0XCf86)vBruPuu*5q!J0i|tP3vSXc6>4xT^s6t zh~v1upzATewg&Bm158?Spe8(FI%gLO1pi`K}%TXr}g^%oRBtt4o|CLxG@INQ;?*J$v$RbEK R|Dpf@002ovPDHLkV1g)N>H7cx literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/ic_search_user.png b/SWADroid/src/main/res/drawable-xxhdpi/ic_search_user.png new file mode 100644 index 0000000000000000000000000000000000000000..ec841dd34412a7b242fb37765551f492e1603df6 GIT binary patch literal 1434 zcmV;L1!ek)P)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^M$AW1|)RCwC#oZD{{RUF4Z%N9#36lpO~p!J5;TA~qKiDK}EMiWpJ!DtM|AP>eE zeejPk8e@z`O^j$_yr4$Br96m9BcP~j4G{#f1Qh56QJ@BBZOi&_ew#Fy-Tlp(*>k45 z^GzoEuxHN9e&$?$x7k!Snqp8wT_Ek6vKJ z0iaV#yK0(CK-G#q1{^x5hvPParYrh5?hw!zj+NxaLIN68dik!T*-@R^L8ldc%ytN9 zj-t&`mw*l^jk9wcz?m*lg<|^KB_PcXRj+hM!s>G6uIh9I^(%LdB@O^xuV`~RYL{n{ zVz_E9*eXxBRBFYfql@XF7?jQcWic^jjaFipk1wVw>07fq?NECCk=jAs%8NE*;?_~? z0cAvC1o+8^q1Y>qqDD6Y%OkwM<(O2HM!SH&d|A?)0`$2|o_d(AzZ#Q=Ulzax>7+#S zTcclPerq!uH(|029|OAs-cuVUjWaL6Ip1Ouh~5B!si@G}BDpo`DNM9+n}Et^nb%+v zhKmJIP+cHi{D4nDM}hY-RUJXJK#oDNt9r-TR+Ht2HDW3@Y}Euj4ZMO~E-n&40N(%? zSsI3QaWsB?iQfJ=P=%30WN zW2!dds9KqBZN313NfN#Xyoo6WkDF?M$AD{m0m^AR@GOui(GNX?ssFL@u_gm+F{Q-b z0D-9*dmVUA{Glk)K*PXyz%!U~n0GDvNdxP!EE|lv(!NKISz`Mv6pMI@^86u8Y9}KG z=8RN91zUDxyf-1$jyGW!Kip_f^<$*6zGaxknD zQ=rQ?pz%5($IgiQ+ajMfkW%7Er{&=}TZ3F{3#KM<*z)|<5}GMnK*$3AT8ItdK};EO z*#ZJnRq|>GNUJcfU6m~$Fp7 z(pKeG-LW?Wq?wff2u!f-1q(<+l>!J%SU1Q>8j{ghF@SO-=|yEIW-BIZQ&E5b4oM`S zuRxpKm{%S~eEDL&)hCed!lagFNL1jML=8GA@a}6R079l&mqZNa%4j(xMrOemgHy>r oP?fhYmH - + android:id="@+id/action_search" + android:icon="@drawable/ic_search_user" + android:title="@string/search" + swadroid:showAsAction="always"/> \ No newline at end of file diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index e4e797c9c..6d90db10b 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -317,5 +317,6 @@ No hay documentos disponibles Marcando todas las notificaciones como leídas… Sincronizando… + Buscar \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 7eff6efba..c11ff3afa 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -327,5 +327,6 @@ No documents currently available Marking all notifications as read… Syncronizing… + Search \ No newline at end of file From 7e902d2224520e446e43bf52840e42ac797e736d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 18 Jul 2016 13:15:53 +0200 Subject: [PATCH 005/103] action bar provisional pantalla seleccion destinatarios --- .../modules/messages/SearchUsers.java | 23 ++++++++++++++++++- .../src/main/res/menu/search_users_bar.xml | 3 ++- SWADroid/src/main/res/values-es/strings.xml | 3 ++- SWADroid/src/main/res/values/strings.xml | 3 ++- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 571d0101e..0486bf431 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -2,6 +2,8 @@ import android.app.Activity; import android.os.Bundle; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; @@ -12,7 +14,7 @@ /** * Created by Romilgildo on 17/07/2016. */ -public class SearchUsers extends Module { +public class SearchUsers extends Module implements SearchView.OnQueryTextListener { private TextView info; @Override @@ -39,11 +41,20 @@ protected void onError() { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search_users); + setTitle(R.string.selectRcvModuleLabel); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_users_bar, menu); + + MenuItem searchItem = menu.findItem(R.id.action_search); + SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); + + searchView.setQueryHint(getText(R.string.search_user)); + // LISTENER PARA EL EDIT TEXT + searchView.setOnQueryTextListener(this); + return super.onCreateOptionsMenu(menu); } @@ -59,4 +70,14 @@ public boolean onOptionsItemSelected(MenuItem item) { } } + + @Override + public boolean onQueryTextSubmit(String query) { + return false; + } + + @Override + public boolean onQueryTextChange(String newText) { + return false; + } } diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml index 618a16e85..9cee45f58 100644 --- a/SWADroid/src/main/res/menu/search_users_bar.xml +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -6,6 +6,7 @@ android:id="@+id/action_search" android:icon="@drawable/ic_search_user" android:title="@string/search" - swadroid:showAsAction="always"/> + swadroid:showAsAction="ifRoom|collapseActionView" + swadroid:actionViewClass="android.support.v7.widget.SearchView"/> \ No newline at end of file diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 6d90db10b..ce0905d7d 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -111,7 +111,7 @@ Aviso publicado Debe introducir el contenido del aviso Enviar - Seleccionar Destinatarios + Seleccionar destinatarios Filtrar Destinatarios Filtrar Cancel @@ -318,5 +318,6 @@ Marcando todas las notificaciones como leídas… Sincronizando… Buscar + Buscar usuario \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index c11ff3afa..4c533d45a 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -109,7 +109,7 @@ Notice published You must enter the contents of the notice Send - Select Receivers + Select receivers Filter Receivers Filter Cancel @@ -328,5 +328,6 @@ Marking all notifications as read… Syncronizing… Search + Search user \ No newline at end of file From 5e792d6f444bb802fdaece455112b786600bf8a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 18 Jul 2016 13:45:19 +0200 Subject: [PATCH 006/103] =?UTF-8?q?a=C3=B1ado=20listaview=20al=20activity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/messages/SearchUsers.java | 32 ++++++------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 0486bf431..a286a49f7 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -3,44 +3,25 @@ import android.app.Activity; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; +import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; - import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; import es.ugr.swad.swadroid.modules.Module; /** * Created by Romilgildo on 17/07/2016. */ -public class SearchUsers extends Module implements SearchView.OnQueryTextListener { +public class SearchUsers extends MenuExpandableListActivity implements SearchView.OnQueryTextListener, SwipeRefreshLayout.OnRefreshListener { private TextView info; - @Override - protected void requestService() throws Exception { - - } - - @Override - protected void connect() { - - } - - @Override - protected void postConnect() { - - } - - @Override - protected void onError() { - - } - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.search_users); + setContentView(R.layout.list_items_pulltorefresh); setTitle(R.string.selectRcvModuleLabel); } @@ -80,4 +61,9 @@ public boolean onQueryTextSubmit(String query) { public boolean onQueryTextChange(String newText) { return false; } + + @Override + public void onRefresh() { + + } } From f609702657ff7d132fbeb365fdccf6ebe9ed9085 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 18 Jul 2016 17:58:04 +0200 Subject: [PATCH 007/103] funcionando la interfaz del buscador provisional --- .../modules/messages/SearchUsers.java | 32 ++++++++++++++----- SWADroid/src/main/res/layout/search_users.xml | 2 +- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 4 files changed, 27 insertions(+), 9 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index a286a49f7..7cf3c646e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,36 +1,42 @@ package es.ugr.swad.swadroid.modules.messages; -import android.app.Activity; +import android.annotation.TargetApi; +import android.content.Context; +import android.os.Build; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; +import android.view.inputmethod.InputMethodManager; import android.widget.TextView; +import android.widget.Toast; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; -import es.ugr.swad.swadroid.modules.Module; /** * Created by Romilgildo on 17/07/2016. */ public class SearchUsers extends MenuExpandableListActivity implements SearchView.OnQueryTextListener, SwipeRefreshLayout.OnRefreshListener { private TextView info; + private SearchView searchView; + private MenuItem searchItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.list_items_pulltorefresh); - setTitle(R.string.selectRcvModuleLabel); + setContentView(R.layout.search_users); //list_items_pulltorefresh + setTitle(R.string.actionBarAddUser); + info = (TextView) findViewById(R.id.text_user); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_users_bar, menu); - MenuItem searchItem = menu.findItem(R.id.action_search); - SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); + searchItem = menu.findItem(R.id.action_search); + searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setQueryHint(getText(R.string.search_user)); // LISTENER PARA EL EDIT TEXT @@ -52,14 +58,24 @@ public boolean onOptionsItemSelected(MenuItem item) { } + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { - return false; + info.setText(query); + Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); + + //quitamos el teclado virtual + InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); + + searchItem.collapseActionView(); + + return true; } @Override public boolean onQueryTextChange(String newText) { - return false; + return true; } @Override diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index 4ec2dfa84..010cdeb56 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -34,7 +34,7 @@ android:orientation="vertical" > Sincronizando… Buscar Buscar usuario + Usuarios encontrados \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 4c533d45a..faeeca95c 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -329,5 +329,6 @@ Syncronizing… Search Search user + Users found \ No newline at end of file From 28559eb04dffe387ce3b25d6c6c7a8b9b4aeecf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 18 Jul 2016 19:15:06 +0200 Subject: [PATCH 008/103] =?UTF-8?q?a=C3=B1adiendo=20funcionalidad=20a=20la?= =?UTF-8?q?=20lista?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/messages/SearchUsers.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 7cf3c646e..bfbc965a7 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -5,12 +5,12 @@ import android.os.Build; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; -import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; import android.view.inputmethod.InputMethodManager; -import android.widget.TextView; +import android.widget.ArrayAdapter; +import android.widget.ListView; import android.widget.Toast; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; @@ -18,17 +18,20 @@ /** * Created by Romilgildo on 17/07/2016. */ -public class SearchUsers extends MenuExpandableListActivity implements SearchView.OnQueryTextListener, SwipeRefreshLayout.OnRefreshListener { - private TextView info; +public class SearchUsers extends MenuExpandableListActivity implements SearchView.OnQueryTextListener { private SearchView searchView; private MenuItem searchItem; + private static ListView lvUsers; + private String[] receivers = {}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.search_users); //list_items_pulltorefresh + setContentView(R.layout.list_items); setTitle(R.string.actionBarAddUser); - info = (TextView) findViewById(R.id.text_user); + + lvUsers = (ListView) findViewById(R.id.listItems); + } @Override @@ -42,6 +45,9 @@ public boolean onCreateOptionsMenu(Menu menu) { // LISTENER PARA EL EDIT TEXT searchView.setOnQueryTextListener(this); + // para que aparezca el buscador al comienzo + //searchItem.expandActionView(); + return super.onCreateOptionsMenu(menu); } @@ -61,13 +67,18 @@ public boolean onOptionsItemSelected(MenuItem item) { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { - info.setText(query); + + //lista de usuarios + receivers = new String[]{query}; + + //mensaje sobre los usuarios encontrados Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); //quitamos el teclado virtual InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); + //cierra el searchview searchItem.collapseActionView(); return true; @@ -77,9 +88,4 @@ public boolean onQueryTextSubmit(String query) { public boolean onQueryTextChange(String newText) { return true; } - - @Override - public void onRefresh() { - - } } From 27e4a0b9faf411fd0b2357981b37783ffb93664d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Fri, 22 Jul 2016 10:41:00 +0200 Subject: [PATCH 009/103] =?UTF-8?q?a=C3=B1adiendo=20funcionalidad=20search?= =?UTF-8?q?=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/messages/SearchUsers.java | 37 +++++++++++++++---- .../src/main/res/menu/search_users_bar.xml | 6 +-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index bfbc965a7..c7031b1b5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,9 +1,12 @@ package es.ugr.swad.swadroid.modules.messages; import android.annotation.TargetApi; +import android.app.SearchManager; import android.content.Context; +import android.graphics.Color; import android.os.Build; import android.os.Bundle; +import android.support.v4.app.NavUtils; import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; @@ -11,6 +14,7 @@ import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.ListView; +import android.widget.TextView; import android.widget.Toast; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; @@ -23,22 +27,37 @@ public class SearchUsers extends MenuExpandableListActivity implements SearchVie private MenuItem searchItem; private static ListView lvUsers; private String[] receivers = {}; + private String search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.list_items); + setContentView(R.layout.search_users); //list_items setTitle(R.string.actionBarAddUser); lvUsers = (ListView) findViewById(R.id.listItems); } + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_users_bar, menu); - searchItem = menu.findItem(R.id.action_search); + searchItem = menu.findItem(R.id.action_search_field); + MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener(){ + @Override + public boolean onMenuItemActionExpand(MenuItem item) { + // Do whatever you need + return true; // KEEP IT TO TRUE OR IT DOESN'T OPEN !! + } + + @Override + public boolean onMenuItemActionCollapse(MenuItem item) { + NavUtils.navigateUpFromSameTask(SearchUsers.this); + return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE! + } + }); searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setQueryHint(getText(R.string.search_user)); @@ -46,7 +65,7 @@ public boolean onCreateOptionsMenu(Menu menu) { searchView.setOnQueryTextListener(this); // para que aparezca el buscador al comienzo - //searchItem.expandActionView(); + searchItem.expandActionView(); return super.onCreateOptionsMenu(menu); } @@ -54,7 +73,7 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_search: + case R.id.action_search_field: //metodoSearch() return true; @@ -68,6 +87,9 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public boolean onQueryTextSubmit(String query) { + TextView txtCambiado = (TextView)findViewById(R.id.text_user); + txtCambiado.setText(query); + //lista de usuarios receivers = new String[]{query}; @@ -78,14 +100,15 @@ public boolean onQueryTextSubmit(String query) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); - //cierra el searchview - searchItem.collapseActionView(); - return true; } @Override public boolean onQueryTextChange(String newText) { + search = newText; + return true; } + + } diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml index 9cee45f58..07554e1bc 100644 --- a/SWADroid/src/main/res/menu/search_users_bar.xml +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -3,10 +3,10 @@ xmlns:swadroid="http://schemas.android.com/apk/res-auto" > + swadroid:actionViewClass="android.support.v7.widget.SearchView" + android:title="@string/search" /> \ No newline at end of file From 318d4fe7b734f381f2fcf4bbfbbf42b51a1cf1ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 23 Jul 2016 12:04:56 +0200 Subject: [PATCH 010/103] =?UTF-8?q?a=C3=B1adida=20lupa=20en=20busqueda=20d?= =?UTF-8?q?e=20usuarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 7 +++++-- SWADroid/src/main/res/menu/search_users_bar.xml | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index c7031b1b5..8b04f10ac 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -58,6 +58,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE! } }); + searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setQueryHint(getText(R.string.search_user)); @@ -73,8 +74,8 @@ public boolean onMenuItemActionCollapse(MenuItem item) { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_search_field: - //metodoSearch() + case R.id.action_search: + onQueryTextSubmit(search); return true; default: @@ -87,6 +88,8 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public boolean onQueryTextSubmit(String query) { + + TextView txtCambiado = (TextView)findViewById(R.id.text_user); txtCambiado.setText(query); diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml index 07554e1bc..e46a31b93 100644 --- a/SWADroid/src/main/res/menu/search_users_bar.xml +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -9,4 +9,10 @@ swadroid:actionViewClass="android.support.v7.widget.SearchView" android:title="@string/search" /> + + \ No newline at end of file From ab61d683d5c491dd3b287f626716fc92621fd69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 23 Jul 2016 13:52:56 +0200 Subject: [PATCH 011/103] =?UTF-8?q?a=C3=B1adiendo=20alertdialog=20sobre=20?= =?UTF-8?q?donde=20buscar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/messages/SearchUsers.java | 95 +++++++++++++++---- SWADroid/src/main/res/values-es/strings.xml | 3 + SWADroid/src/main/res/values/strings.xml | 3 + 3 files changed, 85 insertions(+), 16 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 8b04f10ac..470713781 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -3,11 +3,13 @@ import android.annotation.TargetApi; import android.app.SearchManager; import android.content.Context; +import android.content.DialogInterface; import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.support.v4.view.MenuItemCompat; +import android.support.v7.app.AlertDialog; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; @@ -16,13 +18,25 @@ import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; + +import org.ksoap2.serialization.SoapObject; + +import java.util.ArrayList; +import java.util.Vector; + +import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; +import es.ugr.swad.swadroid.model.User; +import es.ugr.swad.swadroid.modules.Module; +import es.ugr.swad.swadroid.modules.courses.Courses; +import es.ugr.swad.swadroid.modules.login.Login; +import es.ugr.swad.swadroid.webservices.SOAPClient; /** * Created by Romilgildo on 17/07/2016. */ -public class SearchUsers extends MenuExpandableListActivity implements SearchView.OnQueryTextListener { +public class SearchUsers extends Module implements SearchView.OnQueryTextListener { private SearchView searchView; private MenuItem searchItem; private static ListView lvUsers; @@ -62,10 +76,10 @@ public boolean onMenuItemActionCollapse(MenuItem item) { searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setQueryHint(getText(R.string.search_user)); - // LISTENER PARA EL EDIT TEXT + // listener to searchview searchView.setOnQueryTextListener(this); - // para que aparezca el buscador al comienzo + // searview expanded searchItem.expandActionView(); return super.onCreateOptionsMenu(menu); @@ -87,21 +101,13 @@ public boolean onOptionsItemSelected(MenuItem item) { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { + int where_to_search; + where_to_search = showDialogSearch(); - - TextView txtCambiado = (TextView)findViewById(R.id.text_user); - txtCambiado.setText(query); - - //lista de usuarios - receivers = new String[]{query}; - - //mensaje sobre los usuarios encontrados - Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); - - //quitamos el teclado virtual - InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); - imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); + //remove virtual keyboard + //InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + //imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); return true; } @@ -113,5 +119,62 @@ public boolean onQueryTextChange(String newText) { return true; } + @Override + protected void requestService() throws Exception { + } + + @Override + protected void connect() { + + } + + @Override + protected void postConnect() { + + } + + @Override + protected void onError() { + + } + + private int showDialogSearch(){ + int selected = -1; // does not select anything + final String[] choiceList = {getString(R.string.in_subject) + " " + Courses.getSelectedCourseShortName(), getString(R.string.inAllPlatform)}; + + AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); + builder.setTitle(R.string.where_to_search); + + builder.setSingleChoiceItems(choiceList, selected, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int item) { + } + }); + builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + // no need to write anything here just implement this interface into this button + } + }); + + builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + TextView txt = (TextView)findViewById(R.id.text_user); + txt.setText(search); + + //users list + receivers = new String[]{search}; + + //message about found users + Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); + + searchView.clearFocus(); + } + }); + + AlertDialog alert = builder.create(); + alert.show(); + + return selected; + } } diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index d1e7ea43f..7e5bee7f5 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -320,5 +320,8 @@ Buscar Buscar usuario Usuarios encontrados + ¿Dónde desea buscar? + En + En toda la plataforma \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index faeeca95c..fdabc097f 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -330,5 +330,8 @@ Search Search user Users found + Where do you want to search? + In + In all the platform \ No newline at end of file From 2fe9d832d05e53b6c310b13e88bd2d2a30b4f10e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 23 Jul 2016 18:28:55 +0200 Subject: [PATCH 012/103] creando lista de usuarios --- .../modules/messages/SearchUsers.java | 56 +++++++++++++------ SWADroid/src/main/res/layout/search_users.xml | 53 ++---------------- 2 files changed, 43 insertions(+), 66 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 470713781..2f023bd1b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -42,15 +42,30 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private static ListView lvUsers; private String[] receivers = {}; private String search; + private ArrayAdapter adapter; + String[] frequentUsers = { + "Alexander Pierrot", + "Carlos Lopez", + "Sara Bonz", + "Liliana Clarence", + "Benito Peralta", + "Juan Jaramillo", + "Christian Steps", + "Alexa Giraldo", + "Linda Murillo", + "Lizeth Astrada" + }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.search_users); //list_items + setContentView(R.layout.list_items); //search_users, list_items_pulltorefresh setTitle(R.string.actionBarAddUser); + //users list lvUsers = (ListView) findViewById(R.id.listItems); - + adapter = new ArrayAdapter(this, R.layout.search_users, frequentUsers); + lvUsers.setAdapter(adapter); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @@ -89,6 +104,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: + if(!search.equals("")) onQueryTextSubmit(search); return true; @@ -101,9 +117,12 @@ public boolean onOptionsItemSelected(MenuItem item) { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { - int where_to_search; - - where_to_search = showDialogSearch(); + if (Courses.getSelectedCourseCode() != -1){ + showDialogSearch(); + } + else{ + findUsers(-1); + } //remove virtual keyboard //InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); @@ -138,12 +157,13 @@ protected void onError() { } - private int showDialogSearch(){ - int selected = -1; // does not select anything + private void showDialogSearch(){ + int selected = 0; // does not select anything final String[] choiceList = {getString(R.string.in_subject) + " " + Courses.getSelectedCourseShortName(), getString(R.string.inAllPlatform)}; AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); builder.setTitle(R.string.where_to_search); + builder.setCancelable(false); builder.setSingleChoiceItems(choiceList, selected, new DialogInterface.OnClickListener() { @Override @@ -159,22 +179,22 @@ public void onClick(DialogInterface dialog, int which) { builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - TextView txt = (TextView)findViewById(R.id.text_user); - txt.setText(search); - - //users list - receivers = new String[]{search}; - - //message about found users - Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); - - searchView.clearFocus(); + findUsers(Courses.getSelectedCourseCode()); } }); AlertDialog alert = builder.create(); alert.show(); + } + + private void findUsers(long codeSubject){ + String[] foundUsers = {search}; + adapter = new ArrayAdapter(this, R.layout.search_users, foundUsers); + lvUsers.setAdapter(adapter); + + //message about found users + Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); - return selected; + searchView.clearFocus(); } } diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index 010cdeb56..cdd72c715 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -1,49 +1,6 @@ - - - - - - - - - - - - - \ No newline at end of file + \ No newline at end of file From dc616071574b7dd635e5303163246219081713ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 24 Jul 2016 12:42:41 +0200 Subject: [PATCH 013/103] =?UTF-8?q?primera=20versi=C3=B3n=20de=20lista=20d?= =?UTF-8?q?e=20usuarios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SWADroid/src/main/AndroidManifest.xml | 12 -- .../es/ugr/swad/swadroid/model/Model.java | 3 + .../ugr/swad/swadroid/model/UserFilter.java | 165 ++++++++++++++ .../modules/messages/FilterUsersList.java | 82 ------- .../modules/messages/SearchUsers.java | 20 +- .../modules/messages/UsersAdapter.java | 202 ++++++++++++++++++ .../swadroid/modules/messages/UsersList.java | 138 ------------ .../modules/messages/usersRepository.java | 41 ++++ SWADroid/src/main/res/layout/search_users.xml | 54 ++++- 9 files changed, 465 insertions(+), 252 deletions(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java delete mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java delete mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java diff --git a/SWADroid/src/main/AndroidManifest.xml b/SWADroid/src/main/AndroidManifest.xml index 0dbd4641a..63ebf8499 100644 --- a/SWADroid/src/main/AndroidManifest.xml +++ b/SWADroid/src/main/AndroidManifest.xml @@ -182,18 +182,6 @@ android:name="android.support.PARENT_ACTIVITY" android:value="es.ugr.swad.swadroid.modules.messages.Messages" /> - - - - + * + * SWADroid is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SWADroid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SWADroid. If not, see . + */ + +package es.ugr.swad.swadroid.model; + +import org.ksoap2.serialization.PropertyInfo; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Hashtable; +import java.util.Locale; +import java.util.UUID; + +/** + * User data. + * + * @author Rubén Martín Hidalgo + */ +public class UserFilter { + /** + * User identifier. + */ + private String userID; + /** + * User first surname. + */ + private String userSurname1; + /** + * User last surname. + */ + private String userSurname2; + /** + * User name. + */ + private String userFirstname; + /** + * Full path where user's picture is stored. + */ + private int userPhoto; + + /** + * Constructor. + * + * @param userID User identifier. + * @param userSurname1 User first surname. + * @param userSurname2 User last surname. + * @param userFirstname User name. + * @param userPhoto Full path where user's picture is stored. + */ + public UserFilter(String userID, String userSurname1, String userSurname2, String userFirstname, int userPhoto) throws ParseException { + this.userID = userID; + this.userSurname1 = userSurname1; + this.userSurname2 = userSurname2; + this.userFirstname = userFirstname; + this.userPhoto = userPhoto; + } + + /** + * Gets user name. + * + * @return User name. + */ + public String getUserFirstname() { + return userFirstname; + } + + /** + * Sets user name. + * + * @param userFirstname User name. + */ + public void setUserFirstname(String userFirstname) { + this.userFirstname = userFirstname; + } + + /** + * Gets user identifier. + * + * @return User identifier. + */ + public String getUserID() { + return userID; + } + + /** + * Sets user identifier. + * + * @param userID User identifier. + */ + public void setUserID(String userID) { + this.userID = userID; + } + + /** + * Gets user first surname. + * + * @return User first surname. + */ + public String getUserSurname1() { + return userSurname1; + } + + /** + * Sets user first surname. + * + * @param userSurname1 User first surname. + */ + public void setUserSurname1(String userSurname1) { + this.userSurname1 = userSurname1; + } + + /** + * Gets user last surname. + * + * @return User last surname. + */ + public String getUserSurname2() { + return userSurname2; + } + + /** + * Sets user last surname. + * + * @param userSurname2 User last surname. + */ + public void setUserSurname2(String userSurname2) { + this.userSurname2 = userSurname2; + } + + /** + * Gets Full path where user's picture is stored. + * + * @return the userPhoto + */ + public int getUserPhoto() { + return userPhoto; + } + + /** + * Sets Full path where user's picture is stored. + * + * @param userPhoto the userPhoto to set + */ + public void setUserPhoto(int userPhoto) { + this.userPhoto = userPhoto; + } + +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java deleted file mode 100644 index 0d43aeb02..000000000 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Module to get the users list to one course - * - * @author Jose Antonio Guerrero Aviles - */ - -package es.ugr.swad.swadroid.modules.messages; - -import android.os.Bundle; -import android.view.View; -import android.widget.Button; - -import es.ugr.swad.swadroid.Constants; -import es.ugr.swad.swadroid.R; -import es.ugr.swad.swadroid.gui.MenuActivity; - -public class FilterUsersList extends MenuActivity { - - public static final String TAG = Constants.APP_TAG + " Users List"; - - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.dialog_filter_list); - setTitle(R.string.filterUsersListModuleLabel); - getSupportActionBar().setIcon(R.drawable.users); - - - Button cancelFIlters = (Button) findViewById(R.id.cancelFilters); - cancelFIlters.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - //setResult(RESULT_CANCELED); - finish(); - } - }); - - Button acceptFIlters = (Button) findViewById(R.id.acceptFilters); - acceptFIlters.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - //TODO Filtrar la lista y mostrarla en el ListView - } - }); - - } - - - protected void onStart() { - super.onStart(); - /*try { - runConnection(); - } catch (Exception e) { - String errorMsg = getString(R.string.errorServerResponseMsg); - error(TAG, errorMsg, e, true); - }*/ - } - - - protected void connect() { - /*String progressDescription = getString(R.string.informationProgressDescription); - int progressTitle = R.string.informationProgressTitle; - - startConnection(true, progressDescription, progressTitle);*/ - } - - protected void requestService() throws Exception { - - } - - - protected void postConnect() { - - } - - - protected void onError() { - - } -} \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 2f023bd1b..eb81dce12 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -4,6 +4,7 @@ import android.app.SearchManager; import android.content.Context; import android.content.DialogInterface; +import android.database.Cursor; import android.graphics.Color; import android.os.Build; import android.os.Bundle; @@ -28,6 +29,7 @@ import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; import es.ugr.swad.swadroid.model.User; +import es.ugr.swad.swadroid.model.UserFilter; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.courses.Courses; import es.ugr.swad.swadroid.modules.login.Login; @@ -42,19 +44,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private static ListView lvUsers; private String[] receivers = {}; private String search; - private ArrayAdapter adapter; - String[] frequentUsers = { - "Alexander Pierrot", - "Carlos Lopez", - "Sara Bonz", - "Liliana Clarence", - "Benito Peralta", - "Juan Jaramillo", - "Christian Steps", - "Alexa Giraldo", - "Linda Murillo", - "Lizeth Astrada" - }; + private UsersAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { @@ -64,7 +54,7 @@ protected void onCreate(Bundle savedInstanceState) { //users list lvUsers = (ListView) findViewById(R.id.listItems); - adapter = new ArrayAdapter(this, R.layout.search_users, frequentUsers); + adapter = new UsersAdapter(getBaseContext(), UsersRepository.getInstance().getUsers()); lvUsers.setAdapter(adapter); } @@ -189,7 +179,7 @@ public void onClick(DialogInterface dialog, int which) { private void findUsers(long codeSubject){ String[] foundUsers = {search}; - adapter = new ArrayAdapter(this, R.layout.search_users, foundUsers); + adapter = new UsersAdapter(getBaseContext(), UsersRepository.getInstance().getUsers()); lvUsers.setAdapter(adapter); //message about found users diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java new file mode 100644 index 000000000..1a692879e --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -0,0 +1,202 @@ +/* + * + * * This file is part of SWADroid. + * * + * * Copyright (C) 2010 Juan Miguel Boyero Corral + * * + * * SWADroid is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * (at your option) any later version. + * * + * * SWADroid is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with SWADroid. If not, see . + * + */ +package es.ugr.swad.swadroid.modules.messages; + +import android.annotation.TargetApi; +import android.content.Context; +import android.database.Cursor; +import android.os.Build; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.CursorAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.database.DataBaseHelper; +import es.ugr.swad.swadroid.gui.ImageFactory; +import es.ugr.swad.swadroid.model.UserFilter; +import es.ugr.swad.swadroid.utils.Crypto; +import es.ugr.swad.swadroid.utils.Utils; + +/** + * Custom CursorAdapter for display users + * + * @author Rubén Martín Hidalgo + */ +public class UsersAdapter extends ArrayAdapter { + private LayoutInflater inflater; + + public UsersAdapter(Context context, List objects) { + super(context, 0, objects); + + this.inflater = LayoutInflater.from(context); + } + + public View getView(int position, View convertView, ViewGroup parent) { + // Obtener inflater. + this.inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + // ¿Existe el view actual? + if (null == convertView) { + convertView = inflater.inflate(R.layout.search_users, parent, false); + } + + // Referencias UI. + ImageView avatar = (ImageView) convertView.findViewById(R.id.imageView); + TextView name = (TextView) convertView.findViewById(R.id.text_user); + CheckBox check = (CheckBox) convertView.findViewById(R.id.check); + + // Lead actual. + UserFilter user = getItem(position); + + // Setup. + avatar.setImageResource(R.drawable.usr_bl); + name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); + + return convertView; + } + +/* + + + private DataBaseHelper dbHelper; + private Cursor dbCursor; + private Crypto crypto; + private ImageLoader loader; + private int eventCode; + private LayoutInflater inflater; + + private static class ViewHolder { + ImageView image; + TextView text_name; + CheckBox checkbox; + } + + /** + * Constructor + * + * @param context Application context + * @param c Database cursor + * @param dbHelper Database helper + *//* + public UsersAdapter(Context context, Cursor c, DataBaseHelper dbHelper) { + + super(context, c, true); + + this.dbHelper = dbHelper; + this.crypto = new Crypto(context, dbHelper.getDBKey()); + this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); + this.inflater = LayoutInflater.from(context); + } + + /** + * Constructor + * + * @param context Application context + * @param c Database cursor + * @param autoRequery Flag to set autoRequery function + * @param dbHelper Database helper + * @param eventCode Code of related event + *//* + public UsersAdapter(Context context, Cursor c, + boolean autoRequery, DataBaseHelper dbHelper, int eventCode) { + + super(context, c, autoRequery); + + this.dbHelper = dbHelper; + this.eventCode = eventCode; + this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); + this.inflater = LayoutInflater.from(context); + } + + @Override + public void bindView(View view, Context context, Cursor cursor) { + String userSurname1 = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userSurname1"))); + String userSurname2 = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userSurname2"))); + String userFirstname = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userFirstname"))); + String userID = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userID"))); + final long userCode = cursor.getLong(cursor.getColumnIndex("userCode")); + String userPhoto = cursor.getString(cursor.getColumnIndex("photoPath")); + boolean present = Utils.parseIntBool(cursor.getInt(cursor.getColumnIndex("present"))); + + final ViewHolder holder = (ViewHolder) view.getTag(); + view.setTag(holder); + + holder.image = (ImageView) view.findViewById(R.id.imageView); + holder.text_name = (TextView) view.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) view.findViewById(R.id.check); + + holder.checkbox.setChecked(present); + holder.checkbox.setOnClickListener(new View.OnClickListener() { + @TargetApi(Build.VERSION_CODES.HONEYCOMB) + @Override + public void onClick(View v) { + Cursor oldCursor; + + //Inserts attendance into database + dbHelper.insertAttendance(userCode, eventCode, holder.checkbox.isChecked()); + + //Mark event status as "pending" + dbHelper.updateEventStatus(eventCode, "pending"); + + //Refresh ListView + dbCursor = dbHelper.getUsersEventCursor(eventCode); + if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD) { + oldCursor = swapCursor(dbCursor); + oldCursor.close(); + } else { + changeCursor(dbCursor); + } + notifyDataSetChanged(); + } + }); + + holder.image.setImageResource(R.drawable.usr_bl); + if(userPhoto != null) { + ImageFactory.displayImage(loader, crypto.decrypt(userPhoto), holder.image); + } + + holder.text_name.setText(userSurname1 + " " + userSurname2 + ", " + userFirstname); + } + + @Override + public View newView(Context context, Cursor cursor, ViewGroup parent) { + View view = inflater.inflate(R.layout.search_users, parent, false); + ViewHolder holder = new ViewHolder(); + + holder.image = (ImageView) view.findViewById(R.id.imageView); + holder.text_name = (TextView) view.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) view.findViewById(R.id.check); + view.setTag(holder); + + return view; + }*/ +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java deleted file mode 100644 index 3404302fc..000000000 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Module to filter the users list to one course - * - * @author Jose Antonio Guerrero Aviles - */ - -package es.ugr.swad.swadroid.modules.messages; - -import es.ugr.swad.swadroid.Constants; -import es.ugr.swad.swadroid.gui.MenuActivity; -//import es.ugr.swad.swadroid.modules.rollcall.students.StudentItemModel; -//import es.ugr.swad.swadroid.modules.rollcall.students.StudentsArrayAdapter; - -public class UsersList extends MenuActivity { - - public static final String TAG = Constants.APP_TAG + " Users List"; - /*private List studentsList; - private String rcvs = ""; - private String rcvs_Aux = ""; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.users_listview); - setTitle(R.string.selectRcvModuleLabel); - getSupportActionBar().setIcon(R.drawable.users); - - Button cancelList = (Button) findViewById(R.id.cancelList); - cancelList.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - setResult(RESULT_CANCELED); - finish(); - } - }); - - Button acceptList = (Button) findViewById(R.id.acceptList); - acceptList.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - - //Aceptar la lista y a�adirla a los destinatarios - for (StudentItemModel user : studentsList){ - if (user.isSelected()){ - String us = user.getUserNickname(); - rcvs_Aux = rcvs_Aux + "@" + us + ","; - - //Elimino la ultima coma de la cadena, ya que no hay m�s usuarios para a�adir - rcvs = rcvs_Aux.substring(0, rcvs_Aux.length()-1); - } - } - - Intent resultData = new Intent(); - resultData.putExtra("ListaRcvs", rcvs); - setResult(Activity.RESULT_OK, resultData); - finish(); - } - }); - - } - - @Override - protected void onStart() { - super.onStart(); - - *//*La primera vez deber� cargar una lista vac�a y para obtener la primera lista, - * habr� que pulsar en el bot�n actualizar de la actionbar. A partir de este momento, - * tendremos una lista de usuarios en la memoria del tel�fono y cuando entre aqu� la segunda - * vez y sucesivas, ser� esa la lista que se cargue. Si queremos, podemos volver a pulsar el - * bot�n actualizar por si hay nuevos usuarios.*//* - - showStudentsList(); - - *//*try { - runConnection(); - } catch (Exception e) { - String errorMsg = getString(R.string.errorServerResponseMsg); - error(TAG, errorMsg, e, true); - }*//* - } - - private void showStudentsList() { - List idList = dbHelper.getUsersCourse(Courses.getSelectedCourseCode()); - if (!idList.isEmpty()) { - studentsList = new ArrayList(); - - for (Long userCode : idList) { - User u = dbHelper.getUser("userCode", String.valueOf(userCode)); - studentsList.add(new StudentItemModel(u)); - } - // Arrange the list alphabetically - Collections.sort(studentsList); - - // Show the list of students in the ListView - ListView lv = (ListView) findViewById(R.id.users_listview); - lv.setAdapter(new StudentsArrayAdapter(this, studentsList, Constants.ROLLCALL_REQUEST_CODE)); - - - } else { - Toast.makeText(this, R.string.scan_no_students, Toast.LENGTH_LONG).show(); - } - } - - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.users_list_activity_actions, menu); - return super.onCreateOptionsMenu(menu); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.action_filter_users: - - Intent callFilterUsersList = new Intent (getBaseContext(), FilterUsersList.class); - startActivity(callFilterUsersList); - - return true; - - //Refresh users list - case R.id.action_refresh_users: - - Intent refreshUsersList; - Context context = getApplicationContext(); - - refreshUsersList = new Intent(context, EventsDownload.class); - refreshUsersList.putExtra("groupCode", (long) 0); - startActivity(refreshUsersList); - - return true; - - default: - return super.onOptionsItemSelected(item); - } - - }*/ -} \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java new file mode 100644 index 000000000..4717e571e --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java @@ -0,0 +1,41 @@ +package es.ugr.swad.swadroid.modules.messages; + +/** + * Created by Romilgildo on 24/07/2016. + */ + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.model.UserFilter; + +/** + * Repositorio ficticio de users + */ +public class UsersRepository { + private static UsersRepository repository = new UsersRepository(); + private HashMap users = new HashMap<>(); + + public static UsersRepository getInstance() { + return repository; + } + + private UsersRepository() { + try { + saveUser(new UserFilter("1", "Boyero", "Corral", "Juan Miguel", R.drawable.usr_bl)); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + private void saveUser(UserFilter user) { + users.put(user.getUserID(), user); + } + + public List getUsers() { + return new ArrayList<>(users.values()); + } +} diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index cdd72c715..833c6e8fc 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -1,6 +1,50 @@ - \ No newline at end of file + + + + + + + + + + + + + \ No newline at end of file From 4f78be754c71b8432bc82626785f97ab2bc7de94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 24 Jul 2016 13:07:06 +0200 Subject: [PATCH 014/103] corrigiendo imageview de los usuarios filtrados --- .../modules/messages/UsersAdapter.java | 120 +----------------- .../modules/messages/usersRepository.java | 2 +- SWADroid/src/main/res/layout/search_users.xml | 1 - 3 files changed, 2 insertions(+), 121 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index 1a692879e..f9a17a670 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -76,127 +76,9 @@ public View getView(int position, View convertView, ViewGroup parent) { UserFilter user = getItem(position); // Setup. - avatar.setImageResource(R.drawable.usr_bl); + avatar.setImageResource(user.getUserPhoto()); name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); return convertView; } - -/* - - - private DataBaseHelper dbHelper; - private Cursor dbCursor; - private Crypto crypto; - private ImageLoader loader; - private int eventCode; - private LayoutInflater inflater; - - private static class ViewHolder { - ImageView image; - TextView text_name; - CheckBox checkbox; - } - - /** - * Constructor - * - * @param context Application context - * @param c Database cursor - * @param dbHelper Database helper - *//* - public UsersAdapter(Context context, Cursor c, DataBaseHelper dbHelper) { - - super(context, c, true); - - this.dbHelper = dbHelper; - this.crypto = new Crypto(context, dbHelper.getDBKey()); - this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, - R.drawable.usr_bl); - this.inflater = LayoutInflater.from(context); - } - - /** - * Constructor - * - * @param context Application context - * @param c Database cursor - * @param autoRequery Flag to set autoRequery function - * @param dbHelper Database helper - * @param eventCode Code of related event - *//* - public UsersAdapter(Context context, Cursor c, - boolean autoRequery, DataBaseHelper dbHelper, int eventCode) { - - super(context, c, autoRequery); - - this.dbHelper = dbHelper; - this.eventCode = eventCode; - this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, - R.drawable.usr_bl); - this.inflater = LayoutInflater.from(context); - } - - @Override - public void bindView(View view, Context context, Cursor cursor) { - String userSurname1 = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userSurname1"))); - String userSurname2 = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userSurname2"))); - String userFirstname = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userFirstname"))); - String userID = crypto.decrypt(cursor.getString(cursor.getColumnIndex("userID"))); - final long userCode = cursor.getLong(cursor.getColumnIndex("userCode")); - String userPhoto = cursor.getString(cursor.getColumnIndex("photoPath")); - boolean present = Utils.parseIntBool(cursor.getInt(cursor.getColumnIndex("present"))); - - final ViewHolder holder = (ViewHolder) view.getTag(); - view.setTag(holder); - - holder.image = (ImageView) view.findViewById(R.id.imageView); - holder.text_name = (TextView) view.findViewById(R.id.text_user); - holder.checkbox = (CheckBox) view.findViewById(R.id.check); - - holder.checkbox.setChecked(present); - holder.checkbox.setOnClickListener(new View.OnClickListener() { - @TargetApi(Build.VERSION_CODES.HONEYCOMB) - @Override - public void onClick(View v) { - Cursor oldCursor; - - //Inserts attendance into database - dbHelper.insertAttendance(userCode, eventCode, holder.checkbox.isChecked()); - - //Mark event status as "pending" - dbHelper.updateEventStatus(eventCode, "pending"); - - //Refresh ListView - dbCursor = dbHelper.getUsersEventCursor(eventCode); - if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.GINGERBREAD) { - oldCursor = swapCursor(dbCursor); - oldCursor.close(); - } else { - changeCursor(dbCursor); - } - notifyDataSetChanged(); - } - }); - - holder.image.setImageResource(R.drawable.usr_bl); - if(userPhoto != null) { - ImageFactory.displayImage(loader, crypto.decrypt(userPhoto), holder.image); - } - - holder.text_name.setText(userSurname1 + " " + userSurname2 + ", " + userFirstname); - } - - @Override - public View newView(Context context, Cursor cursor, ViewGroup parent) { - View view = inflater.inflate(R.layout.search_users, parent, false); - ViewHolder holder = new ViewHolder(); - - holder.image = (ImageView) view.findViewById(R.id.imageView); - holder.text_name = (TextView) view.findViewById(R.id.text_user); - holder.checkbox = (CheckBox) view.findViewById(R.id.check); - view.setTag(holder); - - return view; - }*/ } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java index 4717e571e..d4b0ac9b2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java @@ -13,7 +13,7 @@ import es.ugr.swad.swadroid.model.UserFilter; /** - * Repositorio ficticio de users + * Users list provisional */ public class UsersRepository { private static UsersRepository repository = new UsersRepository(); diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index 833c6e8fc..3617a063c 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -15,7 +15,6 @@ Date: Sun, 24 Jul 2016 19:03:13 +0200 Subject: [PATCH 015/103] prueba con varios usuarios --- .../modules/messages/usersRepository.java | 4 +++- SWADroid/src/main/res/drawable/user_photo_1.jpg | Bin 0 -> 8190 bytes SWADroid/src/main/res/drawable/user_photo_2.jpg | Bin 0 -> 10210 bytes SWADroid/src/main/res/layout/search_users.xml | 5 ++--- 4 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 SWADroid/src/main/res/drawable/user_photo_1.jpg create mode 100644 SWADroid/src/main/res/drawable/user_photo_2.jpg diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java index d4b0ac9b2..325c0af1d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java @@ -25,7 +25,9 @@ public static UsersRepository getInstance() { private UsersRepository() { try { - saveUser(new UserFilter("1", "Boyero", "Corral", "Juan Miguel", R.drawable.usr_bl)); + saveUser(new UserFilter("1", "Boyero", "Corral", "Juan Miguel", R.drawable.user_photo_1)); + saveUser(new UserFilter("2", "Cañas", "Vargas", "Antonio", R.drawable.user_photo_2)); + saveUser(new UserFilter("208", "Martín", "Hidalgo", "Rubén", R.drawable.usr_bl)); } catch (ParseException e) { e.printStackTrace(); } diff --git a/SWADroid/src/main/res/drawable/user_photo_1.jpg b/SWADroid/src/main/res/drawable/user_photo_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2f14b955aca2aaf409031811058fdb76541bca51 GIT binary patch literal 8190 zcmbW5Wl$VU*QN&@TnD#cfk1E@9FoAm0KplY2e$x0gIfXw0)qtz1eXwGAhU3Nd2DcSaBzV{c)&*^B_PBnA}6JwASWd!qoih}p#;%Wk&)A~($X_Bv9PdE(y(!` zF>^37voQa=3C816ATE#u508WyL=Iy9f40A!0CGIQ0AK(MgAIU5j)6sv@wXSi^5`cH z#(xa(KMeyD3;WSaJbVJe#|d?0089)lEX+s$9|0a`2R)7hu*q>KScMdEDYY$uZ0;c8 zu*5t(_7_!MR63KV93oa8;rIm9G_-W|oKLy9pYe!_iA#VbrCz>LQiiCgLUr}@4Pb^w z#@05rcJ>aAPM%)gKJR?}{NI0wh>ZFe9g~#&IVCmiOL|6rL1EFi;_oG;)it$s^$m?p z&D}k{eaQZS!J(zmtuxiA1&|AqC~{ukK) z!A1Vah50B8Ht=6A49s_r6^k4jhgArdLQxxN=}yTe9EJyak(gK2h0iXcb4q39F-btp zA&TNW`xos$WdC_&{HB6CHB36>va0T9_G7 z-KnpQ_8>qp)AjeAY+Bus48u*unXFKj^h)~c$vXvK&n{du0TujmXXhp(jEB({5_w+; z$L=+3`g>) zwWc*sx4#8~N9?m#6i+NTl)gh)nVoD&vHc0^&|hg?I#uNC#z?@0rK+xShB>+IwAb6G zHN7G)apFHAtQylIB9A5NUDj5HL-B7Z&Epw(zkB^Nq^t;h5_4a8k+>2YY7@VqKKJ9E z`ub=i2h-eSVbyG~+}Deou|AD|?6k!40(o--eV^6%!z~Sr197?Qk$}wG4{)p;`^`!10{J=_)Lc}p7AqoQ9NTHR8dV)Q3+%fN?Gjm%zsjm zHHJGslzhb9O=%VZgg1Oq5!>mr;7K*wibRD-Du ziwT(@Wesgl%pUU0TBeYC>$m(+9nASvFTPWXZzI|!erzT~LOM~Cysw`Tl^(W>;lI~gnNcUuy3bP4R95iflm;gQ^if(3Wzr=vt9wV4YPEJ@t95!F*}Y` zNf?psseah}{(=b|a4#gwz&4eynkdD(ha}g!%|Wa?k~R4)d&)0}d3zo7+~u(L{qJ_& zwQOXjy_IPIGvZDzP;*X(ZsRMVd&$R3>8661^Hp1B73{sE{(;++(D`<+wH>l5o z)2VK`9RSTG881h@ka_ehg`F3%I&%W2!$^NfybPz~1{1Sak|fQW$=Dq_1%`<&lBkP{ zT!WV-_os%A*ZwnmmufX>K{($rewetsde=L%D5s~$LFQ0|J-!X*hAuM0A> zULSovOiuk#jaiir5E7wL5-2ipybv<6NjjIZdm-bmRaKod13E9v-W@_OYOM4;cej`9 zw4T44xeFn7N*>&X5K5;A#1$ssdgefH3n16F-;DAcrhR@T(0NFXBi#0aiKeYGB-IJb zRpzmr;_Q45yl?2pW}Zp-c6@bEka3)N7s;?5ELH* zy)AS=yZ3@jlwXkGu5Ih_m!k~33weOwqztHd)fcm=qRT1qDi{Tmv)Jts6vvV98{q^phZbwankF9#cS{u=Pl zK2VXxm3xR(N)k<^6&8-vks=G2+rjxP{dm3AIX(cHo7UqGuVH%vza9{SmG@6hAGSwU zy_dz;Y?`eW8=Uk{`A>yqT7rOc+O7sM0KDZmW2tWi5d&cCK-+uuI4dUZ*J1Lb__K=lH zk~mCxb=wSy57cqmbIhTJw(M{Nzqy-do%X+okrvNTY=&SJyIxmH$LX0d3u273=llie z2axupS{H}EZ9@VPzD+5r+zZTO`gqN04o9LbwtC2A?xRB!v=B<-l6bdK`6^70tkq|8wbX=Hw2>)#&)*>Os1#R|Ic3JyI^1=n zVj@bCj&3tq&+X{G)6gE=FIF0?ozt69xB6X(%05|1Xc4(5=C(Y*x0}j!qknll>=hJYHjgR%x8(oIuB8Er3?|lSLj;6STZH;B_-BGRYosH zMODx|UDD&mU8OVY`6gR0b#`LjQ9_H586jOk7Gg?=O%R-U(n?sb4JD~oBfp67UmQ-r zAa;F*)NY^c#ZZftF)~V?ZzmlM&Xou*l{C}a2E|^J()j*XV{`t>yRgB8)eVJ%$0U)? zBgIk4^H-cPvF61;GjyLRbY_PT(eEL&RB2E6HlbQHDsP>;p5#WPi!%# z9LW)$Arm)L0+;apwA11mZSLDsTL0NUCMkEi=W=)bpqeZ#;z2E0P_UX-GY?3jvNYP%>N}x`%LKtbrZD)hhVP~W6UqEim17$QOTRt2FkSDl_ zLd|_ZC8HbL8k58YjrKzpOZAwtog<p+KnAq#01~ z@vz`2&c*j(hqJSz zZnwW&rAwQA?avpsCUg*G9L?_>0?adTHk~*L?n|j3UYiE3mVD`(ax$qsn~>gpS5ZRo z$$N;iEhzPDS-8|mPIZOj`3hFWud++tu00`$$t+u=R7zVX`O4zZzMpfeYoro~RMpt> zGvdZ@1%lwntnCK0MQ;e+>Ou=d0Nsv$f`ZeqpQ1`fkKaGfmJd=s?QwT2KcN4?ZZ}Q2 z_B`7-EIB9ZEXUncZi;F>GrPF_`_CRd_we6P^rl|j69hbkdMw+zH5X2*MV%gShI`z5 zqijZI9jcKTTf9eT&wP!@q1m6-a1&mL`x*@()pVO`G?6D!bkAGa|1C7iv@}o+@u2kO zaE~09)>J1z#i@AKc~*GsY#_=wvd;ymqHWm~n|(Kl40x4|1YZl|%Lcb!aYejYf_4bc zJBgSi$4#!M&|dD|&gq{{zlw*PBFmf0Sr(1swwsNY%AOAJ6&UbK-i<89TPW~m%!sx* ztxhg(cXi*Fe;Q=!zt;bmC6;faT@2euk{$2N22W>CN%KDFjB#=OR#vS~mre7*XP4zI zJrnp?J1W(8d?J8XA5EG)$RIa!)XA9i7I2uvyL%G8s9#^a*);m_0rt$<^~X`l%iMo( zH$>Ll{Vy%zr8t`%>50*4jtP(`%OUDeVDOoK51juzHhhtuJ`MlOFI z8GH)-g-5Dm$fGwi61a2=*|w10~dWT0B0cY4Bbi0$GSiANK#$ouwHM#x8P>onbl+6%z^ zoV23-pJNg^S5oMOqv&4#X;5*5=mW`a^k{FxI}Xt}5pknGrhpKFeNj?^RcO6`z=x(_ zc3t5p03+t>fC#>mHH6RfXDYok-3+aqD%aN|?d|Lqz&{i9v%(fi?zjzkpIEEK`xj9O zt>V&4>RCi5U3)qQ7j(}Y6TnBAau6|j{J2%wIr6Z-9SV6xZ#rMIH zH~5`Q9xYLuW-CfEFAP_o(!q2{Cw}UMXPO!nNj7`xn30apHoHJJd~(rI4K^M`-{ca%ms6zxo!s1DHTjpyL5$&cm+TeEDZ<00k_ zt)MQ1bM(8{Oun$*FO1%RoLvh^Z7HWE(V%ytJdkv6I4;BJl~Fj{m+^gk zcj5FE6WL(BnS=>k$^2F?Dn~u`c6RLZ!~oeFpscg`)I#v|mw(KPE5RHF#7N^5JgBU? zcU!d}Fns7H6wBvO*`lA=bncVABN<;^Hd9q(LMY9e!xnm@jR!r?@DIVJTP1tUdZ4;> zWYF5mnCx}2BsYQ>5!81rQCyT=z6v9(*;&ccFbZx{G%pr7g+AFJdL+z){&1s~{d`$+C35SZx>~`nIIo^Rerc|Djq5_mpn?~MA3}h zR=OPk5?vCg9uJVuv`yN%Io`GcaAw~5U;%=7C-1pzQfEoQEMmjyn$x)tfC^rP>D51f zXotY7Bpaj{5YJoE{zLN=H;O)rK3WVd7cE)dpWWRjS=q0xb%bJym_NKnFnwoo)Og3N zK=N5z36rE&OKMV~J6Y5&Od$gFE+2kLM9f-L$QCIQdtHJ8%Ro>!oN7V0DH)=vkp}~EB-ac1Z(&5`q)*-tu*cky!6hph9`fJBj29k2zYtXtGQLBF z$|L-)f63U>a5nAR&X>G^eqG46_y#>4DM=or9T%H-Y#>P5T4(wq$>>udNAZ=a^QOkQ zKJEFEO~QKE#ARhxY?IOD_q{7gbHf)e@UfEosCJ}&4tsBCRztfez{7$4mEci-oSC1_ z4tnCWVH2J)7j9JDb}hn~1`1%8m3Su)o#ct>barP2LKiAk#tF~n4p<)D>n$_mm@o!d8Bi~>D5t6`P+rAdNIARPFcVEn~Dg2 zz1+7w)*cv##&z6fjNTNVDAH=nkC?k8Ki(lrQnOJkC<(YIRfG!(}y zkz|VSEE`f~fGo$2Ep^T!`FO{Z1S>@-@Q_gSU`2eJ_N2?7(IVqc|9*;+lQCSU)5_vv zW7}(alEn072rv0C)||+cduKCjS#^wuWIK=6p$5x#)*cyyeN->8O&DZ%f9ci-zG% z1-=Ti(S5U3Ibm8HSvVfwje%%`BEPDYhq63H|9zZ3u7?X62)Nu8(X z+tV~hfRD@;^B1w$gip~T?!w2mW2$Hb@1bGk<>v?+&T%bb_bOk#CFqHp*n-Y>44vWT z1QGgBb*8#nG(wE4WUrlhqTJr}Tb^s7djtC!SH?>11gfSv)nrtK!?m-t1PJGapQ1nR zkReKj3EeMfe`b0fnY~WQZAYPxJT|-y1`Rg|m%h21C>NHB=wY+!oQuh!BZjaEmy}V#{^e<&)r~2?Vh%^(Tty8Up>u17J&gH z!077##$#`gAMj-?OYFyXGfc6ON-q6?XZDk;fE(gD*^w}mUOje4O#17+JbhoCU5Z2p z0ZkaZZY@x3+SbH=#?^Xpn)nB1E{nk3ipT|X&^6+R=n6CqEOa%)V{kAw0sy0nK*6B8 zOUSU`$zzZwD5~ZEZ%$BKq2lqP#sD651-#&1pW69i!W4%oX%X{BtooECT;Tqt7k1LC z7QQ?#<~O6=0@JcVH5Q<2w|?_yXS;piD@}?6Vowfnn0o4-PnRpbY$)3$&*_!Qc6;fV%IvIa_RpG3YQYjD- zk$$s=v-CYSL|3&xeK~?d!|}O@IfU_;dX~$e$p`#O{T%<+=7D$Fr8N)R{PmiE!$QM1 zA*5_scdM#v#=8%7yuQ{}6iA;Z7p*rgIlZ&Le+_T^o@=F|j`tH$^D9Drte79}h73+m zGlXE6@0cl;>SXMV1I07YiI9rP)dYIpALsM6THK=;ZwoiV-{R+KV7NQv$6$kW?81F> zaSFx0A`Y8hM?1KB2Pw}YStpAV_=D3QlL+aL@qgH#Z%7BfwH&2aEMq$U2 zJXZV&^4sm+G#$|-6&sJQSzmWW@-d)EVehlSCBj{zWY+^???D>sD8=$QO5d-O~9;Af!zz&{x`ELtwszjn{zQP zTR3?D*Ui{FSkIkA)74-m=V%#6M8VyV2cB4n%FHpJP4D*?Ijx?5+>I$0+`c3Tt|&as zPt$N@@DZv_>@3}JBuq5lwLpzim;k6D*g}8M5DVzxTrawemJn9HAwjBBfd53T4}Rng{Qtb`er>yWVWG|*Q)+Zrb10R zvqnPq*eNSAvuno3MK|oKB6W3zRZq(o3wx(wKQ9GQlDy#%_#k{h@eaaSKGc~>qBZy7 zp5ZLwBtqcmics^*aB(jk3G~MziO_x7Qee>A=dCP=)#E2!#Un#1{UcftEa_Ai#O0Br z8__0mrufu&`w>_TQ|Smu~#E@^r!;OMls5X+5T>fdVT z52d0v766aoG1A7(#RlZI7$uV;>^57k>EkE!=2>z%HA z(axTA(lOkHqkR8KmwE;Zp5;W|b6L$v?I7G-kUC^bMQICKf&HgcsBF=PZ&B%dIT5u6 zfV?G7e`Ux&FNp50WXpD4l>Y?e+c&1F7QH2u9x(d4oNOc{x4$xfzY=16D@7+OW-sA6 zUJ{c!DMd=@n+%(~a=bFL&~9vN`J6P)9;|@T9d8+SWcsV7g;k&t;5g0nqa95LIJ%OX zVdSLelCjB_t2=t}+48v0h*9Tja?2B#oYR0ZYK+vP=SF8)h_r#xKf~zr^Qx4szksWf z^krdL#eKsi1E*%8`eXJKhOi|T#JgZzRxU@~6!3GPSf{+H%brLMvRMFlkUzGs-X!D! zmxV2@wfQww5O4e#Ql;^I(hTf`#+e8_R1YC01C#m4`SH4?mUf^N`J zWkU%fruQ$)pxry7e3AS9wqfgA?nlNl0K?d4y8wM@a18fz1@wWF^TH;9I-FgJ?ztx5 z-P48`b)@=*{34Ame7ei0S*QK!Ol2Z;H|ME*Ry2A*+d_U=+}?wPF>{N#y>2=Xdd7Mt z5nFL(`Si_E+OJgWA6mUtSj)SY6&fnSQT-M@hZcofv=){T8pq=iqlcyQQLYgQ^F3aJ zV@`%!0&RqhyOQHi%hpqX7%;9(`$YI(K%BHE#2t>oJ~w?c*VbIM2|n;@XE;-?$uqxM zG%tSV%q<_x^@RMGl(y38+Wl6}B*%LJz8g1R{ zI@vqanf>QT*ah;;0*1}^R^d;JWV54InW@hzBW0jDXI!%`6`V+Q&iVoQbzn|^k(c+) zFEPSTjyfCog*vbG%3Pl8R_>eUt&_s#I45n?T%Z<5(n^~)ySq${!5w3*M6XqKvTIi+ z_on)h#%eDQ6P4WM@UPQQAs`NCH~;!Mb;*XzBT2L@DN4z=rWh=(YIvd>n=&njm+2ad z@mpp0{5zjs^3WCu4hXg~z2~cAWp-b+?%o1#d-naS7B_fYJ%EHezm7F=m7T#tNC5{R zbLUf9E!4>Yz~5xFi{ZsDQ(2V8-w9Q`>m-RfD-)k{fCCnB-A6%sO@`lUn+`fi>RNbL zMDEzmW+nA&Tv(s*+Lzl;7Xw!ter1){VS!?LGCh^3PMiMFXYm|so8(v~&t^dl66g4G zlWks`Wf9_1^WYY$`Sp$eGmJ1g+J}(wn?r4C z;=s^#p^qNGHjsV+wI(}&M6fNASdnDcP51Hpl)VY>S@96;0dv)X3m+pL*D%WJW^9uRR&;T0RUL{58!SC5ULd5 zXa@kOs`3B`0RR9tKo|=fKyZ(7-8aW*+<({r0{877P;qy+cd-QkZ~%Z01OVLoFG3gfGZp< zasW0t77jVq-2j03UPrh%SpVqiKY)XahmTD_h(+|^o-Y3gfQ5sNdk;8x1i1Ga`Ddj# zxa4^FtilA36?6#MtUM`1-X>EPHc+v@(CsDS5Viic@!Q7h9h#cv<^2Q<|M36U`~d9x zwcz0s+!Hy-?|+N~_?Ldq^^XKt*f`|4k6DE&6!6$6MReHjz5^cKQ?SW#$N}4T~nWMQ}B z8>phKx)1pumEw*^KQlch_kDQ>$SUb*lt)JK zn7_X7dOAEI392@-T~r~_i8uf|cM*XKmC7&yTtJWoT(KBPbkfYwB&bHjj`ll zLw8%|1-`SiT-u+%gKIhbfav8kos5`P+pk>B=Pns|Zu47Vn2FWRJ3vEFX*C%Q{$WFv zORZgisd`Gw_`LfI5Od|Lf3*4E@@7OwmKHL^Zdyfz7%(lrah$J$`}%RHavjEgw*OpH zr%m1np~_omiy(vP`+7VsF3cZL3CcRt2dZ+vdN-rA_v8|;ASxo2t#R<2l~Wcz?+bL? zaRft+wBJ-wn@-gx0D{~PS`OC7dJ)6f5-_95Wc`*S_AECUft|#YR%p|T0e)>-8_yQduGsUu1)%?j`+!qS45JJxVEsIK2@~spQt|cZy!2l8w29 z8+;8+OqUMUknBHIY&vOCW-vSevG^i}m&e9?OdDqDXe31%@y8}_A+WCub*feNHWNRG zv-y+{O|NQF^+E~Y&;MJULkYgEuse64oD||_Ao5*4 za#CjLz(nF<{l_1p9=LKE6I9aZr}XqpEIC*-HuR! z^-fROPo|%I(0*&>q=x@Ju@#J?n;tw51OlhY+F~GSEThC z0d)VzC;Vf@M5+z}YVNL~2|);I6X z607|}c{Y2r55`~n>85cOH@`d#cSfJ;(g~UBNLwn${d)$(!~;-wBI?A=hzv0$;;~hl zn4$8c*E6!_WCO+3WGt$EK7X=PJue3L8l;FLwG2r|+G0M+LYd??!bFH1LP?G-Ws7bQ z=H>lMr%5tf8<@6UGmYILvLOWs#dOX8we`Z$W9_tQ>zg);0pSCGY!kcqAjIRfh(jb`!OfqJ-modW}>M{c!5sP<&?xKaf0(XhnqT6zy z$6BQukDE#X{;_M(XGS6~B?wB>UFX8sj^`%5ed3T-VwdK~C&VNXsG3Xf=VjuAOuqwc zSudBKYmCGB6^%wC_V*`~^JD+XG{oUk}PE=?%G}@qRg5z&n^+5FGsOv3?H5 zs5=0N`wZ+QRf1X{K;(?N5v9w&N5}Slq40phkBQDr_k_>21ZJotjo00y$_iVTz#e7! z8cPZns+@FMig^sr_r~AY!5mwEg()GFO{-EH}Mt#4^i52JY2COJ?8KCD?PTDRQ|Za)f0u6D?W z3Q%h+z)TJI;OZ*2c9e@!u!&$j7(nG2d_OKeRc|LxwtXO)!Y!QX#kcpIZDQSTP$4c~ z{htIlbVbE2!XCK2(qM@JD}5PZf?id&U%7a>ZPQMp%e{IvoO+rFVUzOm=JqL)bx0L}(iJ>)*8BJ7GwCC-DR!pYW90pGrjlv}8ZVSv-7 z#f1*z&lI^4L0n1bF~meWRT$>>i-Pat*J!EPu9bJn>#OdIJxk+Do3=@7+`Zp?xGZS5 zf+$Gi3t9h-D3q@sN5h^TNYB{P{63Mk7_g(8giOc?N^akFbc?FzAOE;Ro!#ORsvU-m zJGSEfkm_Qcf z?`>jk!Xt9hGl+CVRbE=9u$4Nq*Yi8f-Ym+?eX9As73;?3X|5)LFVtZcE(6Rq2L+v> zQd0ZB%7Z~39D&=HiOqGMJM=pK0O$L@}M0G?XvwFHiQplxcd%8*R`8)Tc1pB>u)==bT0_l~|Ws$0}Ug z+zT3afzGv68nTchzb30R7%hs02_3;(`6KCfLfdJ}9e}d_VgS?eqJ3|MGvYIZ5-LYOcH(Nc+p+CGa|C6 z+tkfy-{ukUYp3gI$>^r2XX|7CrGw-5oev}zoSLiDno1tkkux_pF4V!F53YUDh-)d^ zJ3vItIO}wQQ$`-*crwgn6!*y!nVgyy`=+eBe_+zfaznpS80_L^Y1F4-Y2 zR2qJYn1KyXk3|ptx`gF%rGPgAuw)UcqNl72mS_7xfL3Th0B3IW9moDk1{#I^fy@h# zi6DKS$i#%3PifyaoFwstt<^m=v9)YSPoo9?>nV$-dwUg2$A3@J29m!rX|<{OWnDQ| zJDYGARfbl)Afs*31A;Bqv_^y-qy-(2(@#|Sg+?NXTJGf1-Ag>XY6F6glGG{Z&tNoT?#WzgQ{WsHNoIl_`nR+dMsH1p zy`aBM!uBzy_1!D5r#M3_I$h1xYaIUk!V z;8nDL^C0OA_sjjUt0+88*i(^9gUhy;po0BZQ9}7(>v>4?P$9e}*uG*F|}5jIXq!jZCUV&>{Lo^%8q)*J0@Fp4E;xmYzC*|LpH0NUU* zTJ%p?`z4XZes7nM%HMI|nF!6CPd!=Yb7kNQ!S0Co(C5-J&HsD(T$^n)p-j&b;4+kC z8IN}PvhZXY9VXgNI>s5>sMP&Vv@FA5r0Qv_)x3ejyu~wMWASGu6UIK`sF_)m)a(+1 zcj6rMicB$WbC76ex@!6&E&VG#lky4!bz9Nwr41oF>pVES=`a1Va0hqQ1&-w z^f;{iEOw>KeE-QV|2E^$T5*xGTm!!**cUhc8JU5gwLzlCS{05bet6S}`or=;lRH4u zib;b0DYGL9{?I6|Mw~MED~Wi-W^m3ykqyQy{=FYciAsi#(;yat* z%+yAMrghs@bR8--xt4Lu(EQ>$#gmF6Em$jAIFcZ_fqR=(%kbJP%J4A9ED$A&kX3lZ;&;f9&<~y+4*sq z`P{AG+@I%I6GP#j4op!{l61+M#_OhMrW zVLrL@K)uZ~h6UZ|=1GrMk0&=^D0h=q=Z%+#HqE8Y$W_evE7rljeh-xIc4v)*dDpL~ zEschlha6bS3&dtQ%!lbVe&gTOVt6j=C?mlN<-X-Ci8@DGa;|RqNCYJpXZBHup8D)m z9J5UJpH=57scwt+8gW0lt}YnLheE*VPJH|Q`*vYc$!o>BO{h1vV}(z>6sNJVBtQq+ z*F+sW`IQglv3zo5w4(TW%pjhEdbCs~ zxCNa{&)UAXXw{`l4?SH9g}yy#&$86ac(tEIMjKyN^qBhO9cuhw?eJT`>_SMux(sk( zi5QxS{rG>>h_&%NK+V_$gw_zd#)5ZHt*yn}KOkfjaT}q4YUA6km1)*-*{ZEdk#<4A1{CCwGaszpWfd z@U^vq(*IDWC)`2o`>qbZj7EHIUTA}2!*aM@QUuyqVig1llu3C>ElZdlSn_gj*rNvi zlm5Zlo&&tdVt%^GQ$A4Pu68UONtQ_&ss2xA&E~uQewn0hl zr>Lndwl5zVZENceN@Fy1jRt&8YVCzJW6qzWq_8|@ZHo*|Qu1~8+3^4RK-4LCCy1q- z?Wt@jn5)BX5^;=uy<;SvSiDFM1yx2~gA)-=0-i@>syE~d)xH#Ak4jVeK!MVA1=}i( zzjg_F2iAPcycL!P94JlGS6KbuwC@H_Sss&Mm}3P@^)gz2|BgDA^eMYyAW4H(j2lm- zp9Dm0ULjX?ybhTS(e*rb4i4vk+00Wb=tw4y`O0I@ZNTE~tDLbH@jcOb(i@jr9P&(0 z64bsbx1Moe&did?m_u9h%zmNv%8Vy{Fv%^(j@i6~J)(pX%q`~cJa=5Wt}+ZvX1%B$ z*#CI&fAT1V&k3CZF2 z_N>4bCGMDKbnj_i*})(aKf(gEwZRd7FclT;Y_Cr5ZKy!&9~;c~Y(KVV_!U1iW^}Rn zpuh($qUpFW#LFTsQzPb?-+lN=VhU^RmA8qs+LghQ*rf@F#0pG-!hj`d(GZxM(L=_6)NPLMfA{ zYUvHF?fbWaI!+?(2|_DH%CegXi`d)B)=7;?@Xd$naq?OKLkNY9jE-sDCa+N2JRjE3 zkz32m(BX7IYwMb(SupSA=786YI!@kx#oA7+bs+a>13w1GvO{X~^a69<|1Q_3AAO(< zo}O5IM<6O7jSPAR;`-rY*QWB^Iqg4}(tmfehV@BG$^fbB*QO?6kW<^ohpxDpQg6@k z$DW{e*JFPjDHS-|7WNlitA?O_hPUaFAH>_s{g@JS1bOwp*$MNqr;*#&%V^drO~##? z*z?XiF8%(K4v1d|D}@+5fTSZ8e{HJxfQl-=vk`=+otchK=A0+qPc zbU1cob@{_09T6-akW@F0(a1}I1PiIiLS$h~ZW78b>sr>RIxRN-z_LqI#M7;cH(zXG z_2>#Z-%xpD1fmkS9)7@vg_r!B-oP2A#Ah7iu}&U@34gPkn}XM5CpXt{)^Ja3f&l4c zv7th;ZU#FKD(M&|d^A1Dhh|h{lr#O?vq8~A_UwNnZY}D z{rXfqfaD27MRF==J`2WPH}5=@VFGJ}vy9gERNfVKMxlG&p-3fm{nP=(5ER8o8s@@dEkEO)X~Hhp zZ*$Tv+S>wj8nyDj1C(e<$PZeTFL}w<4Huw85dyaTtHhJ%0upED{(QIS#X%O$*d+^Y zYkre@*$Jg|=^rl6&f6T zn)0UU8BTW1QrV6EsSN@aSG-eE;d3K(v|<}zh$0Fp{;h;c$!9Ew!5WT|9$Avi#j63D ze_ap5jhRwr!Y{J?|IL8nZUMargI7OV7M7>L3pbJ#XLhBBmT~K!(Ohn$Are*td2G-q zMlHVgLYndJr_B35yn!VoI6e9+__}jp?RgY8tPgDmse@&p0RbO>K)&3x#U$JTcAlFi zo;IwYMf~vHdL#Oy>bk4OU2;d4`!FSFC&-Ia=m&!Y5zXjJQd_&Jl|4C%_0nro$5Xl( zVrEMy6?h>qlPrJW{c=dieAc0v1iRB^hS=wJe~6~-ZN)>C*qno3@J45)?-3tkJ7Cbt zTcz8IpjtKtcdz0iyUt_$#b%Tsk4T>zh;O&)<%kn0{VPOBx%j)2g z*owEn@U|VNtos3$;(d50oSPF*6b!_w!ANyd%E3JwlQe*#LB2ZKE)%FZJTg+J{7ND41c8OT@9_4r5NV5bO#Zwc4^$M z>+rU3Cv-Su+JMM1@$YFv?M17(dhi_pVRoZa_c@f3h^H&iuh}$I+>JY$y7g~OYsDB{ z2MyGZ1IoJ<$3sj$#IZ08c8ORb7T^aSfM=8p7TD~ioYcsV%q7xND;wXPeOBtynZxAj zmY#Dzz6=o*N2q3aT%zWO3HtrMy%`s1vWceA5RZ1|;Z^3FQK-f%x+Lc6Spq$AB3^VbgWO8DhB>Jwx4Cmz5EMm)9lO9TVkBqg~k z=h8)ROs!h#AB>P24rMU8l+fuYR6I8qx(X9`OM|As5XVp110=iSsYj6qjyL|pB%U^0 zENUAwTw;IUT6gv&Cmqf>=F{1vtt>VUM{c?74s{LHPin<2r9RWqtNcRL)&k$pr~3(R zFr`D8P!%(ddOlax+L&H-$bNCvU^~_B*0-W%JiPn{!FH8dRv@qkZzI!h#wXgVYU7@F z?)zOZ4R3Z6wl0lOGEvmB@_-^sKyDI9L&_HBU`4wJtnBKqT9s+i&8KR?o89WyVq4)a zwc1I<&7+mq(IcxhN)BeS?xvcpCmG>^@4LXwifW@!m$Z?VG56X?moio%TE_KLE+PkS zAb`}~0kB@*2qV~Mr1U9V{pIXdTv&9ie3@U;>re*ebV;`@QDS)IpZDE-6Y| zoNLfx49}z)<&Dqvujjh%4tJ@}V6~{?k3+eQy(ophWUDb)2-z z?9ceiBn(6Jbg*i_i#9mk&JPp#OfQ9 ze1dXkH=g+DcrllIK4HV!ia=jHns(>9*Z+((u!^!V*Nwg?Xwr@^txfEQfVMZXsTN0e7xnGnrcjyl9cl zsG_GYp!vxEGE93^C^Xvp4nVzEzeA(1F@5OpMQQYCAEWOp>$ymEZ8NWb{c3;YJw*Zk zpOK3PL3vWni7SdJMRwSxE`*YjI~>Q66|Mm`Zr`kZJ#XWzc`_4UZMw-E`uwf{wK(YE znh9}^5LHXBIU6Yv1#Xkz`Zgx?;O6TxN``k=B94Ce!E81J%?v<2@ z;77?aiRW2j5YZ+~fn>LUw}{OVXemJrFZFh5%Euj#{osKN&-pgl^E}p^ah}Cu^$#)KgAz-m2hN zdteIx^G%_4IbWU?u<<+i(0c^0vM{(}6s=GOU!zz`u#1dcZ&$r3X<EO{wH(I_{@b`SGCA9StOMB%vcjuq*AiuUU0J>ONB;u#yLV9TiTUNxT>C z7&m)L98bBYk0xyTzMuijBNZ?$sS=>jw(+HW7+4Tr7JJRvm$2#Rq;#trJak^)4X*<6 z`yJEobW>}SlRD=RZXbVkS)9+Z@Be`talQMq^>5R)uh3dzS7-SP$(}RQ2@G=oV3k*D z#3;l>u9Q;`?{>drW7@D(y5SCx!`lGAypQI@-HTVeXn11`=mGn}1;ke={Z0P{+o-Ez z?03V_X&#Xpsd9(<8GqIJ+*d8J1!nyCjmKq*ew@F9M3>~t)xF|=(FVYTuDob}?62|B zA%o6M&K$fEN2ny>V1=2suO9+)-9mfzI@$W32=Exv^$d zveZ?DbcDjL8mXqLBl3znytVEQQ2vLDWIY~*&9!#*iT}6~MCwA-h`qaP*0YKQu8sbX zG8?A-=Nlk09kSS?P?Yzin33@NXf${wDD_1)(@V=cfV6H@cT9L_?0t2*cTyi(_+@`5NQQ>$k|LiKU`pZSzZWQ?4J#5Cgu3h90KIDr6qD@+S~{d;97$ z+zl9gcyid>MV;WK#&jtM8~c;u#w~{Qy?WY45idazxqJgQ_*lg#_66?|LO_^Oc2!JM z7~Z%{y61&l`E^5e={VN7-4Rz#9gs;%PB;e&BsfNjKglaw4uQOcBxZ&-?rse;+sTfL zYt&^xGP|}uS}0$U_WEKDQTci6Z)B4s4$FNjb561w5UWhU9jw>1zFoDcH)?CnNFz&M zy)QLj@6$ki4-WQ9|EHulU30%>Zz_IiH(DZ7tl6wN9CyxEcrLB$27^mjfIsy;*i9s# zeNSF`p=w~Yia7XKQL#fKbRa_V6{iWmJ_iEvlZ?YMt6y(ozK^2v?qoctJ{pc9O^N}HaEc+L)NPA3z zpm48bsWs|Bk*(zX)lMlNoG_bjwo^n9)aRHhjY(cIzG}AN;|BX8g9%Bhk1TQO5!>yf znF-y2ga=pDQVze>w6CEw+N{hX=PlHrkhC!R&vyW>7iR%46&juZZz&OD(Qfd>9P`_^ ziuYBv&dMR}360xFe#k_F1X(-imT<-3IK$Tq2`*pn#At+X9SfDR$#QCD!uzymP+_UE{KIUV}@hab`9T^FD{XXzbyh48J$2=wF}VRK@l12&B%m$7Q&C zm#;%gO$d7nSm-lEg| z(uQy@AvUn5PkO^eG0r}6)-<@ElvNQ^E!=Qb#rnGO69t|VBrpz#KKc{o>y)13sm9ky zMSt|aB;@;yjVoqU-vKBL@$|Aqi5Yj8k2uSZ`Kk(60>n*LH8m%8S=jwO<>b^9`R1p^ z1_ZE{Jsudhh?mLG($wRazZ>gjrT#;fsdu4cjr10OS#!$tH?32=hnz~Z{cnDoCR>XK zXj`6@BDsBKVRlSnw!*+VZkJhnGbN|IX_VDETL&ET_^#<&7tD rh%6xSIr%N!b443IW;6Ufd<+Zl3K(w1e=2i3_hsQ_<;7F7yQTjHP^>zk literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index 3617a063c..a886cbcde 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -15,13 +15,12 @@ Date: Sun, 24 Jul 2016 19:12:54 +0200 Subject: [PATCH 016/103] quito imports que no se usan --- .../modules/messages/SearchUsers.java | 21 +------------------ 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index eb81dce12..7e3251cab 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,11 +1,7 @@ package es.ugr.swad.swadroid.modules.messages; import android.annotation.TargetApi; -import android.app.SearchManager; -import android.content.Context; import android.content.DialogInterface; -import android.database.Cursor; -import android.graphics.Color; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; @@ -14,26 +10,11 @@ import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; -import android.view.inputmethod.InputMethodManager; -import android.widget.ArrayAdapter; import android.widget.ListView; -import android.widget.TextView; import android.widget.Toast; - -import org.ksoap2.serialization.SoapObject; - -import java.util.ArrayList; -import java.util.Vector; - -import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; -import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; -import es.ugr.swad.swadroid.model.User; -import es.ugr.swad.swadroid.model.UserFilter; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.courses.Courses; -import es.ugr.swad.swadroid.modules.login.Login; -import es.ugr.swad.swadroid.webservices.SOAPClient; /** * Created by Romilgildo on 17/07/2016. @@ -49,7 +30,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.list_items); //search_users, list_items_pulltorefresh + setContentView(R.layout.list_items); setTitle(R.string.actionBarAddUser); //users list From d77ba652963bea706bb6dfa846b37983bf58feff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 25 Jul 2016 10:38:10 +0200 Subject: [PATCH 017/103] click sobre fila completa de un usuario --- .../modules/messages/SearchUsers.java | 26 +++++++++++++++++++ SWADroid/src/main/res/layout/search_users.xml | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 7e3251cab..befb0ab79 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -2,6 +2,7 @@ import android.annotation.TargetApi; import android.content.DialogInterface; +import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; @@ -10,6 +11,10 @@ import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.CheckBox; import android.widget.ListView; import android.widget.Toast; import es.ugr.swad.swadroid.R; @@ -26,6 +31,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private String[] receivers = {}; private String search; private UsersAdapter adapter; + private CheckBox checkbox; @Override protected void onCreate(Bundle savedInstanceState) { @@ -37,6 +43,20 @@ protected void onCreate(Bundle savedInstanceState) { lvUsers = (ListView) findViewById(R.id.listItems); adapter = new UsersAdapter(getBaseContext(), UsersRepository.getInstance().getUsers()); lvUsers.setAdapter(adapter); + lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + + //checkbox is checked when the row of an user is clicked + lvUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + checkbox = (CheckBox) view.findViewById(R.id.check); + if (checkbox.isChecked()) + checkbox.setChecked(false); + else + checkbox.setChecked(true); + String idUser = UsersRepository.getInstance().getUsers().get(position).getUserID(); + } + }); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @@ -168,4 +188,10 @@ private void findUsers(long codeSubject){ searchView.clearFocus(); } + + /* + @Override + protected void onListItemClick(ListView l, View v, int position, long id) { + super.onListItemClick(l, v, position, id); + }*/ } diff --git a/SWADroid/src/main/res/layout/search_users.xml b/SWADroid/src/main/res/layout/search_users.xml index a886cbcde..5cdab8c68 100644 --- a/SWADroid/src/main/res/layout/search_users.xml +++ b/SWADroid/src/main/res/layout/search_users.xml @@ -43,6 +43,8 @@ + android:layout_height="wrap_content" + android:clickable="false" + android:focusable="false"/> \ No newline at end of file From 2b225c434f2f6d67594fdb3a43497e21bdd32974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 25 Jul 2016 21:46:13 +0200 Subject: [PATCH 018/103] request findUsers --- .../ugr/swad/swadroid/model/UserFilter.java | 24 ++--- .../modules/messages/SearchUsers.java | 88 ++++++++++++++----- .../modules/messages/UsersAdapter.java | 2 +- .../modules/messages/usersRepository.java | 14 +-- 4 files changed, 79 insertions(+), 49 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index 2dd3572d7..716fd89a0 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -37,7 +37,7 @@ public class UserFilter { /** * User identifier. */ - private String userID; + private String userNickname; /** * User first surname. */ @@ -53,19 +53,19 @@ public class UserFilter { /** * Full path where user's picture is stored. */ - private int userPhoto; + private String userPhoto; /** * Constructor. * - * @param userID User identifier. + * @param userNickname User identifier. * @param userSurname1 User first surname. * @param userSurname2 User last surname. * @param userFirstname User name. * @param userPhoto Full path where user's picture is stored. */ - public UserFilter(String userID, String userSurname1, String userSurname2, String userFirstname, int userPhoto) throws ParseException { - this.userID = userID; + public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto) throws ParseException { + this.userNickname = userNickname; this.userSurname1 = userSurname1; this.userSurname2 = userSurname2; this.userFirstname = userFirstname; @@ -95,17 +95,17 @@ public void setUserFirstname(String userFirstname) { * * @return User identifier. */ - public String getUserID() { - return userID; + public String getuserNickname() { + return userNickname; } /** * Sets user identifier. * - * @param userID User identifier. + * @param userNickname User identifier. */ - public void setUserID(String userID) { - this.userID = userID; + public void setuserNickname(String userNickname) { + this.userNickname = userNickname; } /** @@ -149,7 +149,7 @@ public void setUserSurname2(String userSurname2) { * * @return the userPhoto */ - public int getUserPhoto() { + public String getUserPhoto() { return userPhoto; } @@ -158,7 +158,7 @@ public int getUserPhoto() { * * @param userPhoto the userPhoto to set */ - public void setUserPhoto(int userPhoto) { + public void setUserPhoto(String userPhoto) { this.userPhoto = userPhoto; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index befb0ab79..5dcff5d3d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -2,13 +2,14 @@ import android.annotation.TargetApi; import android.content.DialogInterface; -import android.content.Intent; +import android.nfc.Tag; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.widget.SearchView; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -17,14 +18,26 @@ import android.widget.CheckBox; import android.widget.ListView; import android.widget.Toast; +import org.ksoap2.serialization.SoapObject; +import java.util.ArrayList; +import java.util.Vector; + +import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.model.User; +import es.ugr.swad.swadroid.model.UserFilter; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.courses.Courses; +import es.ugr.swad.swadroid.modules.login.Login; +import es.ugr.swad.swadroid.webservices.SOAPClient; /** * Created by Romilgildo on 17/07/2016. */ public class SearchUsers extends Module implements SearchView.OnQueryTextListener { + + private static final String TAG = Constants.APP_TAG + " SearchUsers"; + private SearchView searchView; private MenuItem searchItem; private static ListView lvUsers; @@ -32,6 +45,11 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private String search; private UsersAdapter adapter; private CheckBox checkbox; + private UsersRepository userFilters = new UsersRepository(); + + private long courseCode; + private int numUsers; + @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,8 +59,6 @@ protected void onCreate(Bundle savedInstanceState) { //users list lvUsers = (ListView) findViewById(R.id.listItems); - adapter = new UsersAdapter(getBaseContext(), UsersRepository.getInstance().getUsers()); - lvUsers.setAdapter(adapter); lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); //checkbox is checked when the row of an user is clicked @@ -54,9 +70,11 @@ public void onItemClick(AdapterView parent, View view, int position, long id) checkbox.setChecked(false); else checkbox.setChecked(true); - String idUser = UsersRepository.getInstance().getUsers().get(position).getUserID(); + String idUser = userFilters.getUsers().get(position).getuserNickname(); } }); + + setMETHOD_NAME("findUsers"); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @@ -112,7 +130,7 @@ public boolean onQueryTextSubmit(String query) { showDialogSearch(); } else{ - findUsers(-1); + runConnection(); } //remove virtual keyboard @@ -131,16 +149,54 @@ public boolean onQueryTextChange(String newText) { @Override protected void requestService() throws Exception { + createRequest(SOAPClient.CLIENT_TYPE); + addParam("wsKey", Login.getLoggedUser().getWsKey()); + addParam("courseCode", -1); + addParam("filter", search); + addParam("userRole", 0); + sendRequest(User.class, false); + + if (result != null) { + ArrayList res = new ArrayList((Vector) result); + SoapObject soap = (SoapObject) res.get(1); + int csSize = soap.getPropertyCount(); + numUsers = csSize; + + for (int i = 0; i < csSize; i++) { + SoapObject pii = (SoapObject) soap.getProperty(i); + String idUser = pii.getProperty("userNickname").toString(); + String surname1 = pii.getProperty("userSurname1").toString(); + String surname2 = pii.getProperty("userSurname2").toString(); + String firstname = pii.getProperty("userFirstname").toString(); + String userPhoto = pii.getProperty("userPhoto").toString(); + Log.d(TAG, idUser + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); + + userFilters.saveUser(new UserFilter(idUser, surname1, surname2, firstname, userPhoto)); + } + if (userFilters.getUsers().size() == numUsers){ + Log.d(TAG, "son iguales"); + } + else + Log.d(TAG, "no son iguales"); + } + + setResult(RESULT_OK); } @Override protected void connect() { - + startConnection(); } @Override protected void postConnect() { + adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); + lvUsers.setAdapter(adapter); + //message about found users + Toast.makeText(SearchUsers.this, String.valueOf(numUsers), Toast.LENGTH_LONG).show(); + + searchView.clearFocus(); } @Override @@ -170,28 +226,12 @@ public void onClick(DialogInterface dialog, int which) { builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - findUsers(Courses.getSelectedCourseCode()); + courseCode = Courses.getSelectedCourseCode(); + runConnection(); } }); AlertDialog alert = builder.create(); alert.show(); } - - private void findUsers(long codeSubject){ - String[] foundUsers = {search}; - adapter = new UsersAdapter(getBaseContext(), UsersRepository.getInstance().getUsers()); - lvUsers.setAdapter(adapter); - - //message about found users - Toast.makeText(SearchUsers.this, R.string.users_found, Toast.LENGTH_SHORT).show(); - - searchView.clearFocus(); - } - - /* - @Override - protected void onListItemClick(ListView l, View v, int position, long id) { - super.onListItemClick(l, v, position, id); - }*/ } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index f9a17a670..c245b757a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -76,7 +76,7 @@ public View getView(int position, View convertView, ViewGroup parent) { UserFilter user = getItem(position); // Setup. - avatar.setImageResource(user.getUserPhoto()); + avatar.setImageResource(R.drawable.usr_bl); name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); return convertView; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java index 325c0af1d..90a338037 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java @@ -23,18 +23,8 @@ public static UsersRepository getInstance() { return repository; } - private UsersRepository() { - try { - saveUser(new UserFilter("1", "Boyero", "Corral", "Juan Miguel", R.drawable.user_photo_1)); - saveUser(new UserFilter("2", "Cañas", "Vargas", "Antonio", R.drawable.user_photo_2)); - saveUser(new UserFilter("208", "Martín", "Hidalgo", "Rubén", R.drawable.usr_bl)); - } catch (ParseException e) { - e.printStackTrace(); - } - } - - private void saveUser(UserFilter user) { - users.put(user.getUserID(), user); + public void saveUser(UserFilter user) { + users.put(user.getuserNickname(), user); } public List getUsers() { From 8ecb7eacbd52ffb6af3d1f68e47b3bf6ad9e0337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 26 Jul 2016 13:21:34 +0200 Subject: [PATCH 019/103] corrected bug about numUsers list, loading screen in findUsers --- .../ugr/swad/swadroid/model/UserFilter.java | 11 +----- .../modules/messages/SearchUsers.java | 37 +++++++++++------- .../modules/messages/UsersAdapter.java | 14 +------ .../{usersRepository.java => UsersList.java} | 17 ++++---- .../src/main/res/drawable/user_photo_1.jpg | Bin 8190 -> 0 bytes .../src/main/res/drawable/user_photo_2.jpg | Bin 10210 -> 0 bytes SWADroid/src/main/res/layout/list_items.xml | 21 ++++++++++ .../layout/{search_users.xml => row_user.xml} | 0 SWADroid/src/main/res/values-es/strings.xml | 2 +- SWADroid/src/main/res/values/strings.xml | 2 +- 10 files changed, 58 insertions(+), 46 deletions(-) rename SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/{usersRepository.java => UsersList.java} (58%) delete mode 100644 SWADroid/src/main/res/drawable/user_photo_1.jpg delete mode 100644 SWADroid/src/main/res/drawable/user_photo_2.jpg rename SWADroid/src/main/res/layout/{search_users.xml => row_user.xml} (100%) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index 716fd89a0..a9c70fc45 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -19,14 +19,7 @@ package es.ugr.swad.swadroid.model; -import org.ksoap2.serialization.PropertyInfo; - import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Hashtable; -import java.util.Locale; -import java.util.UUID; /** * User data. @@ -95,7 +88,7 @@ public void setUserFirstname(String userFirstname) { * * @return User identifier. */ - public String getuserNickname() { + public String getUserNickname() { return userNickname; } @@ -104,7 +97,7 @@ public String getuserNickname() { * * @param userNickname User identifier. */ - public void setuserNickname(String userNickname) { + public void setUserNickname(String userNickname) { this.userNickname = userNickname; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 5dcff5d3d..c2cf5fcbb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -2,7 +2,6 @@ import android.annotation.TargetApi; import android.content.DialogInterface; -import android.nfc.Tag; import android.os.Build; import android.os.Bundle; import android.support.v4.app.NavUtils; @@ -16,12 +15,14 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CheckBox; +import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.ProgressBar; +import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; import java.util.Vector; - import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.model.User; @@ -45,7 +46,8 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private String search; private UsersAdapter adapter; private CheckBox checkbox; - private UsersRepository userFilters = new UsersRepository(); + private UsersList userFilters = new UsersList(); + private LinearLayout progressLayout; private long courseCode; private int numUsers; @@ -70,10 +72,15 @@ public void onItemClick(AdapterView parent, View view, int position, long id) checkbox.setChecked(false); else checkbox.setChecked(true); - String idUser = userFilters.getUsers().get(position).getuserNickname(); + + //String idUser = userFilters.getUsers().get(position).getUserNickname(); } }); + progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); + TextView text = (TextView) findViewById(R.id.text_progress); + text.setText(R.string.loadingMsg); + setMETHOD_NAME("findUsers"); } @@ -161,23 +168,21 @@ protected void requestService() throws Exception { SoapObject soap = (SoapObject) res.get(1); int csSize = soap.getPropertyCount(); numUsers = csSize; + userFilters = new UsersList(); for (int i = 0; i < csSize; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); - String idUser = pii.getProperty("userNickname").toString(); + String nickname = pii.getProperty("userNickname").toString(); String surname1 = pii.getProperty("userSurname1").toString(); String surname2 = pii.getProperty("userSurname2").toString(); String firstname = pii.getProperty("userFirstname").toString(); String userPhoto = pii.getProperty("userPhoto").toString(); - Log.d(TAG, idUser + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); + Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); - userFilters.saveUser(new UserFilter(idUser, surname1, surname2, firstname, userPhoto)); + userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); } - if (userFilters.getUsers().size() == numUsers){ - Log.d(TAG, "son iguales"); - } - else - Log.d(TAG, "no son iguales"); + + Log.d(TAG, "numUsers = " + String.valueOf(numUsers) + ", usersList = " + userFilters.getUsers().size()); } setResult(RESULT_OK); @@ -186,17 +191,19 @@ protected void requestService() throws Exception { @Override protected void connect() { startConnection(); + searchView.clearFocus(); + + progressLayout.setVisibility(View.VISIBLE); } @Override protected void postConnect() { + progressLayout.setVisibility(View.GONE); adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); lvUsers.setAdapter(adapter); //message about found users - Toast.makeText(SearchUsers.this, String.valueOf(numUsers), Toast.LENGTH_LONG).show(); - - searchView.clearFocus(); + Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); } @Override diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index c245b757a..4ac5f6cfb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -20,29 +20,19 @@ */ package es.ugr.swad.swadroid.modules.messages; -import android.annotation.TargetApi; import android.content.Context; -import android.database.Cursor; -import android.os.Build; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; -import android.widget.CursorAdapter; import android.widget.ImageView; import android.widget.TextView; -import com.nostra13.universalimageloader.core.ImageLoader; - import java.util.List; import es.ugr.swad.swadroid.R; -import es.ugr.swad.swadroid.database.DataBaseHelper; -import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.UserFilter; -import es.ugr.swad.swadroid.utils.Crypto; -import es.ugr.swad.swadroid.utils.Utils; /** * Custom CursorAdapter for display users @@ -64,7 +54,7 @@ public View getView(int position, View convertView, ViewGroup parent) { // ¿Existe el view actual? if (null == convertView) { - convertView = inflater.inflate(R.layout.search_users, parent, false); + convertView = inflater.inflate(R.layout.row_user, parent, false); } // Referencias UI. @@ -72,7 +62,7 @@ public View getView(int position, View convertView, ViewGroup parent) { TextView name = (TextView) convertView.findViewById(R.id.text_user); CheckBox check = (CheckBox) convertView.findViewById(R.id.check); - // Lead actual. + // User actual. UserFilter user = getItem(position); // Setup. diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java similarity index 58% rename from SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java rename to SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index 90a338037..91e7b2b2b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/usersRepository.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -4,30 +4,31 @@ * Created by Romilgildo on 24/07/2016. */ -import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.model.UserFilter; /** - * Users list provisional + * Users list */ -public class UsersRepository { - private static UsersRepository repository = new UsersRepository(); +public class UsersList { + private static UsersList list = new UsersList(); private HashMap users = new HashMap<>(); - public static UsersRepository getInstance() { - return repository; + public static UsersList getInstance() { + + return list; } public void saveUser(UserFilter user) { - users.put(user.getuserNickname(), user); + + users.put(user.getUserNickname() + user.getUserFirstname() + user.getUserSurname1() + user.getUserSurname2(), user); } public List getUsers() { + return new ArrayList<>(users.values()); } } diff --git a/SWADroid/src/main/res/drawable/user_photo_1.jpg b/SWADroid/src/main/res/drawable/user_photo_1.jpg deleted file mode 100644 index 2f14b955aca2aaf409031811058fdb76541bca51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8190 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 diff --git a/SWADroid/src/main/res/layout/list_items.xml b/SWADroid/src/main/res/layout/list_items.xml index 446093f44..f8fee09c5 100644 --- a/SWADroid/src/main/res/layout/list_items.xml +++ b/SWADroid/src/main/res/layout/list_items.xml @@ -7,6 +7,27 @@ + + + + + + + Sincronizando… Buscar Buscar usuario - Usuarios encontrados + usuarios encontrados ¿Dónde desea buscar? En En toda la plataforma diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index f409ecf0c..2dfbb96cf 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -328,7 +328,7 @@ Syncronizing… Search Search user - Users found + users found Where do you want to search? In In all the platform From b932ac6c9efa7b88ab8327223abbcf7bcd400a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 26 Jul 2016 13:56:35 +0200 Subject: [PATCH 020/103] findUsers in subject or in all the platform --- .../swad/swadroid/modules/messages/SearchUsers.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index c2cf5fcbb..7380bb192 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -137,6 +137,7 @@ public boolean onQueryTextSubmit(String query) { showDialogSearch(); } else{ + courseCode = -1; runConnection(); } @@ -158,7 +159,7 @@ public boolean onQueryTextChange(String newText) { protected void requestService() throws Exception { createRequest(SOAPClient.CLIENT_TYPE); addParam("wsKey", Login.getLoggedUser().getWsKey()); - addParam("courseCode", -1); + addParam("courseCode", courseCode); addParam("filter", search); addParam("userRole", 0); sendRequest(User.class, false); @@ -212,14 +213,13 @@ protected void onError() { } private void showDialogSearch(){ - int selected = 0; // does not select anything final String[] choiceList = {getString(R.string.in_subject) + " " + Courses.getSelectedCourseShortName(), getString(R.string.inAllPlatform)}; AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); builder.setTitle(R.string.where_to_search); builder.setCancelable(false); - builder.setSingleChoiceItems(choiceList, selected, new DialogInterface.OnClickListener() { + builder.setSingleChoiceItems(choiceList, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int item) { } @@ -233,7 +233,11 @@ public void onClick(DialogInterface dialog, int which) { builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - courseCode = Courses.getSelectedCourseCode(); + int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition(); + if (selectedPosition == 0) + courseCode = Courses.getSelectedCourseCode(); + else + courseCode = -1; runConnection(); } }); From c236a4de6f7d29453c1f62c1ab6b9e491d0d4a1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 26 Jul 2016 18:12:23 +0200 Subject: [PATCH 021/103] getUserPhoto in listview of SearUsers --- .../modules/messages/UsersAdapter.java | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index 4ac5f6cfb..4ecebd2c5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -29,9 +29,12 @@ import android.widget.ImageView; import android.widget.TextView; +import com.nostra13.universalimageloader.core.ImageLoader; + import java.util.List; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.UserFilter; /** @@ -41,33 +44,50 @@ */ public class UsersAdapter extends ArrayAdapter { private LayoutInflater inflater; + private ImageLoader loader; + + private static class ViewHolder { + ImageView image; + TextView name; + CheckBox checkbox; + + } public UsersAdapter(Context context, List objects) { super(context, 0, objects); + this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); this.inflater = LayoutInflater.from(context); } public View getView(int position, View convertView, ViewGroup parent) { - // Obtener inflater. + // Get inflater this.inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - // ¿Existe el view actual? - if (null == convertView) { + // Does the current view exist? + if (convertView == null) { convertView = inflater.inflate(R.layout.row_user, parent, false); } - // Referencias UI. - ImageView avatar = (ImageView) convertView.findViewById(R.id.imageView); - TextView name = (TextView) convertView.findViewById(R.id.text_user); - CheckBox check = (CheckBox) convertView.findViewById(R.id.check); + ViewHolder holder = new ViewHolder(); - // User actual. + // UI references + holder.image = (ImageView) convertView.findViewById(R.id.imageView); + holder.name = (TextView) convertView.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); + + // Current user UserFilter user = getItem(position); - // Setup. - avatar.setImageResource(R.drawable.usr_bl); - name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); + // Setup row + if(user.getUserPhoto().contains("https")) { //when the user don't have photo, the string isn't empty or null + ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); + } + else + holder.image.setImageResource(R.drawable.usr_bl); + + holder.name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); return convertView; } From e474bfeda1355e4b62fa843c2d2371cb6e34f2fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 27 Jul 2016 12:22:15 +0200 Subject: [PATCH 022/103] Messages activity save state when SearchUsers activity finish --- SWADroid/src/main/AndroidManifest.xml | 1 - .../src/main/java/es/ugr/swad/swadroid/Constants.java | 4 ++++ .../es/ugr/swad/swadroid/modules/messages/Messages.java | 4 ++-- .../ugr/swad/swadroid/modules/messages/SearchUsers.java | 9 ++++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/SWADroid/src/main/AndroidManifest.xml b/SWADroid/src/main/AndroidManifest.xml index 724f43f04..2ae39b339 100644 --- a/SWADroid/src/main/AndroidManifest.xml +++ b/SWADroid/src/main/AndroidManifest.xml @@ -174,7 +174,6 @@ parent, View view, int position, long id) }); progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); - TextView text = (TextView) findViewById(R.id.text_progress); - text.setText(R.string.loadingMsg); + TextView textLoading = (TextView) findViewById(R.id.text_progress); + textLoading.setText(R.string.loadingMsg); setMETHOD_NAME("findUsers"); } @@ -99,7 +100,9 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - NavUtils.navigateUpFromSameTask(SearchUsers.this); + invalidateOptionsMenu(); + setResult(RESULT_OK); + finish(); return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE! } }); From 6235c3dad9dc8bd4da5c66e449665de78c8c1624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 27 Jul 2016 13:03:39 +0200 Subject: [PATCH 023/103] action bar arranged when searchusers activity finishes --- .../modules/messages/SearchUsers.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index b8e200221..996e672a8 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -49,6 +49,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private CheckBox checkbox; private UsersList userFilters = new UsersList(); private LinearLayout progressLayout; + private boolean hideMenu = false; private long courseCode; private int numUsers; @@ -94,16 +95,16 @@ public boolean onCreateOptionsMenu(Menu menu) { MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener(){ @Override public boolean onMenuItemActionExpand(MenuItem item) { - // Do whatever you need - return true; // KEEP IT TO TRUE OR IT DOESN'T OPEN !! + return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { - invalidateOptionsMenu(); + hideMenu = true; + invalidateOptionsMenu(); // to manage the actionbar when searchview is closed setResult(RESULT_OK); - finish(); - return true; // OR FALSE IF YOU DIDN'T WANT IT TO CLOSE! + finish(); // go to parent activity + return true; } }); @@ -116,6 +117,11 @@ public boolean onMenuItemActionCollapse(MenuItem item) { // searview expanded searchItem.expandActionView(); + // to manage the actionbar when searchview is closed + if(hideMenu){ + searchView.setVisibility(View.GONE); + } + return super.onCreateOptionsMenu(menu); } @@ -124,7 +130,7 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: if(!search.equals("")) - onQueryTextSubmit(search); + onQueryTextSubmit(search); //find users with string search return true; default: @@ -136,7 +142,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { - if (Courses.getSelectedCourseCode() != -1){ + if (Courses.getSelectedCourseCode() != -1){ //guest user showDialogSearch(); } else{ @@ -248,4 +254,4 @@ public void onClick(DialogInterface dialog, int which) { AlertDialog alert = builder.create(); alert.show(); } -} +} \ No newline at end of file From 7a0ea81a7c437e2d2dcec8485b3f4bd600ada2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 27 Jul 2016 16:25:20 +0200 Subject: [PATCH 024/103] toasts defined when the filter is too short or users not found --- .../modules/messages/SearchUsers.java | 24 +++++++++++++------ SWADroid/src/main/res/values-es/strings.xml | 2 ++ SWADroid/src/main/res/values/strings.xml | 2 ++ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 996e672a8..692e67b62 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -142,12 +142,17 @@ public boolean onOptionsItemSelected(MenuItem item) { @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onQueryTextSubmit(String query) { - if (Courses.getSelectedCourseCode() != -1){ //guest user - showDialogSearch(); + String searchWithoutSpaces = search.replace(" ",""); + if (searchWithoutSpaces.length() < 7){ + Toast.makeText(SearchUsers.this, R.string.introduceLongerText, Toast.LENGTH_SHORT).show(); } - else{ - courseCode = -1; - runConnection(); + else { + if (Courses.getSelectedCourseCode() != -1) { //guest user + showDialogSearch(); + } else { + courseCode = -1; + runConnection(); + } } //remove virtual keyboard @@ -212,8 +217,13 @@ protected void postConnect() { adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); lvUsers.setAdapter(adapter); - //message about found users - Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); + //messages about found users + if (numUsers == 0){ + Toast.makeText(SearchUsers.this, R.string.users_NOTfound, Toast.LENGTH_SHORT).show(); + } + else{ + Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); + } } @Override diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 2d523436d..56c9e38c9 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -319,8 +319,10 @@ Buscar Buscar usuario usuarios encontrados + No se encontraron usuarios ¿Dónde desea buscar? En En toda la plataforma + Introduzca un texto más largo \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 2dfbb96cf..aba0c3648 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -329,8 +329,10 @@ Search Search user users found + Users not found Where do you want to search? In In all the platform + Introduce a longer text \ No newline at end of file From 78a471f10df5b347a4ea46b8cbf3b3e6fb0e5f74 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 27 Jul 2016 14:43:24 +0200 Subject: [PATCH 025/103] TTF replacement for Font Awesome PNG icons --- .../main/assets/fonts/fontawesome-webfont.ttf | Bin 0 -> 152796 bytes .../java/es/ugr/swad/swadroid/SWADMain.java | 63 +++-- .../es/ugr/swad/swadroid/gui/FontManager.java | 47 ++++ .../gui/ImageExpandableListAdapter.java | 1 - .../gui/TextExpandableListAdapter.java | 230 ++++++++++++++++++ .../swad/swadroid/gui/TextListAdapter.java | 59 +++++ .../modules/downloads/DownloadsManager.java | 67 ++--- .../modules/downloads/NodeAdapter.java | 20 +- .../EnrollmentExpandableListAdapter.java | 20 +- .../modules/groups/MyGroupsManager.java | 1 - .../modules/information/Information.java | 8 - .../swad/swadroid/modules/marks/Marks.java | 1 - .../modules/messages/FilterUsersList.java | 1 - .../swadroid/modules/messages/Messages.java | 1 - .../notifications/NotificationItem.java | 26 +- .../modules/notifications/Notifications.java | 10 +- .../NotificationsExpandableListAdapter.java | 59 +++-- .../swad/swadroid/modules/qr/GenerateQR.java | 1 - .../modules/rollcall/EventsCursorAdapter.java | 18 +- .../swadroid/modules/rollcall/Rollcall.java | 1 - .../modules/rollcall/UsersActivity.java | 1 - .../swad/swadroid/modules/tests/Tests.java | 11 +- .../swadroid/modules/tests/TestsMake.java | 1 - SWADroid/src/main/res/drawable-hdpi/ass.png | Bin 1677 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/book.png | Bin 2298 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/crs.png | Bin 1465 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/desk.png | Bin 1726 -> 0 bytes .../src/main/res/drawable-hdpi/enrollment.png | Bin 896 -> 0 bytes .../res/drawable-hdpi/enrollment_request.png | Bin 2389 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/faq.png | Bin 1397 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/file.png | Bin 1138 -> 0 bytes .../src/main/res/drawable-hdpi/folder.png | Bin 1465 -> 0 bytes .../main/res/drawable-hdpi/folder_open.png | Bin 1465 -> 0 bytes .../main/res/drawable-hdpi/folder_users.png | Bin 1465 -> 0 bytes .../src/main/res/drawable-hdpi/follow.png | Bin 2174 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/forum.png | Bin 1800 -> 0 bytes .../src/main/res/drawable-hdpi/grades.png | Bin 1426 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/home.png | Bin 1759 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/info.png | Bin 948 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/lab.png | Bin 1676 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/link.png | Bin 2306 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/msg.png | Bin 1726 -> 0 bytes .../main/res/drawable-hdpi/msg_received.png | Bin 1521 -> 0 bytes .../src/main/res/drawable-hdpi/msg_write.png | Bin 2135 -> 0 bytes .../src/main/res/drawable-hdpi/my_groups.png | Bin 1704 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/note.png | Bin 2210 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/notif.png | Bin 1675 -> 0 bytes .../main/res/drawable-hdpi/padlock_green.png | Bin 2081 -> 0 bytes .../main/res/drawable-hdpi/padlock_red.png | Bin 1666 -> 0 bytes .../src/main/res/drawable-hdpi/parent.png | Bin 1258 -> 0 bytes .../src/main/res/drawable-hdpi/refresh.png | Bin 2147 -> 0 bytes .../src/main/res/drawable-hdpi/roll_call.png | Bin 1677 -> 0 bytes .../main/res/drawable-hdpi/social_comment.png | Bin 590 -> 0 bytes .../src/main/res/drawable-hdpi/social_fav.png | Bin 528 -> 0 bytes .../main/res/drawable-hdpi/social_mention.png | Bin 1031 -> 0 bytes .../main/res/drawable-hdpi/social_share.png | Bin 536 -> 0 bytes .../src/main/res/drawable-hdpi/survey.png | Bin 1677 -> 0 bytes .../src/main/res/drawable-hdpi/syllabus.png | Bin 2053 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/test.png | Bin 1677 -> 0 bytes SWADroid/src/main/res/drawable-hdpi/users.png | Bin 2965 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/ass.png | Bin 601 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/book.png | Bin 741 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/crs.png | Bin 556 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/desk.png | Bin 640 -> 0 bytes .../main/res/drawable-xhdpi/enrollment.png | Bin 483 -> 0 bytes .../res/drawable-xhdpi/enrollment_request.png | Bin 741 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/faq.png | Bin 477 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/file.png | Bin 367 -> 0 bytes .../src/main/res/drawable-xhdpi/folder.png | Bin 556 -> 0 bytes .../main/res/drawable-xhdpi/folder_open.png | Bin 556 -> 0 bytes .../main/res/drawable-xhdpi/folder_users.png | Bin 556 -> 0 bytes .../src/main/res/drawable-xhdpi/follow.png | Bin 2643 -> 0 bytes .../src/main/res/drawable-xhdpi/forum.png | Bin 607 -> 0 bytes .../src/main/res/drawable-xhdpi/grades.png | Bin 334 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/home.png | Bin 548 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/info.png | Bin 314 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/lab.png | Bin 569 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/link.png | Bin 782 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/msg.png | Bin 620 -> 0 bytes .../main/res/drawable-xhdpi/msg_received.png | Bin 522 -> 0 bytes .../src/main/res/drawable-xhdpi/msg_write.png | Bin 686 -> 0 bytes .../src/main/res/drawable-xhdpi/my_groups.png | Bin 439 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/note.png | Bin 678 -> 0 bytes .../src/main/res/drawable-xhdpi/notif.png | Bin 587 -> 0 bytes .../main/res/drawable-xhdpi/padlock_green.png | Bin 1330 -> 0 bytes .../main/res/drawable-xhdpi/padlock_red.png | Bin 1270 -> 0 bytes .../src/main/res/drawable-xhdpi/parent.png | Bin 500 -> 0 bytes .../src/main/res/drawable-xhdpi/refresh.png | Bin 665 -> 0 bytes .../src/main/res/drawable-xhdpi/roll_call.png | Bin 601 -> 0 bytes .../res/drawable-xhdpi/social_comment.png | Bin 796 -> 0 bytes .../main/res/drawable-xhdpi/social_fav.png | Bin 701 -> 0 bytes .../res/drawable-xhdpi/social_mention.png | Bin 1376 -> 0 bytes .../main/res/drawable-xhdpi/social_share.png | Bin 644 -> 0 bytes .../src/main/res/drawable-xhdpi/survey.png | Bin 601 -> 0 bytes .../src/main/res/drawable-xhdpi/syllabus.png | Bin 616 -> 0 bytes SWADroid/src/main/res/drawable-xhdpi/test.png | Bin 601 -> 0 bytes .../src/main/res/drawable-xhdpi/users.png | Bin 933 -> 0 bytes SWADroid/src/main/res/drawable-xxhdpi/ass.png | Bin 3811 -> 0 bytes .../src/main/res/drawable-xxhdpi/book.png | Bin 5862 -> 0 bytes SWADroid/src/main/res/drawable-xxhdpi/crs.png | Bin 3735 -> 0 bytes .../src/main/res/drawable-xxhdpi/desk.png | Bin 4374 -> 0 bytes .../main/res/drawable-xxhdpi/enrollment.png | Bin 1836 -> 0 bytes .../drawable-xxhdpi/enrollment_request.png | Bin 6163 -> 0 bytes SWADroid/src/main/res/drawable-xxhdpi/faq.png | Bin 3638 -> 0 bytes .../src/main/res/drawable-xxhdpi/file.png | Bin 2519 -> 0 bytes .../src/main/res/drawable-xxhdpi/folder.png | Bin 3735 -> 0 bytes .../main/res/drawable-xxhdpi/folder_open.png | Bin 3735 -> 0 bytes .../main/res/drawable-xxhdpi/folder_users.png | Bin 3735 -> 0 bytes .../src/main/res/drawable-xxhdpi/follow.png | Bin 6678 -> 0 bytes .../src/main/res/drawable-xxhdpi/forum.png | Bin 4681 -> 0 bytes .../src/main/res/drawable-xxhdpi/grades.png | Bin 2854 -> 0 bytes .../src/main/res/drawable-xxhdpi/home.png | Bin 4530 -> 0 bytes .../src/main/res/drawable-xxhdpi/info.png | Bin 1880 -> 0 bytes SWADroid/src/main/res/drawable-xxhdpi/lab.png | Bin 4057 -> 0 bytes .../src/main/res/drawable-xxhdpi/link.png | Bin 5867 -> 0 bytes SWADroid/src/main/res/drawable-xxhdpi/msg.png | Bin 4404 -> 0 bytes .../main/res/drawable-xxhdpi/msg_received.png | Bin 3554 -> 0 bytes .../main/res/drawable-xxhdpi/msg_write.png | Bin 5235 -> 0 bytes .../main/res/drawable-xxhdpi/my_groups.png | Bin 4038 -> 0 bytes .../src/main/res/drawable-xxhdpi/note.png | Bin 5642 -> 0 bytes .../src/main/res/drawable-xxhdpi/notif.png | Bin 4549 -> 0 bytes .../res/drawable-xxhdpi/padlock_green.png | Bin 5377 -> 0 bytes .../main/res/drawable-xxhdpi/padlock_red.png | Bin 4171 -> 0 bytes .../src/main/res/drawable-xxhdpi/parent.png | Bin 2890 -> 0 bytes .../src/main/res/drawable-xxhdpi/refresh.png | Bin 5348 -> 0 bytes .../main/res/drawable-xxhdpi/roll_call.png | Bin 3811 -> 0 bytes .../res/drawable-xxhdpi/social_comment.png | Bin 1176 -> 0 bytes .../main/res/drawable-xxhdpi/social_fav.png | Bin 1046 -> 0 bytes .../res/drawable-xxhdpi/social_mention.png | Bin 2144 -> 0 bytes .../main/res/drawable-xxhdpi/social_share.png | Bin 1049 -> 0 bytes .../src/main/res/drawable-xxhdpi/survey.png | Bin 3811 -> 0 bytes .../src/main/res/drawable-xxhdpi/syllabus.png | Bin 5219 -> 0 bytes .../src/main/res/drawable-xxhdpi/test.png | Bin 3811 -> 0 bytes .../src/main/res/drawable-xxhdpi/users.png | Bin 8155 -> 0 bytes .../src/main/res/layout/event_list_item.xml | 15 +- SWADroid/src/main/res/layout/grid_item.xml | 11 +- .../src/main/res/layout/group_list_item.xml | 12 +- .../src/main/res/layout/image_list_item.xml | 25 +- .../main/res/layout/image_list_item_group.xml | 25 +- .../src/main/res/layout/list_image_item.xml | 2 + .../src/main/res/layout/list_image_items.xml | 2 + .../res/layout/list_item_notifications.xml | 14 +- .../src/main/res/layout/list_text_item.xml | 29 +++ .../src/main/res/layout/list_text_items.xml | 33 +++ .../src/main/res/layout/navigation_bar.xml | 40 +-- SWADroid/src/main/res/values/icons.xml | 35 +++ 146 files changed, 681 insertions(+), 209 deletions(-) create mode 100644 SWADroid/src/main/assets/fonts/fontawesome-webfont.ttf create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/gui/FontManager.java create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextExpandableListAdapter.java create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextListAdapter.java delete mode 100644 SWADroid/src/main/res/drawable-hdpi/ass.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/book.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/crs.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/desk.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/enrollment.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/enrollment_request.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/faq.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/file.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/folder.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/folder_open.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/folder_users.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/follow.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/forum.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/grades.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/home.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/info.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/lab.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/link.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/msg.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/msg_received.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/msg_write.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/my_groups.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/note.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/notif.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/padlock_green.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/padlock_red.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/parent.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/refresh.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/roll_call.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/social_comment.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/social_fav.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/social_mention.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/social_share.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/survey.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/syllabus.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/test.png delete mode 100644 SWADroid/src/main/res/drawable-hdpi/users.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/ass.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/book.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/crs.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/desk.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/enrollment.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/enrollment_request.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/faq.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/file.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/folder.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/folder_open.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/folder_users.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/follow.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/forum.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/grades.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/home.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/info.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/lab.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/link.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/msg.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/msg_received.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/msg_write.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/my_groups.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/note.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/notif.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/padlock_green.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/padlock_red.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/parent.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/refresh.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/roll_call.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/social_comment.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/social_fav.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/social_mention.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/social_share.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/survey.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/syllabus.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/test.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/users.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ass.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/book.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/crs.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/desk.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/enrollment.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/enrollment_request.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/faq.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/file.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/folder.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/folder_open.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/folder_users.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/follow.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/forum.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/grades.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/home.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/info.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/lab.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/link.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/msg.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/msg_received.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/msg_write.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/my_groups.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/note.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/notif.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/padlock_green.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/padlock_red.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/parent.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/refresh.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/roll_call.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/social_comment.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/social_fav.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/social_mention.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/social_share.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/survey.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/syllabus.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/test.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/users.png create mode 100644 SWADroid/src/main/res/layout/list_text_item.xml create mode 100644 SWADroid/src/main/res/layout/list_text_items.xml create mode 100644 SWADroid/src/main/res/values/icons.xml diff --git a/SWADroid/src/main/assets/fonts/fontawesome-webfont.ttf b/SWADroid/src/main/assets/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f221e50a2ef60738ba30932d834530cdfe55cb3e GIT binary patch literal 152796 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

=v_rA!CPE#mM^4@)}X7qf;At+v)G*FZd&; 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 ALjV8( literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 995b45762..3fe8d2f0b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -26,7 +26,6 @@ import android.database.Cursor; import android.os.Build; import android.os.Bundle; -import android.support.v4.content.ContextCompat; import android.text.TextUtils; import android.util.Log; import android.view.Menu; @@ -52,9 +51,9 @@ import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.database.DataBaseHelper; import es.ugr.swad.swadroid.gui.DialogFactory; -import es.ugr.swad.swadroid.gui.ImageExpandableListAdapter; import es.ugr.swad.swadroid.gui.MenuExpandableListActivity; import es.ugr.swad.swadroid.gui.ProgressScreen; +import es.ugr.swad.swadroid.gui.TextExpandableListAdapter; import es.ugr.swad.swadroid.model.Course; import es.ugr.swad.swadroid.model.Model; import es.ugr.swad.swadroid.modules.courses.Courses; @@ -121,7 +120,7 @@ public class SWADMain extends MenuExpandableListActivity { private LinearLayout mBirthdayLayout; private TextView mBirthdayTextView; private ExpandableListView mExpandableListView; - private ImageExpandableListAdapter mExpandableListAdapter; + private TextExpandableListAdapter mExpandableListAdapter; private Spinner mCoursesSpinner; private final ArrayList> mHeaderData = new ArrayList<>(); @@ -500,21 +499,21 @@ private void createNoCourseMenu() { //Order: // 1- Messages // 2- Users - mHeaderData.add(getMenuItem(R.string.users, R.drawable.users)); - mHeaderData.add(getMenuItem(R.string.messages, R.drawable.msg)); + mHeaderData.add(getMenuItem(R.string.users, R.string.fa_users)); + mHeaderData.add(getMenuItem(R.string.messages, R.string.fa_envelope)); mChildData.add(mUsersData); mChildData.add(mMessagesData); //Users category //Generate QR code - mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.drawable.qr)); + mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.string.fa_qrcode)); //Messages category //Notifications - mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.drawable.notif)); + mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.string.fa_bell)); //Messages - mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.drawable.msg_write)); + mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.string.fa_pencil_square_o)); Log.i(TAG, "Created No Course Menu"); } @@ -537,10 +536,10 @@ private void createBaseMenu() { // 3- Messages // 4- Enrollment // 5- Users - mHeaderData.add(getMenuItem(R.string.course, R.drawable.crs)); - mHeaderData.add(getMenuItem(R.string.evaluation, R.drawable.ass)); - mHeaderData.add(getMenuItem(R.string.users, R.drawable.users)); - mHeaderData.add(getMenuItem(R.string.messages, R.drawable.msg)); + mHeaderData.add(getMenuItem(R.string.course, R.string.fa_folder_open)); + mHeaderData.add(getMenuItem(R.string.evaluation, R.string.fa_check_square_o)); + mHeaderData.add(getMenuItem(R.string.users, R.string.fa_users)); + mHeaderData.add(getMenuItem(R.string.messages, R.string.fa_envelope)); final ArrayList> courseData = new ArrayList<>(); mChildData.add(courseData); @@ -553,43 +552,43 @@ private void createBaseMenu() { //Course category //Introduction - courseData.add(getMenuItem(R.string.introductionModuleLabel, R.drawable.info)); + courseData.add(getMenuItem(R.string.introductionModuleLabel, R.string.fa_info)); //Teaching Guide - courseData.add(getMenuItem(R.string.teachingguideModuleLabel, R.drawable.file)); + courseData.add(getMenuItem(R.string.teachingguideModuleLabel, R.string.fa_file_text)); //Syllabus (lectures) - courseData.add(getMenuItem(R.string.syllabusLecturesModuleLabel, R.drawable.syllabus)); + courseData.add(getMenuItem(R.string.syllabusLecturesModuleLabel, R.string.fa_list_ol)); //Syllabus (practicals) - courseData.add(getMenuItem(R.string.syllabusPracticalsModuleLabel, R.drawable.lab)); + courseData.add(getMenuItem(R.string.syllabusPracticalsModuleLabel, R.string.fa_flask)); //Documents - courseData.add(getMenuItem(R.string.documentsDownloadModuleLabel, R.drawable.folder)); + courseData.add(getMenuItem(R.string.documentsDownloadModuleLabel, R.string.fa_folder_open)); //Shared area - courseData.add(getMenuItem(R.string.sharedsDownloadModuleLabel, R.drawable.folder_users)); + courseData.add(getMenuItem(R.string.sharedsDownloadModuleLabel, R.string.fa_folder_open)); //Bibliography - courseData.add(getMenuItem(R.string.bibliographyModuleLabel, R.drawable.book)); + courseData.add(getMenuItem(R.string.bibliographyModuleLabel, R.string.fa_folder_open)); //FAQs - courseData.add(getMenuItem(R.string.faqsModuleLabel, R.drawable.faq)); + courseData.add(getMenuItem(R.string.faqsModuleLabel, R.string.fa_question)); //Links - courseData.add(getMenuItem(R.string.linksModuleLabel, R.drawable.link)); + courseData.add(getMenuItem(R.string.linksModuleLabel, R.string.fa_link)); //Evaluation category //Assessment system - evaluationData.add(getMenuItem(R.string.assessmentModuleLabel, R.drawable.info)); + evaluationData.add(getMenuItem(R.string.assessmentModuleLabel, R.string.fa_info)); //Test - evaluationData.add(getMenuItem(R.string.testsModuleLabel, R.drawable.test)); + evaluationData.add(getMenuItem(R.string.testsModuleLabel, R.string.fa_check_square_o)); //Marks - evaluationData.add(getMenuItem(R.string.marksModuleLabel, R.drawable.grades)); + evaluationData.add(getMenuItem(R.string.marksModuleLabel, R.string.fa_list_alt)); //Users category //Groups - mUsersData.add(getMenuItem(R.string.myGroupsModuleLabel, R.drawable.my_groups)); + mUsersData.add(getMenuItem(R.string.myGroupsModuleLabel, R.string.fa_sitemap)); //Generate QR code - mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.drawable.qr)); + mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.string.fa_qrcode)); //Messages category //Notifications - mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.drawable.notif)); + mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.string.fa_bell)); //Messages - mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.drawable.msg_write)); + mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.string.fa_pencil_square_o)); Log.i(TAG, "Created Base Menu"); } @@ -617,9 +616,9 @@ private void changeToStudentMenu() { private void changeToTeacherMenu() { if (currentRole != Constants.TEACHER_TYPE_CODE) { //Adds Publish Note to messages menu - mMessagesData.add(getMenuItem(R.string.noticesModuleLabel, R.drawable.note)); + mMessagesData.add(getMenuItem(R.string.noticesModuleLabel, R.string.fa_bullhorn)); //Adds Rollcall to users menu - mUsersData.add(getMenuItem(R.string.rollcallModuleLabel, R.drawable.roll_call)); + mUsersData.add(getMenuItem(R.string.rollcallModuleLabel, R.string.fa_check_square_o)); currentRole = Constants.TEACHER_TYPE_CODE; @@ -777,7 +776,7 @@ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition } private void refreshMainMenu() { - mExpandableListAdapter = new ImageExpandableListAdapter(this, mHeaderData, + mExpandableListAdapter = new TextExpandableListAdapter(this, mHeaderData, R.layout.image_list_item, new String[] { NAME @@ -798,7 +797,7 @@ private HashMap getMenuItem(int resName, int resImage) { final HashMap menuItem = new HashMap<>(); menuItem.put(NAME, getString(resName)); - menuItem.put(IMAGE, ContextCompat.getDrawable(this, resImage)); + menuItem.put(IMAGE, getString(resImage)); return menuItem; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/FontManager.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/FontManager.java new file mode 100644 index 000000000..f8c01fe10 --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/FontManager.java @@ -0,0 +1,47 @@ +package es.ugr.swad.swadroid.gui; + +import android.content.Context; +import android.graphics.Typeface; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import java.util.HashMap; +import java.util.Map; + +/** + * Manager for Font Awesome icons + * + * @author Juan Miguel Boyero Corral + */ +public class FontManager { + + public static final String ROOT = "fonts/", + FONTAWESOME = ROOT + "fontawesome-webfont.ttf"; + + private static Map TYPEFACE = new HashMap(); + + public static Typeface getTypeface(Context context, String font) { + Typeface typeface = TYPEFACE.get(font); + + if (typeface == null) { + typeface = Typeface.createFromAsset(context.getAssets(), font); + TYPEFACE.put(font, typeface); + } + + return typeface; + } + + public static void markAsIconContainer(View v, Typeface typeface) { + if (v instanceof ViewGroup) { + ViewGroup vg = (ViewGroup) v; + for (int i = 0; i < vg.getChildCount(); i++) { + View child = vg.getChildAt(i); + markAsIconContainer(child, typeface); + } + } else if (v instanceof TextView) { + ((TextView) v).setTypeface(typeface); + } + } + +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java index f5ebff5f4..540c00228 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/ImageExpandableListAdapter.java @@ -44,7 +44,6 @@ public class ImageExpandableListAdapter extends SimpleExpandableListAdapter { private final LayoutInflater layoutInflater; private final ArrayList> groupData; private final ArrayList>> childData; - Context context; private static final String TAG = "ImageExpandableListAdapter"; private static int convertViewCounter = 0; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextExpandableListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextExpandableListAdapter.java new file mode 100644 index 000000000..5b04501fe --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextExpandableListAdapter.java @@ -0,0 +1,230 @@ +/* + * This file is part of SWADroid. + * + * Copyright (C) 2010 Juan Miguel Boyero Corral + * + * SWADroid is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SWADroid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SWADroid. If not, see . + */ +package es.ugr.swad.swadroid.gui; + +import android.content.Context; +import android.graphics.Typeface; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.SimpleExpandableListAdapter; +import android.widget.TextView; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import es.ugr.swad.swadroid.BuildConfig; +import es.ugr.swad.swadroid.R; + +/** + * @author Juan Miguel Boyero Corral + */ +public class TextExpandableListAdapter extends SimpleExpandableListAdapter { + private final String NAME = "listText"; + private final String IMAGE = "listIcon"; + private final LayoutInflater layoutInflater; + private final ArrayList> groupData; + private final ArrayList>> childData; + + private static final String TAG = "ImageExpandableListAdapter"; + + private static Typeface iconFont; + private static int convertViewCounter = 0; + + static class ViewHolder{ + TextView tvListImage; + TextView tvListText; + } + + public TextExpandableListAdapter(Context context, + ArrayList> groupData, int expandedGroupLayout, + String[] groupFrom, int[] groupTo, + ArrayList>> childData, + int childLayout, String[] childFrom, + int[] childTo) { + + super(context, groupData, expandedGroupLayout, groupFrom, + groupTo, childData, childLayout, childFrom, childTo); + this.groupData = groupData; + this.childData = childData; + layoutInflater = LayoutInflater.from(context); + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME); + } + + /* (non-Javadoc) + * @see android.widget.SimpleExpandableListAdapter#getGroupView(int, boolean, android.view.View, android.view.ViewGroup) + */ + @SuppressWarnings("unchecked") + @Override + public View getGroupView(int groupPosition, boolean isExpanded, + View convertView, ViewGroup parent) { + + ViewHolder holder; + + if (BuildConfig.DEBUG) { + Log.v(TAG, "in getView for position " + groupPosition + + ", convertView is " + + ((convertView == null) ? "null" : "being recycled")); + } + + if (convertView == null) { + + convertView = layoutInflater.inflate(R.layout.image_list_item_group, parent, false); + + convertViewCounter++; + + if (BuildConfig.DEBUG) { + Log.v(TAG, convertViewCounter + " convertViews have been created"); + } + + holder = new ViewHolder(); + + holder.tvListImage = (TextView) convertView.findViewById(R.id.listImage); + holder.tvListText = (TextView) convertView.findViewById(R.id.listText); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + // Populate your custom view here + holder.tvListText.setText((String) ((Map) getGroup(groupPosition)).get(NAME)); + holder.tvListImage.setText((String) ((Map) getGroup(groupPosition)).get(IMAGE)); + + //Set Font Awesome typeface + holder.tvListImage.setTypeface(iconFont); + + return convertView; + } + + @SuppressWarnings("unchecked") + @Override + public View getChildView(int groupPosition, int childPosition, boolean isLastChild, + View convertView, ViewGroup parent) { + + ViewHolder holder; + + if (BuildConfig.DEBUG) { + Log.v(TAG, "in getChildView for position " + groupPosition + ", childPos " + + childPosition + " convertView is " + + ((convertView == null) ? "null" : "being recycled")); + } + if (convertView == null) { + + convertView = layoutInflater.inflate(R.layout.image_list_item, parent, false); + + convertViewCounter++; + + if (BuildConfig.DEBUG) { + Log.v(TAG, convertViewCounter + " convertViews for child have been created"); + } + + holder = new ViewHolder(); + + holder.tvListImage = (TextView) convertView.findViewById(R.id.listImage); + holder.tvListText = (TextView) convertView.findViewById(R.id.listText); + convertView.setTag(holder); + + } else { + holder = (ViewHolder) convertView.getTag(); + } + + // Populate your custom view here + holder.tvListText.setText((String) ((Map) getChild(groupPosition, childPosition)).get(NAME)); + holder.tvListImage.setText((String) ((Map) getChild(groupPosition, childPosition)).get(IMAGE)); + + //Set Font Awesome typeface + holder.tvListImage.setTypeface(iconFont); + + return convertView; + } + + /* (non-Javadoc) + * @see android.widget.SimpleExpandableListAdapter#newGroupView(boolean, android.view.ViewGroup) + */ + @Override + public View newGroupView(boolean isExpanded, ViewGroup parent) { + return layoutInflater.inflate(R.layout.image_list_item, parent, false); + } + + @Override + public View newChildView(boolean isLastChild, ViewGroup parent) { + return layoutInflater.inflate(R.layout.image_list_item, parent, false); + } + + /** + * Removes the child which located at childPosition under the group located at groupPosition. + * If it is removed, it will not be shown. + * + * @param groupPosition + * @param childPosition + * @return true if the child was removed; + */ + public boolean removeChild(int groupPosition, int childPosition) { + + if (groupPosition >= getGroupCount() || childPosition >= getChildrenCount(groupPosition)) + return false; + childData.get(groupPosition).remove(childPosition); + super.notifyDataSetChanged(); + + return true; + } + + public boolean addChild(int groupPosition, int childPosition, HashMap child) { + if (groupPosition >= getGroupCount()) + return false; + childData.get(groupPosition).add(child); + super.notifyDataSetChanged(); + return true; + } + + public boolean addGroup(int groupPosition, HashMap group, ArrayList> childs) { + if (groupPosition >= getGroupCount()) { + groupData.add(groupPosition, group); + final ArrayList> groupData = new ArrayList<>(); + childData.add(groupPosition, groupData); + childData.get(groupPosition).addAll(childs); + } else { + groupData.add(getGroupCount(), group); + final ArrayList> groupData = new ArrayList<>(); + childData.add(getGroupCount() - 1, groupData); + childData.get(getGroupCount() - 1).addAll(childs); + } + super.notifyDataSetChanged(); + return true; + } + + public boolean removeGroup(int groupPosition) { + if (groupPosition >= getGroupCount()) + return false; + else { + int childSize = childData.get(groupPosition).size(); + for (int i = 0; i < childSize; ++i) + removeChild(groupPosition, i); + groupData.remove(groupPosition); + super.notifyDataSetChanged(); + return true; + } + + } +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextListAdapter.java new file mode 100644 index 000000000..6e9a11bfc --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/TextListAdapter.java @@ -0,0 +1,59 @@ +package es.ugr.swad.swadroid.gui; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Typeface; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import java.util.List; + +import es.ugr.swad.swadroid.R; + +public class TextListAdapter extends ArrayAdapter { + + private static Typeface iconFont; + private Context context; + + public TextListAdapter(Context context, int resourceId, + List items) { + super(context, resourceId, items); + this.context = context; + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME); + } + + /*private view holder class*/ + private class ViewHolder { + TextView txtImage; + TextView txtTitle; + } + + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder holder; + ImageListItem imageListItem = getItem(position); + + LayoutInflater mInflater = (LayoutInflater) context + .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); + if (convertView == null) { + convertView = mInflater.inflate(R.layout.list_text_item, null); + holder = new ViewHolder(); + holder.txtImage = (TextView) convertView.findViewById(R.id.TextView1); + holder.txtTitle = (TextView) convertView.findViewById(R.id.TextView2); + convertView.setTag(holder); + } else + holder = (ViewHolder) convertView.getTag(); + + holder.txtTitle.setText(imageListItem.getTitle()); + holder.txtImage.setText(imageListItem.getImageId()); + + //Set Font Awesome typeface + holder.txtImage.setTypeface(iconFont); + + return convertView; + } +} \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java index 562352130..3325cd1fb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.os.Environment; @@ -43,7 +44,6 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.GridView; -import android.widget.ImageButton; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; @@ -57,6 +57,7 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; +import es.ugr.swad.swadroid.gui.FontManager; import es.ugr.swad.swadroid.gui.MenuActivity; import es.ugr.swad.swadroid.gui.ProgressScreen; import es.ugr.swad.swadroid.model.Group; @@ -124,6 +125,8 @@ public class DownloadsManager extends MenuActivity { private TextView currentPathText; private ProgressScreen mProgressScreen; + private static Typeface iconFont; + private String chosenNodeName = null; @@ -232,6 +235,39 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.navigation); + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(this, FontManager.FONTAWESOME); + + TextView homeButton = (TextView) this + .findViewById(R.id.home_button); + homeButton.setOnClickListener((new OnClickListener() { + + @Override + public void onClick(View v) { + if (navigator != null) { + updateView(navigator.goToRoot()); + } + } + + })); + + TextView parentButton = (TextView) this + .findViewById(R.id.parent_button); + parentButton.setOnClickListener((new OnClickListener() { + + @Override + public void onClick(View v) { + if (navigator != null) { + updateView(navigator.goToParentDirectory()); + } + } + + })); + + //Set Font Awesome typeface + homeButton.setTypeface(iconFont); + parentButton.setTypeface(iconFont); + downloadsAreaCode = getIntent().getIntExtra("downloadsAreaCode", Constants.DOCUMENTS_AREA_CODE); @@ -267,32 +303,6 @@ public void onItemClick(AdapterView parent, View v, } })); - ImageButton homeButton = (ImageButton) this - .findViewById(R.id.home_button); - homeButton.setOnClickListener((new OnClickListener() { - - @Override - public void onClick(View v) { - if (navigator != null) { - updateView(navigator.goToRoot()); - } - } - - })); - - ImageButton parentButton = (ImageButton) this - .findViewById(R.id.parent_button); - parentButton.setOnClickListener((new OnClickListener() { - - @Override - public void onClick(View v) { - if (navigator != null) { - updateView(navigator.goToParentDirectory()); - } - } - - })); - View mDirectoryNavigatorView = findViewById(R.id.directoryNavigator); View mProgressScreenView = findViewById(R.id.progress_screen); @@ -803,15 +813,12 @@ private void setupActionBar() { switch (downloadsAreaCode) { case Constants.DOCUMENTS_AREA_CODE: setTitle(R.string.documentsDownloadModuleLabel); - getSupportActionBar().setIcon(R.drawable.folder); break; case Constants.SHARE_AREA_CODE: setTitle(R.string.sharedsDownloadModuleLabel); - getSupportActionBar().setIcon(R.drawable.folder_users); break; case Constants.MARKS_AREA_CODE: setTitle(R.string.marksModuleLabel); - getSupportActionBar().setIcon(R.drawable.grades); break; } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java index de2458e82..7fc3ad6cd 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/NodeAdapter.java @@ -19,16 +19,17 @@ package es.ugr.swad.swadroid.modules.downloads; import android.app.Activity; +import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; -import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.FontManager; /** * Adapter to populate browser of files with the information received from SWAD @@ -40,15 +41,19 @@ public class NodeAdapter extends BaseAdapter { private ArrayList list; private final Activity mContext; + private static Typeface iconFont; public NodeAdapter(Activity c, ArrayList list) { mContext = c; this.list = list; + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(c, FontManager.FONTAWESOME); } static class ViewHolder { TextView text; - ImageView image; + TextView image; } @Override @@ -64,13 +69,11 @@ public int getCount() { @Override public Object getItem(int arg0) { - // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { - // TODO Auto-generated method stub return 0; } @@ -84,7 +87,7 @@ public View getView(int position, View convertView, ViewGroup parent) { holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.icon_text); - holder.image = (ImageView) convertView.findViewById(R.id.icon_image); + holder.image = (TextView) convertView.findViewById(R.id.icon_image); convertView.setTag(holder); } else { @@ -94,11 +97,14 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.text.setText(list.get(position).getName()); if (list.get(position).isFolder()) { - holder.image.setImageResource(R.drawable.folder_open); + holder.image.setText(R.string.fa_folder_open); } else { - holder.image.setImageResource(R.drawable.file); + holder.image.setText(R.string.fa_file_text); } + //Set Font Awesome typeface + holder.image.setTypeface(iconFont); + return convertView; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java index 0080919cc..f628cd24e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/EnrollmentExpandableListAdapter.java @@ -19,6 +19,7 @@ package es.ugr.swad.swadroid.modules.groups; import android.content.Context; +import android.graphics.Color; import android.graphics.Typeface; import android.support.v4.content.ContextCompat; import android.support.v4.util.LongSparseArray; @@ -28,7 +29,6 @@ import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; -import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.TextView; @@ -38,6 +38,7 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.FontManager; import es.ugr.swad.swadroid.model.Group; import es.ugr.swad.swadroid.model.GroupType; import es.ugr.swad.swadroid.model.Model; @@ -56,6 +57,7 @@ public class EnrollmentExpandableListAdapter extends BaseExpandableListAdapter { private LongSparseArray> children = null; private ArrayList groups = null; private final LongSparseArray realMembership = new LongSparseArray<>(); + private static Typeface iconFont; private int role = -1; private int layoutGroup = 0; @@ -68,7 +70,7 @@ private static class GroupHolder { private static class ChildHolder { LinearLayout linearLayout; - ImageView imagePadlock; + TextView imagePadlock; CheckBox checkBox; RadioButton radioButton; TextView vacantsText; @@ -97,6 +99,9 @@ public EnrollmentExpandableListAdapter(Context context, ArrayList groups, setRealInscription(); mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME); } @Override @@ -119,7 +124,7 @@ public View getChildView(int groupPosition, int childPosition, convertView = mInflater.inflate(layoutChild, parent, false); holder = new ChildHolder(); holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.groupsLayout); - holder.imagePadlock = (ImageView) convertView.findViewById(R.id.padlockIcon); + holder.imagePadlock = (TextView) convertView.findViewById(R.id.padlockIcon); holder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox); holder.checkBox.setOnClickListener(checkListener); holder.radioButton = (RadioButton) convertView.findViewById(R.id.radioButton); @@ -154,11 +159,16 @@ public View getChildView(int groupPosition, int childPosition, boolean freeSpot = ((maxStudents == -1) || (group.getCurrentStudents() < maxStudents)); if (open != 0) { - holder.imagePadlock.setImageResource(R.drawable.padlock_green); + holder.imagePadlock.setText(R.string.fa_unlock); + holder.imagePadlock.setTextColor(Color.GREEN); } else { - holder.imagePadlock.setImageResource(R.drawable.padlock_red); + holder.imagePadlock.setText(R.string.fa_lock); + holder.imagePadlock.setTextColor(Color.RED); } + //Set Font Awesome typeface + holder.imagePadlock.setTypeface(iconFont); + boolean canEnroll = ((open != 0 && freeSpot) || role == Constants.TEACHER_TYPE_CODE); if(canEnroll) { holder.checkBox.setTextColor(ContextCompat.getColor(context, android.R.color.black)); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/MyGroupsManager.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/MyGroupsManager.java index 58b07c7e6..89599085e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/MyGroupsManager.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/groups/MyGroupsManager.java @@ -131,7 +131,6 @@ protected void onCreate(Bundle savedInstanceState) { getString(R.string.loadingMsg), this); getSupportActionBar().setSubtitle(Courses.getSelectedCourseShortName()); - getSupportActionBar().setIcon(R.drawable.my_groups); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/information/Information.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/information/Information.java index d8a68dd52..bab215fa7 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/information/Information.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/information/Information.java @@ -83,7 +83,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "introduction"; setTitle(R.string.introductionModuleLabel); - getSupportActionBar().setIcon(R.drawable.info); break; @@ -92,7 +91,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "guide"; setTitle(R.string.teachingguideModuleLabel); - getSupportActionBar().setIcon(R.drawable.file); break; @@ -101,7 +99,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "lectures"; setTitle(R.string.syllabusLecturesModuleLabel); - getSupportActionBar().setIcon(R.drawable.syllabus); break; @@ -110,7 +107,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "practicals"; setTitle(R.string.syllabusPracticalsModuleLabel); - getSupportActionBar().setIcon(R.drawable.lab); break; @@ -119,7 +115,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "bibliography"; setTitle(R.string.bibliographyModuleLabel); - getSupportActionBar().setIcon(R.drawable.book); break; @@ -128,7 +123,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "FAQ"; setTitle(R.string.faqsModuleLabel); - getSupportActionBar().setIcon(R.drawable.faq); break; @@ -138,7 +132,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "links"; setTitle(R.string.linksModuleLabel); - getSupportActionBar().setIcon(R.drawable.link); break; @@ -148,7 +141,6 @@ protected void onCreate(Bundle savedInstanceState) { infoTypeToAdd = "assessment"; setTitle(R.string.assessmentModuleLabel); - getSupportActionBar().setIcon(R.drawable.info); break; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/marks/Marks.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/marks/Marks.java index 4846220b6..cc4eda413 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/marks/Marks.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/marks/Marks.java @@ -46,7 +46,6 @@ protected void onCreate(Bundle savedInstanceState) { } setTitle(R.string.marksModuleLabel); - getSupportActionBar().setIcon(R.drawable.grades); } @Override diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java index 0d43aeb02..16dd2ac72 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java @@ -25,7 +25,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_filter_list); setTitle(R.string.filterUsersListModuleLabel); - getSupportActionBar().setIcon(R.drawable.users); Button cancelFIlters = (Button) findViewById(R.id.cancelFilters); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 570170bdc..0c1a0a83d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -97,7 +97,6 @@ protected void onCreate(Bundle savedInstanceState) { eventCode = getIntent().getLongExtra("eventCode", 0); setContentView(R.layout.messages_screen); setTitle(R.string.messagesModuleLabel); - getSupportActionBar().setIcon(R.drawable.msg); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java index e453449da..b14d914a9 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java @@ -50,28 +50,18 @@ public class NotificationItem extends MenuActivity { private Long notifCode; private Long eventCode; private String notificationType; - private String sender; - private String userPhoto; - private String course; private String summary; - private String content; - private String date; - private String time; - private boolean seenLocal; - @Override + @Override protected void onCreate(Bundle savedInstanceState) { TextView senderTextView, courseTextView, summaryTextView, dateTextView, timeTextView; ImageView userPhotoView; WebView webview; Intent activity; - //String type = this.getIntent().getStringExtra("notificationType"); super.onCreate(savedInstanceState); setContentView(R.layout.single_notification_view); - getSupportActionBar().setIcon(R.drawable.notif); - senderTextView = (TextView) this.findViewById(R.id.senderNameText); courseTextView = (TextView) this.findViewById(R.id.courseNameText); summaryTextView = (TextView) this.findViewById(R.id.summaryText); @@ -83,14 +73,14 @@ protected void onCreate(Bundle savedInstanceState) { notifCode = Long.valueOf(this.getIntent().getStringExtra("notifCode")); eventCode = Long.valueOf(this.getIntent().getStringExtra("eventCode")); notificationType = this.getIntent().getStringExtra("notificationType"); - sender = this.getIntent().getStringExtra("sender"); - userPhoto = this.getIntent().getStringExtra("userPhoto"); - course = this.getIntent().getStringExtra("course"); + String sender = this.getIntent().getStringExtra("sender"); + String userPhoto = this.getIntent().getStringExtra("userPhoto"); + String course = this.getIntent().getStringExtra("course"); summary = this.getIntent().getStringExtra("summary"); - content = this.getIntent().getStringExtra("content"); - date = this.getIntent().getStringExtra("date"); - time = this.getIntent().getStringExtra("time"); - seenLocal = Utils.parseStringBool(this.getIntent().getStringExtra("seenLocal")); + String content = this.getIntent().getStringExtra("content"); + String date = this.getIntent().getStringExtra("date"); + String time = this.getIntent().getStringExtra("time"); + boolean seenLocal = Utils.parseStringBool(this.getIntent().getStringExtra("seenLocal")); senderTextView.setText(sender); courseTextView.setText(course); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java index c80ef42d3..45605cf04 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java @@ -209,7 +209,7 @@ private void refreshScreen() { /** * Sends to SWAD the "seen notifications" info */ - private void sendReadedNotifications() { + private void sendReadNotifications() { List markedNotificationsList; String seenNotifCodes; Intent activity; @@ -275,8 +275,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expandablelist_items_pulltorefresh); - getSupportActionBar().setIcon(R.drawable.notif); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @@ -332,7 +330,7 @@ public void onMarkAllReadClick() { Utils.parseBoolString(true)); // Sends to SWAD the "seen notifications" info - sendReadedNotifications(); + sendReadNotifications(); refreshScreen(); } @@ -521,7 +519,7 @@ protected void postConnect() { } // Sends to SWAD the "seen notifications" info - sendReadedNotifications(); + sendReadNotifications(); refreshScreen(); } @@ -595,7 +593,7 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.action_markAllRead: dbHelper.updateAllNotifications("seenLocal", Utils.parseBoolString(true)); - sendReadedNotifications(); + sendReadNotifications(); refreshScreen(); return true; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java index 2b3ffadd9..c490ddd16 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java @@ -19,12 +19,12 @@ package es.ugr.swad.swadroid.modules.notifications; import android.app.Activity; +import android.graphics.Typeface; import android.support.v4.content.ContextCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; -import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; @@ -33,6 +33,7 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.FontManager; import es.ugr.swad.swadroid.model.Model; import es.ugr.swad.swadroid.model.SWADNotification; import es.ugr.swad.swadroid.utils.Utils; @@ -47,8 +48,9 @@ public class NotificationsExpandableListAdapter extends private ArrayList groupItem; private ArrayList> childItem; - private LayoutInflater minflater; + private LayoutInflater mInflater; private Activity activity; + private static Typeface iconFont; public NotificationsExpandableListAdapter(ArrayList grList, ArrayList> childItem2) { @@ -60,18 +62,21 @@ public NotificationsExpandableListAdapter(Activity act, ArrayList grList ArrayList> childItem2) { groupItem = grList; activity = act; - minflater = LayoutInflater.from(activity); + mInflater = LayoutInflater.from(activity); this.childItem = childItem2; + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(act, FontManager.FONTAWESOME); } public void setInflater(LayoutInflater mInflater, Activity act) { - this.minflater = mInflater; + this.mInflater = mInflater; activity = act; } public void setActivity(Activity act) { activity = act; - minflater = LayoutInflater.from(activity); + mInflater = LayoutInflater.from(activity); } @Override @@ -93,7 +98,7 @@ public View getChildView(int groupPosition, final int childPosition, String seenLocalString = Utils.parseBoolString(seenLocal); if(convertView == null) { - convertView = minflater.inflate(R.layout.list_item_notifications, parent, false); + convertView = mInflater.inflate(R.layout.list_item_notifications, parent, false); } if(!seenLocal) { @@ -115,7 +120,10 @@ public View getChildView(int groupPosition, final int childPosition, final TextView summary = (TextView) convertView.findViewById(R.id.eventSummary); TextView content = (TextView) convertView.findViewById(R.id.eventText); TextView contentMsg = (TextView) convertView.findViewById(R.id.eventMsg); - ImageView notificationIcon = (ImageView) convertView.findViewById(R.id.notificationIcon); + TextView notificationIcon = (TextView) convertView.findViewById(R.id.notificationIcon); + + //Set Font Awesome typeface + notificationIcon.setTypeface(iconFont); if (eventType != null) { notifCodeHided.setText(notifCode.toString()); @@ -126,58 +134,57 @@ public View getChildView(int groupPosition, final int childPosition, if (type.equals("examAnnouncement")) { type = activity.getString(R.string.examAnnouncement); - notificationIcon.setImageResource(R.drawable.announce); + notificationIcon.setText(R.string.fa_bullhorn); } else if (type.equals("marksFile")) { type = activity.getString(R.string.marksFile); - notificationIcon.setImageResource(R.drawable.grades); + notificationIcon.setText(R.string.fa_list_alt); } else if (type.equals("notice")) { type = activity.getString(R.string.notice); - notificationIcon.setImageResource(R.drawable.note); + notificationIcon.setText(R.string.fa_bullhorn); } else if (type.equals("message")) { type = activity.getString(R.string.message); - notificationIcon.setImageResource(R.drawable.msg_received); + notificationIcon.setText(R.string.fa_inbox); } else if (type.equals("forumPostCourse")) { type = activity.getString(R.string.forumPostCourse); - notificationIcon.setImageResource(R.drawable.forum); + notificationIcon.setText(R.string.fa_comment); } else if (type.equals("forumReply")) { type = activity.getString(R.string.forumReply); - notificationIcon.setImageResource(R.drawable.forum); + notificationIcon.setText(R.string.fa_comment); } else if (type.equals("assignment")) { type = activity.getString(R.string.assignment); - notificationIcon.setImageResource(R.drawable.desk); + notificationIcon.setText(R.string.fa_wrench); } else if (type.equals("documentFile")) { type = activity.getString(R.string.documentFile); - notificationIcon.setImageResource(R.drawable.file); + notificationIcon.setText(R.string.fa_file_text); } else if (type.equals("sharedFile")) { type = activity.getString(R.string.sharedFile); - notificationIcon.setImageResource(R.drawable.file); + notificationIcon.setText(R.string.fa_file_text); } else if (type.equals("enrollmentRequest")) { type = activity.getString(R.string.enrollmentRequest); - notificationIcon.setImageResource(R.drawable.enrollment_request); + notificationIcon.setText(R.string.fa_hand_o_up); } else if (type.startsWith("enrollment")) { type = activity.getString(R.string.enrollment); - notificationIcon.setImageResource(R.drawable.enrollment); + notificationIcon.setText(R.string.fa_check); } else if (type.equals("documentFile")) { type = activity.getString(R.string.survey); - notificationIcon.setImageResource(R.drawable.survey); + notificationIcon.setText(R.string.fa_check_square_o); } else if (type.equals("follower")) { type = activity.getString(R.string.follower); - notificationIcon.setImageResource(R.drawable.follow); + notificationIcon.setText(R.string.fa_user_plus); } else if (type.equals("timelineComment")) { type = activity.getString(R.string.timelineComment); - notificationIcon.setImageResource(R.drawable.social_comment); + notificationIcon.setText(R.string.fa_commenting); } else if (type.equals("timelineFav")) { type = activity.getString(R.string.timelineFav); - notificationIcon.setImageResource(R.drawable.social_fav); + notificationIcon.setText(R.string.fa_star); } else if (type.equals("timelineShare")) { type = activity.getString(R.string.timelineShare); - notificationIcon.setImageResource(R.drawable.social_share); + notificationIcon.setText(R.string.fa_share_alt); } else if (type.equals("timelineMention")) { type = activity.getString(R.string.timelineMention); - notificationIcon.setImageResource(R.drawable.social_mention); + notificationIcon.setText(R.string.fa_at); } else { type = activity.getString(R.string.unknownNotification); - notificationIcon.setImageResource(R.drawable.ic_launcher_swadroid); } eventType.setText(type); @@ -273,7 +280,7 @@ public View getGroupView(int groupPosition, boolean isExpanded, TextView groupTitle; if (convertView == null) { - convertView = minflater.inflate(R.layout.group_type_list_item, parent, false); + convertView = mInflater.inflate(R.layout.group_type_list_item, parent, false); } groupTitle = (TextView) convertView.findViewById(R.id.groupTypeText); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/qr/GenerateQR.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/qr/GenerateQR.java index 7a50eeabc..19bae29bc 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/qr/GenerateQR.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/qr/GenerateQR.java @@ -53,7 +53,6 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.generate_qr_layout); setTitle(R.string.generateQRModuleLabel); - getSupportActionBar().setIcon(R.drawable.qr); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/EventsCursorAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/EventsCursorAdapter.java index 5314b99aa..3a8ad9f3c 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/EventsCursorAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/EventsCursorAdapter.java @@ -35,6 +35,7 @@ import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.database.DataBaseHelper; +import es.ugr.swad.swadroid.gui.FontManager; import es.ugr.swad.swadroid.utils.Crypto; /** @@ -48,7 +49,10 @@ public class EventsCursorAdapter extends CursorAdapter { private DateFormat df; private LayoutInflater inflater; + private static Typeface iconFont; + private static class ViewHolder { + TextView iconTextView; TextView titleTextView; TextView startTimeTextView; TextView endTimeTextView; @@ -69,6 +73,9 @@ public EventsCursorAdapter(Context context, Cursor c, DataBaseHelper dbHelper) { this.crypto = new Crypto(context, dbHelper.getDBKey()); this.df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); this.inflater = LayoutInflater.from(context); + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME); } /** @@ -87,6 +94,9 @@ public EventsCursorAdapter(Context context, Cursor c, this.crypto = new Crypto(context, dbHelper.getDBKey()); this.df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT); this.inflater = LayoutInflater.from(context); + + //Get Font Awesome typeface + iconFont = FontManager.getTypeface(context, FontManager.FONTAWESOME); } @Override @@ -94,7 +104,7 @@ public void bindView(View view, final Context context, Cursor cursor) { String title = crypto.decrypt(cursor.getString(cursor.getColumnIndex("title"))); long startTime = cursor.getLong(cursor.getColumnIndex("startTime")); long endTime = cursor.getLong(cursor.getColumnIndex("endTime")); - final boolean pending = crypto.decrypt(cursor.getString(cursor.getColumnIndex("status"))).equals("pending"); + final boolean pending = "pending".equals(crypto.decrypt(cursor.getString(cursor.getColumnIndex("status")))); Calendar today = Calendar.getInstance(); Calendar startTimeCalendar = Calendar.getInstance(); Calendar endTimeCalendar = Calendar.getInstance(); @@ -105,6 +115,12 @@ public void bindView(View view, final Context context, Cursor cursor) { ViewHolder holder = (ViewHolder) view.getTag(); view.setTag(holder); + holder.iconTextView = (TextView) view.findViewById(R.id.icon); + holder.iconTextView.setText(R.string.fa_check_square_o); + + //Set Font Awesome typeface + holder.iconTextView.setTypeface(iconFont); + holder.titleTextView = (TextView) view.findViewById(R.id.toptext); holder.startTimeTextView = (TextView) view.findViewById(R.id.startTimeTextView); holder.endTimeTextView = (TextView) view.findViewById(R.id.endTimeTextView); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/Rollcall.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/Rollcall.java index e4637d728..7524ee341 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/Rollcall.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/Rollcall.java @@ -170,7 +170,6 @@ public void onScroll(AbsListView absListView, int firstVisibleItem, setAppearance(); getSupportActionBar().setSubtitle(Courses.getSelectedCourseShortName()); - getSupportActionBar().setIcon(R.drawable.roll_call); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/UsersActivity.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/UsersActivity.java index a35de10bd..1ea7fe89b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/UsersActivity.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/rollcall/UsersActivity.java @@ -141,7 +141,6 @@ public void onScroll(AbsListView absListView, int firstVisibleItem, setAppearance(); getSupportActionBar().setSubtitle(Courses.getSelectedCourseShortName()); - getSupportActionBar().setIcon(R.drawable.roll_call); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/Tests.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/Tests.java index a62a566d4..70b3ae113 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/Tests.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/Tests.java @@ -32,10 +32,10 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; -import es.ugr.swad.swadroid.gui.ImageListAdapter; import es.ugr.swad.swadroid.gui.ImageListItem; import es.ugr.swad.swadroid.gui.MenuActivity; import es.ugr.swad.swadroid.gui.ProgressScreen; +import es.ugr.swad.swadroid.gui.TextListAdapter; import es.ugr.swad.swadroid.modules.courses.Courses; /** @@ -61,7 +61,7 @@ public class Tests extends MenuActivity implements OnItemClickListener { protected void onCreate(Bundle savedInstanceState) { ListView listView; String[] titles = getResources().getStringArray(R.array.testMenuItems); - Integer[] images = {R.drawable.refresh, R.drawable.test}; + Integer[] images = {R.string.fa_refresh, R.string.fa_check_square_o}; List imageListItems = new ArrayList<>(); super.onCreate(savedInstanceState); @@ -80,15 +80,14 @@ protected void onCreate(Bundle savedInstanceState) { } /* - Array adapter for showing menu options - */ - ImageListAdapter adapter = new ImageListAdapter(this, R.layout.list_image_items, imageListItems); + Array adapter for showing menu options + */ + TextListAdapter adapter = new TextListAdapter(this, R.layout.list_text_items, imageListItems); listView = (ListView) this.findViewById(R.id.listItems); listView.setAdapter(adapter); listView.setOnItemClickListener(this); getSupportActionBar().setSubtitle(Courses.getSelectedCourseShortName()); - getSupportActionBar().setIcon(R.drawable.test); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java index c34d7a9bc..ae68f5b2a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java @@ -756,7 +756,6 @@ protected void onCreate(Bundle savedInstanceState) { screenStep = ScreenStep.MENU; getSupportActionBar().setSubtitle(Courses.getSelectedCourseShortName()); - getSupportActionBar().setIcon(R.drawable.test); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); diff --git a/SWADroid/src/main/res/drawable-hdpi/ass.png b/SWADroid/src/main/res/drawable-hdpi/ass.png deleted file mode 100644 index 8c908b4f43d051a746ab2f7f4ef0561e915bbb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 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 diff --git a/SWADroid/src/main/res/drawable-hdpi/crs.png b/SWADroid/src/main/res/drawable-hdpi/crs.png deleted file mode 100644 index 27e3ea0cedddcc40cc567d16e5931c70036a248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 zcmV;q1xEUbP)9qk9C0Dc z(3L9@rMB8dXBfN6lrmVDXQ1F{=y$|_h*nLEiT+3q9L}Ho_vXLff6n>tx%cMLBfHqe zE_Sht36V;rciQjHK&`H>J_-yBl(@ROip)_ypDzju3i6zBN5|{I!NDS#Oy8h%#cNnN4K0f}&nv#-YXlZGAGc+`$ z!te1|0Zby1JSi?N)>#UQ(d6Xhs zR4UI|!}0O)mw9=4PZt*#Wyn_tRsdr>M*uBVVpsrs+uPgw!pqAmh&8~h<$2`l zQCnNvFMfW0(gy>KQH1p&^6fjZSnTkifPsuo;I$o)isV57qj6+LXWL3$Z8kv@AgrwQ?d|Oc6B85BK0ZED4u|7_VwXdeIF>)Q1a_^` zvn>KfoZLw_Ya5~*^PjmfqIX8D#nuE9o4oIc?rd-aBgm{1wXuv_1quGvCow3 z41tg}zP`$u)5cU^Jo^JMtbkxV%m#+ehSAZ{KNl7jBH$qo3Q{h-6Aqw7rKP1h+73WF z+Ssu*?O&<1sg#zMwgoI=vw&gH2DMuKdTD7XBOoAvOCdNvKcAu1Y7ao~@99U`unNe} z&wqn3ZRPX%Jd?m^V+W024GauK!%I%&Er1G#_YUBGwp1mjxestfND()aIfm;KOo|7v z(MU=TwL@MB@n(tuiWQzBMfm9p3k&^uO0r68J|Oaj9a;fqG2*$xW}^P>CS-rmBdrY05M%-+wt)52xc}bF&WEI+&;s-Betx~E~bg8onTLd-cMk?U}pCf z)cF`;ISo)B*+3R&w0^b#?X2n3$OFTU%S@ z0)fEt6Bh TJj!(u00000NkvXXu0mjf!kyTA diff --git a/SWADroid/src/main/res/drawable-hdpi/desk.png b/SWADroid/src/main/res/drawable-hdpi/desk.png deleted file mode 100644 index 326f986159a8feb6650415ad08f04bae696cbe54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1726 zcmV;v20{6WP)K!aeom`at&-W>+kZGKR;-XYI5@~xuU;)&Qb~|VBm$90 zMyvSo17rcHw}F)@R?ckdq5YPC-q8yoZ7+}ykgJSBnG;P9ZL z>gwvq)2B~20l*(yw{A58lrc6o)(BAVf6|GMk2h}Hw(VVJX6B#G&CLU0VPOj1f^u?l zlAbtmLS0l;^c)X89Tyij3oxt)AZHI8I54GFtBb{Au>nl!T3VWV&z?PF2?+^S z0m7NtzJ2@O8ja@1kdP4mRm{uFOLFw+(PU(P1hiWa6an9{W5>Hwr%t`NapT4l&^3T} zJtmXMgl%nY(1+YnYd{f23kwTJ3JMA;Zr{Eg9~~X-MxX)%19>MF-p7s|>q8ZcY=B5W zQd3jkLR4C6Yirlzb7Iifj+avJ=;$bdWS4+~Z`p)`K%G2!^4D9pZgqu+hkMaD;Pt#h z)*S$e{p)CRA&hEm0>G0o&5 z;V0#=WsaN!gNYTuIw|w=^2XU@o&hY(!^6YQ()U5`ZM(a>1+Z4$_+B-J{r4Cl9h`$h zRs|TY%JTB^aW3*-Ms8FGDu5)XRzrVjDzUzycnwqZ< zA3pq&zH9U5&9k8Q4CY-QnBm0vzBN2NEG;Q1(cxjHEy+D&md&bEs+qle_l}}3ALH|D z*R5OU-_p|33BUL=&R!uK6g_uS+@l3P_()e9%F5i3U@xeIH6G3hy<=n%k^l$2>C z>>@^rm`hM%2!VRvzI|iJ`sDTN*K_*&`=j9(_15fP3mv$WS!~_UJ32bnQy+7+NQ!Aa z!PYxMvkMuY-nDC2YgANJ$fZk{1|ZP}Ybj}Ioq>RiH8nM96bgliGx`CP`pA(ZA9gOP z5NPunv}^{r7`Tvc;2jO0QaJ*J{cN%U($do3K*1D%l5hqJRZ2c|=#a(jm>!V8LCG!xTrhfW zBZh7N{{8zW(KAy>hJh+VNufit3ZI$6;C^@T;K5(evt7Z#!TuQfcAS86adDB7P%!Do zW}P72uXpa;sYAczkXl~5b}a`9slu%L_T0I1FST0j#M!fFCs3IY0Ik9Aw3t=Ck&%&( zoUJoV^X_&yDsiPVNKVVYC( zs-LxTjUM7o*%qUIBov5f^XA%dwcr@1O&Ll3JuYl$R$BP3Xw=8FDfc}Z2o41 zJRU?u58#3B?(P9PooC0U0vOiJ9qBnDHMvO3yLWySl8eGBNtQ?TfAIovmDE@9RKV12QD&i U=Hf;2xBvhE07*qoM6N<$f}IIibN~PV diff --git a/SWADroid/src/main/res/drawable-hdpi/enrollment.png b/SWADroid/src/main/res/drawable-hdpi/enrollment.png deleted file mode 100644 index 2b77a95f81d8004f5f3fcb7e5b581dcbd31dc686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 896 zcmV-`1AqL9P){Lb%i>*|Pzh=_=Y zh=|IOTCKhxMidH#psA@z)zHwOXm4+qr_*Wvn`>)pqc%4;jWaVdyMaL9!~FdGTfJVd z<+Uk|Mk7ol5?!;ivj+nM1J^d2?P_Rf=n@RBKo%eH*3{J0lw)FI;;_HJKi|{S^DDqy z-sACnLvu={Qp-0}6lMxd+3of}rf!;Zxm*|FaCi&N@nXLf@QcUe2RAcCXKs3WdSz#4 zN6u+;bokLlZ*Olt6bgNUG0z$s8!2AmN0&7yDqp+1yPpe%LW;Ne70cMj$jC>h)A zIEvT!-3+hS`+ae7@ii2X=CWHEnM_8BL?TsveZ3mER*S`AVHxu=#;*{NrK`2Iwf&=` zqerX@2M)x@X0x*O^>q`RBm02C8Eo9c@$qpF9F|fRa|*#wS1cA|gdgrJ$W(4=X=xum zhAxxIuxqby5cXzfvst^bvGE34n-lB;@FjhHeR;p%e*%#Jb1h8q8yg#AgI{iLZf@IP zFm&L$Iy*brBWN<29b>9p#1gJCKM>8~;o&dK z%gcMb!jDdJxm*Xg?p=uN!ootA(P&iPi~m|Eu~>{h>r_&yRKWX85fKp)5fKp)mDEov W;VU-jMXKTe0000y%J9ZSVT)A?jot>Q}?q&B1Q2ze@X6MeGGZPAhKD&19`f=H^WeroN zOi@joIPv3{I(4cdCMKqK_3G7`ckbK?A2eu?g~@x0KmmwvYHI4ExpU{XhlPcyCQO(> zfI2Xgp`oEPRCImj%$f3%l9E@aPoExQZ*Onfp$Y3d9z1xkdiwO~AI6U#uObjLX3S_^ zv0_Etk|j%i!FWDr&YTupC!i{TZ`!zVV>EJ(ZPG;J?Ck6o85vmvFDc1W_*-8jEtw@;o(a1DnhdT{Q2|czP`S;Ch09JD=RL5WRRCA z%&_QpLx&C>1y8WFJwX6)tvn(kqMd-j0LseB%BNsSdy@o)^27y|XCchgz>r(ANs}fC z+}zw)oe3r&Ab=kd64FTFihGo0Wo6Ic@!kP!)~s1FfD>9+Sg<;?XP-WOoZzjGzz!Wc z)cb+a(HYp$qes6^U{EJDJRXk^ZciW&ZwGpLc{ziKoM;Rj zIM5N&j75s3*8wB1Q9UEiEnd9%-Igs|8bu;e8gw1%NfYK-zB?A;76;V-9a@^MnpwHvt;vSTimL{Os zTkBQqQZa^nvVsKzkOKlbdwY93r>Ccjx&jPgWw&Y5rXSF=4Wd5H(b3TzpA*-tS@Q-R z!CwGW6C4~|126=(UE7lcm{beytHWGTFsij)K;64{&l6#hiZIDV4%DJOkx)b#+5e=bnuNqWL=VuK~}OQp-ajN{WT% z!2jyt#YA|{zDJ-inQvlZ;v)(RSW!-T5RMXO(+;T?En4&jL=*4hQ1PT+j z(i!3Lkpw;mOqZi?-@fL^Nfw*UW}%2%qKWm(%gcL=mPc(w%&Ulxk1x7=_pXi3jET^& zLi3n~#kMl^yl~;drtRCe|2BH`=$&-N!=>oM6a#4mX^p7zg4SNJw#!Bg^pQ(Md-cl=i-22GZE@?GBk`SgRzAi4yWsL zk;U<40T@ZDY3JqeOcqi8|9uCoiYxSAC_L>5kDD7p41h$`Vt{~w%w(u1cXzk?)c4@UK866Li6ZXWwQDmG?rLBNOBtd>caI@w1fX3hkpkjc zfkIjgJvRdJZV3QvW2^A~{rg*joWztC1PsI_%gV|UQab3;^0W5u-yg7b>(+XrbWN+F zfKsSM(q@Zm1T+Ki#i*vpqM^EPkZd==|avm!v%L;dK+inQ43>T27fq9O?> zzJ=KvqzA%#tssbcJoqP2urFE6(BL$N7J>yE$k0d+1@vZdx9S*uAuuqI2k(^QA-^KF zTeMVp2LOHmz$Z`uBkte7Z(~SsFdiG^6-9fJl=G;Sa)1;;l5x9T7(pVo*RNmq0M%wA zSziNClV(SXJlGK%8(Rl?CxNKt8EUr~;pT+sc}WpNh6UBPmY0{OQ?J(ThcagjD}Wn< zS{1!+-MTtPW>IK>f}26V6<7dIpIg^jJ6wL$=4hfti3oa5!d!1rLivPxWer81Kn0oh z;u$#w7Hy7>jxIz(kAyho>I)ogp_i4FRimaVHBq9JNF)!@200jlr8w}6Cn~=LEcu=R zhdfjuWPXR06Cu0wvIB+M=>`>4LoYZeLQqp%FI~Enq}>td{eVz*MQzG#kja;rsg3m6=1C*G?3Ok z*=-^T2cexol8%5O96JyZj}Z-y1_i|=H`*B9i4!LzD4_2NoJR800o+J>b=%z}hYsW- zZ?j-1X6xY{<_f}`<^~rA%mkjEo~}7LIg-xS1(9^yx{!9V?_jvY8VVBJ9X-mkXk0A0>fhLv5=pc zZ8QjHIe?0BEfXV4$3fo_;aN8@+8AJG&YbzOz?kg>vUU$gn?{724lrh?SC^r^X~eLs zNdnV#5GcqeMP6Q>6cVn9ep=D%foXnmpvcY5Evc%i8dXwK5{(k_2Z8F&?;?@N#Mai9T_Cg@rca?zD6qG;7tYSk`i_r}%ZG=D zcff5R1hE-Fplc)a2x(QAkLLXk}$Zdhg!7#*B=Nj={mf-S+nO z*Nu&hubY~hUUzhKyeugxQ4|#wwW?IAruFr8X;@g8i0(B=a0oM=udlDHzP?_CO+U`c z$~uURjXg|ANH~d$i#x&kz0*26I{NR##Kgmbf`WsVmX^m;Q&Xy-prES;2Z}-tOx&!i zt9zc3l5!Lk6{UfnkVi&Fe$?qZ06d9_iP7Zd=I&QjRrMhs?IjWk-%vtOTv1U`jg9RR z8%#j-Ie`SjZ{UM-b93KaIyeUh2VrGpWp#FT_HX|cl-7wo{Eq{?q#wbY^iuMT9tsKP z4Gaw2tgWrx{lB1enL{Wa*3{JWt*)+Gd3t(Yy!r(O2D-PkwLOOjeA0%Ak@ND7oCF3@ zu-Dhu_w~ZU!o}9S>({S~6$-@|a^grI7!r}>({C;|I)T_3olq@?4{ z&dyC27Z=HeGe**m5Zt7VpJjpmj*pLjo0*yUq`$xafw#A}jL+xW+S%DTp{`Zu=jU$# ztVUnHq1OFQ_gpAr+J_;@Wo2b$^TeDkIE2$%gy=kKo107~`=I!urQ$>NJW#)$QP?qo zi-?F&`}p{{Us~bz_xG0#4GldkEG$%`Cehp00O%6}b@oMQ&D`Al3l#D~u=*!c&LJG% zjgF4qM^_@gv^EMtV%yx@90WCcfyDo7Y;5d-ySuxH=|1F+)5OHYGXP`EPkgEo?w7}y z_My(s&Zditi*fM!YuBz_VcL*XDix26jNAfa`%G-n^_-j>wV9cjtwHpUHa0dqxW(D< z!!=_bk7wfO=;(ypx`n*dThNI~M8H#ovthRU1dc$>%*kG^ z#*g(B;S(A}Q6hfr>gsA)TU(PF^mzzmT7ZJxh)o~p6N^QkHH8mB4hK4c%!?j~{`Fq{n-AS<~}Np z#}Q*UZro@Ffc?|+kAEG&$dAzZZvoJktU6y52n2kL9p9pZ*g!~bqmliN6Z}?MFvPxBFtiBG!BgILKEL_LCiS#KtTe&f>ai|5Jj!TfRBX_f=PVf z14R7?X6we?^laKyyKvJF2BuBA7p*dj5av751&*VmNh(#WTQ#S}}lX|-CFTCG+kCnv|G+ij(%r>hu-Q5lU!X`u`TLyE)U_@TVKywGa37E&3F zN=ix!csPRcdc6gKK%n5{- z9v+^JkB`3}92{KD$jHda%*;%cVzw9n&0v6+7+@q8Vb(tIV3;xE+S=NOhK7bneSQ6< z&1QSKv$MnI=H{l028Fw+^85V-9LK$_tE-DtR8&N*hrp_64tmU5D_{HHv$ZgEciZh4I^KxZ_h2T=Xg2^P_bV)#(~vUs_r^^?JRp z+uPg!11BmNbv86KbTK(OS&aB%h#~0yOF20?2AocQo}Hb&xUVl!!G?#2LlYAdMMx>s zu|E3dh2xfbe}CWXa=C(%f+5&OY&P2`ES+ERcTu#Dz3&R`6%7mwwA=0Wk9Tu5(f1g^ zVZ(ol<+1mDLLVQgO<8zF8iw<5A*46g_dPNYeUIU^e!Z};5J0N$ zhB&|9&-r}58wCP^d+YrFQF*(L(!IXE?(gsKzrH(jQh3Fn$K!c{?3jVe*2W`~$;6Yb#F!M^v3#r5`sBybLJ48O z+}GEauhZ#-h2o9Yc08XP#VYDkqtU366jMww#S(4*0Cm^wBkXEu-~a#s07*qoM6N<$ Ef}#RDJpcdz diff --git a/SWADroid/src/main/res/drawable-hdpi/folder.png b/SWADroid/src/main/res/drawable-hdpi/folder.png deleted file mode 100644 index 27e3ea0cedddcc40cc567d16e5931c70036a248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 zcmV;q1xEUbP)9qk9C0Dc z(3L9@rMB8dXBfN6lrmVDXQ1F{=y$|_h*nLEiT+3q9L}Ho_vXLff6n>tx%cMLBfHqe zE_Sht36V;rciQjHK&`H>J_-yBl(@ROip)_ypDzju3i6zBN5|{I!NDS#Oy8h%#cNnN4K0f}&nv#-YXlZGAGc+`$ z!te1|0Zby1JSi?N)>#UQ(d6Xhs zR4UI|!}0O)mw9=4PZt*#Wyn_tRsdr>M*uBVVpsrs+uPgw!pqAmh&8~h<$2`l zQCnNvFMfW0(gy>KQH1p&^6fjZSnTkifPsuo;I$o)isV57qj6+LXWL3$Z8kv@AgrwQ?d|Oc6B85BK0ZED4u|7_VwXdeIF>)Q1a_^` zvn>KfoZLw_Ya5~*^PjmfqIX8D#nuE9o4oIc?rd-aBgm{1wXuv_1quGvCow3 z41tg}zP`$u)5cU^Jo^JMtbkxV%m#+ehSAZ{KNl7jBH$qo3Q{h-6Aqw7rKP1h+73WF z+Ssu*?O&<1sg#zMwgoI=vw&gH2DMuKdTD7XBOoAvOCdNvKcAu1Y7ao~@99U`unNe} z&wqn3ZRPX%Jd?m^V+W024GauK!%I%&Er1G#_YUBGwp1mjxestfND()aIfm;KOo|7v z(MU=TwL@MB@n(tuiWQzBMfm9p3k&^uO0r68J|Oaj9a;fqG2*$xW}^P>CS-rmBdrY05M%-+wt)52xc}bF&WEI+&;s-Betx~E~bg8onTLd-cMk?U}pCf z)cF`;ISo)B*+3R&w0^b#?X2n3$OFTU%S@ z0)fEt6Bh TJj!(u00000NkvXXu0mjf!kyTA diff --git a/SWADroid/src/main/res/drawable-hdpi/folder_open.png b/SWADroid/src/main/res/drawable-hdpi/folder_open.png deleted file mode 100644 index 27e3ea0cedddcc40cc567d16e5931c70036a248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 zcmV;q1xEUbP)9qk9C0Dc z(3L9@rMB8dXBfN6lrmVDXQ1F{=y$|_h*nLEiT+3q9L}Ho_vXLff6n>tx%cMLBfHqe zE_Sht36V;rciQjHK&`H>J_-yBl(@ROip)_ypDzju3i6zBN5|{I!NDS#Oy8h%#cNnN4K0f}&nv#-YXlZGAGc+`$ z!te1|0Zby1JSi?N)>#UQ(d6Xhs zR4UI|!}0O)mw9=4PZt*#Wyn_tRsdr>M*uBVVpsrs+uPgw!pqAmh&8~h<$2`l zQCnNvFMfW0(gy>KQH1p&^6fjZSnTkifPsuo;I$o)isV57qj6+LXWL3$Z8kv@AgrwQ?d|Oc6B85BK0ZED4u|7_VwXdeIF>)Q1a_^` zvn>KfoZLw_Ya5~*^PjmfqIX8D#nuE9o4oIc?rd-aBgm{1wXuv_1quGvCow3 z41tg}zP`$u)5cU^Jo^JMtbkxV%m#+ehSAZ{KNl7jBH$qo3Q{h-6Aqw7rKP1h+73WF z+Ssu*?O&<1sg#zMwgoI=vw&gH2DMuKdTD7XBOoAvOCdNvKcAu1Y7ao~@99U`unNe} z&wqn3ZRPX%Jd?m^V+W024GauK!%I%&Er1G#_YUBGwp1mjxestfND()aIfm;KOo|7v z(MU=TwL@MB@n(tuiWQzBMfm9p3k&^uO0r68J|Oaj9a;fqG2*$xW}^P>CS-rmBdrY05M%-+wt)52xc}bF&WEI+&;s-Betx~E~bg8onTLd-cMk?U}pCf z)cF`;ISo)B*+3R&w0^b#?X2n3$OFTU%S@ z0)fEt6Bh TJj!(u00000NkvXXu0mjf!kyTA diff --git a/SWADroid/src/main/res/drawable-hdpi/folder_users.png b/SWADroid/src/main/res/drawable-hdpi/folder_users.png deleted file mode 100644 index 27e3ea0cedddcc40cc567d16e5931c70036a248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1465 zcmV;q1xEUbP)9qk9C0Dc z(3L9@rMB8dXBfN6lrmVDXQ1F{=y$|_h*nLEiT+3q9L}Ho_vXLff6n>tx%cMLBfHqe zE_Sht36V;rciQjHK&`H>J_-yBl(@ROip)_ypDzju3i6zBN5|{I!NDS#Oy8h%#cNnN4K0f}&nv#-YXlZGAGc+`$ z!te1|0Zby1JSi?N)>#UQ(d6Xhs zR4UI|!}0O)mw9=4PZt*#Wyn_tRsdr>M*uBVVpsrs+uPgw!pqAmh&8~h<$2`l zQCnNvFMfW0(gy>KQH1p&^6fjZSnTkifPsuo;I$o)isV57qj6+LXWL3$Z8kv@AgrwQ?d|Oc6B85BK0ZED4u|7_VwXdeIF>)Q1a_^` zvn>KfoZLw_Ya5~*^PjmfqIX8D#nuE9o4oIc?rd-aBgm{1wXuv_1quGvCow3 z41tg}zP`$u)5cU^Jo^JMtbkxV%m#+ehSAZ{KNl7jBH$qo3Q{h-6Aqw7rKP1h+73WF z+Ssu*?O&<1sg#zMwgoI=vw&gH2DMuKdTD7XBOoAvOCdNvKcAu1Y7ao~@99U`unNe} z&wqn3ZRPX%Jd?m^V+W024GauK!%I%&Er1G#_YUBGwp1mjxestfND()aIfm;KOo|7v z(MU=TwL@MB@n(tuiWQzBMfm9p3k&^uO0r68J|Oaj9a;fqG2*$xW}^P>CS-rmBdrY05M%-+wt)52xc}bF&WEI+&;s-Betx~E~bg8onTLd-cMk?U}pCf z)cF`;ISo)B*+3R&w0^b#?X2n3$OFTU%S@ z0)fEt6Bh TJj!(u00000NkvXXu0mjf!kyTA diff --git a/SWADroid/src/main/res/drawable-hdpi/follow.png b/SWADroid/src/main/res/drawable-hdpi/follow.png deleted file mode 100644 index 2e9a2bbc4ea4e2da04a8dd218f8e18cb41e14638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2174 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 gt60Sz>%07*qoM6N<$g5N{4`~Uy| diff --git a/SWADroid/src/main/res/drawable-hdpi/home.png b/SWADroid/src/main/res/drawable-hdpi/home.png deleted file mode 100644 index bc4a490bae11249b0e564e184be9479b85215f5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1759 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 diff --git a/SWADroid/src/main/res/drawable-hdpi/msg.png b/SWADroid/src/main/res/drawable-hdpi/msg.png deleted file mode 100644 index 2f3ac65527dde37d4d1b69ee093c780c3a7a8a94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1726 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 diff --git a/SWADroid/src/main/res/drawable-hdpi/padlock_green.png b/SWADroid/src/main/res/drawable-hdpi/padlock_green.png deleted file mode 100644 index 8533190bb742fc7f99532fc3c2e58ec63643ceda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2081 zcmV++2;TRJP)PAntn*+8C0SL?U6znRzEO$;tW7 zbKcwYzTb(7Ss&{oTSd6eSpy1#)G$;CzP+orE<8g7RnMwE)Hf3Iok&$23 zR+`T_UGj=>;X8$yk*~MO-$ipNl$U>A_=qx4=9rk&;-qA07wgaB&O@S(G2Nv8BHyEN zR(doJwx3jb^cQ)arq5&#RNWlW=Ql?(ig(jUW^(TNu*{ z3)3s>rF&)Oz#@m=6unHZ(#m|MvkU%F)$;eA{G!BMJP8-Kx=LC&+4QWGl#@1j$eR|{+;4ZLq^Y_%rdm7a2V`==w6UlW*`k<{{P_J60W@fe&q=6^T@5)KCef~Yms>}|cQo>1B<0v?dMkNsTP zRoS!a_r;`$153%IP-Q0OzXSOdI_1tA4HH-IoGrX@D>?R;EQk<~k4uFR&uIM641wc$ z0L{(n9o64n{c@BRQBc4tHcC5~ht>V8Xa2s0^3us+$-Q%f^?S0m(&Coo77K|Ta$s)b z#hM9)m9fN6HGS;qM!QrHQDDeNL>=Wf;eoUM8#w0RxHU#WVMcaZXbBd;;YnCry+gFO z&Q0r2r46b8bi=#{wSDZYm=`ZzY^byFbgI6JA5i@xolmH*EAw^K+|O0PzH=e5 z&bHl9-&ghUih+tP%S3k+r=;;(N_+GU;kSCHa2jMr=Memh-uMB1enQiTa!b<{$)lC1 zYQq*_>*{{?f13ssdSLjt9pDbjwh7f zgYSlrW){q0Rytqth6hdotfB2v-6Sy{zpPNU81N8%1JlGI^CXc;Klv#FhT2@=00Wzz zg8=bR+);j8(n%i&AH59$;whpwA+H7hX&pM|CM*-!FOG15AxCZbTyam+&D{fqU?M~| zaw2te8oT-9BibSEL%D?>GO$yFs|*ZLqs9@j+ibNg0XGeb141=rhTwKme*6ZOEbWJEbCokrikY1hxqRL zPH7=EEA4IH^$LpLry8ywzZv!&yx8@0Gr_SP*V@Vy@NHe~H; z478#&v2No?o5;Q`?fjzcxgukkI~>!F3SdfL zt}-`7z;}?AeBW>YJEt@c%O^wSi%~pYa&|cgYn7JNrpEWy|S{bt?x<)la9@4MGLo8+xG`?D|4DMJu9U?bq~o zbG8vy2AJ(TV_M5)`8}nT^|N;^A}Oe7)w;M3YHferU^mbrDR>gL25z>kkM*%Weih^YYaI<_4&z@@00000 LNkvXXu0mjftnK*C diff --git a/SWADroid/src/main/res/drawable-hdpi/padlock_red.png b/SWADroid/src/main/res/drawable-hdpi/padlock_red.png deleted file mode 100644 index b7a8f26f072f9549e63e6aaf65de7c21090a2e31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1666 zcmV-|27UR7P)C7YciC|NR6%+A5$>a|y;^g^5QB`3K(_xsK{zwh7q z)4OWbN?U1jjmP06WTd9D(o<5x629ZI*$MFjC_OzzA{4S+dcDX&lDXGTp4{Fdlf6U8 zYf~t4Z=O0OT1OCU921jZ2qYdaVMBJd$ZjymTg%D}J+-yHUXAAWuIlPP-D>qaguJD?DJYPl z%w=6E5ucxUp{QuTy`o~g9gMSo0+a5s(|*)<>#EbX@3xOQz)H%UtSwAwKzje)Q&k^b(eu71^_(M(*E z$wraj3{Knu9=^jqbSvit*{B0`EeR+-mz&sYHh<+kbLKIfVXmsG*?xmzqSs*fuG?ff z?YVsUYe{x?mSpwnERWfo2bYY_TVH>v-)Nk`zH}1Pgy1{ugMD!fj-^f% z>Oft#y1LviKsRF-Mo)5bLTh2+9&ob$P$PmXHFLAPyiY0+Y;vICpCA+aU|$>qj@pYd z9F)m&t5kmL!Gn7|NlDCIBspxhz^TzZXs4VDGypDzmo}ZQK9j>qBNjMeIL2CAt9RGb zybQByvo5Xn0qSOKD{@m)3Gi8eINv{8f!6Z!pVte8;z(uVSdcO5c;goSyCG2*=tSL& z0fUH~xLscU{JmKv$=SZRVy5N)zkm@j0E}P)6gtvf z;7D(kmA$VRcw#<(b9zb&Z!v^2=;ZGTI({PBz#uvhU6sr2a2?N3uVak$uFGU2Ko1v5 zBhFy5N{RMoz6afC0})M7J|2&2EiOI}pr*p*Q9)k74gv6@=uN&BRz5@^Qau_odgk|F=@0MIIy>~s>;6*nK1zjjc6$;$=w^q2;^NUE#1}?fy|g#v9`j( zeZ$$=pHWwA2za*-AKr_7;tJT@83VsF*wi%k%xc|N@%Bs^TGC7=-(4x(cX0s3fHi}zdm>^0hB{?kk4E6L#J*Q9m z7b-6%fX)45sZ>4>R}b7I77HCD`8+OxVYu{DW8*lF!y&?aQ9#^lXc&*nkP7-wy6Wl* z!~((R)K4Lh*RIp$yQ`}w<1g}1sU}@YWdV%+lKMFW@*o?}?^LP&io3`I&lng!N&OUJ zo)DCCxz8AWaMBrJqWK|O@O7_Jy|{7wcyxeeq@}U0$mLtWCq2fxgYzTCGC{#_LeMWh zxq9NnR&F$E9@y3i1WA`lO7?s8`X@cG9o$Pys1tRYi;DKIE!F6r;U7c{eKJE#5VvqM{CJ6cI(xctaGtE51b32SHz= zK27mO)TefEUVIT|K&G|hv@pX!M=7Lf=)Zy)?2L&gCdLHLf<;2kK4TjWs8kL?SV{NF);Qcsv20&lljkr}>&&T1-p~=iuOgb9#FE>g?=%T2N4+ zC#ajew6s(|Ha7N@;9Odk*X2i%BB-kf-RN|U;1IbZmzAX@`7v?G(%_P^v_*cFyriT= zKRP<TGnx_4zN8d?7g^F6ZGwu9j`mnv zTl<1SUszbEw*{)czW#MrSC7h%>Ti(LrB)x(9m$!(a}+i6Y~#wd3kSd18Z(>emgNS@nclGM!zxb ztFf{1&z_#1Z@s;}xr`$g85t>=nVC5O9OI5K>*q)?>aegdzues1*!=wbTfv%|n%)fz z49MsnfVJbkb0!l>GKPfT11wJ<5O^{M6NyBUrKP18G+-w3qeu}{aB#5L%gc*v3mDe0 z%*V%v3rUFyjv~hd4q$&{@+UD?A!9Iv*R!v$Pl@&Q-dX}M%de%SMHv(nWa{9qU{?uC zhz(hZ=v$Q~T|*N24Q;>Y@pxQYG9q_#bMxz|si~J(XBMHVs;bV_u)x5;kF#bEm>G^D zhc$YmENP#HT)~ZyLjcy~%Pkn9CRo#)7e6EEo&+DH!TJ#$dg@ zy)qmPyf2U zz8;I}!u7$(a5fX5cx_jyRBy7gvrT_k$7%fICyqiFkl`EDe`?g60**Tw3Rr&>txs?W z9l(KAgEgm7DwQV3>0m&o(>;lZi16pQqfya{)41uMSFSt#X04EBjWyO-W6ja_A7wa9 UmH00bUH||907*qoM6N<$g6`aB#sB~S diff --git a/SWADroid/src/main/res/drawable-hdpi/refresh.png b/SWADroid/src/main/res/drawable-hdpi/refresh.png deleted file mode 100644 index ef3f61db9f41c2340e648a9fb5712d3b01565c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2147 zcmV-p2%PtcP)2GQ_A8~Ol}lSmOcyIc8;HdpiZ@X4f^tz5MM1=ClLDd@V{JgUsy`H{6GWrG z{I`V|Vlt8q6^&T{hfB5}bN=EMqZOPeA<k(vH*a3}OiGAUih)Y0v$C=}Km*wHhc#=~i~_(o{(7YJ^z?De9bdb4?days zn?K~|=MU)h`i`imC^a@O^l*3zgTe5_h7B8j*}HeI0dtvvgPK2ozToWHvrECC4jb&n zM#r#WJ8gRP>eW7x;~hKJ8H2?8jvqf>57mqjiA0~JB9Ta90lsd_mMz1?tGKwhci+B! z8c2>8Fi>DBrV}eKFYj5ue*LIFU_22dI1Uva!n)sGx^zh|m&+poN*nfOf4Adzu4Ymn;UosW|bgFbKCw27pu zrSQQC6bx0oW5*5yRA5?A#1sJRP@VpQf`Uf4_j7P6)dvn7sD}DhW24n@_ZCQ^59__b zK}~Cy?!F6{#Ny)O1aRL5#HE+hfr2L-!#o>oQa-*)Z@vf$aRCsyHlr5bv=Ce zFlE`YWwMr*7T)5;i#@KZQmJ?}Cp9%ycK`nUWVrFCklx>H98o}k;iQ?eva&kp^r$CL zF!Fw=RXNmEfmjpjOsm+WUXH(^aI|u$xe@CPvvDo}#Z48#Pz}THb;ryJ3SKJ@pdz@~ zFw|3lG^+*b{Bg!5h8Pk9{qG>#amN5B_Rb-x2#$^^cF&$Yb#OAnY*mrsm|wu)+WC!* zjp^IBZy%tnz>T!VPM$p3Me4^9l!8DZ<9N$9&~pN|V8H?bayJuf>w_yp`X8II!RS+* zHsz=NMj|cxo~@)f10$n;{P?j5vFDm2$WF-^5E$(h6&25PIvuBC3U!$T>-~mx$EM3t zT#0~XXJ@~Llr?kb&gJ={hP=CX?KcI|qBazl6T-aSr*A~qET zRqw>QZzl8bMmX5l$QxU+4<%w_s4u`mZr;2Z4jaMK3JnR4;0TV{Ip81| z7`Mz9Vi-n-pcxRuroN+4D0IsQ&;9dW5{V@8@ZrO?sIU4^TiMtU=G#u3IPoXSk7Tak z2o&Pz((~ufKRG5Jp{jP>W&r?%n68X!SMK;ZX;dnwx%fnf^g`(&;ZS0@d8y9D*WMjf3rVm!~3? zdS6phV}ewD14aRmqB{X&o1D@-%>M)lcZ1;~E^4UJXriHN9nczg<1f6YY&lp>sPp=%0qe>K+F-wM;X)_)NM{@v)X$Fmv70NX z&dyHWojZ3@U|TP!f^er5)cB#kieKfDFTm(~WZAYSPoAWyRI0Do_B&kr9V<;s=Jl$4ZcGJdwr9GaV$m>7NJ$dOD` z6E6r9c)QbzPf)`)wOXxWyFO=NG>00WsH*!d7E8yHB}>$BAPiNvbR&cEB6L#K5K7M| zq#&3x2?+`6GiT0pAgiPiqgTe3$mGd9~je2XBW6oQ=XNA-ioO3i!z!0PC2%0uj&+i@g zVO{~!1)w7oOk76LXL{!CaGa7NP|(=efF!@J0eW)qRVtOqmoHzY%ZVyO8YikpgmX_);w;LyHb8Vxsm7>FL$Fj4tZLq;-h*i2r zj~;P*GoBuZN_~0Pt-^MMV!h z;9zla@lau5;RNBkA=FcYRaI3zGzYQC+|baV$3ZH@V)1|5dGh7-=rHJlkK$HsZEXVL znO3jYYXLwDx32|QEwn&;>(;FVifeQsNbmfwS_{lq002ovPDHLkV1h-17zh9W diff --git a/SWADroid/src/main/res/drawable-hdpi/roll_call.png b/SWADroid/src/main/res/drawable-hdpi/roll_call.png deleted file mode 100644 index 8c908b4f43d051a746ab2f7f4ef0561e915bbb61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 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 B?PCA{ diff --git a/SWADroid/src/main/res/drawable-hdpi/social_share.png b/SWADroid/src/main/res/drawable-hdpi/social_share.png deleted file mode 100644 index 14e4655f6564a819d2423f5bab8cc44c9d97e9cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 536 zcmV+z0_XjSP)XAN>d zQmXkv9rKDuAR%qqoCh?oI0m9p0;EEkSBy&uu%{UyEhRuvGr)rc^AX@fGeF6<`8Y6V z5a8an@w}#S)*8U2Y=8_c0<%CrO^rqwSB#pP#|PY1dH6Lj+#ut~kx3uG(OnDpM;jrG zS3;~l?It6?#5j`3Ej6=lAY13&tf_hYW_f2e9`n@{cGwJ!beXPLuwxvb533C_{%g84 zFn(jxxKi1mYg#p~R5AzU<&1_(OC_$!cfFvf<(9jbO3Km%ji!*VpQn+zza3E zBJCNbx$0~V-$`c8QVQYy%F6lrQ6hV>G`j1>iyc$46r37z?5cy z5h($%m`_5QKa_O1i%Qb5dC*UfHcy}ubZlPB`~lGF309Og?`c|PUTMTPY0gJHCnqN- a@%jSm5AWe;V?!AL0000MP3%ej%yiCl=Ks$B zo&R#qtXh?7sg`P~mTF1fSe8xP%W`sZ6q%Ws>l6xwa?P4Gag!}uw&YAsPR19UQmK?N z3?t9a&);zC)~)katMz$TSJ&$^XU@c2Iy*aGTP&8}Y&P4&;^Ja0K+1*stX;cS7B%3_ zn>WkH$H&$6_4PYCIyzhigW+>^b@kG|ef#1nb#--%Cr+Gr1F$6ojt8RAXfp5JyQhBk z>{)g}L4hJt+Q~*oN7c7)-+p}L$dUH|4R&+S=MD zhYlUu05CG5<@W8{)xEvF1Kr)-zhIDu!I~fQ^753DfvMH%?~Wclx`RN`3keiitG&Jb zqtR&OFq+)y)2BJmhclT>-Xr~{>-3vM>OFKkcI?=nH8nLav$C>^($mvrqzgc4u3o+R zsHLT4VgLU9U!c#wt*x!^0n!3%W=ru%GKa%aiWkrEpc)$+7p`5qHv9DHQ~kz`8}mRB z7EXi>b_~@Q>K=e$SFc{J;_0`3{rY@Z$_^lZ^Sby3*@FR|$AC1628Yp74Gs>zz{oA{ z*|W!U;J|^;0QR#=rP2`SM7Vk%{WJs$mi!Br`U;8{x`w`av)Oz;BO@dHoWqDI!EY!2 zOq1CIlXLKn8xk4Ec>0m00)g@aw}gRzk(QRWF6={bld`h1@-+b?liTffE;~D$O;k`0 zM!!G;XS1|>_wHHIz;^B0^%dCI*cgZS!6pO!1fVVq43=S#7}p&> zeAw+j$~a%FsHk`x3S7eJCl(mostnik2;gp^LZpBX+)IGdB?bM&0;7Dct*y-!N+AlG zLRzjE{lo%8AA9iNK`xX+KBX3S?%e66<%-fzEHJ!;MTP4ExUh;5IHDyIR2|h*V(I4x zswpOx5(A71P*kz{D_5?#;Xpj$EC-?b>CNTKmq!6=K}7CH^Ynl8LjulVKr^CV_f-i*@6p`N0vLe7Dp{1DMOTf^-vcRO!Qf%-|8en2*DJAzy zDqx{#DK+;C0POde0*hoZho@yvPmi0@FG`~t8X83BeiX+9z?LT_CT0Ol6%{c5<+qzR zZ$`BIrdF#NyWL)ffpJ~9aN%upb8{1(lPv}mWf(f0?g#RUG$&Eiesnk-`luFcg$t%# zU0qymZm#47Q&MnxdRkUgRKy|?rsZo!?0>gy+x9&wf#*a)AB{PbJb6(i!G25J-iKnI z&=R*Lk|pj)@;U%uE?&G?i==s;@=T(!(P(tj`hK)aVzeotN8L2XZ|w*-CHPGRp#<7+ zkRoV#s2s{nCX*Y}V3`IMiSZ`@YnEbhG22KV`1*<8Mmlxs)Yokwp$NB#g54KLeA`Hz z!C?5vmp9~9FI~Fy4vweN!Cim$Ew#l}K)pp;0fY6LuV24j0`|lX zl)vTR{=J*)aNQP^_b<+!JLd$=oMyAxdxY0?c6N4ph0gu^_#-dE>;C^ed-kl;VzIok z*=&!tZr!SdcV-YBSPlP)=HcNXV7-<|nwpy2)6&vDud1rL1%MBaA3v^U zEjR*n>Cz>K(9lqMd3kwha&q#M*|TTsV`F1=QBhF^JRXm|z?4d*T%*y{CL|=hiH?po z0FYt&^y#{Yh=_bgM@IoGLAA8BxbNAsr)2Ts#cyWJm|-9RD0TyrN~N3|H*UxeA3j_U zVDIM4nWK-7kJpjbSPhH;hyCThd-v{^EnBwyi2YSXpzHy2b93Vkw%Bw{40-tZ`ANZm zqX>*WVBX%|PB7oVW5yv>d<+2^6&P4(8T) z?bVxU2&um&;vGojRpSNlAG$Yu2n@P*=dh+O0+Qo^WxUs}UE2Waeoy`Z8hZz$b+c0H#If21x{Mt$80@d zs^UQuDeZfUFPSc0zkc04J3G5%;lhR8D_5@U2HTZSnlvd2RQ{4lI+K!;-axAvB9Vws z^N?|S@7lHN;=zLle}J?x0_HS|rM~$XYvV1Au_DH8f;EL*xpKuixS*gQd2w;^w{UnD zeSCc6{{H@>&YwTuNe-BREnBv%r>3T6I~8`wL2uf$Nws9jlHW}ZeNY5e)eFkMqfjVh zHW@KIJlumCfQj%XGU2qlO(Bzh&6+h&FJHbKE0IWetO|mup4iyf$eB2C;z;BIbfHk_@=wXbe2%q#-)ok}QAG`0V3|CyNN!eE zR`7-m8#>7JNMoSdR}BpfUjx*aa03uL14067>#5%F4>@_89@C z|LthjzkTS?A#H7KZ5VOGM|6*vkc&5<#NxZitVq49R;@C?hy4bvbgf>!`VRt(oJ>2!9?|j8*K%n5e9wT17OW89;BDDC88#g|`di81sG{$E|bZ^pFFrtY22$5a^)VMP3%ej%yiCl=Ks$B zo&R#qtXh?7sg`P~mTF1fSe8xP%W`sZ6q%Ws>l6xwa?P4Gag!}uw&YAsPR19UQmK?N z3?t9a&);zC)~)katMz$TSJ&$^XU@c2Iy*aGTP&8}Y&P4&;^Ja0K+1*stX;cS7B%3_ zn>WkH$H&$6_4PYCIyzhigW+>^b@kG|ef#1nb#--%Cr+Gr1F$6ojt8RAXfp5JyQhBk z>{)g}L4hJt+Q~*oN7c7)-+p}L$dUH|4R&+S=MD zhYlUu05CG5<@W8{)xEvF1Kr)-zhIDu!I~fQ^753DfvMH%?~Wclx`RN`3keiitG&Jb zqtR&OFq+)y)2BJmhclT>-Xr~{>-3vM>OFKkcI?=nH8nLav$C>^($mvrqzgc4u3o+R zsHLT4VgLU9U!c#wt*x!^0n!3%W=ru%GKa%aiWkrEpc)$+7p`5qHv9DHQ~kz`8}mRB z7EXi>b_~@Q>K=e$SFc{J;_0`3{rY@Z$_^lZ^Sby3*@FR|$AC1628Yp74Gs>zz{oA{ z*|W!U;J|^;0QR#=rP2`SM7Vk%{WJs$mi!Br`U;8{x`w`av)Oz;BO@dHoWqDI!EY!2 zOq1CIlXLKn8xk4Ec>0m00)g@aw}gRzk(QRWF6={bld`h1@-+b?liTffE;~D$O;k`0 zM!!G;XS1|>_wHHIz;^B0^%dCI*cgZS!6pO!1fVVq43=S#7}p&> zeAw+j$~a%FsHk`x3S7eJCl(mostnik2;gp^LZpBX+)IGdB?bM&0;7Dct*y-!N+AlG zLRzjE{lo%8AA9iNK`xX+KBX3S?%e66<%-fzEHJ!;MTP4ExUh;5IHDyIR2|h*V(I4x zswpOx5(A71P*kz{D_5?#;Xpj$EC-?b>CNTKmq!6=K}7CH^Ynl8LjulVKr^CV_f-i*@6p`N0vLe7Dp{1DMOTf^-vcRO!Qf%-|8en2*DJAzy zDqx{#DK+;C0POde0*hoZho@yvPmi0@FG`~t8X83BeiX+9z?LT_CT0Ol6%{c5<+qzR zZ$`BIrdF#NyWL)ffpJ~9aN%upb8{1(lPv}mWf(f0?g#RUG$&Eiesnk-`luFcg$t%# zU0qymZm#47Q&MnxdRkUgRKy|?rsZo!?0>gy+x9&wf#*a)AB{PbJb6(i!G25J-iKnI z&=R*Lk|pj)@;U%uE?&G?i==s;@=T(!(P(tj`hK)aVzeotN8L2XZ|w*-CHPGRp#<7+ zkRoV#s2s{nCX*Y}V3`IMiSZ`@YnEbhG22KV`1*<8Mmlxs)Yokwp$NB#g54KLeA`Hz z!C?5vmp9~9FI~Fy4vweN!Cim$Ew#l}K)pp;0fY6LuV24j0`|lX zl)vTR{=J*)aNQP^_b<+!JLd$=oMyAxdxY0?c6N4ph0gu^_#-dE>;C^ed-kl;VzIok z*=&!tZr!SdcV-YBe{(;XVdmxyHlr5rm~iPT}D@Pb8}N08yn-+?$M)% zd2({H=cGxK0-~d%(^6AY)dvqARHvt>XRKYjHlSO#Ze3L>m04Q@V&i54Xu*O7{`>du zPm?td95|rfvu98G?AfyeGBYzhot&J^TQxZon=$c}EnBt}Pnj~MbmGK`730T`uaPlr z+O&$5D_5$QFJB&i_3G8}Zf76GYPC<#Mb zHe1LKtCTK4$W}ruS>&2c6J%gQ&I-c`qnR{eP}`k5cRs@tiq|D#s>sFMjvYJNwixG6 zpFVY*J9q9sTNcVV)#%;XdL0Atol~LwI=j13Ab4F?a6VnZR$%YipKj(V|5Kh8R?U4Ie)I zHFZ|iVkma+-rZr;s8I%mBBh{;TJwxzZZ~Aekp3{`vlS~=yr(RbvC(pXS4y%A!^;11 zZq}?> zc|p$ohx66)T~nUde+NKqLPElefddEnA3uKl8lNkb0)zG|iGb|hy?fgzsrnXF_V6W3 zmS|d{`�t089px52c{q!Aq3}gpzJR0F~6PJKo;jfe?tUcDD2zsiVu5Ei3l)^iRFx2dMD3Z{H4E zvu2If5W;D!;NpQIUtiyWDJd!8~EvxF##WS>^Gdo|aydQ&y5 z=gE^NgP?q;zJ2@JI5;?{kT{zNucVC|H$K?DeftLz{2dnl8_Hy-t*xyKhqDxP7OrkB zsCr?oE4YwJH#X}+IwTUJ4|na_^+8ybe0oU!Cy|SrxJD(pm6Ma>c!|&mtr}BrMsy)s-t(ToJrJOghNf+1Z-XU{z}+7c6NIi#Eq{D34qr zFe&D2+?tZ$dh_N@pKI5y`N$qHwxz49YcGuI4y$INdI||+4FvQIeQVz^{7m-k+vkh> zwYB+EMHp1#@;8KHNN{kl58n>~)KG}UhcFmS{qUAh;B$<~ASFbjq%MsdIkK>S|Nait z#R25-;N81->()JX?ATB|HyBWXL{Sldw0ti)t;HAecmu&{9YjT<*!Kt>ZX|Ni~htgNhm0ia6G>DO(Hq3e5_YYIi{)&YaEV~A75;Utq&dp_pp=YN0e)~y|c zMOj;gBHFLe!^2}RAzmQB49QPY<_Cz+wGJ4vEkPuXAyy|ut8d@F{o?WC$I}4zbHgxh zEimaUU_|$=TelV%BCo`-gmD?3j;#Z>e*O9c>4psfCMukmFQhCCAQbZr6t7K+X<=rB zu@Cw6+K@SGi+uTs6DJbufI$Wc)DT1Sq-yl&(LYcMykV{^7`4(!;*cm%L-Bs7m>9^+ zAf}aT3B~gC^z?)}VB|{z@oW$Q$Dx!J0jp)nYKealyy&%8D3U=L85#2^n3~pr!&5bJadGdC9z8k?Py+$^Qk1)_ zq3;qD5?VR+HoguRH6oOgpOh$S7A&K1Yp59osDaz=?(ReA;Ve-ERut|C==vAgsM7FZ zRFLB(^mCDT-VQ}$N!|{=eEITiArQF*$9yfau6&QSEje=J$fo+ur8Aq#Lts`lCsG0Q zo=qfD;V1d~`}@-7C*Z9FbYlz~azQclM2bZuB_+KhEOhq+o3gIVM`8arYaWBz!%#AA zbnhDx0C5;C9{H5u=jZ2}ot-@iV^!t+ei^vXm&ix`zY z4k8gv=KvA(7LhE!W#o}VdFZ}KJloI9%ggoo^XGk0>j9$unDcXk`E+yQDczj>#z_pv zzH;^ZV!nL3k!%`N54o?|tttV=fPhOjN^Xs;>A$Hbq`_tcdjjIE++*b(V@WrVpvDnOZ~l}Qfw4;(2ZRH zC<}5cl#u&H$=zYO27qPc&}X?l#(9xP1sJ73J`=*f3pI;6Zz>NPk`{SZ0^@Basw|Z3 zxy8fN)3XCTkrfjk5e74)uGAVqD7$Xd%BGs;ZuB%kUKNm3CKArt*jwp3OVH$*0?HrR zq-i6e+o~a6qkzAMg}rG_jDI#qO|heRz7)~>XMw600Uvwy>NSjQnHude3kwT-)WxrD z(Qg?$MAgK`#uh;u_C|pcwvneOgn{;304Aw`Hr0x;jq;dKDeB^y=(ax_RK0tOT55WC zqkzfNlhoAISB5;=X>VZCx##5Me0kHx&;#~SMMXs!)X9E@JgdHN;Xrn3n$#xmi3qlem^kD7&(&tw{+BEF`3der|N4z|i!=tHu00000 LNkvXXu0mjftZ&1M diff --git a/SWADroid/src/main/res/drawable-xhdpi/ass.png b/SWADroid/src/main/res/drawable-xhdpi/ass.png deleted file mode 100644 index 84e858731643dafa32790b844ccd8099e144475d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)hF}-%IgJ~@5_IPCMaiswE=P*;Lv$wwIfe!&1#O~ZiFSf%W3w{YEjEIc}hkOXK zMDjjOWs0DcLfImtJpxKZO&9^mqAW-eWkHHah6;xnA{lxKTv{YS)ea13kp%U_t#?V0 zfT|1_kRkycu_;#RA^~~PJfK7ZYDKf}5F!Eb+slMVK-a)kSR|k!PrWi1eF6c2%~f0! z=H?%UK9npDBg!3n2uf6GM0Id6B&(XD5NO|%t%%6LWmOY0p;V=bR47qtBJCTuNs$J{ zDqW;!i%p4ih^deW<(*B4IP@)4CpY4v!;fZE5=|+=lSNTA{Xl`pbSp032~-6C8AID5 zUbgsh;L6h(vjOi)Z?POO9-_ReB@L;x0&wX`fwLOzucPM`JY@@lC8|bk=&fuISNqZ_ nZiXQex diff --git a/SWADroid/src/main/res/drawable-xhdpi/book.png b/SWADroid/src/main/res/drawable-xhdpi/book.png deleted file mode 100644 index b06456d61d7f292a334a56b0fadcbe12d8f66164..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 741 zcmV{Aw39-2mjeeu9BM}qIXAUbySU$=pb?7-A{4<#l{SsB=X>vR_rAOPvgy_ra+kdO z@&Eqs`@Z)Q;Bfr2VUf=>^TAT?;f0%J=#nT(JofbMh?!~5mE!C^)3=J5*(;lQi6Zo) z3=K=rr>Uzmp6YMQPwVdsO52RYd{Jpzl%Zpr`etVnD?K1S6J+13=YifzLFsG+G#-*# zoC2;FSJ#&B9TMuOF2`10X`qt+&OnO-&Ig=cUL~HI>N0v{^0=my8sP(KTo+|@KexEA zh~ZIBub4Eo@jGYSjTk79N?mGvzsyvx;7h3TnR@yxQ;Ex04e_QgWgyTY;dBeU&MP^< zW)AYz#WR50SE-#1Yt*&SJ6@cV&`10#*3V7CM*dQ=frqa79d@md`f0tMZvazqpMgBvPMhW->ameHIAh z@K92e6k1|^OUNTon?Jd{$*Plnstn7}!N=B5Ys)CL1RHJ-Rg&rh&bNm@X|*);je|lw zmD|NYJ%*_Ys8w#&rY)>Xw=2no3N1J|v-L!y@%Wr92`^0^E^ec`*%l5q;KGcH$_=#RfyoO-`_M zSDy1~Cpvk=j_=`nM4{(**qv~zLm}&K$S{=`)Dz+xobkoNPuW=1W{Mf`Zy)}R`5)si XN3(`3ye2Fb00000NkvXXu0mjfO@mvu diff --git a/SWADroid/src/main/res/drawable-xhdpi/crs.png b/SWADroid/src/main/res/drawable-xhdpi/crs.png deleted file mode 100644 index cc1603f7a2a13be109c15df76e7f3f4b8668f083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmV+{0@MA8P)ZgFvOv$L~6KtM`LN_%^Iyu7?pQc|0nn}dUcWMpJnSy_~nl&Gkvxhyji00001 zbW%=J06^y0W&i*Is!2paRCwBBU>F615HNxW@8=93{|kKN5IulfktYv~^9s8vCI$vR zm>P!vf(*D6JxB0Z7GPDx%)s#a2ZDR;26mIUKA`&piy|guE)Nbxf04OAiBW_du%L4P zD=`Rw!WD=n`XITK%^!z;{y9kDgbREWAVLv?7cq){6QhVhfEYywh*30w7)3<6=>ydq zPLfF|5zLsI@E;bxAjF3yg72RpoK$vyARGkJ9|(sN{{+G*lM$4{_*2#+yITO9`K1rR z6>$Nv59cFeY%y2>vrd75ftM3kT7a6w)xf~-hQmb)Foy>+Fg(NM>IuNIfLViq;a@!i z$8{WvI4?j=ss*aU<^KiHaAGuIVCcu8h6@&$zknqLj*^gJBTNx6LNalv`S$^;i1h#i z-vb3ziB>7#P^_r*cLH-p>pSR~xXaVO<6-eSs!2 zy~1ITl;JY~0000Na$8N2YJRPK{EuflkYSk>s8gUG+N3V2Ma=Lb_v zN6td{Ojy)#JV&zzo1%3vh6ZkjbF)Di>P5Isl7`aW#SAzVF*-o#iT(_@gMcRrO#PXM z5W+NR7MT2-$AC}K12EZZK!hR`fT4(wfe1xEA=CxDil71p#F&KNIy5jp0GlFK6gRCu zo`6jeG{zT$Re5g*tHz~>c@jtx7}p=LDf*lMp;>-1aD4&N6R<|`G*}QNzTW_J;#6!V zJt%;C45)_TKeiy?5I{|;-39n4jn%dtc-MB}B;&J!SN9)7^0s2LL08@>yI;+|D;1C}hs z5eKzJv4Fwd;BODseAfoc1DqER;7W8H@O<*?0M3+I2WP3{EDky3;bJW~)3_c^gAj^1 z;F*ZI0H-2^LF_oQ6p}#`a4N#>HH7c*cnx6^UW1?};Wr3s5`Kdqih${e)2bAE7=aTH zI2}CzW?a4qTn2$n;(7ooO#b6E2(0KQ*u+0L4FV@R?r0#9{B{Ea^K|TrKyLa0V$8*D z5ZF3)oY9Y@=-UT8VFb?ztchTQrZeC%iQ)GLyaqwz?yf$LSVNAxA0MzKNDQYbtBf|J a@Bsi`G-~w2Br)1hT4q5p6on`X~w+RZ;aoMz!jHz@OXZL^R|t5j1YDA<|3PkE zTG&$+^pKNBje78+5KBQ1g6YMB2u8%C61Ct#OA9?zv|yzE0KEiEy4}=f-A$V0&Fo~i zCx6UgvTyk8cjmo$?`461Z)l=rRm`*!$4;}N{E`v>154Pb0rC~aA4LIThm7q7FqF)G*S06T{ zT1@N&D*aid_tM4msG#WQhx?Oy00jFww7lWJU4xr_Q}$D;nK73-hvbK@N;j8RGtI0X z%1Y2ZtM!xurpFg1+{fnv6uUNi;%KTZX6A9D;QUq-9GZ8QG%-4(3ul473>q|44o<&- z#i0A@Fbu;kcc2`4pRL~VKowxAQ-`PTWJ?G_fS_ea%L7-2uws9#*|#U zOEB7yjXJi^CXW=0(=WAqC8mT%RVs$j%;fFuw3A9G&7eVGF4>3wT{pet<5o~t5*l$H2U^l4;iTzIjyGcx3$X5Kjg4Lw2 zD31Mm0jo)`exRs2hfu`=XYqf47%lk!9mFVX)_oKJ$AIUInN5(e!Wu0+o%Ea{Fb z8>EVP1$L8A62or>e2TU%08_H~6g`KiLGm1?n|M8-k-7qpNg8N0Hbq>}#Kzu$M-epc z8C@9gC|U=hq7rcDJ7CTOr#zVg27D$#;&wg*UPWNQ_JIgRUm1u{BtSrs16qtw8K6h7 zMc{wN{}KtPf-Go?WX}KzX<~f$fEYy##3)i2*4Ck?0`w5yE5N|`Uv9J>9$5eY*`G>? TVl3cT00000NkvXXu0mjfD_+FE diff --git a/SWADroid/src/main/res/drawable-xhdpi/file.png b/SWADroid/src/main/res/drawable-xhdpi/file.png deleted file mode 100644 index 0a3d64fa99a43a639d90f01a51ca175882822384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmV-#0g(QQP)00001 zbW%=J06^y0W&i*H?MXyIRCwBBU>F5d1B_6bM+`1>kKxS|0~AHfP}=4LT=>sG?tZjbg$Xf_}s(LNW@sA|#{m zC_)&8M-jp(e2U;k;ZwwLffz-_#3=etj3R~tl$6OX&483L(E$@NX`BhSpYSSrfGf8k zyNO}N90w>X3b!Hzc=v%KhYuq~EJ$p2M_3WVz;eK`9D9hr`+%%Nn%03?fGqKgKq?sM z2u2M|8;IBehXXdOqk%c_ihg334L~(X0h=1;1*nSlV^hRE+K{0>00739H;RG&;jsV! N002ovPDHLkV1lDFlkWfk diff --git a/SWADroid/src/main/res/drawable-xhdpi/folder.png b/SWADroid/src/main/res/drawable-xhdpi/folder.png deleted file mode 100644 index cc1603f7a2a13be109c15df76e7f3f4b8668f083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 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 B=_&vK diff --git a/SWADroid/src/main/res/drawable-xhdpi/forum.png b/SWADroid/src/main/res/drawable-xhdpi/forum.png deleted file mode 100644 index 8c590f8d48d24d24c3f14683b5c6e845b303a02d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 607 zcmV-l0-*hgP)qobqC%gaDOKz4R^R#sMJWo4|ati!{@jg5_$mzTM@x!2d%kOleH00001 zbW%=J06^y0W&i*I-AP12RCwBBU>F5t0sjB-AJD~^QFy<$=E`hg*=_n`=1OE?MkF>@ z4#EsY$poy5ghEhE6>Y_0-Hnf^4*3?o8^a_w1q?q(*Q1%V<2j~BKmU1&qKJnDTX4wa zZUECv5N;RtKs$_V5{Ec;MNDr$AWW*m75<(G>o^|ZQuMa~t|$+8RQ`b}V)=ku(XS0q zMNIfo#RaGW1AK~}Kos%gRm1{O^bc<${3ifb^c#OtO#mx;hhLEZI9g_F;8pbJB*>%# z_)Yo-w(bLdMVw&kE=%B5^!)iS95yMW>;P*zl-ff+gRN4tRnRo~6=pE2@So z`ka7E4Tl0Eo4eyuRD@Kjd~U$5MpFT$q*KG@_`h=*kjp1<9>nmzF9WKgZi#mIFOJ3DS8LheHjV zf;E<*F615HNzUk|Iv|kEfxE(gpCCB3{J6z{J47icby0 zs|jF5OnBY%UjeM*0De~=1S=B2uZWkBT~IK*6|sPcojAkF`2$Q5>lvJe1b={8XMo$L z0vb4+fq_d)Vhh9Kg=mu88&MQ7JF{$IFu8(m#6$%Knz-rjUMU8KGiTA=q=2I68z?wq z2U98-4b0KNqZT72zg=)D`oQoRTmf<9Z)^00001 zbW%=J06^y0W&i*IqDe$SRCwBBU>F4>3~)GL2r;4yFqJY`1~4%2W&zoqFfnvROBomr z0ja+z8qw5zzreu2x&YmDR4!iwh`jXyucAmW`L_d~B4z;~2GajG;8C;$h__8NV>s5X5?G5{5!lrX z>lyy0{F#hP5yaI@Kvy$w_?CcO5!ltY7_NfYCmD>eD+0Ot?}lGsU;RUKJ2Q-S0^&}N zZxG(~&52e(s&oaaNibJ4KqK$ZVx(|qLb#gg0`mcw1^+iZ1G=5{0v8q9rQ zw;zTn;sd$bfEO)VeBL?!O&i)+Ga7-FX3B(XTZ?x5vTV z^ow~8!&}U}e41e`vjIvDF2|DNapqubfX<3o(D|)E!rTGBN#G(UVPG9TstB(lW{e1) mt%#^=_CPX@?r3d1LI40;rFx-T`z~<+0000t<7f9=|}ii(Q-{QQQ7 z1_uX+=;-LJTeqG$b7t<`xfjk~2nh-4?CdNmDq68(1yED@xAh!Aim@cfFPOpM*^M+H zXNRYYV@SoVwnOVg$El|uS%NPK2e`}(5dGT}ATIGiGwJ9n zHMJxeI~I|@Z2`O$%#+W{`n>(upmeHf)r-lU3={rrtWsI(Go|3sBoT(otEYa@NaAfU z`mpp2lZ0}^430bro0pyq60Td1X#6TS>FLa0e7744$rj JF6*2UngF6&fo=c* diff --git a/SWADroid/src/main/res/drawable-xhdpi/lab.png b/SWADroid/src/main/res/drawable-xhdpi/lab.png deleted file mode 100644 index 359fbd3c389f956a2e7c56497f989360d1089c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)Dfk#8gyNhlhu}yu4>;XIooaf1_l)J+$mg3`&4t(zbPKS1apQk)bVg4Lp}Ni-(3m*n2Kba3bmcbAu6p6Bu= z_g;WO>su4pi`Zewo*BzUCLUxV{kePZ!#xuZ5VDRq1s#x3XKDe)e71sSHtzErf&3CM zomX8^Hx@Fx>L1XT+2saG|4J!nDfvUA)-di1HP8lRvjg>wL%cw&j?1JlTc?$_V5EV! z3R*sPGD6DFP=Q86Q5j`(T!m02H)n7WwcpP>6OWuwN(D&P7DyvZ*$t~$w`TizFA|Ur zq-cf3kk95W6FnPayGvDAZ_aU?mfCF3bcHPx*Y@RqHH$L`i!(N;WA!wYGO3mPhM zilgjWcw&wNg-@MIH@q_2c4l0>;+`q?rU@{co3nI>U4akjEEG}s&}Wr_!qf?&Fwiaq zi41g2K{^AaC`e-r+69&!?K1y}Iydh#N4-KBIlO*g(blT6agOa1{J zc$pdYv)_61evknC^JAA;HRL_MT%PCmP zfrhPczm)?$iT13N84JCbu`{GhCA9UnH}!V-bkC1BLypfPfRH1iBOjUB*g0}4{DJ{IleIa}F)6zwpufE!OTsUN`3>(^( z>Ol?qrgC$IGBL$MRnM}V%Bjae<4a|xYyG15o2hUWaYlYUOvw$ZMT#Zy-EtK zPw<0kLwNNjN}diaL{j3NbdQI6krWAeO}<^Beh$l}JpPh?UuyD7QflDTR}yj|1Cm~e zu?(4zkb+oa00001 zbW%=J06^y0W&i*I>PbXFRCwBBU>F615HJEU(|2#2@=Uv+ib6i%G3D=mph^Y?4t#1D zmsxAHdcz5~JuhUN!$8 zfE6(m;8XM$8Z8_)cof}%n)D+9k3kP0;l#j@fm@M215DAEskqe4nE*{s8v+;@Qm_XW z%MMty+yhd}1F(7@q-FwG(KiDIhOdR#6vYDZmJJX$i8KI1^eU#BV4$zrCcqqi4v3#G zz)1d?3=F(|aNm9N0TLSMin4)t`Ubcnh9AIK{Bjgk%^ILzE-!$kCnuoySN;3I@Tchl za!><9nBzJ;J%NEL5GNyr1J`~~ydjb=BuFMPF#Ie+C^7=#BMFG)>jVz%n|2o%{xZQ* z@|zV54E(o|k}njz1iI)BG#r?KY$j9W+yVu^D}aOwn8}(2B!U>QC}Q{nwD!j-5KA2B zgUSzB6)~hJFfe?2%D}J~Xerle2JDK!;c&h8jwFz}g_b#;5NWA;69dBxkUb(N&@v|y zSl$4kSq;$30%UL!TrhCiGvHJ7yK^}M!!|4QRE);|J=Z0m4@=R54mL0lp@?DRDf&Q+ zqJI1;6u^r9;xAYiK-{z+pCVpp!OFmhyH4PLFxqe!tN;M{F?*SM#{07X0000igP)F6%8ZaW5LINl=@4dtAL@X57SeaZqmh6^bW>gfiVsMeYy%s#n%LezvvEU0|t`x z2_!|`8VrBacA#1Z3a<~ycKrw91T;740S#S%u4n?9q5||l_^Zsoa0%5-od1A&ub`;9 zsldQ;6~!cw+HlkW_zVp52PlgE0I>n8B2eI5KuHCu9~hWcqJ?EB0|UomWRnCS-a!Gt z5c!U59W&5!Ep$Z_;PC-b!~qEeRA2;82oObGK)e85(Jy$ILlgnoY#1i}2YUA&lA;Mn zNfZGb7@!G(8I}aZPhcoo3`+=1uyEUeY0`gK2!j><2I2?U6+J*snasNwKL~tag(d6T z7x)<%KdgdA3{27A*(h1&7II2P%ABxx2Ahi-XiQkM8V3U&MX*%eg;&ufc%s0ghz*jM z5rHOvk~yJ{3dKxR7$#u{qlyMZ(SO|X9}uMqTHS+GKiwUzqelP$06?)(d8(*xbpQYW M07*qoM6N<$g1URrh5!Hn diff --git a/SWADroid/src/main/res/drawable-xhdpi/msg_write.png b/SWADroid/src/main/res/drawable-xhdpi/msg_write.png deleted file mode 100644 index 9f1dda4721d9fa019e691546096852027313d4f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W^mP)eG8m)J00001 zbW%=J06^y0W&i*JEJ;K`RCwC$*1v1pKoke?ukD=Uv`tW3x`cG-4`}J+rOc8u}S?BIV$V7nBxQ{&4 z=-Zj(GvEVpm=E`aavxAjynoa8f7++%yW=dhw2krW$i@_Rao9G)4S{z;2Ezd|s?Jy< z6pk0zGE`tf9xjB8+VE29wh8qyFNA#TVvFkGFHPt~fHW4oA)lL}32BH>n!1OIigg71@&Np!um> zkuCX?twXpZr5mqMsmPLiJUWZ2P(^C!q>VR)t0qY|_$P0uE}T+&1X1w-wLRzTxLp`% zC3Z@0>G&TEp@&)0tpWc;=4aGI?OS=xIvC}j&iAKRs61SRrm$q(!>AZih}(API~Ize1laVdnS&62N)MoC+q~H4I}+}j zvpF diff --git a/SWADroid/src/main/res/drawable-xhdpi/my_groups.png b/SWADroid/src/main/res/drawable-xhdpi/my_groups.png deleted file mode 100644 index 7b8fc5b7f4d680c919396f3662a93c3f72dac6af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)F6&07f+a88B&rSCM4`m|{&r5oJQ*u|d=@{QiJP z5i^W20goa$Fd#+|!>FP`qzKO2fJf0!m}mm_!~q8XxK^JtXLvbPE(ve)W#H;(NGIs< zUqd7?VZK`*0A+k%%n&93Wq;#FQFQtoRwLRUAY1niyFC@iZeo9c!!Zkx6fxp*vICf8 zfyUs!OsFu+R7AAwd@x~Xr*V+yc@F$P_sbGeP@egEgF#pU!en^+VDW@64q!#Vvu zE+}QDw;#kRRR@rD`=N&3M=3LT{GiGH1K3Tl`2TkSku3}mj(rPO1kXMN2&Ybf=Prit zqvg}!RdfNyZa^+G|H7CY49H34p98~xM49;qR>NL_q)Z`j0l_GHfPoMYm<|c*x1<1%gcp@g;rKpx3{-;c6Oego~*2_Ear0k00001 zbW%=J06^y0W&i*JBuPX;RCwBBU>F5d1I+j&IW~%&AgD<2{>%FynhB2@c6|oM1%wpo z0`Ud{ioOZ}i4XYQ#Cw>5LEy)~2l!0lb7x@SUI1a^QpBkCfq~tT0k0y?WT1mW3-Bsp zJPmY8ZUT(Uf=vzoQlJ^k{%}4vlg_$M09t5?5WqA^+_xO0*|`8s(R{ece_l3z0Edhh zk{Yn0wxvtaOcPT>Rs&X~w+~H?#uQXOP!Zb%RG~692L=p9bqA1>M{<%IhF^d|fMWgs zpbw~q7!pWNU?BW~2t^D5#3ra|aeT|C$dtFks{sNCII2n)7IOCy-=pYrv&Q9ZVYU2J-%$!cfEsu?_0p zk5_?C{Iwrl(GM`m1{3|h1gNU@0-7RjB&A>$D5IAOV9Vx6obS;B4F8Q#i|F4|B2d^S%J(7a8f`Hd1+MwWM+lJSq?`Q8bFe;mkHeF~90O+2Cm*biKO#lD@ M07*qoM6N<$f+R5{=l}o! diff --git a/SWADroid/src/main/res/drawable-xhdpi/notif.png b/SWADroid/src/main/res/drawable-xhdpi/notif.png deleted file mode 100644 index b3f354123cd03a15224159d6bc6214ca4070646b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)(RCwCe)-g-NKokJri@mfFMNcS#I#?0Gv4ieG$mC!qCkrCD zyLD4>QE;i?4^YI#DfkC01#wb3iIe0PNCvBgq={9pP43>iq;zYRrq?g;l6UW3O2{Z2 z^VeW#3=C9WOPNR~#Lh$}Av6;)LMF1%Y8QQj=`OLx5FcrN*6 zz1=$t>raYEh8dqzM}ZcTQ5y5~e%AQ6V{9eg;S3N;8ghq1q>N@pOi(Lg8^A9jUimyNAX-HHvB+y{Gl2 z4~|M{XoI6%8ge=C19hyR+AonCUh>pB|Id9;=lA^*S6`*K3>M#!oo96u%ljRyHHzqq zRP9XEA)X~}Ijm=v3&l$hBt=4dWV_Yv9J6V!d_qot*HJr5Z_$Tc6uo7=Y_#PyHVXgX ZegMI%RO^B?U_Jl<002ovPDHLkV1ngb0et`f diff --git a/SWADroid/src/main/res/drawable-xhdpi/padlock_green.png b/SWADroid/src/main/res/drawable-xhdpi/padlock_green.png deleted file mode 100644 index 0263023e591ffbeb83ce79f67fc7219f591edb0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1330 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`ol6-Qm>B|mLR|m<|G)LhlHOewY7N5l|?I$&02AE*1*Ot zRIvH-!Zqh+c5f})b$wO)hQb54H>^A}b@7S*iMy(Mx0kIrGj+p-d3`%8c3xkx_3Dy2 zhuSCZte$_kyMKGtvNMyW?5o>%dtKXx!WCzx%s$lCzoT;2!PW`8sXRMuw%L4WuW62OM?7@862M7NCUDTc)B=-RNP8VkYFug?pdOtmy$Av zA-!yJZu&lBV=fJa^D|=7d?vW>GK{==Cc=@g^I3|)W2TuZGbbPGkzO)6!H>t-Zi3eq z%adn*IC5=dQ_ME%XXjQ`QQ}q;O!w1qa+jG@Am9|yrct~|Kx$E-$`h6cLWV~qMEJtx z8udgurz>f;I2k^DP^s3_*x1=%*=W%AKg-9HQR1BpsYM)N z%|8-)%6URgDe>&NV)R0OX(Wref?@Xr!GAtHIaiE2wxs;w-R@}b!Kos)hnb_N=LoN| jfzdxX*+NNHXBGyAw@aecgdF!vfl{TXtDnm{r-UW|!m_zN diff --git a/SWADroid/src/main/res/drawable-xhdpi/padlock_red.png b/SWADroid/src/main/res/drawable-xhdpi/padlock_red.png deleted file mode 100644 index 2aa751c22abcf3260ef8e9edd216da51d6438024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1270 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`ol6-Qm>B|mLR|m<|9@)Y#I5=HYxDEB z? zlw4W1?9$@JN4vX^bab4VHf>#g{*^_GHst4Tt*Y8mT)eBc_S(vo2b-I>78Y(REIct` z!i70=&d-{4a?+&r1qGXd3aYAhR#sk|KYw3K%l?*@OA8ikC@8qLbm{q-GtbSKaeevn z-LRX^GD6_= z+kADPHpY@5zhDN3XE)M->?NKqjv*Dd-p)Ah-)taq{C4Q}BQsa9yGqU!7w#F7T1@Gre6%$T_7#P-~y9wPz zAOKHSOt=j~BnBp2E<#QWOt=j~BnD=jE<$n@6RJTr5Nb23QD8+pFc+}|Lg=;vsKB=b zxT4=MgG~QJ8OktS4sb;RFrfgL>Td>62Et7ZFoO_IPKMHK=!$>_F`^sw3$Ex5+@Sw( zqtYQ%0m64^E&_p1V59yhz!iN2OS7T|B-p6KNYUa73iSq5MIfX8Xdx;30yK&PJx-z- z7)~ufj$lg_{sweK{{pQJL(>RanN|YP6M(-s#0Ewc4FyH)NO=UOB4`?afVaN;^F{-d qex~5B6yH7n_Ur}Ih0%7$zybi=`9F5d1B|F#rl}u+r0?kj6j5drUUAq z-S`M&so3oYQGB)g&=q<7K+;Y#R1*nJaXuYn2b0W7|xtPHfaxx;S&mD2>@{b*dna@Ac**F zfYAH}N(Ue*0!yz&4scBCSi!^vB=LSsMc^QPj3mtR0aFp!dC1JBLQxO-4c!xC)2%sjF1K6_1e}mDof+j`J%MB17YZ9{53}A$$!c!72?+*z0 z+A{;8h{NK?k8gY7afe6%8<0#=fM*aURNIjg9w>dWV^PF{q=*reO1@%IWP-%zMx-Am zTm~`dfQST4MJNV=oWz2u=s&VSb3w#E227I{AQ=QMqs=fCF+M`Ddyzu~#U!?4FqSwt zhF}-%IgJ~@5_IPCMaiswE=P*;Lv$wwIfe!&1#O~ZiFSf%W3w{YEjEIc}hkOXK zMDjjOWs0DcLfImtJpxKZO&9^mqAW-eWkHHah6;xnA{lxKTv{YS)ea13kp%U_t#?V0 zfT|1_kRkycu_;#RA^~~PJfK7ZYDKf}5F!Eb+slMVK-a)kSR|k!PrWi1eF6c2%~f0! z=H?%UK9npDBg!3n2uf6GM0Id6B&(XD5NO|%t%%6LWmOY0p;V=bR47qtBJCTuNs$J{ zDqW;!i%p4ih^deW<(*B4IP@)4CpY4v!;fZE5=|+=lSNTA{Xl`pbSp032~-6C8AID5 zUbgsh;L6h(vjOi)Z?POO9-_ReB@L;x0&wX`fwLOzucPM`JY@@lC8|bk=&fuISNqZ_ nZiXQex diff --git a/SWADroid/src/main/res/drawable-xhdpi/social_comment.png b/SWADroid/src/main/res/drawable-xhdpi/social_comment.png deleted file mode 100644 index 53d9f0e955dfacbd8f29d31ac08d9f16f6c17d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmV+%1LOROP)bC}{uwt?KfEAjncFj3pK44C_`B8_=2aM`0K*PZTG<2CCa?pIh zkd6XW5)Qfqra={KNa9w(9b#1yw?Vn4DR+{&RCE+Tbx?nuJ`uAUT#kvYMpkbfbS)aU z9J3poNU+~n(oujfii6Dv?jMZo3O|C*n7B^*EW8UG6y%&yoYQ9=1yEhXJ+2J?@mG?kw_#Gi9{lib|t`j zunuBD4B$EVM`VI#z8CDD3ZP6+L}2vnlzD@6P|PQ5?!G|@#DfsP(>mr2rh{?(GJ! z3(ol=fGG>+4IX>VY#3Ysx4|PSd5awcpw@yccnC&l>@WwT=fN;|0A@iB?6fFy>_Tm& z+hBp}iu+)QiY!NTnHI5mu+`xmb(%f!3B0CP@1h+6>@qgoitly=@WI0Yrq0vYX}&sR_Js!TcgP!{ros7A$EruMR>HZb#t=)!t5#OD;9HBy9)TCsS8OHq`RgV9rrDSUF6LDyrrKbV$KVwhurTf=+V2~UUEy*Z zzEx*(ReD6P+A#h#I%@x|bDirP0vNBE)LU@Vp`i0M*BapvK%6GF68isH+-Z$cA8>_3 jJ4_@Ji9{li$g?^DqN5Pz1LNm;3#T0|G5-E^U)U390VX-TC}VcA`jMp0PNNhg(=rBYdRKzCMRR+gXo zt5hYuee!5T|qU{h8I@AZfcsGVmrm5>X-gi3MI! z7$BRG6Gm(x?Q(R-e6#Y8k|bvoo>4mJr#3>ANQ+;DFu+8K+z!&NQl|mxi1K1dyIYdU z+f9rXN+ut`NW>wT_>(qW#~_I)4&whP<}d^P1{~oq-2PznJyOWgoik5|0ag&D4%gHoMy3xXqIWvVSv{PCz#I+cBPB{Vwl=r&|+3cld*?hguzVm`+CLz zZZ0BujJ}r^WlJ6S4J8f}rKRNeCCq?J9rhJ3sr*_=XoPQiN90!PFu*cJa*@gmxXNK) z=OvdQD@j#0b8*sAolamv;ZSmB1I(FCw%Jcfh%4}1g{&y3G!vN$o!8+S#Uun{C+rQmE!#G#llN2 z7CvH)9zqJ^5L+1|&=pO<^BrUS2bj-n&vv{Rc@6O(bAveG9s&0}EqKZB=1VT|259~` z;z2mqp57v714;t^Suvv9dC}pLAD?p@rHK|FI`zignugU i!-o$aK79BHfBXR`oasGyJbvB)0000NtKn1NI=C~yuiy{r-p+|@9FsDvjzjm;dBl@b{O7A9X@F|_(IqJ zUcWGR~egWNGF7KLrdZRKqQB3pK`UD&mkzEy(KS5en;tm0p?&ZL@ow)R zAL;xiM2Bo=^6|Oab={I-5HXz)0@%Rvc=*sj%U#$U&Ka|Pt~CWhPTX^De!Q9hkq``| z6GVa2ic^80JQ#W6);p&9XiNd1915Qt+hn!p1lPn8(I9Zup8| z`XecUtITl$gavaQjuC!WctC!K6{Y_-vO8oDcAQSNjYID=RB2 eD=RCj5%dRs{Bfp&u3)?X0000E~c diff --git a/SWADroid/src/main/res/drawable-xhdpi/survey.png b/SWADroid/src/main/res/drawable-xhdpi/survey.png deleted file mode 100644 index 84e858731643dafa32790b844ccd8099e144475d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601 zcmV-f0;c_mP)hF}-%IgJ~@5_IPCMaiswE=P*;Lv$wwIfe!&1#O~ZiFSf%W3w{YEjEIc}hkOXK zMDjjOWs0DcLfImtJpxKZO&9^mqAW-eWkHHah6;xnA{lxKTv{YS)ea13kp%U_t#?V0 zfT|1_kRkycu_;#RA^~~PJfK7ZYDKf}5F!Eb+slMVK-a)kSR|k!PrWi1eF6c2%~f0! z=H?%UK9npDBg!3n2uf6GM0Id6B&(XD5NO|%t%%6LWmOY0p;V=bR47qtBJCTuNs$J{ zDqW;!i%p4ih^deW<(*B4IP@)4CpY4v!;fZE5=|+=lSNTA{Xl`pbSp032~-6C8AID5 zUbgsh;L6h(vjOi)Z?POO9-_ReB@L;x0&wX`fwLOzucPM`JY@@lC8|bk=&fuISNqZ_ nZiXQex diff --git a/SWADroid/src/main/res/drawable-xhdpi/syllabus.png b/SWADroid/src/main/res/drawable-xhdpi/syllabus.png deleted file mode 100644 index 727664f4ded70d61384d4adcba45f62949bfb539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)71=yRSx|u zhz@W<)0XbeB-sHMIfyV^+2+db)EAY_Vcsu+Y_2PdY^e!jiWS`rUYW!%W$GpaIy>qf zhtQKL9E<_I`bgF4q0kHArJbJq1oxt&$sYN4mU;u77=T%_(KCJk0000hF}-%IgJ~@5_IPCMaiswE=P*;Lv$wwIfe!&1#O~ZiFSf%W3w{YEjEIc}hkOXK zMDjjOWs0DcLfImtJpxKZO&9^mqAW-eWkHHah6;xnA{lxKTv{YS)ea13kp%U_t#?V0 zfT|1_kRkycu_;#RA^~~PJfK7ZYDKf}5F!Eb+slMVK-a)kSR|k!PrWi1eF6c2%~f0! z=H?%UK9npDBg!3n2uf6GM0Id6B&(XD5NO|%t%%6LWmOY0p;V=bR47qtBJCTuNs$J{ zDqW;!i%p4ih^deW<(*B4IP@)4CpY4v!;fZE5=|+=lSNTA{Xl`pbSp032~-6C8AID5 zUbgsh;L6h(vjOi)Z?POO9-_ReB@L;x0&wX`fwLOzucPM`JY@@lC8|bk=&fuISNqZ_ nZiXQex diff --git a/SWADroid/src/main/res/drawable-xhdpi/users.png b/SWADroid/src/main/res/drawable-xhdpi/users.png deleted file mode 100644 index 9342c6d1019a61cbf03191d3f2a9a42f822dd216..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 933 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 RNLpS2+8PGxm8!_7{{WmNOQ8S& diff --git a/SWADroid/src/main/res/drawable-xxhdpi/book.png b/SWADroid/src/main/res/drawable-xxhdpi/book.png deleted file mode 100644 index 72eb3d5e1c6ba0aca04e84e5b1d16c69ca23a317..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5862 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 VzBXnl4*1tdO7d!Q)iRKv{{j5@mjwU- diff --git a/SWADroid/src/main/res/drawable-xxhdpi/crs.png b/SWADroid/src/main/res/drawable-xxhdpi/crs.png deleted file mode 100644 index 4473d8d8bbd56e5ad20382f73c6f742e5a44266e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3735 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 BHH!cM diff --git a/SWADroid/src/main/res/drawable-xxhdpi/desk.png b/SWADroid/src/main/res/drawable-xxhdpi/desk.png deleted file mode 100644 index 87f514ef015ced9722e4bc1c3ec0bed328525806..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4374 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 Q)Bpeg07*qoM6N<$f}HkPcK`qY diff --git a/SWADroid/src/main/res/drawable-xxhdpi/enrollment.png b/SWADroid/src/main/res/drawable-xxhdpi/enrollment.png deleted file mode 100644 index 57a11bd204dd750b15205478afa17edf20472d5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1836 zcma)7dpHvc8)voU@{Rh=aN1ltA(uFG+^d=UHFMjh5XmJWAyduhuto^E<$kush7l$W z(>R=>52vvi(cHSQkxRK2>a73IAK&{t@9lZt=Xsy!{k_lc&G0}vf@PpG5)u+%XD2%^ zv5)$pQXsL-4fFY1LISkzY-f$SHMv~*x4ZXMNIHcFc*unKX1M+Zsme>Lf*=mpex8uw zX957(TwiZ{&2%O8e%s&m z`TjA+{2;e#cxHw}d6C*ft|X;T6jJrS~qcRTVBml&x5F+os)x1 zxA_HzPav-qxRqA}RuF7$K&#~oWD79EAk3q2{&Aq9V? zs=lJ^hISk12Jm5BKZC(ANBiqBsK2Sc%s84UdHXyvp}oBf`m@^BYwn@60UIx zTu$}u%k-A~jqR%5!rGoFO;Zz-$G6V@VQF{q%<8r;? zGh9Z==7Q*(thTo8WkzuS;<*#v(q0~9kP%AT?sy(2R~25CxU)9bn3*XPscoXdT)uo9yE@H&zP`XAVy@+1r5K@P>fPh`}~V6B~vJ) zw6rvLR9aI+tobcrE6_9>g{@0TNdeNWiXoH?==ZOS7g5c@pIzpf zod{dv!|yZKBXQd19~JsjVyT;(o0{6Q&xD?f(H;zF$d3K9pALg^YXzq+T)rzv1xC*nbU+JQGOVG5g0q^s+r_o6aYKP-Y2 zs6A24Yi}_4-L2)xrSYcj8uZg%16);5=n|v58xgxWs)Hbg?WwUIV!a!*!I^8$UJ)F( zUyJJtFk>^u-169*drUyx+}s?HZakiQx3Acpw|*@+IJhM`Q=!WGNF~z8!65#*DE<}C zuEsPH(B8Qy6gu&$Ii$0<<7{z1HeHKdkoA|j;a#C_2zTq#aC6DWGAHy;`9MVut86$6D{%~P}Ev%JaoD~4{-`DVRe%+<^5`u(TWS=PXVCl(oOb`tgmJ7D`>^xC1q zlBPeq_;8GmPZdny#Eab!jvT=qkVQ$0@I)qZJDi-MOQU~9uXt-@j$PWK)YZ6?;`~-0 znf>OjUUd6+Gd0{^QzBkXh6oC~awYQ7h)@lfnEBq(_N0M<88^(rDn--06~CBgyMF5| ziPhOj%2N$yv)QiEZLq0X2g>k}aZqyI#%nJ3b18jM?HhjZ3c9`pCa?;3@XgK_<|*BU z1nI0moGon%Y;wP-BB-DuvSYXh5qB3Pi^>I3t)DJ2j+xYA;EJsvK22P)7gx~L|95~| z#uA9Nj_5$M^WiwuzBsAwC(W~ZNY1&)8Y63UO^`-1mGn3si=}=^ure|-8Ybs&ydE24 zT1^F(@%t6*1AWBggAfx*8)Q^@MotQfl5$8jkd-Ie$X?<6;f7;RhZz3szwrgnn4h0# z9gVroCCqw#%qc6K$o?Tic9p+waTg+djsT^tEv-~4IkG!Fj#PDJPj vyb?#>kGTe}8y6`5H%Rhd{)~h~SJoZLrClU9=HSBEj|OLZq+O%UrPO}_SQm0P diff --git a/SWADroid/src/main/res/drawable-xxhdpi/enrollment_request.png b/SWADroid/src/main/res/drawable-xxhdpi/enrollment_request.png deleted file mode 100644 index 3749f685dafc2e77f2cec5518414f2474e54a05a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6163 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 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/folder.png b/SWADroid/src/main/res/drawable-xxhdpi/folder.png deleted file mode 100644 index 4473d8d8bbd56e5ad20382f73c6f742e5a44266e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3735 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 BHH!cM diff --git a/SWADroid/src/main/res/drawable-xxhdpi/folder_open.png b/SWADroid/src/main/res/drawable-xxhdpi/folder_open.png deleted file mode 100644 index 4473d8d8bbd56e5ad20382f73c6f742e5a44266e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3735 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 BHH!cM diff --git a/SWADroid/src/main/res/drawable-xxhdpi/folder_users.png b/SWADroid/src/main/res/drawable-xxhdpi/folder_users.png deleted file mode 100644 index 4473d8d8bbd56e5ad20382f73c6f742e5a44266e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3735 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 BHH!cM diff --git a/SWADroid/src/main/res/drawable-xxhdpi/follow.png b/SWADroid/src/main/res/drawable-xxhdpi/follow.png deleted file mode 100644 index 04d1bcb81e9cace9f6d4a990fd1173d2dc0ede67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6678 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 S7%ScY0000GnoLSU8`>yAAp6B`f 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 LNkvXXu0mjfzm&+x diff --git a/SWADroid/src/main/res/drawable-xxhdpi/link.png b/SWADroid/src/main/res/drawable-xxhdpi/link.png deleted file mode 100644 index 55c1a73465c77031014efc5cf8cb39eebd7e6836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5867 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 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/msg.png b/SWADroid/src/main/res/drawable-xxhdpi/msg.png deleted file mode 100644 index 105375c41c9b17bc0908d25dded4d1ccd2fa5e63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4404 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 O8%X2_%ZL?o9Kq(O3}r6fdhX^;j%x=TVDq@}yN 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 L)nrPfj064$_-qar diff --git a/SWADroid/src/main/res/drawable-xxhdpi/my_groups.png b/SWADroid/src/main/res/drawable-xxhdpi/my_groups.png deleted file mode 100644 index d004904f4131b6015f97fa87a2f9053dd3642199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4038 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 V9yA+_kn3}Rk^cR=RsTSv{sZ)=)#(5L diff --git a/SWADroid/src/main/res/drawable-xxhdpi/note.png b/SWADroid/src/main/res/drawable-xxhdpi/note.png deleted file mode 100644 index 67d7db385b57f7cbc6387881bdaa75d6edad60ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5642 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 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/notif.png b/SWADroid/src/main/res/drawable-xxhdpi/notif.png deleted file mode 100644 index 665f6c02746c28e33e008997267b38c6c50f9257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/padlock_green.png b/SWADroid/src/main/res/drawable-xxhdpi/padlock_green.png deleted file mode 100644 index 135ba8327f8de41657b22c2670bd721974fe38cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5377 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 V&v-t!zxDtC002ovPDHLkV1jE|9FqV5 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/parent.png b/SWADroid/src/main/res/drawable-xxhdpi/parent.png deleted file mode 100644 index 1ae20b91cb4d758973459667ec64c4cf0ad80774..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2890 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 TKY*Puy(H3oWTf>;1A_P;RY+*@ diff --git a/SWADroid/src/main/res/drawable-xxhdpi/roll_call.png b/SWADroid/src/main/res/drawable-xxhdpi/roll_call.png deleted file mode 100644 index 1d65f76046a7dd4cb3cf3b12345ac2f469a4a686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3811 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 RNLpS2+8PGxm8!_7{{WmNOQ8S& diff --git a/SWADroid/src/main/res/drawable-xxhdpi/social_comment.png b/SWADroid/src/main/res/drawable-xxhdpi/social_comment.png deleted file mode 100644 index 2b274c582fbef25072f192bf7ad8cd9424689361..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcmV;J1ZVq+P)MHDpIgM^a5Fl7FmXw5hf&lkXXSFL4L@G(tT1VX_z!iT2j<3x9Q|-RPZ%1F&1Q! zsz|R%lW`awuO_*VD(=(Qq?4*i1Ej@GG~G&z+;=s{;v3{z{fsncgXvb1u{`D2Jj+R5 zlb0N>PL9X)meU#m28yH;>5`oFa{R z$o#Ozcx;a5a-0Vyw`rEg=t!=T7CdZzSPMK>M^WSx^H)zokyFe+N}BSK`C(1**li_^ z^x22zhc(O|*hZ6&%@3>5F7xwUcDminQ**v)^OH#ZFn>k;?1?eX!}N7JXL17CVfZ?= zn=)V4T<2l5Q$8WRn9&HZRv=al|+hp?!g3+n~nyLMA3aC-YgS z*hjfV_EDua8?cD6T(R#ujqy#Jn1B(D0EZM!Y|}VxTAk9{6en*;V|-stOhA|BPN6Es z^$VjU`35bvpsTl{gHe)Zg)#cB(i~g2i3zxyfNE0E;)YtRu*CI{G9t9i;LlW#A+)x@R+`QP!}n|is=N{(SLL1QX0F#*XwEkUZB z@KaF7 zLoP7>7pD~V3y&fH3x^zPx=bX#;x&G|@F*7@WcVU)B_DI?Fje?~N1BGohg~0XzWo!I zLSt=hWt!j%Ckf?xenTuj&azwh47qQf*r54x*}5L#n)2y|9i%;+2s_Bi9O{HvA6hf?rOYPPqAI36~Zv q0000000000000000001hhxrE^;=sw7_qcKZ0000X^Rl$2ZI*KGFuE&(IVSu^FtpBiWUj6u!Vx6 zC|aex^pEO&nR7ryy)$#q%suDK^Ml`)KHTelp1IvQ+Xw*w00000000000000f$Rbyg zWr!j(G?N3;2E-9BrR2Xs1^gw85KDY?4hmm+9 zJi^tl{6iKXrs%jbO8Ck%h$$Ktq`3N(zscE%OFx%0z$C#}8Tne+%*vU;1=}2w&NP_|l_L-rI*Q;3qj9F^1=C8sRIO5MwwB(!BbW zKgel_GdQO;gs(h_ID;`uj%ali@EzZRV6_u?{kkSpZxLzZhH^9RZ!my_Fsw{zht`B?sU zFkqN{WRLLH9O}s`av3?r^q?n`OUNzcA>mCMcavWX3^}Zy$%o`c@*r73E+!{tBJe!< z_3a`*lKl<^9aR48AISUUVR3iyhkNAztR1sp-pBf2+^0&>LYdvlU% zTb#GDIU?91x$8D(VjRJPsdETlG-h%Tm#ul)*fx#W7SHXsBryCs)21C76BPb_Q>P^w z5-{@JWBS}sox|bR*fJBk&#^fo-WIvjw(00vM@r!Ex7)fVuv-M%RBM{NI8joE)h?Dlu4KASD_3+0Tek;m5_Oe|rpwxnKK%vV8R9aBLI+qJL zWzMi1K9I7#9mzYSDCbv5N&%TU5Yi7Yk^LAgFu7 zJGr9!b?aR$;I_tq9+7M0>++_s_2d(cuixon0q->g^Fny*w8Kpo@W1g|!z&H%^U}5O zr=}Um8~GcOis#DKqzA31Pqm;#=; zI11+A?+EV!9wy$Yb%~hI{Kf^3Ru>98mivkf`DOwD0000000000004CIA0*9NgAs@R Q`Tzg`07*qoM6N<$g0@8Ln*aa+ diff --git a/SWADroid/src/main/res/drawable-xxhdpi/social_mention.png b/SWADroid/src/main/res/drawable-xxhdpi/social_mention.png deleted file mode 100644 index 34676d32986aa2c8b9a5953e2a0af29fb8624ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2144 zcmV-m2%qPVg&?26cEHhK@kNTz$l?Xf*_5cT#W}o;_aw;wTb zCTv3f|9Ei3Ddf;xGX7wGDVs%dHHV;nL@Wb&$~$Dy0dBJ+vmTR?Eru^m zQP9+Y!^D2bmB?!b`aIx~l(l%vaDM&?IVNP?x+80O1E=7fKs|-fNvTQK^B+ax#Ih;8$)qN1>nxr*hX56ElX5j^{a%AHr zRWX4V&%MaA+*{i@5qE`?a9<){NA}F%9f~+_qe{Al;>lC^_rer|yezoZZqjf~Rx-8lkLExIPr$WX9LOH+vZ zJ3E&SRqBwRArHgj$CT;V5jCm)Pn8Ajjl8M&-PR}_AkC*HJ6y_MUN$uRdE`Q#s#Ktj z-MfZ)o>ZRH=(=3!5dESse!h_EJ#6s%LcB*_d8HvHTwv4p?L$bB*G+7otek{UBsEb(n5oka{1|(u0LL-%F<%#0zh_ z-;W5>_AukQn0SkrnvaZ*Dq%lU)=ixlmzyW71 zT6bL4Dn(>I&amq zyVyb&jqn=^Im5zmK&7Jb8=C2-K-jc(MSB&13`R|vluqe-q62dwj_Li=9g_hBCMNxtA;MdMP+V2NOWqao zM1Z>H2|)w#6_0X9D&(CG!vQB1jjIl)`)eG~JwRQjY1;1NQSK~-yaQo4V6UR_8H(r2 zHAW~5P}f63yH_%hyAC3(pk8O02PqAx7wYhWrrrG><V6gmpyOiDpMt&SQTBF)yfY9I@`S|NIK^+I z5|Q0L>qlvAlY{tj53)yr`Yikd2oZY}N~}{nzX9Y5<}#o3>JMhO?wi5>+&Ka2%Nu^a zgAv{lB8&Vq&sS*-ve5^fs5Y|Dn=^po|A?P`6h@E)caI5{l^rG+-5Mp<3*WDI!v!- zqtMhwXS-CxV^aORLX(BP&kj7uqqY(3u0-untaqV8x}1?N&rd!3ZwUS(Mm=|c{Q<~+ zz*AEm!~m3PR+XsJ=BrqdNxT`5;mJ64kBq)5pXFcSsW(=58|*6%Xgh!1XXCW+bd{R7 zIpBlrHr~q=K@6eGyDSj0q(A#){N13wrIN^CDxzw?wGjNFQO0-{)aS0$d&UdSqulx_ zkJAmMn6H*Eiv*;o(JyZW$V#V*J&XNkBTo?we~ND$S=WL4A^@;vJqY=w8-b9#MlhTudoP0000F=dKS5t)3tRf5XnB2+X${gvG@sE>@Rb|^($Vo?t$GK8H&Mt zs~*_Bp53Iy7z4=3WDkU{7|pk8h3y^>6au&b+dV!g1n>s7dwf?2U;?)1;oa$~LI62f z?**`o0Q5LST2csLJnhCGB;6;iD45TBo#rQA(|D_X7_X}%E}K;;+KR@rrd=vUaI?Ep zOd69l`LbwEUgJi12dOsU##>!-!Fb#34pIc;W_N~EpHSmjQ&Rj>gS$>=P58}j*Ntbb zk&bDaUribg@gL$Eescnhx5{Xn|2(3nD(v@+qBJoa;=-aNh7<6FF3I|w+mkm#Uh}J( z-|e{Zi(*nk!RPLfC1W`gZoBqsr%_ffE*sxip^p^BhR&uN_q!E+va<#g&$*MK+9Q6n~#y6UjaKbU;8`4$)yO+SBW=k;&<8_%f zI<3Cc8*kC*wa&wKk6#Etmnnq+xQB26*5`SrGzs(2mqif9+*V$Orap*vM>b+BX$@kB z(K&Y+M-bfE+a{`TIfOn3i*cn4O#cQy28`z=BkPovA%_8n+uV{|lnql-JAPZ^ju{LKrmewSP=$M< zk4-Wf=uzmIDwIdxf8XNfDrDuG8}QEW~PjP&Bdt?;?$iVjX#lg4(Xo2k>ao=O$qGB~{Ur&FG0bGRL8`&po^Qg_AB<+IT zn{zs1^ViZ`g!4<3$0>VZufLt~(+JGx>spnt*MA5@Ar3peFuyeTr{>E!JTQqdzkKZB zfmsv$@BmgjA;O0Tj>>+4fAR3M@eU7sBE2MCBONvl9KZqq00000000000LkVL`JBI| T=G&a#00000NkvXXu0mjfLoW0= diff --git a/SWADroid/src/main/res/drawable-xxhdpi/survey.png b/SWADroid/src/main/res/drawable-xxhdpi/survey.png deleted file mode 100644 index 1d65f76046a7dd4cb3cf3b12345ac2f469a4a686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3811 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 RNLpS2+8PGxm8!_7{{WmNOQ8S& diff --git a/SWADroid/src/main/res/drawable-xxhdpi/syllabus.png b/SWADroid/src/main/res/drawable-xxhdpi/syllabus.png deleted file mode 100644 index 66886b182b73fef0496ccb377caf573601e7a86d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5219 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 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/test.png b/SWADroid/src/main/res/drawable-xxhdpi/test.png deleted file mode 100644 index 1d65f76046a7dd4cb3cf3b12345ac2f469a4a686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3811 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 RNLpS2+8PGxm8!_7{{WmNOQ8S& diff --git a/SWADroid/src/main/res/drawable-xxhdpi/users.png b/SWADroid/src/main/res/drawable-xxhdpi/users.png deleted file mode 100644 index 87939cadbdb4ee06a7b709869ca463ceb32f5fbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8155 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 - + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_marginStart="5dp" + android:layout_marginLeft="5dp" + android:textColor="@color/foreground1" + android:textSize="28sp" > + - - + android:layout_width="30dp" + android:layout_height="match_parent" + android:gravity="center" + android:textColor="@color/foreground1" + android:textSize="28sp"> + - + android:layout_margin="5dp" + android:textSize="28sp" /> + + + + android:layout_height="match_parent" + android:layout_margin="5dp" + android:layout_gravity="center_vertical" + android:textColor="@color/foreground1" + android:textSize="20sp" > \ No newline at end of file diff --git a/SWADroid/src/main/res/layout/image_list_item_group.xml b/SWADroid/src/main/res/layout/image_list_item_group.xml index 83cee2ed5..e4c97d331 100644 --- a/SWADroid/src/main/res/layout/image_list_item_group.xml +++ b/SWADroid/src/main/res/layout/image_list_item_group.xml @@ -2,21 +2,26 @@ + + + diff --git a/SWADroid/src/main/res/layout/list_image_item.xml b/SWADroid/src/main/res/layout/list_image_item.xml index 57802aaea..a418832d4 100644 --- a/SWADroid/src/main/res/layout/list_image_item.xml +++ b/SWADroid/src/main/res/layout/list_image_item.xml @@ -11,6 +11,7 @@ android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="5dip" android:layout_marginLeft="5dip" android:contentDescription="@string/photoContentDescription" android:scaleType="centerCrop" /> @@ -19,6 +20,7 @@ android:id="@+id/TextView1" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginStart="5dip" android:layout_marginLeft="5dip" android:layout_weight="1" android:text="" diff --git a/SWADroid/src/main/res/layout/list_image_items.xml b/SWADroid/src/main/res/layout/list_image_items.xml index 8693bece6..2648caa61 100644 --- a/SWADroid/src/main/res/layout/list_image_items.xml +++ b/SWADroid/src/main/res/layout/list_image_items.xml @@ -11,6 +11,7 @@ android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="5dip" android:layout_marginLeft="5dip" android:contentDescription="@string/photoContentDescription" android:scaleType="centerCrop" /> @@ -19,6 +20,7 @@ android:id="@+id/TextView1" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginStart="5dip" android:layout_marginLeft="5dip" android:layout_weight="1" android:text="" diff --git a/SWADroid/src/main/res/layout/list_item_notifications.xml b/SWADroid/src/main/res/layout/list_item_notifications.xml index a9aa17dd0..1824a729b 100644 --- a/SWADroid/src/main/res/layout/list_item_notifications.xml +++ b/SWADroid/src/main/res/layout/list_item_notifications.xml @@ -13,12 +13,16 @@ android:gravity="center_horizontal" android:orientation="vertical" > - - + android:layout_width="30dp" + android:layout_height="match_parent" + android:layout_marginStart="5dp" + android:layout_marginLeft="5dp" + android:gravity="center" + android:textColor="@color/foreground1" + android:textSize="28sp" > + + + + + + + + \ No newline at end of file diff --git a/SWADroid/src/main/res/layout/list_text_items.xml b/SWADroid/src/main/res/layout/list_text_items.xml new file mode 100644 index 000000000..4b8dc19ce --- /dev/null +++ b/SWADroid/src/main/res/layout/list_text_items.xml @@ -0,0 +1,33 @@ + + + + + + + + + + \ No newline at end of file diff --git a/SWADroid/src/main/res/layout/navigation_bar.xml b/SWADroid/src/main/res/layout/navigation_bar.xml index 48a305116..b443d146b 100644 --- a/SWADroid/src/main/res/layout/navigation_bar.xml +++ b/SWADroid/src/main/res/layout/navigation_bar.xml @@ -7,37 +7,42 @@ - + android:layout_margin="5dip" + android:gravity="center" + android:textColor="@color/foreground1" + android:textSize="28sp" + android:text="@string/fa_home" + android:onClick="onRefreshClick"> + - + android:layout_toEndOf="@id/home_button" + android:layout_toRightOf="@id/home_button" + android:layout_margin="5dip" + android:gravity="center" + android:textColor="@color/foreground1" + android:textSize="28sp" + android:text="@string/fa_arrow_up" + android:onClick="onRefreshClick"> + diff --git a/SWADroid/src/main/res/values/icons.xml b/SWADroid/src/main/res/values/icons.xml new file mode 100644 index 000000000..ec07b5497 --- /dev/null +++ b/SWADroid/src/main/res/values/icons.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From ed0a2951af9058399d4029fd9d331aa571220034 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 27 Jul 2016 17:30:36 +0200 Subject: [PATCH 026/103] Setted Font Awesome strings as not translatable --- SWADroid/src/main/res/values/icons.xml | 64 +++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/SWADroid/src/main/res/values/icons.xml b/SWADroid/src/main/res/values/icons.xml index ec07b5497..771b3f931 100644 --- a/SWADroid/src/main/res/values/icons.xml +++ b/SWADroid/src/main/res/values/icons.xml @@ -1,35 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 62c6ac2518b2d801ad29dd70107c5f610c7605ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 27 Jul 2016 18:46:24 +0200 Subject: [PATCH 027/103] checkbox in list of users arranged --- .../modules/messages/SearchUsers.java | 16 +++++++++----- .../modules/messages/UsersAdapter.java | 15 +++++++++++-- .../modules/messages/UsersComparator.java | 21 +++++++++++++++++++ 3 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 692e67b62..943d34e9f 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,11 +1,9 @@ package es.ugr.swad.swadroid.modules.messages; import android.annotation.TargetApi; -import android.app.Activity; import android.content.DialogInterface; import android.os.Build; import android.os.Bundle; -import android.support.v4.app.NavUtils; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.widget.SearchView; @@ -18,11 +16,11 @@ import android.widget.CheckBox; import android.widget.LinearLayout; import android.widget.ListView; -import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; +import java.util.Collections; import java.util.Vector; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; @@ -70,10 +68,14 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { checkbox = (CheckBox) view.findViewById(R.id.check); - if (checkbox.isChecked()) + if (checkbox.isChecked()){ checkbox.setChecked(false); - else + adapter.checkboxSelected.set(position, false); + } + else{ checkbox.setChecked(true); + adapter.checkboxSelected.set(position, true); + } //String idUser = userFilters.getUsers().get(position).getUserNickname(); } @@ -197,6 +199,7 @@ protected void requestService() throws Exception { userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); } + //Collections.sort(userFilters.getUsers(), new UsersComparator()); Log.d(TAG, "numUsers = " + String.valueOf(numUsers) + ", usersList = " + userFilters.getUsers().size()); } @@ -223,6 +226,9 @@ protected void postConnect() { } else{ Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); + for (int i=0; i { private LayoutInflater inflater; private ImageLoader loader; + public ArrayList checkboxSelected; private static class ViewHolder { ImageView image; TextView name; CheckBox checkbox; - } public UsersAdapter(Context context, List objects) { @@ -59,11 +63,12 @@ public UsersAdapter(Context context, List objects) { R.drawable.usr_bl); this.inflater = LayoutInflater.from(context); + checkboxSelected = new ArrayList(); } public View getView(int position, View convertView, ViewGroup parent) { // Get inflater - this.inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + //this.inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Does the current view exist? if (convertView == null) { @@ -79,6 +84,12 @@ public View getView(int position, View convertView, ViewGroup parent) { // Current user UserFilter user = getItem(position); + if (checkboxSelected.get(position) != null){ + holder.checkbox.setChecked(((Boolean) checkboxSelected.get(position)).booleanValue()); + }else{ + holder.checkbox.setChecked(false); + } + // Setup row if(user.getUserPhoto().contains("https")) { //when the user don't have photo, the string isn't empty or null diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java new file mode 100644 index 000000000..f7b5d031d --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java @@ -0,0 +1,21 @@ +package es.ugr.swad.swadroid.modules.messages; + +import android.util.Log; + +import java.util.Comparator; + +import es.ugr.swad.swadroid.Constants; +import es.ugr.swad.swadroid.model.UserFilter; + +/** + * Created by Romilgildo on 27/07/2016. + */ +public class UsersComparator implements Comparator { + private static final String TAG = Constants.APP_TAG + " UsersComparator"; + + public int compare(UserFilter user1, UserFilter user2) { + + return (user1.getUserSurname1() + " " + user1.getUserSurname2() + " " + user1.getUserFirstname()).compareTo( + user2.getUserSurname1() + " " + user2.getUserSurname2() + " " + user2.getUserFirstname()); + } +} From acc1528b3810262c3944030b0a7ec28c1fef4df7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 27 Jul 2016 21:21:33 +0200 Subject: [PATCH 028/103] users list sorted alphabetically --- .../modules/messages/SearchUsers.java | 2 -- .../modules/messages/UsersAdapter.java | 1 - .../modules/messages/UsersComparator.java | 21 ------------------- .../swadroid/modules/messages/UsersList.java | 13 +++--------- 4 files changed, 3 insertions(+), 34 deletions(-) delete mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 943d34e9f..2fc83bca4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -20,7 +20,6 @@ import android.widget.Toast; import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; -import java.util.Collections; import java.util.Vector; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; @@ -199,7 +198,6 @@ protected void requestService() throws Exception { userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); } - //Collections.sort(userFilters.getUsers(), new UsersComparator()); Log.d(TAG, "numUsers = " + String.valueOf(numUsers) + ", usersList = " + userFilters.getUsers().size()); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index e0ce745f6..3bfb4b988 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -90,7 +90,6 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.checkbox.setChecked(false); } - // Setup row if(user.getUserPhoto().contains("https")) { //when the user don't have photo, the string isn't empty or null ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java deleted file mode 100644 index f7b5d031d..000000000 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersComparator.java +++ /dev/null @@ -1,21 +0,0 @@ -package es.ugr.swad.swadroid.modules.messages; - -import android.util.Log; - -import java.util.Comparator; - -import es.ugr.swad.swadroid.Constants; -import es.ugr.swad.swadroid.model.UserFilter; - -/** - * Created by Romilgildo on 27/07/2016. - */ -public class UsersComparator implements Comparator { - private static final String TAG = Constants.APP_TAG + " UsersComparator"; - - public int compare(UserFilter user1, UserFilter user2) { - - return (user1.getUserSurname1() + " " + user1.getUserSurname2() + " " + user1.getUserFirstname()).compareTo( - user2.getUserSurname1() + " " + user2.getUserSurname2() + " " + user2.getUserFirstname()); - } -} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index 91e7b2b2b..7252d7b33 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -14,21 +14,14 @@ * Users list */ public class UsersList { - private static UsersList list = new UsersList(); - private HashMap users = new HashMap<>(); - - public static UsersList getInstance() { - - return list; - } + private List users = new ArrayList(); public void saveUser(UserFilter user) { - - users.put(user.getUserNickname() + user.getUserFirstname() + user.getUserSurname1() + user.getUserSurname2(), user); + users.add(user); } public List getUsers() { - return new ArrayList<>(users.values()); + return users; } } From 11372f8aef2240b5f854e6302cd42f78b72d2ab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 00:33:01 +0200 Subject: [PATCH 029/103] hide users in list without nickname --- .../modules/messages/SearchUsers.java | 23 ++++++++++--------- .../modules/messages/UsersAdapter.java | 8 +++---- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 2fc83bca4..56c6de8c9 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -183,22 +183,23 @@ protected void requestService() throws Exception { ArrayList res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); int csSize = soap.getPropertyCount(); - numUsers = csSize; userFilters = new UsersList(); for (int i = 0; i < csSize; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); - String nickname = pii.getProperty("userNickname").toString(); - String surname1 = pii.getProperty("userSurname1").toString(); - String surname2 = pii.getProperty("userSurname2").toString(); - String firstname = pii.getProperty("userFirstname").toString(); - String userPhoto = pii.getProperty("userPhoto").toString(); - Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); - - userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); + String nickname = pii.getPrimitiveProperty("userNickname").toString(); //getPrimitive to get empty instead anytype{} + if (!nickname.isEmpty()) { + String surname1 = pii.getPrimitiveProperty("userSurname1").toString(); + String surname2 = pii.getPrimitiveProperty("userSurname2").toString(); + String firstname = pii.getPrimitiveProperty("userFirstname").toString(); + String userPhoto = pii.getPrimitiveProperty("userPhoto").toString(); + Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); + + userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); + } } - - Log.d(TAG, "numUsers = " + String.valueOf(numUsers) + ", usersList = " + userFilters.getUsers().size()); + numUsers = userFilters.getUsers().size(); + Log.d(TAG, "numUsersSWAD = " + String.valueOf(csSize) + ", numUsersSWADroid = " + numUsers); } setResult(RESULT_OK); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index 3bfb4b988..2cc35a6a0 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -91,12 +91,12 @@ public View getView(int position, View convertView, ViewGroup parent) { } // Setup row - if(user.getUserPhoto().contains("https")) { //when the user don't have photo, the string isn't empty or null - ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); - } - else + if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty holder.image.setImageResource(R.drawable.usr_bl); + else + ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); + holder.name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); return convertView; From 29dd0c593653d53237432ee1477adb2f9043b295 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Thu, 28 Jul 2016 08:51:29 +0200 Subject: [PATCH 030/103] Added Font Awesome icon for unknown notifications --- .../notifications/NotificationsExpandableListAdapter.java | 1 + 1 file changed, 1 insertion(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java index c490ddd16..08fd4b290 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsExpandableListAdapter.java @@ -185,6 +185,7 @@ public View getChildView(int groupPosition, final int childPosition, notificationIcon.setText(R.string.fa_at); } else { type = activity.getString(R.string.unknownNotification); + notificationIcon.setText(R.string.fa_bell); } eventType.setText(type); From a7912f9d1cf7f4500e785b88fae6291494a1bda6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 11:19:13 +0200 Subject: [PATCH 031/103] sending receivers to Messages Activity --- .../swadroid/modules/messages/Messages.java | 13 ++++- .../modules/messages/SearchUsers.java | 21 ++++++-- .../src/main/res/layout-v11/list_users.xml | 54 +++++++++++++++++++ SWADroid/src/main/res/layout/list_items.xml | 21 -------- .../src/main/res/layout/messages_screen.xml | 1 - 5 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 SWADroid/src/main/res/layout-v11/list_users.xml diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 4f02ee48b..b5bc95b22 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -21,10 +21,12 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; +import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; @@ -86,6 +88,8 @@ public class Messages extends Module { */ private EditText bodyEditText; + private TextView receiversLabel; + /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) @@ -265,11 +269,16 @@ protected void onSaveInstanceState(Bundle outState) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { - if (data != null) { - receivers = data.getStringExtra("ListaRcvs"); + receivers = data.getStringExtra("receivers"); writeData(); } + + if (!receivers.isEmpty()){ + receiversLabel = (TextView) findViewById(R.id.message_receivers_label); + receiversLabel.setVisibility(View.VISIBLE); + rcvEditText.setVisibility(View.VISIBLE); + } super.onActivityResult(requestCode, resultCode, data); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 22d241371..6d8c77009 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,7 +1,9 @@ package es.ugr.swad.swadroid.modules.messages; import android.annotation.TargetApi; +import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; @@ -40,7 +42,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private SearchView searchView; private MenuItem searchItem; private static ListView lvUsers; - private String[] receivers = {}; + private String receivers; private String search; private UsersAdapter adapter; private CheckBox checkbox; @@ -55,7 +57,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.list_items); + setContentView(R.layout.list_users); setTitle(R.string.actionBarAddUser); //users list @@ -103,7 +105,10 @@ public boolean onMenuItemActionExpand(MenuItem item) { public boolean onMenuItemActionCollapse(MenuItem item) { hideMenu = true; invalidateOptionsMenu(); // to manage the actionbar when searchview is closed - setResult(RESULT_OK); + Intent intent = new Intent(); + receivers = "@romilgildo"; + intent.putExtra("receivers", receivers); // send receivers to parent activity + setResult(RESULT_OK, intent); finish(); // go to parent activity return true; } @@ -170,6 +175,16 @@ public boolean onQueryTextChange(String newText) { return true; } + @Override + protected void onSaveInstanceState(Bundle outState) { + + } + + @Override + protected void onRestoreInstanceState(Bundle savedInstanceState) { + + } + @Override protected void requestService() throws Exception { createRequest(SOAPClient.CLIENT_TYPE); diff --git a/SWADroid/src/main/res/layout-v11/list_users.xml b/SWADroid/src/main/res/layout-v11/list_users.xml new file mode 100644 index 000000000..f8fee09c5 --- /dev/null +++ b/SWADroid/src/main/res/layout-v11/list_users.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SWADroid/src/main/res/layout/list_items.xml b/SWADroid/src/main/res/layout/list_items.xml index f8fee09c5..446093f44 100644 --- a/SWADroid/src/main/res/layout/list_items.xml +++ b/SWADroid/src/main/res/layout/list_items.xml @@ -7,27 +7,6 @@ - - - - - - - From f178cd2440948a4eae916e476570adc5ceb0ce7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 11:44:15 +0200 Subject: [PATCH 032/103] adding some nicknames to Messages Activity --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 3 ++- .../es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index b5bc95b22..30c745ee4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -113,6 +113,7 @@ protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) writeData(); + receivers = ""; setMETHOD_NAME("sendMessage"); } @@ -270,7 +271,7 @@ protected void onSaveInstanceState(Bundle outState) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { - receivers = data.getStringExtra("receivers"); + receivers += data.getStringExtra("receivers"); writeData(); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 6d8c77009..28db2a817 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -42,7 +42,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private SearchView searchView; private MenuItem searchItem; private static ListView lvUsers; - private String receivers; + private String receivers = ""; private String search; private UsersAdapter adapter; private CheckBox checkbox; @@ -76,6 +76,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) else{ checkbox.setChecked(true); adapter.checkboxSelected.set(position, true); + receivers += "@" + userFilters.getUsers().get(position).getUserNickname() + ","; } //String idUser = userFilters.getUsers().get(position).getUserNickname(); @@ -106,7 +107,6 @@ public boolean onMenuItemActionCollapse(MenuItem item) { hideMenu = true; invalidateOptionsMenu(); // to manage the actionbar when searchview is closed Intent intent = new Intent(); - receivers = "@romilgildo"; intent.putExtra("receivers", receivers); // send receivers to parent activity setResult(RESULT_OK, intent); finish(); // go to parent activity From 8453c2d7dea43e362d27eb958ede46569188fba8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 13:12:09 +0200 Subject: [PATCH 033/103] users added before in the current searchUsers activity can be deleted --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 3 ++- .../es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 30c745ee4..3b93241ed 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -271,7 +271,7 @@ protected void onSaveInstanceState(Bundle outState) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { - receivers += data.getStringExtra("receivers"); + receivers = data.getStringExtra("receivers"); writeData(); } @@ -294,6 +294,7 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_addUser: Intent intent = new Intent (this, SearchUsers.class); + intent.putExtra("receivers", receivers); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); return true; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 28db2a817..dd184d97a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -42,7 +42,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private SearchView searchView; private MenuItem searchItem; private static ListView lvUsers; - private String receivers = ""; + private String receivers; private String search; private UsersAdapter adapter; private CheckBox checkbox; @@ -72,6 +72,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) if (checkbox.isChecked()){ checkbox.setChecked(false); adapter.checkboxSelected.set(position, false); + receivers = receivers.replace("@" + userFilters.getUsers().get(position).getUserNickname() + ",", ""); } else{ checkbox.setChecked(true); @@ -87,6 +88,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) TextView textLoading = (TextView) findViewById(R.id.text_progress); textLoading.setText(R.string.loadingMsg); + receivers = getIntent().getStringExtra("receivers"); + setMETHOD_NAME("findUsers"); } From 142708d65a3408af07cf855a176a0e62b9696b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 13:46:39 +0200 Subject: [PATCH 034/103] receivers are added to checkboxs in users list --- .../java/es/ugr/swad/swadroid/model/UserFilter.java | 13 ++++++++++++- .../swad/swadroid/modules/messages/Messages.java | 6 +++++- .../swad/swadroid/modules/messages/SearchUsers.java | 9 ++++++++- .../swadroid/modules/messages/UsersAdapter.java | 6 +++++- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index a9c70fc45..22bb9360d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -48,6 +48,8 @@ public class UserFilter { */ private String userPhoto; + private boolean selectedCheckbox; + /** * Constructor. * @@ -57,12 +59,13 @@ public class UserFilter { * @param userFirstname User name. * @param userPhoto Full path where user's picture is stored. */ - public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto) throws ParseException { + public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox) throws ParseException { this.userNickname = userNickname; this.userSurname1 = userSurname1; this.userSurname2 = userSurname2; this.userFirstname = userFirstname; this.userPhoto = userPhoto; + this.selectedCheckbox = selectedCheckbox; } /** @@ -155,4 +158,12 @@ public void setUserPhoto(String userPhoto) { this.userPhoto = userPhoto; } + public boolean getCheckbox() { + return selectedCheckbox; + } + + public void setCheckbox(boolean selected){ + this.selectedCheckbox = selected; + } + } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 3b93241ed..39385a4b4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -275,10 +275,14 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { writeData(); } + receiversLabel = (TextView) findViewById(R.id.message_receivers_label); if (!receivers.isEmpty()){ - receiversLabel = (TextView) findViewById(R.id.message_receivers_label); receiversLabel.setVisibility(View.VISIBLE); rcvEditText.setVisibility(View.VISIBLE); + } + else{ + receiversLabel.setVisibility(View.GONE); + rcvEditText.setVisibility(View.GONE); } super.onActivityResult(requestCode, resultCode, data); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index dd184d97a..d3227b6fb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -213,7 +213,14 @@ protected void requestService() throws Exception { String userPhoto = pii.getPrimitiveProperty("userPhoto").toString(); Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); - userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto)); + boolean selected; + Log.d(TAG,receivers); + if (receivers.contains(nickname)) { + selected = true; + } + else + selected = false; + userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); } } numUsers = userFilters.getUsers().size(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index 2cc35a6a0..a87746195 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -84,11 +84,15 @@ public View getView(int position, View convertView, ViewGroup parent) { // Current user UserFilter user = getItem(position); + + holder.checkbox.setChecked(user.getCheckbox()); + + /* if (checkboxSelected.get(position) != null){ holder.checkbox.setChecked(((Boolean) checkboxSelected.get(position)).booleanValue()); }else{ holder.checkbox.setChecked(false); - } + }*/ // Setup row if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty From dd5f65567c86e612d2619cb5e545351afb914b96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 14:20:41 +0200 Subject: [PATCH 035/103] corrected a bug in selected users --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 1 + 1 file changed, 1 insertion(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 39385a4b4..0194faa86 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -298,6 +298,7 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_addUser: Intent intent = new Intent (this, SearchUsers.class); + receivers = rcvEditText.getText().toString(); intent.putExtra("receivers", receivers); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); From 5dc6a844e7837b60c7c4b569f5d36622b52109aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 17:17:43 +0200 Subject: [PATCH 036/103] receivers label disappears if there aren't receivers --- .../swadroid/modules/messages/Messages.java | 24 ++++++++++++++++++- .../modules/messages/SearchUsers.java | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 0194faa86..358615aef 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -21,6 +21,8 @@ import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.text.Editable; +import android.text.TextWatcher; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -114,6 +116,27 @@ protected void onCreate(Bundle savedInstanceState) { writeData(); receivers = ""; + receiversLabel = (TextView) findViewById(R.id.message_receivers_label); + rcvEditText.addTextChangedListener(new TextWatcher() { + + @Override + public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { + + } + + public void onTextChanged(CharSequence s, int start, int before, int count) { + if (s.toString().isEmpty()){ + receiversLabel.setVisibility(View.GONE); + rcvEditText.setVisibility(View.GONE); + } + + } + + @Override + public void afterTextChanged(Editable editable) { + + } + }); setMETHOD_NAME("sendMessage"); } @@ -275,7 +298,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { writeData(); } - receiversLabel = (TextView) findViewById(R.id.message_receivers_label); if (!receivers.isEmpty()){ receiversLabel.setVisibility(View.VISIBLE); rcvEditText.setVisibility(View.VISIBLE); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index d3227b6fb..288226ec5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -215,7 +215,7 @@ protected void requestService() throws Exception { boolean selected; Log.d(TAG,receivers); - if (receivers.contains(nickname)) { + if (receivers.contains("@" + nickname + ",")) { selected = true; } else From b44eaff64bf15c3bf4c9854a2f740dda162391a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 17:33:02 +0200 Subject: [PATCH 037/103] reviewing my files --- .../java/es/ugr/swad/swadroid/model/UserFilter.java | 7 +++++-- .../ugr/swad/swadroid/modules/messages/Messages.java | 8 ++++---- .../swad/swadroid/modules/messages/SearchUsers.java | 10 ++++------ .../swad/swadroid/modules/messages/UsersAdapter.java | 6 ------ .../ugr/swad/swadroid/modules/messages/UsersList.java | 2 +- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index 22bb9360d..e8e24821e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -47,17 +47,20 @@ public class UserFilter { * Full path where user's picture is stored. */ private String userPhoto; - + /** + * Is a receiver?. + */ private boolean selectedCheckbox; /** * Constructor. * - * @param userNickname User identifier. + * @param userNickname User identifier. * @param userSurname1 User first surname. * @param userSurname2 User last surname. * @param userFirstname User name. * @param userPhoto Full path where user's picture is stored. + * @param selectedCheckbox Is a receiver?. */ public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox) throws ParseException { this.userNickname = userNickname; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 358615aef..e8b805f4b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -89,7 +89,9 @@ public class Messages extends Module { * Body EditText */ private EditText bodyEditText; - + /** + * Receivers label + */ private TextView receiversLabel; @@ -124,6 +126,7 @@ public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) } + //receivers label disappears if there aren't receivers public void onTextChanged(CharSequence s, int start, int before, int count) { if (s.toString().isEmpty()){ receiversLabel.setVisibility(View.GONE); @@ -146,7 +149,6 @@ protected void onStart() { SWADroidTracker.sendScreenView(getApplicationContext(), TAG); if (eventCode != 0) { - subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); rcvEditText.setVisibility(View.GONE); } @@ -345,7 +347,5 @@ public boolean onOptionsItemSelected(MenuItem item) { default: return super.onOptionsItemSelected(item); } - } - } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 288226ec5..cec2d85c4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,7 +1,6 @@ package es.ugr.swad.swadroid.modules.messages; import android.annotation.TargetApi; -import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Build; @@ -49,11 +48,9 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private UsersList userFilters = new UsersList(); private LinearLayout progressLayout; private boolean hideMenu = false; - private long courseCode; private int numUsers; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -120,13 +117,14 @@ public boolean onMenuItemActionCollapse(MenuItem item) { searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setQueryHint(getText(R.string.search_user)); + // listener to searchview searchView.setOnQueryTextListener(this); // searview expanded searchItem.expandActionView(); - // to manage the actionbar when searchview is closed + // manage the actionbar when searchview is closed if(hideMenu){ searchView.setVisibility(View.GONE); } @@ -156,7 +154,7 @@ public boolean onQueryTextSubmit(String query) { Toast.makeText(SearchUsers.this, R.string.introduceLongerText, Toast.LENGTH_SHORT).show(); } else { - if (Courses.getSelectedCourseCode() != -1) { //guest user + if (Courses.getSelectedCourseCode() != -1) { //is not a guest user showDialogSearch(); } else { courseCode = -1; @@ -244,7 +242,7 @@ protected void postConnect() { adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); lvUsers.setAdapter(adapter); - //messages about found users + //toasts to inform about found users if (numUsers == 0){ Toast.makeText(SearchUsers.this, R.string.users_NOTfound, Toast.LENGTH_SHORT).show(); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index a87746195..82ee0e332 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -28,15 +28,9 @@ import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; -import android.widget.Toast; - import com.nostra13.universalimageloader.core.ImageLoader; - import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; - import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.UserFilter; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index 7252d7b33..6113415e5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -11,7 +11,7 @@ import es.ugr.swad.swadroid.model.UserFilter; /** - * Users list + * UserFilter list */ public class UsersList { private List users = new ArrayList(); From 5d83653b0778de9f9d7ffb4f5828275a6383bccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 20:03:43 +0200 Subject: [PATCH 038/103] save state receivers in Messages Activity --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index e8b805f4b..90fe989fe 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -273,6 +273,10 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) { body = savedInstanceState.getString("body"); writeData(); + if (!receivers.isEmpty()){ + receiversLabel.setVisibility(View.VISIBLE); + rcvEditText.setVisibility(View.VISIBLE); + } super.onRestoreInstanceState(savedInstanceState); } From 3c017d9e2b4e6e60291ddf922bcc12281b19d1e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 28 Jul 2016 21:27:37 +0200 Subject: [PATCH 039/103] users list is kept when screen rotates --- SWADroid/src/main/AndroidManifest.xml | 1 + .../swadroid/modules/messages/SearchUsers.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/SWADroid/src/main/AndroidManifest.xml b/SWADroid/src/main/AndroidManifest.xml index 2ae39b339..731c527fe 100644 --- a/SWADroid/src/main/AndroidManifest.xml +++ b/SWADroid/src/main/AndroidManifest.xml @@ -173,6 +173,7 @@ Date: Fri, 29 Jul 2016 00:36:06 +0200 Subject: [PATCH 040/103] add receivers is allowed in reply messages --- .../swad/swadroid/modules/messages/Messages.java | 15 ++++++++++----- .../modules/notifications/NotificationItem.java | 4 +++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 90fe989fe..5545ff624 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -140,6 +140,16 @@ public void afterTextChanged(Editable editable) { } }); + + if (eventCode != 0) { + subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); + receiversLabel.setVisibility(View.VISIBLE); + rcvEditText.setText(getIntent().getStringExtra("sender") + ","); + rcvEditText.setVisibility(View.VISIBLE); + } + + receivers = rcvEditText.getText().toString(); + setMETHOD_NAME("sendMessage"); } @@ -147,11 +157,6 @@ public void afterTextChanged(Editable editable) { protected void onStart() { super.onStart(); SWADroidTracker.sendScreenView(getApplicationContext(), TAG); - - if (eventCode != 0) { - subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); - rcvEditText.setVisibility(View.GONE); - } } /** diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java index b14d914a9..2be6ac319 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationItem.java @@ -51,6 +51,7 @@ public class NotificationItem extends MenuActivity { private Long eventCode; private String notificationType; private String summary; + private String sender; @Override protected void onCreate(Bundle savedInstanceState) { @@ -73,7 +74,7 @@ protected void onCreate(Bundle savedInstanceState) { notifCode = Long.valueOf(this.getIntent().getStringExtra("notifCode")); eventCode = Long.valueOf(this.getIntent().getStringExtra("eventCode")); notificationType = this.getIntent().getStringExtra("notificationType"); - String sender = this.getIntent().getStringExtra("sender"); + sender = this.getIntent().getStringExtra("sender"); String userPhoto = this.getIntent().getStringExtra("userPhoto"); String course = this.getIntent().getStringExtra("course"); summary = this.getIntent().getStringExtra("summary"); @@ -157,6 +158,7 @@ public boolean onOptionsItemSelected(MenuItem item) { Intent activity = new Intent(this, Messages.class); activity.putExtra("eventCode", eventCode); activity.putExtra("summary", summary); + activity.putExtra("sender", sender); startActivity(activity); return true; From aa442fa85757cdccb1bfeeeab18dd7184abc277a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Fri, 29 Jul 2016 18:16:10 +0200 Subject: [PATCH 041/103] alertdialog to confirm the sending message --- .../swadroid/modules/messages/Messages.java | 31 +++++++++++++++++++ SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 3 files changed, 33 insertions(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 5545ff624..4bd5045d4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -18,9 +18,11 @@ */ package es.ugr.swad.swadroid.modules.messages; +import android.content.DialogInterface; import android.content.Intent; import android.os.Build; import android.os.Bundle; +import android.support.v7.app.AlertDialog; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; @@ -41,6 +43,7 @@ import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.modules.Module; +import es.ugr.swad.swadroid.modules.courses.Courses; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.webservices.SOAPClient; @@ -350,6 +353,8 @@ public boolean onOptionsItemSelected(MenuItem item) { String errorMsg = getString(R.string.errorServerResponseMsg); error(errorMsg, e, true); } + case android.R.id.home: + showDialogCancel(); return true; @@ -357,4 +362,30 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } } + + @Override + public void onBackPressed() + { + showDialogCancel(); + } + + private void showDialogCancel(){ + AlertDialog.Builder builder = new AlertDialog.Builder(Messages.this); + builder.setTitle(R.string.areYouSure); + builder.setMessage(R.string.cancelSendMessage); + + builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }); + + builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + finish(); + } + }); + + AlertDialog alert = builder.create(); + alert.show(); + } } diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 56c9e38c9..05804e0fb 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -324,5 +324,6 @@ En En toda la plataforma Introduzca un texto más largo + Va a cancelar el envío del mensaje \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index aba0c3648..f03b2b85c 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -334,5 +334,6 @@ In In all the platform Introduce a longer text + You are going to cancel the sending message \ No newline at end of file From e7ff0493f63e6db33b41d16f8e793740f0d4e2ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 13:03:26 +0200 Subject: [PATCH 042/103] showing name users in receivers label --- .../swadroid/modules/messages/Messages.java | 21 ++++++++----------- .../modules/messages/SearchUsers.java | 9 ++++++++ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 4bd5045d4..6b9ce23fa 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -121,6 +121,7 @@ protected void onCreate(Bundle savedInstanceState) { writeData(); receivers = ""; + receiversNames = ""; receiversLabel = (TextView) findViewById(R.id.message_receivers_label); rcvEditText.addTextChangedListener(new TextWatcher() { @@ -147,11 +148,11 @@ public void afterTextChanged(Editable editable) { if (eventCode != 0) { subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); receiversLabel.setVisibility(View.VISIBLE); - rcvEditText.setText(getIntent().getStringExtra("sender") + ","); + rcvEditText.setText(getIntent().getStringExtra("sender") + ", "); rcvEditText.setVisibility(View.VISIBLE); } - receivers = rcvEditText.getText().toString(); + //receivers = rcvEditText.getText().toString(); setMETHOD_NAME("sendMessage"); } @@ -166,7 +167,7 @@ protected void onStart() { * Reads user input */ private void readData() { - receivers = rcvEditText.getText().toString(); + receiversNames = rcvEditText.getText().toString(); subject = subjEditText.getText().toString(); body = bodyEditText.getText().toString(); } @@ -175,7 +176,7 @@ private void readData() { * Writes user input */ private void writeData() { - rcvEditText.setText(receivers); + rcvEditText.setText(receiversNames); subjEditText.setText(subject); bodyEditText.setText(body); } @@ -208,7 +209,6 @@ protected void requestService() throws Exception { addParam("body", body); sendRequest(User.class, false); - receiversNames = ""; if (result != null) { ArrayList res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); @@ -220,12 +220,7 @@ protected void requestService() throws Exception { String surname1 = pii.getProperty("userSurname1").toString(); String surname2 = pii.getProperty("userSurname2").toString(); - receiversNames += "\n"; - receiversNames += firstname + " " + surname1 + " " + surname2; - - if (!nickname.equalsIgnoreCase(Constants.NULL_VALUE) && !nickname.equalsIgnoreCase("")) { - receiversNames += " (" + nickname + ")"; - } + receiversNames = receiversNames.replace(", ", "\n"); } } @@ -309,6 +304,7 @@ protected void onSaveInstanceState(Bundle outState) { public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { receivers = data.getStringExtra("receivers"); + receiversNames = data.getStringExtra("receiversNames"); writeData(); } @@ -334,8 +330,9 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_addUser: Intent intent = new Intent (this, SearchUsers.class); - receivers = rcvEditText.getText().toString(); + receiversNames = rcvEditText.getText().toString(); intent.putExtra("receivers", receivers); + intent.putExtra("receiversNames", receiversNames); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); return true; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index cb69ba7e0..932ad7a58 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -43,6 +43,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private MenuItem searchItem; private static ListView lvUsers; private String receivers; + private String receiversNames; private String search; private UsersAdapter adapter; private CheckBox checkbox; @@ -71,11 +72,17 @@ public void onItemClick(AdapterView parent, View view, int position, long id) checkbox.setChecked(false); adapter.checkboxSelected.set(position, false); receivers = receivers.replace("@" + userFilters.getUsers().get(position).getUserNickname() + ",", ""); + receiversNames = receiversNames.replace(userFilters.getUsers().get(position).getUserFirstname() + " " + + userFilters.getUsers().get(position).getUserSurname1() + " " + + userFilters.getUsers().get(position).getUserSurname2() + ", ", ""); } else{ checkbox.setChecked(true); adapter.checkboxSelected.set(position, true); receivers += "@" + userFilters.getUsers().get(position).getUserNickname() + ","; + receiversNames += userFilters.getUsers().get(position).getUserFirstname() + " " + + userFilters.getUsers().get(position).getUserSurname1() + " " + + userFilters.getUsers().get(position).getUserSurname2() + ", "; } //String idUser = userFilters.getUsers().get(position).getUserNickname(); @@ -87,6 +94,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) textLoading.setText(R.string.loadingMsg); receivers = getIntent().getStringExtra("receivers"); + receiversNames = getIntent().getStringExtra("receiversNames"); setMETHOD_NAME("findUsers"); } @@ -109,6 +117,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { invalidateOptionsMenu(); // to manage the actionbar when searchview is closed Intent intent = new Intent(); intent.putExtra("receivers", receivers); // send receivers to parent activity + intent.putExtra("receiversNames", receiversNames); setResult(RESULT_OK, intent); finish(); // go to parent activity return true; From cebf543a8b41cde5966cebc347fe9ccc99f1e04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 13:41:16 +0200 Subject: [PATCH 043/103] receivers label is always visible --- .../swadroid/modules/messages/Messages.java | 39 +------------------ .../src/main/res/layout/messages_screen.xml | 4 +- 2 files changed, 3 insertions(+), 40 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 6b9ce23fa..1b6a8514d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -123,33 +123,11 @@ protected void onCreate(Bundle savedInstanceState) { receivers = ""; receiversNames = ""; receiversLabel = (TextView) findViewById(R.id.message_receivers_label); - rcvEditText.addTextChangedListener(new TextWatcher() { - - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - - } - - //receivers label disappears if there aren't receivers - public void onTextChanged(CharSequence s, int start, int before, int count) { - if (s.toString().isEmpty()){ - receiversLabel.setVisibility(View.GONE); - rcvEditText.setVisibility(View.GONE); - } - - } - - @Override - public void afterTextChanged(Editable editable) { - - } - }); + rcvEditText.setFocusable(false); if (eventCode != 0) { subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); - receiversLabel.setVisibility(View.VISIBLE); rcvEditText.setText(getIntent().getStringExtra("sender") + ", "); - rcvEditText.setVisibility(View.VISIBLE); } //receivers = rcvEditText.getText().toString(); @@ -276,10 +254,6 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) { body = savedInstanceState.getString("body"); writeData(); - if (!receivers.isEmpty()){ - receiversLabel.setVisibility(View.VISIBLE); - rcvEditText.setVisibility(View.VISIBLE); - } super.onRestoreInstanceState(savedInstanceState); } @@ -307,15 +281,6 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { receiversNames = data.getStringExtra("receiversNames"); writeData(); } - - if (!receivers.isEmpty()){ - receiversLabel.setVisibility(View.VISIBLE); - rcvEditText.setVisibility(View.VISIBLE); - } - else{ - receiversLabel.setVisibility(View.GONE); - rcvEditText.setVisibility(View.GONE); - } super.onActivityResult(requestCode, resultCode, data); } @@ -350,9 +315,9 @@ public boolean onOptionsItemSelected(MenuItem item) { String errorMsg = getString(R.string.errorServerResponseMsg); error(errorMsg, e, true); } + return true; case android.R.id.home: showDialogCancel(); - return true; default: diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index 4a2ac0b7d..dd84e8654 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -25,7 +25,6 @@ android:layout_height="wrap_content" android:hint="@string/message_receivers_title" android:textColor="@color/foreground1" - android:visibility="gone" android:textSize="19sp" android:layout_marginLeft="5dp"/> @@ -34,8 +33,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" - android:textColor="@color/foreground1" - android:visibility="gone"/> + android:textColor="@color/foreground1"/> Date: Sun, 31 Jul 2016 17:30:01 +0200 Subject: [PATCH 044/103] add users button in receivers label --- .../swadroid/modules/messages/Messages.java | 28 +++++++----------- .../src/main/res/layout/messages_screen.xml | 29 ++++++++++++++++++- .../menu/messages_main_activity_actions.xml | 5 ---- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 1b6a8514d..0a5c7580d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -23,27 +23,21 @@ import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; +import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; - import org.ksoap2.serialization.SoapObject; - import java.util.ArrayList; import java.util.Vector; - import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.modules.Module; -import es.ugr.swad.swadroid.modules.courses.Courses; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.webservices.SOAPClient; @@ -130,7 +124,16 @@ protected void onCreate(Bundle savedInstanceState) { rcvEditText.setText(getIntent().getStringExtra("sender") + ", "); } - //receivers = rcvEditText.getText().toString(); + final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); + button.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + Intent intent = new Intent (Messages.this, SearchUsers.class); + receiversNames = rcvEditText.getText().toString(); + intent.putExtra("receivers", receivers); + intent.putExtra("receiversNames", receiversNames); + startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); + } + }); setMETHOD_NAME("sendMessage"); } @@ -293,15 +296,6 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.action_addUser: - Intent intent = new Intent (this, SearchUsers.class); - receiversNames = rcvEditText.getText().toString(); - intent.putExtra("receivers", receivers); - intent.putExtra("receiversNames", receiversNames); - startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); - - return true; - case R.id.action_sendMsg: try { if((eventCode == 0) && (rcvEditText.getText().length() == 0)) { diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index dd84e8654..af338bf6f 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -6,7 +6,6 @@ android:orientation="vertical" > + + + + + + + + - Date: Sun, 31 Jul 2016 18:27:11 +0200 Subject: [PATCH 045/103] confirm button in users list --- .../modules/messages/SearchUsers.java | 32 +++++++++++++++---- .../src/main/res/layout/messages_screen.xml | 9 ++---- .../src/main/res/menu/search_users_bar.xml | 5 +++ 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 932ad7a58..318bb6f60 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -44,6 +44,8 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private static ListView lvUsers; private String receivers; private String receiversNames; + private String oldReceivers; + private String oldReceiversNames; private String search; private UsersAdapter adapter; private CheckBox checkbox; @@ -94,7 +96,9 @@ public void onItemClick(AdapterView parent, View view, int position, long id) textLoading.setText(R.string.loadingMsg); receivers = getIntent().getStringExtra("receivers"); + oldReceivers = receivers; receiversNames = getIntent().getStringExtra("receiversNames"); + oldReceiversNames = receiversNames; setMETHOD_NAME("findUsers"); } @@ -113,13 +117,7 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - hideMenu = true; - invalidateOptionsMenu(); // to manage the actionbar when searchview is closed - Intent intent = new Intent(); - intent.putExtra("receivers", receivers); // send receivers to parent activity - intent.putExtra("receiversNames", receiversNames); - setResult(RESULT_OK, intent); - finish(); // go to parent activity + sendReceivers(false); return true; } }); @@ -131,6 +129,8 @@ public boolean onMenuItemActionCollapse(MenuItem item) { // listener to searchview searchView.setOnQueryTextListener(this); + searchView.setMaxWidth(Integer.MAX_VALUE); + // searview expanded searchItem.expandActionView(); @@ -142,6 +142,21 @@ public boolean onMenuItemActionCollapse(MenuItem item) { return super.onCreateOptionsMenu(menu); } + private void sendReceivers(boolean send){ + hideMenu = true; + invalidateOptionsMenu(); + Intent intent = new Intent(); + if(send) { + intent.putExtra("receivers", receivers); // send receivers to parent activity + intent.putExtra("receiversNames", receiversNames); + }else{ + intent.putExtra("receivers", oldReceivers); + intent.putExtra("receiversNames", oldReceiversNames); + } + setResult(RESULT_OK, intent); + finish(); + } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { @@ -149,6 +164,9 @@ public boolean onOptionsItemSelected(MenuItem item) { if(!search.equals("")) onQueryTextSubmit(search); //find users with string search return true; + case R.id.confirm_receivers: + sendReceivers(true); + return true; default: return super.onOptionsItemSelected(item); diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index af338bf6f..53b73e35b 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -53,13 +53,10 @@ + android:layout_marginRight="5dp"/> + \ No newline at end of file From a1d44d139aa2e570c169dbdf05bb86d6506c081c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 21:09:29 +0200 Subject: [PATCH 046/103] dialog to cancel send receivers doesn't work correctly --- .../ugr/swad/swadroid/modules/messages/SearchUsers.java | 8 +++++++- SWADroid/src/main/res/layout/messages_screen.xml | 5 ++--- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 318bb6f60..abe14d4fb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -41,6 +41,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private SearchView searchView; private MenuItem searchItem; + private MenuItem searchButton; private static ListView lvUsers; private String receivers; private String receiversNames; @@ -100,6 +101,8 @@ public void onItemClick(AdapterView parent, View view, int position, long id) receiversNames = getIntent().getStringExtra("receiversNames"); oldReceiversNames = receiversNames; + search = ""; + setMETHOD_NAME("findUsers"); } @@ -139,6 +142,10 @@ public boolean onMenuItemActionCollapse(MenuItem item) { searchView.setVisibility(View.GONE); } + //delete these lines to see the search button + searchButton = menu.findItem(R.id.action_search); + searchButton.setVisible(false); + return super.onCreateOptionsMenu(menu); } @@ -167,7 +174,6 @@ public boolean onOptionsItemSelected(MenuItem item) { case R.id.confirm_receivers: sendReceivers(true); return true; - default: return super.onOptionsItemSelected(item); } diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index 53b73e35b..e25ceb02e 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -53,9 +53,8 @@ diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 05804e0fb..65c71cc9f 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -325,5 +325,6 @@ En toda la plataforma Introduzca un texto más largo Va a cancelar el envío del mensaje + Va a cancelar los destinatarios seleccionados \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index f03b2b85c..e37464a81 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -335,5 +335,6 @@ In all the platform Introduce a longer text You are going to cancel the sending message + You are going to cancel the selected receivers \ No newline at end of file From e24b8e26b1885b1d61d52ccbb05e6e6cb0441161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 21:14:33 +0200 Subject: [PATCH 047/103] error in selected users is corrected --- .../java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 1 - 1 file changed, 1 deletion(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index abe14d4fb..43bce2ea0 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -267,7 +267,6 @@ protected void requestService() throws Exception { @Override protected void connect() { startConnection(); - searchView.clearFocus(); progressLayout.setVisibility(View.VISIBLE); } From 9b17da661db21d9da2cf91680cff4e672341349a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 22:14:42 +0200 Subject: [PATCH 048/103] error in selected users is corrected when keyboard close or open --- .../modules/messages/SearchUsers.java | 19 +++++++++++++++---- .../src/main/res/menu/search_users_bar.xml | 3 ++- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 43bce2ea0..f17e02d3c 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -1,5 +1,6 @@ package es.ugr.swad.swadroid.modules.messages; +import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.content.DialogInterface; import android.content.Intent; @@ -120,7 +121,7 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - sendReceivers(false); + sendReceivers(true); //if confirm button exists, set to "false" return true; } }); @@ -142,9 +143,18 @@ public boolean onMenuItemActionCollapse(MenuItem item) { searchView.setVisibility(View.GONE); } - //delete these lines to see the search button - searchButton = menu.findItem(R.id.action_search); - searchButton.setVisible(false); + searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + //select checkboxes who users were added before + for(int i=0; i + android:title="@string/search" + android:visible="false"/> \ No newline at end of file From 4459c9071e57d58d57536bdcdf7cd3facbca8581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 31 Jul 2016 22:39:36 +0200 Subject: [PATCH 049/103] some fixes in receivers label --- .../es/ugr/swad/swadroid/modules/messages/Messages.java | 6 ++---- .../es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 6 +++--- SWADroid/src/main/res/layout/messages_screen.xml | 6 +++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 0a5c7580d..759a8198f 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -23,6 +23,7 @@ import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; +import android.text.InputType; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -117,11 +118,10 @@ protected void onCreate(Bundle savedInstanceState) { receivers = ""; receiversNames = ""; receiversLabel = (TextView) findViewById(R.id.message_receivers_label); - rcvEditText.setFocusable(false); if (eventCode != 0) { subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); - rcvEditText.setText(getIntent().getStringExtra("sender") + ", "); + rcvEditText.setText(getIntent().getStringExtra("sender") + ",\n"); } final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); @@ -200,8 +200,6 @@ protected void requestService() throws Exception { String firstname = pii.getProperty("userFirstname").toString(); String surname1 = pii.getProperty("userSurname1").toString(); String surname2 = pii.getProperty("userSurname2").toString(); - - receiversNames = receiversNames.replace(", ", "\n"); } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index f17e02d3c..74dad92fe 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -78,7 +78,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) receivers = receivers.replace("@" + userFilters.getUsers().get(position).getUserNickname() + ",", ""); receiversNames = receiversNames.replace(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2() + ", ", ""); + userFilters.getUsers().get(position).getUserSurname2() + ",\n", ""); } else{ checkbox.setChecked(true); @@ -86,7 +86,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) receivers += "@" + userFilters.getUsers().get(position).getUserNickname() + ","; receiversNames += userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2() + ", "; + userFilters.getUsers().get(position).getUserSurname2() + ",\n"; } //String idUser = userFilters.getUsers().get(position).getUserNickname(); @@ -166,6 +166,7 @@ private void sendReceivers(boolean send){ if(send) { intent.putExtra("receivers", receivers); // send receivers to parent activity intent.putExtra("receiversNames", receiversNames); + Log.d(TAG,receivers); }else{ intent.putExtra("receivers", oldReceivers); intent.putExtra("receiversNames", oldReceiversNames); @@ -258,7 +259,6 @@ protected void requestService() throws Exception { Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); boolean selected; - Log.d(TAG,receivers); if (receivers.contains("@" + nickname + ",")) { selected = true; } diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index e25ceb02e..318a58765 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -47,7 +47,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" - android:textColor="@color/foreground1"/> + android:textColor="@color/foreground1" + android:clickable="false" + android:cursorVisible="false" + android:focusable="false" + android:focusableInTouchMode="false"/> Date: Mon, 1 Aug 2016 18:26:00 +0200 Subject: [PATCH 050/103] arrayList to save receivers --- .../swadroid/modules/messages/Messages.java | 49 ++++++++++++------ .../modules/messages/SearchUsers.java | 51 ++++++++----------- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 759a8198f..3dc20850b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -23,7 +23,7 @@ import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; -import android.text.InputType; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -67,6 +67,11 @@ public class Messages extends Module { * Names of receivers */ private String receiversNames; + + private ArrayList arrayReceivers; + + private ArrayList arrayReceiversNames; + /** * Message's subject */ @@ -87,10 +92,8 @@ public class Messages extends Module { * Body EditText */ private EditText bodyEditText; - /** - * Receivers label - */ - private TextView receiversLabel; + + private String sender; /* (non-Javadoc) @@ -99,6 +102,11 @@ public class Messages extends Module { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + + receivers = ""; + receiversNames = ""; + arrayReceivers = new ArrayList<>(); + arrayReceiversNames = new ArrayList<>(); eventCode = getIntent().getLongExtra("eventCode", 0); setContentView(R.layout.messages_screen); @@ -110,27 +118,24 @@ protected void onCreate(Bundle savedInstanceState) { rcvEditText = (EditText) findViewById(R.id.message_receivers_text); subjEditText = (EditText) findViewById(R.id.message_subject_text); - bodyEditText = (EditText) findViewById(R.id.message_body_text); + bodyEditText = (EditText) findViewById(R.id.message_body_text); if (savedInstanceState != null) writeData(); - receivers = ""; - receiversNames = ""; - receiversLabel = (TextView) findViewById(R.id.message_receivers_label); - + sender = ""; if (eventCode != 0) { subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); - rcvEditText.setText(getIntent().getStringExtra("sender") + ",\n"); + sender = getIntent().getStringExtra("sender") + ",\n"; + rcvEditText.setText(sender); } final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent (Messages.this, SearchUsers.class); - receiversNames = rcvEditText.getText().toString(); - intent.putExtra("receivers", receivers); - intent.putExtra("receiversNames", receiversNames); + intent.putExtra("receivers", arrayReceivers); + intent.putExtra("receiversNames", arrayReceiversNames); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); } }); @@ -181,6 +186,9 @@ protected void requestService() throws Exception { readData(); addFootBody(); + + for(int i=0; i res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); int csSize = soap.getPropertyCount(); + receiversNames = ""; for (int i = 0; i < csSize; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); String nickname = pii.getProperty("userNickname").toString(); String firstname = pii.getProperty("userFirstname").toString(); String surname1 = pii.getProperty("userSurname1").toString(); String surname2 = pii.getProperty("userSurname2").toString(); + receiversNames += firstname + " " + surname1 + " " + surname2 + ",\n"; } } @@ -278,8 +288,15 @@ protected void onSaveInstanceState(Bundle outState) { @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { - receivers = data.getStringExtra("receivers"); - receiversNames = data.getStringExtra("receiversNames"); + arrayReceivers = data.getStringArrayListExtra("receivers"); + arrayReceiversNames = data.getStringArrayListExtra("receiversNames"); + receivers = ""; + receiversNames = sender; + for(int i=0; i arrayReceivers; + private ArrayList arrayReceiversNames; private UsersAdapter adapter; private CheckBox checkbox; private UsersList userFilters = new UsersList(); @@ -75,21 +71,19 @@ public void onItemClick(AdapterView parent, View view, int position, long id) if (checkbox.isChecked()){ checkbox.setChecked(false); adapter.checkboxSelected.set(position, false); - receivers = receivers.replace("@" + userFilters.getUsers().get(position).getUserNickname() + ",", ""); - receiversNames = receiversNames.replace(userFilters.getUsers().get(position).getUserFirstname() + " " + + arrayReceivers.remove("@" + userFilters.getUsers().get(position).getUserNickname()); + arrayReceiversNames.remove(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2() + ",\n", ""); + userFilters.getUsers().get(position).getUserSurname2()); } else{ checkbox.setChecked(true); adapter.checkboxSelected.set(position, true); - receivers += "@" + userFilters.getUsers().get(position).getUserNickname() + ","; - receiversNames += userFilters.getUsers().get(position).getUserFirstname() + " " + + arrayReceivers.add("@" + userFilters.getUsers().get(position).getUserNickname()); + arrayReceiversNames.add(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2() + ",\n"; + userFilters.getUsers().get(position).getUserSurname2()); } - - //String idUser = userFilters.getUsers().get(position).getUserNickname(); } }); @@ -97,10 +91,9 @@ public void onItemClick(AdapterView parent, View view, int position, long id) TextView textLoading = (TextView) findViewById(R.id.text_progress); textLoading.setText(R.string.loadingMsg); - receivers = getIntent().getStringExtra("receivers"); - oldReceivers = receivers; - receiversNames = getIntent().getStringExtra("receiversNames"); - oldReceiversNames = receiversNames; + + arrayReceivers = getIntent().getStringArrayListExtra("receivers"); + arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); search = ""; @@ -148,7 +141,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { public void onFocusChange(View v, boolean hasFocus) { //select checkboxes who users were added before for(int i=0; i Date: Mon, 1 Aug 2016 20:14:15 +0200 Subject: [PATCH 051/103] Updated play-services-analytics dependency --- SWADroid/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWADroid/build.gradle b/SWADroid/build.gradle index cb6a2cacf..93683af23 100644 --- a/SWADroid/build.gradle +++ b/SWADroid/build.gradle @@ -58,7 +58,7 @@ android { dependencies { compile 'com.android.support:support-v4:24.1.1' compile 'com.android.support:appcompat-v7:24.1.1' - compile 'com.google.android.gms:play-services-analytics:9.2.1' + compile 'com.google.android.gms:play-services-analytics:9.4.0' compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1' compile 'commons-io:commons-io:2.5' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' From 4afbca3c7550564c33340f47223aa663cedbb2d4 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Mon, 1 Aug 2016 21:09:46 +0200 Subject: [PATCH 052/103] Replaced @android:drawable system icons with local @drawable. Closes #213 --- .../modules/downloads/DownloadsManager.java | 2 +- .../swad/swadroid/modules/tests/TestsMake.java | 2 +- .../src/main/res/drawable-hdpi/ic_delete.png | Bin 0 -> 1445 bytes .../main/res/drawable-hdpi/ic_menu_delete.png | Bin 0 -> 2962 bytes .../ic_menu_settings_holo_light.png | Bin 0 -> 1227 bytes .../drawable-hdpi/ic_menu_share_holo_light.png | Bin 0 -> 505 bytes .../src/main/res/drawable-xhdpi/ic_delete.png | Bin 0 -> 3444 bytes .../main/res/drawable-xhdpi/ic_menu_delete.png | Bin 0 -> 3868 bytes .../ic_menu_settings_holo_light.png | Bin 0 -> 1622 bytes .../drawable-xhdpi/ic_menu_share_holo_light.png | Bin 0 -> 935 bytes .../main/res/drawable-xxhdpi/ic_menu_delete.png | Bin 0 -> 7161 bytes .../ic_menu_settings_holo_light.png | Bin 0 -> 2501 bytes .../drawable-xxhdpi/ic_menu_share_holo_light.png | Bin 0 -> 2297 bytes SWADroid/src/main/res/menu/menu_main.xml | 6 +++--- .../main/res/menu/rollcall_activity_actions.xml | 2 +- 15 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_delete.png create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_menu_delete.png create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_menu_settings_holo_light.png create mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_menu_share_holo_light.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_delete.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_menu_delete.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_menu_settings_holo_light.png create mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_menu_share_holo_light.png create mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_menu_delete.png create mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_menu_settings_holo_light.png create mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_menu_share_holo_light.png diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java index 3325cd1fb..93869a9d1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/downloads/DownloadsManager.java @@ -391,7 +391,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { AlertDialog dialog; builder.setTitle(R.string.sdCardBusyTitle); builder.setMessage(R.string.sdCardBusy); - builder.setIcon(android.R.drawable.ic_dialog_alert); + builder.setIcon(R.drawable.ic_dialog_alert); builder.setNeutralButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java index ae68f5b2a..d98ad85d0 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/tests/TestsMake.java @@ -481,7 +481,7 @@ public boolean onTouch(View v, MotionEvent event) { && !answerType.equals(TestAnswer.TYPE_UNIQUE_CHOICE)) { if (!answers.get(0).isCorrectAnswered()) { - img.setImageResource(android.R.drawable.ic_delete); + img.setImageResource(R.drawable.ic_delete); } img.setVisibility(View.VISIBLE); diff --git a/SWADroid/src/main/res/drawable-hdpi/ic_delete.png b/SWADroid/src/main/res/drawable-hdpi/ic_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..f3e53d7596c135fccdfd8710d01201f29f003d34 GIT binary patch literal 1445 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 IM6N<$g5iFgW&i*H literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-hdpi/ic_menu_settings_holo_light.png b/SWADroid/src/main/res/drawable-hdpi/ic_menu_settings_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..577e055878ed3a3dc2d73018890dbc947925fe8b GIT binary patch literal 1227 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 S*ir5B5 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 literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xhdpi/ic_menu_settings_holo_light.png b/SWADroid/src/main/res/drawable-xhdpi/ic_menu_settings_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..aa33c3880b991ccc9a62710abe117798e1f50e53 GIT binary patch literal 1622 zcmV-c2C4apP)ht(u000GENkll}fXxV_u z=R`We>!dVkU`VHZ21H14nTwroy2xvGd&WzCUvZNPCbVckMSYG>TjsJMeqZsdhdpR- zot?OK?{m{^@-y>9`cj#`aR-e%$0u#@qI-N;75vs1=n6_t^JDX6a&ge!bn;9~yw_Da z##=QY_@7yCzHyxz>?`(5!gDSY*@CQ92D*i(nK7T08VSdl*dAm4pi=@Owx2Q&+G8M+ zd%Km5vm878X5tUpF2h9M zT>gKO22`Cd5=qTf&-q+ryVp4sejsi1fk+~kI?rr*t@&hlj9N%0kP~L0@;#PGP4y*9 zy}MyRjF%i`-kcx<-SX>LhU@&w8q*u_xmfN%&miGiVxT+twvS8Q>PiLSb$24E#Od9m zFmRj()MkCEZ&cS3oeAIz4!GFnp%NUD+$@SYB0kB9ocw1}jXFN$m58%R_+~8 z*Sp2J;4OFiwm&t9k0ko|gs+<`7m3{KcF&n2r^}M%&(^aC9PA0O* za^Z-+#)APoJuc+B0fC9LY%wa68gaKT z8W&S7nMK`CaicGI5BRHZ+F*Z`j>qYH(||oboky$z}Ir1%L}d+1*1Oa-Z1AAi``-ryrE~ky%j4b1>IyI!~J2Mh-BX3 zK36-_$2@MmQDlB#u5Z{ISZM`5^nt1j?{i(a+Z9v&Meh%t;&H2OQ|kzAfL8|4Ey`@B zC!AHSnC07--QoMPT03eDzCH~zv0WDXxsJX#%(er*<1VjiG3rgJ?}VAe!#?A0I%0{~ zPkqpGueKZYrVLNRSZ20GF7k#Sc|>gnwh!Jgps@$l`3ckQ)WA=?kd&~eDC$jV+zSe* zUf5Tpy;BZ9DU&iOlk$Hc{{foU%Qj=A4bcDq03~!qSaf7zbY(hYa%Ew3WdJfTF)=ML zG%YeVR4_R@Gc`IhGc7PTIxsK~Bd)ms001R)MObuXVRU6WZEs|0W_bWIFflPLFf=VP zHdHV=+L@6RIMT%_@p^A^X5UDRjLANf13Pq%);A`Pd+=!;23pXx; zAif`nPef)@LW&ftmV!!=U?`shr5Kn0)zPywg_Q~)Xf6@UsrA5Be7{a=6EByPs``206cpncnr4<@!q@mA~gUzaA3%HTX+%kDFHYT5Qf!vm`Me|1djAs_x*GR z&!z%kGhWI$<|3X<1;9qUl5@-=4yFR&S{y_@$C%@oE<1op+>aXzjC~!)$_ii$_F+%K z@y9V;#ya3q+!Mu4ce-D|$M^yJarJ;X=I|E&DieT9a7UE58@rw_;mfG%mg3n4+>X7G zDINV8W$>{wd4UPs8tHyn<_K%Vx4t-F{HB0#CbHyT8aIH=*w&T4zhI%?@Yvw4$UHw9 zfiH|AwZ;Wt3m(R<9MXfe~y?7+&yyx)=z7N}~%m5B!YmPaWaH#7@Q+5E; zIqP##(=Vn1;7AlEd2}e2K@tF-TcIq?su`V~Rw@AYX?JP!=ya5wR`qE`V>4fQR+^F$GWKC7sT4IxUFgD9>&BxJs0#D$E0dq8B&$(De03B_O{zBGgT!>|}k{a55 z!O~xj?u?9>EHL(EoJ!?lWDg$AX}pf&%~Sx?@v3~6qvvqAx*Saezy`dwo-+WR!8JMF zpTip|0k{c|kLwhu)oQ!f;y+34?@=W6(zkfKXdO_i)poDN4CtH&58$o=8{em4rdmY+ zbb?>20J>f0o#8w;#fEn(4AdV*y+C*HYaPJI-C#EObp@bT@IwJeLH&YX7XStYpFDt- zf=?R2Fu^AaVA$Z31du2AoO(cqH+@Lz(5e*i5O+3-*HCUO7(002ov JPDHLkV1h8vxv&5L literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_delete.png b/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..246b8e484c11b3d6f8658cc8745adb876ce712ef GIT binary patch literal 7161 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 TdC2|a=cT%e4y;(o>cKw%V?a*+ literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_settings_holo_light.png b/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_settings_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..5df7a5521f4cfa5a72ce8f7ecc5cea31ce05db73 GIT binary patch literal 2501 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 UWvvF5DSoWHJvq#Jk1e@>0hLYV{Qv*} literal 0 HcmV?d00001 diff --git a/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_share_holo_light.png b/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_share_holo_light.png new file mode 100644 index 0000000000000000000000000000000000000000..1e21d9db6897cbf0664f7c9fd150f334571915b3 GIT binary patch literal 2297 zcmbVMdsGu=7XJbW%7N7$p`PLjX((8NB$GhM1EM4(!2ki|A!&JrWPkw4#7Q&(K`0y) z5R?Myx}wwy@~DEf)e5MfQbp(jq83nAkk=}@JmXfa)SaN%{ln8er*qDo``vHu{oVKE z2L^<@~Edyg8Y4~DI2okT+N>CVZWJny07b+wPa4;;9 zrEa?kdjen_FAo)K#3Fx|6j6{Q1|5=4p~9>I@Z6+RNuQhCFP^37=|9Fi6gDosn4GG&BK8}Xhx76zbzH4?l|k)l+ybZo*RE(<#wuE_-a zqKYP&O?VTOSQLc!Mo<_}BS9`w$Q{DFQ%Dq7H#(iZ0Z)Y}5E-J9DO48_kCb0>L8jXrYCTq1?lGc@kpb2COlgTt-P^m7MhKo8?sgdYhlxq7W z1RkuGqH>i+jwta4L`fX7UBf0|k-kYmp%RJS0V~yS3x$=8tdpq76cR*MC=7WmYO6KD z@b6)~S6dyLs)EVEuo~HpO0j;#+b%$7DjhC5-pl@|k>Zo&fTub6hDDKEz?T zGq@C<8->rMG3f$m$yTUTYa~i3yyRDI@VjWs7yO|u%NvCy8UzhRkd&nf2uegWh&mBb z;k`p>c#%XZR~lqPd){QrgHiboSSCOb1%9!6ime9ef!Q_ymN^M|oKW4pr$>c}RvfF{$&vYSWe`uQ;-D(d zAa_+xf%8Z~!KcTpW(m=rdBegh<751bc^4|I+M;-&#lzW-q|HIR$mJv1c>=dKm&*w) zU#zNbu5LA&<% z{hJs{x({|gnG{K(aT1)QjA59;h{5;Ip%EW8yoVs-6TxJ5z z_2eC+n(&EN4EtWtJ zqgAbILC>L^18u^Nog6`zIjk118T&e>#A)`L zb|1R+`m-Ivs8pYe;UB4+WLu3R_l30^HH2>GytorSwY#=%hP!d)qgjK28|y4 zaxx+7&{?Cnvw@Ro{HedEWJ&*8tUU7wj9lP9J`q{v;Tha}%0F3VY%47)h~1kMiPPAw zdFn9j#P#iXtS5p`{XI$jq6ZB>bp_siZefA@YOn5`-hKQOhvsn6nH!Q>Hc)i$8dh;@ zhkIL-fS%g_;e$0+UNIKu@0x>`)W+VgmjV4V@!<%!ndR7_ao&yFK2=>aUC=J0mX^Hi z-B@3~U@>6YU3h+t>vQ2HWAR1taBSZ6yp_)T+nfp+*l;X(W1aq&L$h^7qgzZW4(PQ$ zYG~-oaN_H}f%LF|{O>-l8?MHIz1oK}vUM$8B{7q24aAy*>P&Lhg;xVs{E7+zVA7oZ zj$Hg__Umcnx%T{jvMcm^R5#7+z=l6f70<%6a6tKb @@ -18,14 +18,14 @@ diff --git a/SWADroid/src/main/res/menu/rollcall_activity_actions.xml b/SWADroid/src/main/res/menu/rollcall_activity_actions.xml index 6c610ee8a..a7ab725d4 100644 --- a/SWADroid/src/main/res/menu/rollcall_activity_actions.xml +++ b/SWADroid/src/main/res/menu/rollcall_activity_actions.xml @@ -14,7 +14,7 @@ swadroid:showAsAction="ifRoom|withText"/> From 837b5407e74842c859215af5935530965d0fa18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 2 Aug 2016 18:27:13 +0200 Subject: [PATCH 053/103] fix in selected checkboxes when the screen was rotated or the focus changed --- .../es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 111d46980..89e486f49 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -144,6 +144,8 @@ public void onFocusChange(View v, boolean hasFocus) { if (arrayReceivers.contains("@" + userFilters.getUsers().get(i).getUserNickname().toString())) { userFilters.getUsers().get(i).setCheckbox(true); } + else + userFilters.getUsers().get(i).setCheckbox(false); } } @@ -223,6 +225,8 @@ public void onConfigurationChanged(Configuration newConfig) { if (arrayReceivers.contains("@" + userFilters.getUsers().get(i).getUserNickname().toString())) { userFilters.getUsers().get(i).setCheckbox(true); } + else + userFilters.getUsers().get(i).setCheckbox(false); } } From 4b4218b2fcec7f1202078879b55a0fd5c089c87d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 3 Aug 2016 00:05:47 +0200 Subject: [PATCH 054/103] testing first version of view for receivers --- .../modules/messages/FilterUsersList.java | 81 ----------------- .../swadroid/modules/messages/Messages.java | 40 +++++++++ .../src/main/res/layout/messages_screen.xml | 89 +++++++++++-------- .../src/main/res/layout/receivers_item.xml | 33 +++++++ 4 files changed, 127 insertions(+), 116 deletions(-) delete mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java create mode 100644 SWADroid/src/main/res/layout/receivers_item.xml diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java deleted file mode 100644 index 16dd2ac72..000000000 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FilterUsersList.java +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Module to get the users list to one course - * - * @author Jose Antonio Guerrero Aviles - */ - -package es.ugr.swad.swadroid.modules.messages; - -import android.os.Bundle; -import android.view.View; -import android.widget.Button; - -import es.ugr.swad.swadroid.Constants; -import es.ugr.swad.swadroid.R; -import es.ugr.swad.swadroid.gui.MenuActivity; - -public class FilterUsersList extends MenuActivity { - - public static final String TAG = Constants.APP_TAG + " Users List"; - - - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.dialog_filter_list); - setTitle(R.string.filterUsersListModuleLabel); - - - Button cancelFIlters = (Button) findViewById(R.id.cancelFilters); - cancelFIlters.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - //setResult(RESULT_CANCELED); - finish(); - } - }); - - Button acceptFIlters = (Button) findViewById(R.id.acceptFilters); - acceptFIlters.setOnClickListener(new View.OnClickListener() { - - public void onClick(View v) { - //TODO Filtrar la lista y mostrarla en el ListView - } - }); - - } - - - protected void onStart() { - super.onStart(); - /*try { - runConnection(); - } catch (Exception e) { - String errorMsg = getString(R.string.errorServerResponseMsg); - error(TAG, errorMsg, e, true); - }*/ - } - - - protected void connect() { - /*String progressDescription = getString(R.string.informationProgressDescription); - int progressTitle = R.string.informationProgressTitle; - - startConnection(true, progressDescription, progressTitle);*/ - } - - protected void requestService() throws Exception { - - } - - - protected void postConnect() { - - } - - - protected void onError() { - - } -} \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 3dc20850b..d5aa2a211 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -24,11 +24,16 @@ import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.util.Log; +import android.view.Gravity; +import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; @@ -95,6 +100,8 @@ public class Messages extends Module { private String sender; + private ViewGroup layout; + /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) @@ -140,6 +147,39 @@ public void onClick(View v) { } }); + layout = (ViewGroup) findViewById(R.id.layout_receivers); + + LayoutInflater inflater = LayoutInflater.from(this); + int id = R.layout.receivers_item; + + LinearLayout linearLayout = (LinearLayout) inflater.inflate(id, null, false); + + TextView textView = (TextView) linearLayout.findViewById(R.id.textView); + textView.setText("Rubén Martín Hidalgo"); + + //layout params + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + + params.topMargin = 15; + linearLayout.setPadding(5, 3, 5, 3); + linearLayout.setLayoutParams(params); + /////// + + layout.addView(linearLayout); + + LayoutInflater inflater2 = LayoutInflater.from(this); + int id2 = R.layout.receivers_item; + + LinearLayout linearLayout2 = (LinearLayout) inflater2.inflate(id2, null, false); + + TextView textView2 = (TextView) linearLayout2.findViewById(R.id.textView); + textView2.setText("Isabel Ortega Contreras"); + + linearLayout2.setPadding(5, 3, 5, 3); + linearLayout2.setLayoutParams(params); + + layout.addView(linearLayout2); + setMETHOD_NAME("sendMessage"); } diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index 318a58765..ad88c57d1 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -19,48 +19,66 @@ android:visibility="invisible" android:textSize="8sp" /> - - + android:orientation="horizontal" > - + - + + + + + + + + + - - + + android:layout_marginLeft="5dp" + android:layout_marginTop="4dp"/> + + + + + + + + + \ No newline at end of file From 850a8503c9259ca348c5d648c8ccc8fc06b7f1d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 3 Aug 2016 18:57:19 +0200 Subject: [PATCH 055/103] receivers management is working --- SWADroid/src/main/AndroidManifest.xml | 1 + .../swadroid/modules/messages/Messages.java | 63 ++++++++++--------- .../src/main/res/layout/messages_screen.xml | 4 +- .../src/main/res/layout/receivers_item.xml | 32 ++++++---- 4 files changed, 54 insertions(+), 46 deletions(-) diff --git a/SWADroid/src/main/AndroidManifest.xml b/SWADroid/src/main/AndroidManifest.xml index 731c527fe..a477ee362 100644 --- a/SWADroid/src/main/AndroidManifest.xml +++ b/SWADroid/src/main/AndroidManifest.xml @@ -164,6 +164,7 @@ diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index d5aa2a211..22a030ace 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -149,37 +149,6 @@ public void onClick(View v) { layout = (ViewGroup) findViewById(R.id.layout_receivers); - LayoutInflater inflater = LayoutInflater.from(this); - int id = R.layout.receivers_item; - - LinearLayout linearLayout = (LinearLayout) inflater.inflate(id, null, false); - - TextView textView = (TextView) linearLayout.findViewById(R.id.textView); - textView.setText("Rubén Martín Hidalgo"); - - //layout params - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - - params.topMargin = 15; - linearLayout.setPadding(5, 3, 5, 3); - linearLayout.setLayoutParams(params); - /////// - - layout.addView(linearLayout); - - LayoutInflater inflater2 = LayoutInflater.from(this); - int id2 = R.layout.receivers_item; - - LinearLayout linearLayout2 = (LinearLayout) inflater2.inflate(id2, null, false); - - TextView textView2 = (TextView) linearLayout2.findViewById(R.id.textView); - textView2.setText("Isabel Ortega Contreras"); - - linearLayout2.setPadding(5, 3, 5, 3); - linearLayout2.setLayoutParams(params); - - layout.addView(linearLayout2); - setMETHOD_NAME("sendMessage"); } @@ -338,6 +307,38 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { } Log.d(TAG, "Nickname Receivers: " + receivers); writeData(); + + layout.removeAllViewsInLayout(); + + for(int i=0; i + android:background="#878787"/> + android:paddingLeft="10dp"/> - + android:layout_height="match_parent" + android:visibility="gone"/> + + \ No newline at end of file From 30fb32194bed2945d5624ceca7ce57456f7af796 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 4 Aug 2016 19:42:11 +0200 Subject: [PATCH 056/103] photo of last receivers appears --- .../swadroid/modules/messages/Messages.java | 62 ++++++++++++------- .../modules/messages/SearchUsers.java | 9 ++- .../src/main/res/layout/messages_screen.xml | 3 +- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 22a030ace..244732d1d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -24,7 +24,6 @@ import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.util.Log; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; @@ -32,8 +31,8 @@ import android.view.ViewGroup; import android.widget.EditText; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; -import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import org.ksoap2.serialization.SoapObject; @@ -42,9 +41,11 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; +import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.login.Login; +import es.ugr.swad.swadroid.utils.Utils; import es.ugr.swad.swadroid.webservices.SOAPClient; /** @@ -76,7 +77,9 @@ public class Messages extends Module { private ArrayList arrayReceivers; private ArrayList arrayReceiversNames; - + + private ArrayList arrayPhotos; + /** * Message's subject */ @@ -102,7 +105,7 @@ public class Messages extends Module { private ViewGroup layout; - + /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) */ @@ -114,7 +117,8 @@ protected void onCreate(Bundle savedInstanceState) { receiversNames = ""; arrayReceivers = new ArrayList<>(); arrayReceiversNames = new ArrayList<>(); - + arrayPhotos = new ArrayList<>(); + eventCode = getIntent().getLongExtra("eventCode", 0); setContentView(R.layout.messages_screen); setTitle(R.string.messagesModuleLabel); @@ -122,12 +126,12 @@ protected void onCreate(Bundle savedInstanceState) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - + rcvEditText = (EditText) findViewById(R.id.message_receivers_text); subjEditText = (EditText) findViewById(R.id.message_subject_text); bodyEditText = (EditText) findViewById(R.id.message_body_text); - - if (savedInstanceState != null) + + if (savedInstanceState != null) writeData(); sender = ""; @@ -143,15 +147,16 @@ public void onClick(View v) { Intent intent = new Intent (Messages.this, SearchUsers.class); intent.putExtra("receivers", arrayReceivers); intent.putExtra("receiversNames", arrayReceiversNames); + intent.putExtra("receiversPhotos", arrayPhotos); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); } }); layout = (ViewGroup) findViewById(R.id.layout_receivers); - setMETHOD_NAME("sendMessage"); + setMETHOD_NAME("sendMessage"); } - + @Override protected void onStart() { super.onStart(); @@ -164,7 +169,7 @@ protected void onStart() { private void readData() { receiversNames = rcvEditText.getText().toString(); subject = subjEditText.getText().toString(); - body = bodyEditText.getText().toString(); + body = bodyEditText.getText().toString(); } /** @@ -195,7 +200,7 @@ protected void requestService() throws Exception { readData(); addFootBody(); - + for(int i=0; i arrayReceivers; private ArrayList arrayReceiversNames; + private ArrayList arrayPhotos; private UsersAdapter adapter; private CheckBox checkbox; - private UsersList userFilters = new UsersList(); + private UsersList userFilters; private LinearLayout progressLayout; private boolean hideMenu = false; private long courseCode; @@ -59,6 +60,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.list_users); setTitle(R.string.actionBarAddUser); + userFilters = new UsersList(); + //users list lvUsers = (ListView) findViewById(R.id.listItems); lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); @@ -75,6 +78,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceiversNames.remove(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + userFilters.getUsers().get(position).getUserSurname2()); + arrayPhotos.remove(userFilters.getUsers().get(position).getUserPhoto()); } else{ checkbox.setChecked(true); @@ -83,6 +87,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceiversNames.add(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + userFilters.getUsers().get(position).getUserSurname2()); + arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); } } }); @@ -94,6 +99,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); + arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); search = ""; @@ -160,6 +166,7 @@ private void sendReceivers(boolean send){ Intent intent = new Intent(); intent.putExtra("receivers", arrayReceivers); // send receivers to parent activity intent.putExtra("receiversNames", arrayReceiversNames); + intent.putExtra("receiversPhotos", arrayPhotos); /* String receivers = ""; for(int i=0; i + android:layout_marginRight="5dp" + android:layout_marginBottom="9dp"/> Date: Thu, 4 Aug 2016 21:23:35 +0200 Subject: [PATCH 057/103] alert dialog when you try remove a receiver --- .../swadroid/modules/messages/Messages.java | 43 +++++++++++++++---- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 244732d1d..719c0bdad 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -148,6 +148,7 @@ public void onClick(View v) { intent.putExtra("receivers", arrayReceivers); intent.putExtra("receiversNames", arrayReceiversNames); intent.putExtra("receiversPhotos", arrayPhotos); + Log.d(TAG, "Receivers of Messages: " + receivers); startActivityForResult(intent, Constants.SEARCH_USERS_REQUEST_CODE); } }); @@ -310,7 +311,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { receivers += arrayReceivers.get(i) + ", "; receiversNames += arrayReceiversNames.get(i) + ",\n"; } - Log.d(TAG, "Nickname Receivers: " + receivers); + Log.d(TAG, "Receivers of SearchUsers: " + receivers); writeData(); layout.removeAllViewsInLayout(); @@ -321,7 +322,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { final LinearLayout linearLayout = (LinearLayout) inflater.inflate(id, null, false); - TextView textName = (TextView) linearLayout.findViewById(R.id.textName); + final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); textName.setText(arrayReceiversNames.get(i).toString()); final TextView textNickname = (TextView) linearLayout.findViewById(R.id.textNickname); @@ -349,11 +350,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); button.setOnClickListener( new View.OnClickListener() { public void onClick(View view){ - layout.removeView(linearLayout); - int position = arrayReceivers.indexOf(textNickname.getText().toString()); - arrayReceivers.remove(position); - arrayReceiversNames.remove(position); - arrayPhotos.remove(position); + showDialogDelete(linearLayout, textNickname, textName.getText().toString()); } }); } @@ -372,7 +369,7 @@ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_sendMsg: try { - if((eventCode == 0) && (rcvEditText.getText().length() == 0)) { + if((eventCode == 0) && (receivers.length() == 0)) { Toast.makeText(this, R.string.noReceiversMsg, Toast.LENGTH_LONG).show(); } else if(subjEditText.getText().length() == 0) { Toast.makeText(this, R.string.noSubjectMessageMsg, Toast.LENGTH_LONG).show(); @@ -418,4 +415,34 @@ public void onClick(DialogInterface dialog, int which) { AlertDialog alert = builder.create(); alert.show(); } + + private void showDialogDelete(final LinearLayout linearLayout, final TextView textNickname, String textName){ + AlertDialog.Builder builder = new AlertDialog.Builder(Messages.this); + builder.setTitle(R.string.areYouSure); + String dialog = getResources().getString(R.string.cancelRemoveReceivers); + dialog = dialog.replaceAll("#nameUser#", textName); + builder.setMessage(dialog); + + builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + } + }); + + builder.setPositiveButton(getString(R.string.acceptMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + layout.removeView(linearLayout); + int position = arrayReceivers.indexOf(textNickname.getText().toString()); + arrayReceivers.remove(position); + arrayReceiversNames.remove(position); + arrayPhotos.remove(position); + receivers = ""; + for(int i=0; iIntroduzca un texto más largo Va a cancelar el envío del mensaje Va a cancelar los destinatarios seleccionados + ¿Quiere quitar a #nameUser# de la lista de destinatarios? \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index e37464a81..99c219c4c 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -336,5 +336,6 @@ Introduce a longer text You are going to cancel the sending message You are going to cancel the selected receivers + Do you want to remove #nameUser# from the list of receivers? \ No newline at end of file From 1feeb88e377eb20f8f823f63269cb0c694dc063c Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Fri, 5 Aug 2016 19:48:25 +0200 Subject: [PATCH 058/103] Updated trash icon --- .../main/res/drawable-hdpi/ic_menu_delete.png | Bin 2962 -> 1036 bytes .../res/drawable-xhdpi/ic_menu_delete.png | Bin 3868 -> 1396 bytes .../res/drawable-xxhdpi/ic_menu_delete.png | Bin 7161 -> 1281 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/SWADroid/src/main/res/drawable-hdpi/ic_menu_delete.png b/SWADroid/src/main/res/drawable-hdpi/ic_menu_delete.png index 4d253aaf5290b6b25ec9557e91cc39b1686f7916..b412d4c2f9e1a4d45cd0ad887da3cd0e43e2e99b 100644 GIT binary patch delta 1015 zcmV*2M@l0NUr7((37ADCW;{%4cVR9?39PCmVeGLo1N+H-Q11SnJysBkwP*?`wWk%_3t^Uh z3fu$oF+b@5pMck@IxO=zY6x8co&e6iU1`0r_YL4Z@cBq%paM3Y*ARFE>;_5{z=CSQQs02`;Og@~*G&n#FE zY%K+CnSXh`yw(D~120r{*Bfk-0!?DTTlbm?zh5$hEAe$ftW>R+B^#PI7iXPDhk+0p z;Z>dRz28Kbi5{qM;VSUcly?<8wBjiai4SM+QQ)1yXy!rO2JQfNfo0&TWf(6^mDMHq zdtjE{0)M^%Ux0O0-D;YNB&G)V;-soL=fsNBS>T*K?LZ-aPS1Lz9ISll$QZsF4-$`evN4r;CJ-tD z%%-9|W;hV5!0?cZd+cN+i>W113fSc%PdwSn=K`U?&Hb1IYXtFZ6>!dpDUkv~TB~2$C0&BYy+udQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+ND)ljw~q* z{O1&N1iWCwaWIQCH<;s3KxcJ#y+v=N0aYexjF$+TO6#A$clry1h&XBSYRxQTXw$|W zi<&>iSqFantk0I^*Pz_)^Nu86;Xc(fHmo3 zsJ$Es#J})tt$Nn4@BSRzkHG>BuZ+})7i=uC<3+NNm~_1BeIheR>8|sA`mugY!0TD- zCq__&YNkftH*VnaApT8$U7Zbp^oG$_?(Z9)B*<^%uVGh6>F&@s;V&5ZFNCCDF>=%T z2C%+X{4OW@3V$$N2KKCbudAV54TWh>Wxe>LM-Szxa>){yJX5g7JK<68G(b8~)Benj znhwM};CB;ap7$9-MuQx0rB3C_YQlcS=fvE13OO??Gc8seSdgvHSm<%<*YSemniq65 z!J5+g|1b| zgGWRw+ka-WvBlEduxxFglT+(x6t$wf*SQ;a>0DNGLo%%}0`L`9#u&wRMFcvi^kV3Q zq^Ipk8?`|!5W3p5#Z>0(t>unW3|BT6=g<*j^)|4TW9|qCm1ElufQ?v&w;703%#gVB z)}a6g(MK>2Qh*+hEzoKAT*>S}YBZ;C`0-S#>3>{(z&mcXp|0Nl+P+6hez zB(#kR&TZA)-FIHgfvOGnkxCg$yw?&ynYz~@2WCv`o>{!kaeK30aA`f=7^bm)Gx(=C3K%AGI+6qO@&vh_T zZGQ!XO$%5rTSp}}l^KgWaYLd-999u6XIxv`3AS2Cl_Vg9?w=DhT9I9H)7bbPzFSAW z8OiwRsXbbN|CW*UZUJCgGhBoSOIr&)9dcl>SoXtgN^s$uppFeA0+QKz8}akX|ZHamz4E<>xvVO!EHr#EKl zsNb>&&92VKrf(EES>Ok!1$RcnhBiUUvsjgl#>PKT`WJeN78!QHC3FA)00eVFNq_A=&UrBaOPNPMz<(>VI?<@D2Z8P&0)wb0B#{#LZl{DF~{3*s(hy(kwv$ zkjv#-TUuILzA%Ieg+c+qaMx)Vr0RLiU+D%UE%6|j?;>`Sq zSFc|EeDdVUmbJAt?LFKe+Z)G12r)J`R_yQZe?UZk+bw~HJ>V&50nh-bQmMcg!_jDz zu3WjIve~RwN)Z4EA-GT|i0jv{M=F&HS1J{Fa{<67%Z(5TO~AL9XHnxnHpakpU1TyD zaryG)`AjDBPHRm<2msKTMB`uOpqF~$G@1ArHT^+pL*X04rvY*qf+wQE+P zP{;!4ab5Q(0PT+BC?N!Sp)UcnDy8;SDwTZz_6i}QmSr&jN+c4RnfJS{`zL1pk(s}L z{``5uH%u6v8u7p}06zd|TU%S(GchsYynp}Rdi3a#t(4+ov1rbpKYyQ9O6|?(^F&0D zQX-W~nZ?CL0|2*g-%d?WPye>9tvi=BQ z;Qsyl`|jPl7k~2P34QqRfs|4}EhNHNkBEp;sT6v8did(?1_m92|(MnT{B_LHS5X&fYusXYcTWr zZ}WR*UY~DS77>wo`}Qr*%*@yT;z9KaoC99zU@0X4z;#`=EPsoa`=c6PP|pmgEFg=$Yvk2J=JI!mtuwR(>FpAceQaoz+^ z2F2rXdGX>!?(OYe1CaBV-%-CHEbEf^Fo55$uC9JJIy$;%e0Dz$7K_oLLx;G#yIc45^;OTDIg>wn^yq&8OaXWpv`-4v0uvGE z^ZDPT)9F6~NHDW)jER*>rNqL*LTrA1KJw|)Ct0mlt>xuqp|$oCl#q%;i!NS6V1b{-JAj;*kn4O)q=jP_*g9i^H zU0q$)oqs!bKCi5-WB~j-s22hgs1xYgwyoa1d#7&Qx@7?nL}Uvg$hK_&ASorJlpCrO z0C-Itlv3=vF0|GxgkY^TA2@J80no-6jSy(08?C0(X_iuw*4lU*lu=5-+mQoVncX0nOag#@_UxGgg16M6+G$U)l2V#jEEaa^7sVzL2?IdS%*=%HKxhI0 zR3s8n$z-yrXFKtDoSE63oSY0Lw;=*jN}Wg~8ko8jex-68#}JV_GBWbj2&`{DQcC3! zXn)!Pm6ya-g!`rl?*V330M4de|4rcKfQzq9pj<91W^PId`K8zUGV=+9LTCcU z7?+5YSN56$Ap|^+R)KJ5r=bZfEiEYk%5j{qQ-2kaNCe4b(!e7S2B8UfJEiiHt|^dG z!f~9h8$$lh=wkriw^RBaXi6E4#bS_B8X^kU4Wa=8V`F1r zW@X!U;1BPe5Rb>%vMi0-Icq3{?ncMQ#}yG3j~zQ!1rXI*8zID&(+S|e4c>O0s<(fz z)|!qSIl{?gas_~YBKP&qM!mmNr%#_=7#bR?L?V%h)_VP*YP%DP&Ci*cjWN(#TYtU1 zy)-;LoC7d3Ha7OrBOI7O!!c}(`5h6RdinBY+ugf&ou^Nqim9n7%IEW_R;yc1-r#+y z#bPmZbaZfEUmp()3{=jYJC{o)lhXkHN<@oc?+bR7gynMiU_2f_&ddjisI^oorRV48 z<=otyFvcL4%ZW;*LYYiP+qTW=bbs1(c6RF4*4EW%G@1jj0APA%pqodr&WkKA+b_;LKysZ)Cav;s(=c27nCVgLkyHPjNcidvkP3WdVr;NW0xWMo8dmiIpcGjF*{ z+6G^IA5cbP!h@ntfiGSadE@-C4P7aH!#8}xM*IT6#Ug+sf&1YA0000D)6*V_ zZE57}X14!)_0?BZ-3{xuZtJ#gJvLQERjd7O)h4yUXf-LRH?2@<(Xyg7|ZHNY+l4QB^_+Bj5$#I&cNJ2E1qf4e*Bnl>kWkFgC@1*;q0Leg*CU z`@jR>4)Bl88zF?Csfq zlswO0^045yl0}nk;6rn@B)lt!%MxL5!!5k;;>v>&O*1yT-yDdp`-q+M09TOQ5Rsd<=xNH~)5O|N&=)u!ywtCVJR>5zBJxsVU;b{DD3BHu zLP)j1E^tdkZX0d)fxAZMW6SMR&j0t4u6JC;xNRFMTUJx-Sgr6H@VSWWUsyTpDQf5+ znM=KqWpe6vg2e6kEXym%LMvICJq1omY=4pz*$^=xPTgWdmazCVca$yitQ6}^rzE!B>^}s zl>4`7(`@f>5CA-?2*9Ki(~1CKESx%p?%NHMx5DvLP_wiCbef z!5sr&+nyb>><04#(~*hik&E#Um>-ND0{g0ZlE$&S$Hi)mVuF>Q6xm^>## zaB^>EX>4U6ba`-PAZ2)IW&i+q+ND)%&KxNW{Ld-&2>6BJI2eqyH`wEE(KD0eixO?5 z1x+_&z>jj-UGks5Px%Xjm}^n<-bQN`Lx&EYSoHcDcOCfgdwsWB{S2z(c|N1)ck!2v zkDU0c{PU*yv!b_kik}p{<=lT##IKiJ16b4BVi_Mp0`V^_x6%D^@BM$iFP^tT!wK)e zNQe_UQrfj5RY;mly!-P+WRTLcW;|KsYQHLA)xTpTUp} zFBpA~{p-fJB*<^%pV1!eR35AJgYXv_`ICf{UuEP8OTTzQ@BJ@w&sXrT&~66K?&sul zLZ>zmv%Q)1$sfJXfu1T)vIHvc6s++sc-S)=AYI_Jzvls`1O6_edWbRa`wpQ-iyUvI zN%qKk!G6czjd`9a?!wJK^CeCPqHl_Ukv;5bAbJm53ZXxRn zc=*LPEjL&Kt?)djEPc}Yf%cM+>aRz;*B(s0B02Y_2))uFU$#)y^jqJ)jn7%4@+XJ)ZEEWs^hM_4QsrQ; zuQ_zuB_wNhH!&T6N>`+UJ-)~NW72{GZF5xdQ*}EB(SqAN1V9%^_DM@8@IVpIGrW=LVjch84USCaB8-DP z9X+@&HkNV5S+URdbhFKyJ1^lkgw z0do}i;u8X2ObOcS3h>#WC@32zl5+g4Y|)URg8=B%j65^YOKf!A$C^;*J!3Bo99je2 zXzkUacPYTIFTiSJ!*8jO4-nFG4yUx3k#x#&6X$^x{TBf>yE{Go} z;Sw$QHlSthffjAZMIZVwwG&WANE_XrQ5Y4$Feus3si}a2wug1Jo!L#1sD98>mp5Cw zFT-sT3Id(i?lwMK%eyRuFas5^hk_?@%F)>!W@uZx%sO?WLfS#K*=%6wc|LB(X6^77 zL5|~>Lxy6~`{a!lj#^`UGJF25>z9HdD|ZsL5HfBE)wyTe%#Sh-$gTgL&EpK(O9q6_DRiq$+{3 z$>T@_q9lhqjIYLGQltYEK~E5rIwgt?5y8wsryAv70xnbCar*wX00004b3#c}2nYxW zd7fvD4jE_i<+7s!k^p zCw5o2GYfxGN$u*c^Z4#L=bn3S8Q8-f_OOQzf|-e#X}6x+DLSs88QXP;h`7_XG<0=Z z0W$}291r`xUj|SB@FeF*Yh5?SEcw3wA0n!C(!P!oz|188e*!QJpaj6hCIMUN&A!tB zHURtr-~th?Gc$D}GMsh`1OR3hL}Zmx#~sHRy>{)|!H+-wxG*<22gh+9OS;yY4;(mv zci(-te)8l=PboDH;2)i^6X*~DL}Zy+Xs!F0Ir`v(54t8NClxkFm$7vkWaRKqKmAmi znwp9Vg~GsVqTZoBQw(5V!l>({S0LS0G;V+>r^rO!V5Ob-nW#nxIu z^guT7`ue)}_S)Th?0JkiWLJrUnNG`BD1v+Mb($hx3w|Wu;On2_XjJ zIF?##L+MZpA&?{qJC0*;-{}mtUawov^BOmjB(X`7P=9~_Xti2h3&Zd>fEp3mOgE5^ zh};Aa5icw(6vHqq7Yc;~0Lnc*Jv~Ge01&?KJC5Tp08&cX<>lo<5CqSzuC9j07y`i7 zT8g4534$O@lEeal>$(^k8gd=SDfjjD4Ki~Apa$S}k|c{tsb7fb*Nli(NywE~%uGp= z{ND4tV*vIsb5SW(ymjkVFg-o(&CSg@SFc``Uw{2I*4EYl0Apigngh@uE*&YYp6M~~W(kr6dAGGbnS`Q@ayx3?yQs50}NBuVCc-~Sg8 zEwxHQO9V6(q|*RSXsvsurl$J7`|dmM+i$;>H*VaZYPD*!+<%maN9cZBgG5qFilT^) zA3ttid+jyz#v57zV_10pkR2um7(@zWEfB(H* zTwH7(l4fIQyAje{^qOlxnqqY9*fDwf^l5(o{r6W79XhnCwO;P+?Y-NIA9?$LX94_y znR|$+=kn#tJ=4?EU6(FhqDz-9(dEmR#rpa>lv1pe0^j%MNvlCfDarFZa$OgLgM%0! zAGhP<<9zJcG5yLbuT%yH2k#KkT>$d{{!T=9cV!yPkSSwkS8M%8t@RP#_nC-%W)6v{ zSglrrrKKfzetupoEiK7~g$2i2i`CUtvA(`8vUCA93tPEdHbD?@5Cl9lG^ESrvN?SC zu!*8b1wl{)a1Wc^psLsFEQI){@B3F;^&vL_>Bk-be*w@7KqX0%D5bRHI91>G3(V{R zkN_kRIjK&$g>D1DZi;73L?*pgO_Ibar3%GjQ2+?i=dS~}2(-Q)$h8(ABDU5ZA)&wXw0WudA!;w^m!>mI=s|X|0Q{>pEY3^_Bec%P$MBzWQo(@Zdon9v;>& zyzoL21Oe~cx6gESb+Ivqy1Tp0{{8#6oV#w`yy+;VNJ_~I3k$MVtI^8Jiv01%AHDhc zc{wvPW2dL5asK>y_xb0acU;$v0Q}afA1xEm#JFN+E|<$}jKMeGe3P}K1Rx|LxULH+ zB{4J7ouMsLFOK8JC?-k5X)Bzy*a`qV&y)TA{g#=nwKi$h2cSJ0B8rG?7=}zlQ{ zacY+7c^;(%7;EiT^<-OUM+6umGEo$5y8yM?9j1j5LI{*fB}+us7^BngS`wOjS2ztp zE*6Unps|tJNk}Qt-QCRqOmA;*t_a9uEdlolC=?2u{+-93ZNc|__`Yw^R2W-D?%`r) z1HhyP?Fs?KVi7_J#%4c}OJN=YvJp4TY&_4iS&nvkSzIcWSO{UTbwjmnw4(-C044|m z>-&CQaoYhE3IzxuvW_y>dOJ4(T5C;2+V_19f*`NBZ6S?-EdQS_0fj=r0MNS_0a*>O z_jlmVc9-?zJ&0@x%V*Axh}fq*!U z4K|BlqXu-k8A{u3tCV{B1S~HvYXGWPEbeLqqz9x4u=BHkX0%K|mU|~po@_+GZWX~& zsRRI=B+1k71Bl3Kt&I@E>{bM%MbI$w(-4JDFrZZ>G(D?ZHnlWarTCLv6X@5QfvR)tz!+B%O+=&w>RzCmy z^R=r;;79Kq(9VfXCpY%n`J>n|-Wxr>X7Vs37Z zj4_Dg7|YAcq_w6n47pq`v$Ymc6!GxzFb@t6+5-m;B%`CF@xZ`96+nfVD@v(LzVBad zhuuIMUzcwVMP}}+R;$1BJa0fs*$bdMJvGkG`ZC?wVQJ&MFs-7Bh%|sIfJ(hyuMp9% zzVFWxQN3L@XGXLQkIKiDm6a|4U9RhfLWt1!{SpA-x~>2aVzUlurBp4oCyC>D!x&SG zXH4k; diff --git a/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_delete.png b/SWADroid/src/main/res/drawable-xxhdpi/ic_menu_delete.png index 246b8e484c11b3d6f8658cc8745adb876ce712ef..7bda5fc0d1f8068bcfcc176db7a8b502b9122843 100644 GIT binary patch delta 1262 zcmVXcr3*^M z6%`4Ne1O+lRDV9eE5MZ$195T$1WR~6Leu>eT~M+y;1E0o22=j_IpC!nI+YUvU#aRJ zQ@XL!z?V66s>q0dooQ3Zkn!v~0qw?y(TqWKm_xsM2`ILc`;N!s1F2|N8B%Xi6yCHX zQI*S*j9zL=KdSR0a=r3(^$6LA!0+Mj({0Ebn+&lw^?ySYy9QhYR)F)s%VFXa10&$K zFf-l>*F#m^Jcr1(^_V-1k{x;B5wg7 zhh>J;@eA;+sy>QMf*2|PGvIyl!;h+ZBPIz&Yyw1NJyYcaTo3X`%iy9AP>zxyaG$)< zFBKod1%DMdd?~^Sh>KC?IvQn5K=7FlfUQiGzX?3Zaw1mCgqFe_;KM{FUQHMR-vi&M z>V9_ffMaICOTe4JweY!=n5(%9+yd^Z>d0a?Y`PRtuC0X5^nh1^3&2|Vyl51c_JPO2 z#XJh1kIT_sl{4F=h$d?|CT^So&H~H8i{W~q@_&<6;M6fq{9B7Te*u3oS$O*g*jClu z8RUtoo8$;M%v#!#K}2S5H#PyL^ME$$0w)YP!vTUxCC4c*A3t&i+h_95KO-a*Sq0DM4mBu z=zr=-$VSHDU$#O({XcV2)vX!sS1((h3IV*7;{ub)+e!%d2RN~+3tL;jVULO|hiiRG z61$Q!?;sp}Y3J@{N(`*xlUWcBqj#7I0mE8NBVPh)ZX+84=5ihY>}5iLnVcR279|L0 z76S%zM?kQGEC{fa(>e&};D!d4bB`{H@_(sYfvJ2>zycDGdMdi-7T^}(1k5u5S!F?P z0d4_KfM-FT1-S({0Um@GCJUNh3&^Altpv%0WZJ=oJwPeVNj zcM*h>Ct&V^aMh=#@Gx$}AQ@Qh7t}=%PT2~E4RX1JFnc@4rTXF_|6LV#O9$A1KD zCrZHfq7ZO9Q35s=f&f*$4ctsj`8QSdj`dB&Sn>7r^dsOCy4^ow2z;%o-&v=i<^&u; z!ZPpy@E(&lLT&$uH6}0XU1GAk;<=Us>_gx_aIf4EvHs?~ z^%lmR9Vt=19NpAm5jhK-Ve(38b!T^#a~wSAVYimWjF`Oo`nRg?G|3WsgVy8-s9Qr5 z8ME&3FiU$~9&M7;p(>WEkg1#}lk7=)O@!1(c+-ea^&~xq!{Kl^91e%W;cz${4#(o) YKV6B-Y4{0&>;M1&07*qoM6N<$g5C=?Qvd(} literal 7161 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 TdC2|a=cT%e4y;(o>cKw%V?a*+ From 1fff959fe29203e2e368235d761128d202d725cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 6 Aug 2016 12:16:49 +0200 Subject: [PATCH 059/103] photos in receivers are working --- .../swad/swadroid/modules/messages/Messages.java | 15 +++++++++------ SWADroid/src/main/res/layout/messages_screen.xml | 2 +- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 719c0bdad..e06a8a2f7 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -35,6 +35,9 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; + +import com.nostra13.universalimageloader.core.ImageLoader; + import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; import java.util.Vector; @@ -316,11 +319,12 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { layout.removeAllViewsInLayout(); + ImageLoader loader = ImageFactory.init(this, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); + for(int i=0; i From 6535225c2cda23cb147f3869fb68407ae5c30591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 6 Aug 2016 12:58:17 +0200 Subject: [PATCH 060/103] change in receivers interface --- .../ugr/swad/swadroid/modules/messages/Messages.java | 2 +- SWADroid/src/main/res/layout/messages_screen.xml | 12 ++++++++---- SWADroid/src/main/res/layout/receivers_item.xml | 3 +-- SWADroid/src/main/res/values-es/strings.xml | 6 +++--- SWADroid/src/main/res/values/colors.xml | 1 + SWADroid/src/main/res/values/strings.xml | 6 +++--- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index e06a8a2f7..d48af375e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -344,7 +344,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - params.topMargin = 7; + params.topMargin = 10; linearLayout.setPadding(1, 1, 1, 1); linearLayout.setLayoutParams(params); diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index cee0b80f5..b630b046d 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -41,7 +41,8 @@ android:hint="@string/message_receivers_title" android:textColor="@color/foreground1" android:textSize="19sp" - android:layout_marginLeft="5dp"/> + android:layout_marginLeft="5dp" + android:layout_marginTop="10dp"/> @@ -72,14 +76,14 @@ android:layout_height="50dp" android:layout_width="50dp" android:layout_marginRight="5dp" - android:layout_marginBottom="9dp"/> + android:layout_marginBottom="5dp"/> + android:background="@color/gray_text"/> + android:background="#DFDEDD"> Enviando mensaje… Debe añadir al menos un destinatario Debe introducir el asunto del mensaje - Destinatarios - Asunto - Mensaje + Destinatarios: + Asunto: + Mensaje: Aviso Publicando aviso… Aviso publicado diff --git a/SWADroid/src/main/res/values/colors.xml b/SWADroid/src/main/res/values/colors.xml index 1bc3730ae..4c7b0f0b0 100644 --- a/SWADroid/src/main/res/values/colors.xml +++ b/SWADroid/src/main/res/values/colors.xml @@ -45,5 +45,6 @@ #0000ff #50A3E1 #55B637 + #878787 \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 99c219c4c..788cc2448 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -101,9 +101,9 @@ Message sent successfully You must specify at least one recipient You must enter the subject of the message - Receivers - Subject - Message + Receivers: + Subject: + Message: Notice Publishing notice… Notice published From a508e68057b9d15a527f40b83499be8a7a40ff9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 7 Aug 2016 13:01:58 +0200 Subject: [PATCH 061/103] some fixes in message interface --- .../ugr/swad/swadroid/model/UserFilter.java | 10 +++ .../swadroid/modules/messages/Messages.java | 77 ++++++++++++------- .../modules/messages/SearchUsers.java | 31 +++----- .../modules/messages/UsersAdapter.java | 13 ---- .../src/main/res/layout-v11/list_users.xml | 2 - .../src/main/res/layout/messages_screen.xml | 34 +++++--- .../src/main/res/layout/receivers_item.xml | 3 +- SWADroid/src/main/res/values-es/strings.xml | 3 + SWADroid/src/main/res/values/colors.xml | 1 + SWADroid/src/main/res/values/strings.xml | 3 + 10 files changed, 100 insertions(+), 77 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index e8e24821e..5a6d11259 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -161,10 +161,20 @@ public void setUserPhoto(String userPhoto) { this.userPhoto = userPhoto; } + /** + * Get if checkbox is selected. + * + * @return if checkbox is selected (true / false) + */ public boolean getCheckbox() { return selectedCheckbox; } + /** + * Sets Full path where user's picture is stored. + * + * @param selected the checkbox is selected or not + */ public void setCheckbox(boolean selected){ this.selectedCheckbox = selected; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index d48af375e..f4d72291e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -35,9 +35,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; - import com.nostra13.universalimageloader.core.ImageLoader; - import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; import java.util.Vector; @@ -69,20 +67,25 @@ public class Messages extends Module { */ private Long eventCode; /** - * Message's receivers + * Message's receivers (nicknames) */ private String receivers; /** * Names of receivers */ private String receiversNames; - + /** + * Array of nicknames + */ private ArrayList arrayReceivers; - + /** + * Array of names + */ private ArrayList arrayReceiversNames; - + /** + * Array of photos + */ private ArrayList arrayPhotos; - /** * Message's subject */ @@ -103,11 +106,22 @@ public class Messages extends Module { * Body EditText */ private EditText bodyEditText; - + /** + * Name of reply notification receiver + */ private String sender; - + /** + * View group of receivers + */ private ViewGroup layout; - + /** + * Layout of sending progress + */ + private LinearLayout progressLayout; + /** + * Layout of message screen + */ + private LinearLayout messageLayout; /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) @@ -121,8 +135,8 @@ protected void onCreate(Bundle savedInstanceState) { arrayReceivers = new ArrayList<>(); arrayReceiversNames = new ArrayList<>(); arrayPhotos = new ArrayList<>(); + sender = ""; - eventCode = getIntent().getLongExtra("eventCode", 0); setContentView(R.layout.messages_screen); setTitle(R.string.messagesModuleLabel); @@ -130,18 +144,17 @@ protected void onCreate(Bundle savedInstanceState) { getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - rcvEditText = (EditText) findViewById(R.id.message_receivers_text); subjEditText = (EditText) findViewById(R.id.message_subject_text); bodyEditText = (EditText) findViewById(R.id.message_body_text); if (savedInstanceState != null) writeData(); - sender = ""; - if (eventCode != 0) { + eventCode = getIntent().getLongExtra("eventCode", 0); + if (eventCode != 0) { //is a reply message subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); sender = getIntent().getStringExtra("sender") + ",\n"; - rcvEditText.setText(sender); + //add sender to arrays and view } final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); @@ -158,6 +171,11 @@ public void onClick(View v) { layout = (ViewGroup) findViewById(R.id.layout_receivers); + messageLayout = (LinearLayout) findViewById(R.id.message_screen); + progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); + TextView textLoading = (TextView) findViewById(R.id.text_progress); + textLoading.setText(R.string.sendingMessageMsg); + setMETHOD_NAME("sendMessage"); } @@ -171,7 +189,6 @@ protected void onStart() { * Reads user input */ private void readData() { - receiversNames = rcvEditText.getText().toString(); subject = subjEditText.getText().toString(); body = bodyEditText.getText().toString(); } @@ -180,7 +197,6 @@ private void readData() { * Writes user input */ private void writeData() { - rcvEditText.setText(receiversNames); subjEditText.setText(subject); bodyEditText.setText(body); } @@ -201,12 +217,11 @@ private void addFootBody() { */ @Override protected void requestService() throws Exception { - readData(); addFootBody(); for(int i=0; i res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); int csSize = soap.getPropertyCount(); @@ -226,7 +241,10 @@ protected void requestService() throws Exception { String firstname = pii.getProperty("userFirstname").toString(); String surname1 = pii.getProperty("userSurname1").toString(); String surname2 = pii.getProperty("userSurname2").toString(); - receiversNames += firstname + " " + surname1 + " " + surname2 + ",\n"; + if (i == csSize-1) + receiversNames += firstname + " " + surname1 + " " + surname2 + ""; + else + receiversNames += firstname + " " + surname1 + " " + surname2 + ",\n"; } } @@ -239,8 +257,9 @@ protected void requestService() throws Exception { @Override protected void connect() { startConnection(); - - Toast.makeText(this, R.string.sendingMessageMsg, Toast.LENGTH_SHORT).show(); + messageLayout.setVisibility(View.INVISIBLE); + progressLayout.setVisibility(View.VISIBLE); + //Toast.makeText(this, R.string.sendingMessageMsg, Toast.LENGTH_SHORT).show(); } /* (non-Javadoc) @@ -248,10 +267,9 @@ protected void connect() { */ @Override protected void postConnect() { + progressLayout.setVisibility(View.GONE); String messageSent = getString(R.string.messageSentMsg) + ":" + receiversNames; - Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); - finish(); } @@ -265,11 +283,9 @@ protected void onError() { @Override protected void onRestart() { - super.onRestart(); } - /* (non-Javadoc) * @see android.app.Activity#onRestoreInstanceState(android.os.Bundle) */ @@ -317,12 +333,15 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "Receivers of SearchUsers: " + receivers); writeData(); + // if there are not receivers, hide view group layout.removeAllViewsInLayout(); + layout.setVisibility(View.GONE); ImageLoader loader = ImageFactory.init(this, true, true, R.drawable.usr_bl, R.drawable.usr_bl, R.drawable.usr_bl); for(int i=0; i parent, View view, int position, long id) checkbox = (CheckBox) view.findViewById(R.id.check); if (checkbox.isChecked()){ checkbox.setChecked(false); - adapter.checkboxSelected.set(position, false); - arrayReceivers.remove("@" + userFilters.getUsers().get(position).getUserNickname()); - arrayReceiversNames.remove(userFilters.getUsers().get(position).getUserFirstname() + " " + - userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2()); - arrayPhotos.remove(userFilters.getUsers().get(position).getUserPhoto()); + int index = arrayReceivers.indexOf("@" + userFilters.getUsers().get(position).getUserNickname()); + arrayReceivers.remove(index); + arrayReceiversNames.remove(index); + arrayPhotos.remove(index); + Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); } else{ checkbox.setChecked(true); - adapter.checkboxSelected.set(position, true); arrayReceivers.add("@" + userFilters.getUsers().get(position).getUserNickname()); arrayReceiversNames.add(userFilters.getUsers().get(position).getUserFirstname() + " " + userFilters.getUsers().get(position).getUserSurname1() + " " + userFilters.getUsers().get(position).getUserSurname2()); arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); + Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); } } }); @@ -96,7 +95,6 @@ public void onItemClick(AdapterView parent, View view, int position, long id) TextView textLoading = (TextView) findViewById(R.id.text_progress); textLoading.setText(R.string.loadingMsg); - arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); @@ -126,12 +124,10 @@ public boolean onMenuItemActionCollapse(MenuItem item) { }); searchView = (SearchView) MenuItemCompat.getActionView(searchItem); - searchView.setQueryHint(getText(R.string.search_user)); // listener to searchview searchView.setOnQueryTextListener(this); - searchView.setMaxWidth(Integer.MAX_VALUE); // searview expanded @@ -167,12 +163,7 @@ private void sendReceivers(boolean send){ intent.putExtra("receivers", arrayReceivers); // send receivers to parent activity intent.putExtra("receiversNames", arrayReceiversNames); intent.putExtra("receiversPhotos", arrayPhotos); - /* - String receivers = ""; - for(int i=0; i { private LayoutInflater inflater; private ImageLoader loader; - public ArrayList checkboxSelected; private static class ViewHolder { ImageView image; @@ -57,13 +55,9 @@ public UsersAdapter(Context context, List objects) { R.drawable.usr_bl); this.inflater = LayoutInflater.from(context); - checkboxSelected = new ArrayList(); } public View getView(int position, View convertView, ViewGroup parent) { - // Get inflater - //this.inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - // Does the current view exist? if (convertView == null) { convertView = inflater.inflate(R.layout.row_user, parent, false); @@ -81,13 +75,6 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.checkbox.setChecked(user.getCheckbox()); - /* - if (checkboxSelected.get(position) != null){ - holder.checkbox.setChecked(((Boolean) checkboxSelected.get(position)).booleanValue()); - }else{ - holder.checkbox.setChecked(false); - }*/ - // Setup row if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty holder.image.setImageResource(R.drawable.usr_bl); diff --git a/SWADroid/src/main/res/layout-v11/list_users.xml b/SWADroid/src/main/res/layout-v11/list_users.xml index f8fee09c5..355cd4225 100644 --- a/SWADroid/src/main/res/layout-v11/list_users.xml +++ b/SWADroid/src/main/res/layout-v11/list_users.xml @@ -5,8 +5,6 @@ android:background="@color/background" android:orientation="vertical" > - - + + + + + + + - - + android:background="@color/background_receiver"> + Buscar Buscar usuario usuarios encontrados + usuario encontrado No se encontraron usuarios ¿Dónde desea buscar? En @@ -327,5 +328,7 @@ Va a cancelar el envío del mensaje Va a cancelar los destinatarios seleccionados ¿Quiere quitar a #nameUser# de la lista de destinatarios? + Usuario añadido + Usuario eliminado \ No newline at end of file diff --git a/SWADroid/src/main/res/values/colors.xml b/SWADroid/src/main/res/values/colors.xml index 4c7b0f0b0..f96ccf1bc 100644 --- a/SWADroid/src/main/res/values/colors.xml +++ b/SWADroid/src/main/res/values/colors.xml @@ -46,5 +46,6 @@ #50A3E1 #55B637 #878787 + #DFDEDD \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 788cc2448..c18c4777c 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -329,6 +329,7 @@ Search Search user users found + user found Users not found Where do you want to search? In @@ -337,5 +338,7 @@ You are going to cancel the sending message You are going to cancel the selected receivers Do you want to remove #nameUser# from the list of receivers? + User added + User deleted \ No newline at end of file From a5c7b5897b1325cfba05657f097f8b9381f3b0fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 7 Aug 2016 18:34:20 +0200 Subject: [PATCH 062/103] name and photo of sender in reply message are added to receivers --- .../swadroid/modules/messages/Messages.java | 101 ++++++++++++++---- .../notifications/NotificationItem.java | 4 +- 2 files changed, 85 insertions(+), 20 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index f4d72291e..02ba02dd2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -110,6 +110,10 @@ public class Messages extends Module { * Name of reply notification receiver */ private String sender; + + private String photoSender; + + private ImageLoader loader; /** * View group of receivers */ @@ -150,11 +154,48 @@ protected void onCreate(Bundle savedInstanceState) { if (savedInstanceState != null) writeData(); + layout = (ViewGroup) findViewById(R.id.layout_receivers); + + messageLayout = (LinearLayout) findViewById(R.id.message_screen); + progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); + TextView textLoading = (TextView) findViewById(R.id.text_progress); + textLoading.setText(R.string.sendingMessageMsg); + + loader = ImageFactory.init(this, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); + eventCode = getIntent().getLongExtra("eventCode", 0); if (eventCode != 0) { //is a reply message subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); - sender = getIntent().getStringExtra("sender") + ",\n"; - //add sender to arrays and view + sender = getIntent().getStringExtra("sender"); + photoSender = getIntent().getStringExtra("photo"); + + LayoutInflater inflater = LayoutInflater.from(this); + final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); + + final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); + textName.setText(sender); + + ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); + String userPhoto = photoSender; + if (Utils.connectionAvailable(this) + && (userPhoto != null) && !userPhoto.equals("") + && !userPhoto.equals(Constants.NULL_VALUE)) { + ImageFactory.displayImage(loader, userPhoto, photo); + } else { + Log.d(TAG, "No connection or no photo " + userPhoto); + } + + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + + params.topMargin = 8; + linearLayout.setPadding(1, 1, 25, 1); + linearLayout.setLayoutParams(params); + + layout.addView(linearLayout); + + ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); + button.setVisibility(View.GONE); } final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); @@ -164,18 +205,14 @@ public void onClick(View v) { intent.putExtra("receivers", arrayReceivers); intent.putExtra("receiversNames", arrayReceiversNames); intent.putExtra("receiversPhotos", arrayPhotos); + for(int i=0; i Date: Mon, 8 Aug 2016 22:40:16 +0200 Subject: [PATCH 063/103] Added userNickname field to notifications --- .../swadroid/database/DataBaseHelper.java | 9 + .../swad/swadroid/model/SWADNotification.java | 265 +++++++++--------- .../modules/notifications/Notifications.java | 5 +- .../NotificationsSyncAdapterService.java | 70 ++--- SWADroid/src/main/res/xml/tables.xml | 6 +- 5 files changed, 187 insertions(+), 168 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index 7bf5342cd..498049443 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -320,10 +320,14 @@ private T createObjectByTable(String table, Entity ent) { ent.getInt(params.getSecond())); break; case DataBaseHelper.DB_TABLE_NOTIFICATIONS: + String nickName = ent.getString("userNickname"); + String decryptedNickname = (nickName != null && !nickName.isEmpty())? crypto.decrypt(nickName) : ""; + o = new SWADNotification(ent.getInt("notifCode"), ent.getInt("eventCode"), crypto.decrypt(ent.getString("eventType")), ent.getLong("eventTime"), + decryptedNickname, crypto.decrypt(ent.getString("userSurname1")), crypto.decrypt(ent.getString("userSurname2")), crypto.decrypt(ent.getString("userFirstname")), @@ -958,6 +962,7 @@ public void insertNotification(SWADNotification n) { ent.setValue("eventCode", n.getEventCode()); ent.setValue("eventType", crypto.encrypt(n.getEventType())); ent.setValue("eventTime", eventTime); + ent.setValue("userNickname", crypto.encrypt(n.getUserNickname())); ent.setValue("userSurname1", crypto.encrypt(n.getUserSurname1())); ent.setValue("userSurname2", crypto.encrypt(n.getUserSurname2())); ent.setValue("userFirstname", crypto.encrypt(n.getUserFirstName())); @@ -1457,6 +1462,7 @@ public void updateNotification(long id, SWADNotification actual) { long eventCode = actual.getEventCode(); String eventType = crypto.encrypt(actual.getEventType()); String eventTime = String.valueOf(actual.getEventTime()); + String userNickname = crypto.encrypt(actual.getUserNickname()); String userSurname1 = crypto.encrypt(actual.getUserSurname1()); String userSurname2 = crypto.encrypt(actual.getUserSurname2()); String userFirstname = crypto.encrypt(actual.getUserFirstName()); @@ -1473,6 +1479,7 @@ public void updateNotification(long id, SWADNotification actual) { ent.setValue("eventCode", eventCode); ent.setValue("eventType", eventType); ent.setValue("eventTime", eventTime); + ent.setValue("userNickname", userNickname); ent.setValue("userSurname1", userSurname1); ent.setValue("userSurname2", userSurname2); ent.setValue("userFirstname", userFirstname); @@ -1499,6 +1506,7 @@ public void updateNotification(SWADNotification prev, SWADNotification actual) { long eventCode = actual.getEventCode(); String eventType = crypto.encrypt(actual.getEventType()); String eventTime = String.valueOf(actual.getEventTime()); + String userNickname = crypto.encrypt(actual.getUserNickname()); String userSurname1 = crypto.encrypt(actual.getUserSurname1()); String userSurname2 = crypto.encrypt(actual.getUserSurname2()); String userFirstname = crypto.encrypt(actual.getUserFirstName()); @@ -1515,6 +1523,7 @@ public void updateNotification(SWADNotification prev, SWADNotification actual) { ent.setValue("eventCode", eventCode); ent.setValue("eventType", eventType); ent.setValue("eventTime", eventTime); + ent.setValue("userNickname", userNickname); ent.setValue("userSurname1", userSurname1); ent.setValue("userSurname2", userSurname2); ent.setValue("userFirstname", userFirstname); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java index 5a7c75fe9..499d0e60b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java @@ -40,6 +40,10 @@ public class SWADNotification extends Model { * Notification timestamp */ private long eventTime; + /** + * Sender nickname + */ + private String userNickname; /** * Sender first surname */ @@ -84,6 +88,7 @@ public class SWADNotification extends Model { private static final PropertyInfo PI_eventCode = new PropertyInfo(); private static final PropertyInfo PI_eventType = new PropertyInfo(); private static final PropertyInfo PI_eventTime = new PropertyInfo(); + private static final PropertyInfo PI_userNickname = new PropertyInfo(); private static final PropertyInfo PI_userSurname1 = new PropertyInfo(); private static final PropertyInfo PI_userSurname2 = new PropertyInfo(); private static final PropertyInfo PI_userFirstName = new PropertyInfo(); @@ -99,6 +104,7 @@ public class SWADNotification extends Model { PI_eventCode, PI_eventType, PI_eventTime, + PI_userNickname, PI_userSurname1, PI_userSurname2, PI_userFirstName, @@ -114,6 +120,7 @@ public class SWADNotification extends Model { * @param eventCode Event id (not unique) * @param eventType Notification type * @param eventTime Notification timestamp + * @param userNickname Sender nickname * @param userSurname1 Sender first surname * @param userSurname2 Sender second surname * @param userFirstName Sender first name @@ -125,14 +132,15 @@ public class SWADNotification extends Model { * @param seenRemote Notification has been seen in SWAD */ public SWADNotification(long id, long eventCode, String eventType, long eventTime, - String userSurname1, String userSurname2, String userFirstName, - String userPhoto, String location, String summary, int status, - String content, boolean seenLocal, boolean seenRemote) { + String userNickname, String userSurname1, String userSurname2, + String userFirstName, String userPhoto, String location, String summary, + int status, String content, boolean seenLocal, boolean seenRemote) { super(id); this.eventCode = eventCode; this.eventType = eventType; this.eventTime = eventTime; + this.userNickname = userNickname; this.userSurname1 = userSurname1; this.userSurname2 = userSurname2; this.userFirstName = userFirstName; @@ -199,6 +207,24 @@ public void setEventTime(int eventTime) { this.eventTime = eventTime; } + /** + * Gets sender nickname + * + * @return Sender nickname + */ + public String getUserNickname() { + return userNickname; + } + + /** + * Sets sender nickname + * + * @param userNickname Sender nickname + */ + public void setUserNickname(String userNickname) { + this.userNickname = userNickname; + } + /** * Gets sender first surname * @@ -383,118 +409,81 @@ public void setSeenRemote(boolean seenRemote) { this.seenRemote = seenRemote; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "SWADNotification [notifCode=" + getId() + ", eventCode=" + eventCode + ", eventType=" - + eventType + ", eventTime=" + eventTime + ", userSurname1=" - + userSurname1 + ", userSurname2=" + userSurname2 - + ", userFirstName=" + userFirstName + ", userPhoto=" - + userPhoto + ", location=" + location + ", summary=" + summary - + ", status=" + status + ", content=" + content - + ", seenLocal=" + seenLocal + ", seenRemote=" + seenRemote - + "]"; - } + @Override + public String toString() { + return "SWADNotification{" + + "eventCode=" + eventCode + + ", eventType='" + eventType + '\'' + + ", eventTime=" + eventTime + + ", userNickname='" + userNickname + '\'' + + ", userSurname1='" + userSurname1 + '\'' + + ", userSurname2='" + userSurname2 + '\'' + + ", userFirstName='" + userFirstName + '\'' + + ", userPhoto='" + userPhoto + '\'' + + ", location='" + location + '\'' + + ", summary='" + summary + '\'' + + ", status=" + status + + ", content='" + content + '\'' + + ", seenLocal=" + seenLocal + + ", seenRemote=" + seenRemote + + '}'; + } - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - final int prime = 31; - int result = super.hashCode(); - result = prime * result + ((content == null) ? 0 : content.hashCode()); - result = prime * result + (int) (eventCode ^ (eventCode >>> 32)); - result = prime * result + (int) (eventTime ^ (eventTime >>> 32)); - result = prime * result - + ((eventType == null) ? 0 : eventType.hashCode()); - result = prime * result - + ((location == null) ? 0 : location.hashCode()); - result = prime * result + (seenLocal ? 1231 : 1237); - result = prime * result + (seenRemote ? 1231 : 1237); - result = prime * result + status; - result = prime * result + ((summary == null) ? 0 : summary.hashCode()); - result = prime * result - + ((userFirstName == null) ? 0 : userFirstName.hashCode()); - result = prime * result - + ((userPhoto == null) ? 0 : userPhoto.hashCode()); - result = prime * result - + ((userSurname1 == null) ? 0 : userSurname1.hashCode()); - result = prime * result - + ((userSurname2 == null) ? 0 : userSurname2.hashCode()); - return result; - } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof SWADNotification)) return false; + if (!super.equals(o)) return false; + + SWADNotification that = (SWADNotification) o; + + if (eventCode != that.eventCode) return false; + if (eventTime != that.eventTime) return false; + if (status != that.status) return false; + if (seenLocal != that.seenLocal) return false; + if (seenRemote != that.seenRemote) return false; + if (eventType != null ? !eventType.equals(that.eventType) : that.eventType != null) + return false; + if (userNickname != null ? !userNickname.equals(that.userNickname) : that.userNickname != null) + return false; + if (userSurname1 != null ? !userSurname1.equals(that.userSurname1) : that.userSurname1 != null) + return false; + if (userSurname2 != null ? !userSurname2.equals(that.userSurname2) : that.userSurname2 != null) + return false; + if (userFirstName != null ? !userFirstName.equals(that.userFirstName) : that.userFirstName != null) + return false; + if (userPhoto != null ? !userPhoto.equals(that.userPhoto) : that.userPhoto != null) + return false; + if (location != null ? !location.equals(that.location) : that.location != null) + return false; + if (summary != null ? !summary.equals(that.summary) : that.summary != null) return false; + return content != null ? content.equals(that.content) : that.content == null; - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (!super.equals(obj)) - return false; - if (getClass() != obj.getClass()) - return false; - SWADNotification other = (SWADNotification) obj; - if (content == null) { - if (other.content != null) - return false; - } else if (!content.equals(other.content)) - return false; - if (eventCode != other.eventCode) - return false; - if (eventTime != other.eventTime) - return false; - if (eventType == null) { - if (other.eventType != null) - return false; - } else if (!eventType.equals(other.eventType)) - return false; - if (location == null) { - if (other.location != null) - return false; - } else if (!location.equals(other.location)) - return false; - if (seenLocal != other.seenLocal) - return false; - if (seenRemote != other.seenRemote) - return false; - if (status != other.status) - return false; - if (summary == null) { - if (other.summary != null) - return false; - } else if (!summary.equals(other.summary)) - return false; - if (userFirstName == null) { - if (other.userFirstName != null) - return false; - } else if (!userFirstName.equals(other.userFirstName)) - return false; - if (userPhoto == null) { - if (other.userPhoto != null) - return false; - } else if (!userPhoto.equals(other.userPhoto)) - return false; - if (userSurname1 == null) { - if (other.userSurname1 != null) - return false; - } else if (!userSurname1.equals(other.userSurname1)) - return false; - if (userSurname2 == null) { - if (other.userSurname2 != null) - return false; - } else if (!userSurname2.equals(other.userSurname2)) - return false; - return true; - } + } - /* (non-Javadoc) - * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) - */ + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (int) (eventCode ^ (eventCode >>> 32)); + result = 31 * result + (eventType != null ? eventType.hashCode() : 0); + result = 31 * result + (int) (eventTime ^ (eventTime >>> 32)); + result = 31 * result + (userNickname != null ? userNickname.hashCode() : 0); + result = 31 * result + (userSurname1 != null ? userSurname1.hashCode() : 0); + result = 31 * result + (userSurname2 != null ? userSurname2.hashCode() : 0); + result = 31 * result + (userFirstName != null ? userFirstName.hashCode() : 0); + result = 31 * result + (userPhoto != null ? userPhoto.hashCode() : 0); + result = 31 * result + (location != null ? location.hashCode() : 0); + result = 31 * result + (summary != null ? summary.hashCode() : 0); + result = 31 * result + status; + result = 31 * result + (content != null ? content.hashCode() : 0); + result = 31 * result + (seenLocal ? 1 : 0); + result = 31 * result + (seenRemote ? 1 : 0); + return result; + } + + /* (non-Javadoc) + * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) + */ public Object getProperty(int param) { Object object = null; switch (param) { @@ -511,27 +500,30 @@ public Object getProperty(int param) { object = eventTime; break; case 4: - object = userSurname1; + object = userNickname; break; case 5: - object = userSurname2; + object = userSurname1; break; case 6: - object = userFirstName; + object = userSurname2; break; case 7: - object = userPhoto; + object = userFirstName; break; case 8: - object = location; + object = userPhoto; break; case 9: - object = summary; + object = location; break; case 10: - object = status; + object = summary; break; case 11: + object = status; + break; + case 12: object = content; break; } @@ -569,33 +561,37 @@ public void getPropertyInfo(int param, @SuppressWarnings("rawtypes") Hashtable a break; case 4: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "userSurname1"; + propertyInfo.name = "userNickname"; break; case 5: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "userSurname2"; + propertyInfo.name = "userSurname1"; break; case 6: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "userFirstName"; + propertyInfo.name = "userSurname2"; break; case 7: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "userPhoto"; + propertyInfo.name = "userFirstName"; break; case 8: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "location"; + propertyInfo.name = "userPhoto"; break; case 9: propertyInfo.type = PropertyInfo.STRING_CLASS; - propertyInfo.name = "summary"; + propertyInfo.name = "location"; break; case 10: + propertyInfo.type = PropertyInfo.STRING_CLASS; + propertyInfo.name = "summary"; + break; + case 11: propertyInfo.type = PropertyInfo.INTEGER_CLASS; propertyInfo.name = "status"; break; - case 11: + case 12: propertyInfo.type = PropertyInfo.STRING_CLASS; propertyInfo.name = "content"; break; @@ -620,27 +616,30 @@ public void setProperty(int param, Object obj) { eventTime = (Long) obj; break; case 4: - userSurname1 = (String) obj; + userNickname = (String) obj; break; case 5: - userSurname2 = (String) obj; + userSurname1 = (String) obj; break; case 6: - userFirstName = (String) obj; + userSurname2 = (String) obj; break; case 7: - userPhoto = (String) obj; + userFirstName = (String) obj; break; case 8: - location = (String) obj; + userPhoto = (String) obj; break; case 9: - summary = (String) obj; + location = (String) obj; break; case 10: - status = (Integer) obj; + summary = (String) obj; break; case 11: + status = (Integer) obj; + break; + case 12: content = (String) obj; break; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java index 45605cf04..5e8e851b2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java @@ -417,6 +417,8 @@ protected void requestService() throws Exception { String eventType = pii.getProperty("eventType").toString(); Long eventTime = Long.valueOf(pii.getProperty("eventTime") .toString()); + String userNickname = pii.getProperty("userNickname") + .toString(); String userSurname1 = pii.getProperty("userSurname1") .toString(); String userSurname2 = pii.getProperty("userSurname2") @@ -435,10 +437,11 @@ protected void requestService() throws Exception { // Add not cancelled notifications only if(!notifCancelled) { SWADNotification n = new SWADNotification(notifCode, - eventCode, eventType, eventTime, userSurname1, + eventCode, eventType, eventTime, userNickname, userSurname1, userSurname2, userFirstName, userPhoto, location, summary, status, content, notifReadSWAD, notifReadSWAD); + dbHelper.insertNotification(n); // Count unread notifications only diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java index a1e493c4b..570d520a4 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsSyncAdapterService.java @@ -108,10 +108,10 @@ public SyncAdapterImpl(Context context) { public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { boolean sendException = true; int httpStatusCode; - + try { NotificationsSyncAdapterService.performSync(mContext); - + //If synchronization was successful, update last synchronization time in preferences Preferences.setLastSyncTime(System.currentTimeMillis()); } catch (Exception e) { @@ -170,7 +170,7 @@ public void onPerformSync(Account account, Bundle extras, String authority, Cont errorMessage = mContext.getString(R.string.errorConnectionMsg); } } - + // Launch database rollback if(dbHelper.isDbInTransaction()) { dbHelper.endTransaction(false); @@ -182,12 +182,12 @@ public void onPerformSync(Account account, Bundle extras, String authority, Cont } else { Log.e(TAG, errorMessage, e); } - + //Notify synchronization stop Intent stopIntent = new Intent(); stopIntent.setAction(STOP_SYNC); - stopIntent.putExtra("notifCount", notifCount); - stopIntent.putExtra("errorMessage", errorMessage); + stopIntent.putExtra("notifCount", notifCount); + stopIntent.putExtra("errorMessage", errorMessage); mContext.sendBroadcast(stopIntent); } } @@ -197,7 +197,7 @@ public void onPerformSync(Account account, Bundle extras, String authority, Cont * @see android.app.Service#onCreate() */ @Override - public void onCreate() { + public void onCreate() { isConnected = Utils.connectionAvailable(this); // Check if debug mode is enabled try { @@ -207,10 +207,10 @@ public void onCreate() { } catch (NameNotFoundException e) { Log.e(TAG, "Error getting debuggable flag", e); } - + try { prefs = new Preferences(this); - dbHelper = new DataBaseHelper(this); + dbHelper = new DataBaseHelper(this); //Initialize webservices client webserviceClient = null; } catch (Exception e) { @@ -219,7 +219,7 @@ public void onCreate() { //Send exception details to Google Analytics SWADroidTracker.sendException(mCtx, e, false); } - + super.onCreate(); } @@ -229,14 +229,14 @@ public void onCreate() { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); - // return START_NOT_STICKY - we want this Service to be left running + // return START_NOT_STICKY - we want this Service to be left running // unless explicitly stopped, and it's process is killed, we want it to // be restarted return START_STICKY; } @Override - public IBinder onBind(Intent intent) { + public IBinder onBind(Intent intent) { return getSyncAdapter().getSyncAdapterBinder(); } @@ -262,7 +262,7 @@ private static void createRequest(String clientType) { if(clientType.equals(SOAPClient.CLIENT_TYPE)) { webserviceClient = new SOAPClient(); } - + } webserviceClient.setMETHOD_NAME(METHOD_NAME); @@ -282,16 +282,16 @@ private static void addParam(String param, Object value) { /** * Sends a SOAP request to the specified webservice in METHOD_NAME class * constant of the webservice client. - * + * * @param cl Class to be mapped * @param simple Flag for select simple or complex response - * @throws Exception + * @throws Exception */ private static void sendRequest(Class cl, boolean simple) throws Exception { ((SOAPClient) webserviceClient).sendRequest(cl, simple); result = webserviceClient.getResult(); } - + private static void logUser() throws Exception { Log.d(TAG, "Not logged"); @@ -327,7 +327,7 @@ private static void logUser() throws Exception { Login.setLastLoginTime(System.currentTimeMillis()); } } - + private static void getNotifications() throws Exception { int numDeletedNotif; @@ -339,7 +339,7 @@ private static void getNotifications() throws Exception { //Creates webservice request, adds required params and sends request to webservice METHOD_NAME = "getNotifications"; - + createRequest(SOAPClient.CLIENT_TYPE); addParam("wsKey", Login.getLoggedUser().getWsKey()); addParam("beginTime", timestamp); @@ -352,7 +352,7 @@ private static void getNotifications() throws Exception { ArrayList res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); int numNotif = soap.getPropertyCount(); - + notifCount = 0; for (int i = 0; i < numNotif; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); @@ -360,6 +360,7 @@ private static void getNotifications() throws Exception { Long eventCode = Long.valueOf(pii.getProperty("eventCode").toString()); String eventType = pii.getProperty("eventType").toString(); Long eventTime = Long.valueOf(pii.getProperty("eventTime").toString()); + String userNickname = pii.getProperty("userNickname").toString(); String userSurname1 = pii.getProperty("userSurname1").toString(); String userSurname2 = pii.getProperty("userSurname2").toString(); String userFirstName = pii.getProperty("userFirstname").toString(); @@ -373,7 +374,10 @@ private static void getNotifications() throws Exception { // Add not cancelled notifications only if(!notifCancelled) { - SWADNotification n = new SWADNotification(notifCode, eventCode, eventType, eventTime, userSurname1, userSurname2, userFirstName, userPhoto, location, summary, status, content, notifReadSWAD, notifReadSWAD); + SWADNotification n = new SWADNotification(notifCode, eventCode, eventType, + eventTime, userNickname, userSurname1, userSurname2, userFirstName, + userPhoto, location, summary, status, content, notifReadSWAD, notifReadSWAD); + dbHelper.insertNotification(n); //Count unread notifications only @@ -395,7 +399,7 @@ private static void getNotifications() throws Exception { dbHelper.endTransaction(true); } } - + /** * Sends to SWAD the "seen notifications" info */ @@ -404,17 +408,17 @@ private static void sendReadedNotifications(Context context) { String seenNotifCodes; Intent activity; int numMarkedNotificationsList; - - //Construct a list of seen notifications in state "pending to mark as read in SWAD" + + //Construct a list of seen notifications in state "pending to mark as read in SWAD" markedNotificationsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_NOTIFICATIONS, "seenLocal='" + Utils.parseBoolString(true) + "' AND seenRemote='" + Utils.parseBoolString(false) + "'", null); - + numMarkedNotificationsList = markedNotificationsList.size(); if(isDebuggable) Log.d(TAG, "numMarkedNotificationsList=" + numMarkedNotificationsList); - - if(numMarkedNotificationsList > 0) { + + if(numMarkedNotificationsList > 0) { //Creates a string of notification codes separated by commas from the previous list seenNotifCodes = Utils.getSeenNotificationCodes(markedNotificationsList); if(isDebuggable) @@ -444,7 +448,7 @@ private static void performSync(Context context) 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT); - + //Notify synchronization start Intent startIntent = new Intent(); startIntent.setAction(START_SYNC); @@ -466,7 +470,7 @@ private static void performSync(Context context) //If last login time > Global.RELOGIN_TIME, force login if (Login.isLogged() && ((System.currentTimeMillis() - Login.getLastLoginTime()) > Login.RELOGIN_TIME)) { - + Login.setLogged(false); } @@ -476,7 +480,7 @@ private static void performSync(Context context) if (Login.isLogged()) { getNotifications(); - + if (notifCount > 0) { notif = AlertNotificationFactory.createAlertNotification(context, context.getString(R.string.app_name), @@ -490,18 +494,18 @@ private static void performSync(Context context) true, false, false); - + AlertNotificationFactory.showAlertNotification(context, notif, Notifications.NOTIF_ALERT_ID); } - + sendReadedNotifications(context); } //Notify synchronization stop Intent stopIntent = new Intent(); stopIntent.setAction(STOP_SYNC); - stopIntent.putExtra("notifCount", notifCount); - stopIntent.putExtra("errorMessage", errorMessage); + stopIntent.putExtra("notifCount", notifCount); + stopIntent.putExtra("errorMessage", errorMessage); context.sendBroadcast(stopIntent); } } diff --git a/SWADroid/src/main/res/xml/tables.xml b/SWADroid/src/main/res/xml/tables.xml index 649efdc73..e7851a00f 100644 --- a/SWADroid/src/main/res/xml/tables.xml +++ b/SWADroid/src/main/res/xml/tables.xml @@ -1,7 +1,7 @@ + version="20" > + Date: Tue, 9 Aug 2016 00:00:40 +0200 Subject: [PATCH 064/103] last change in messages --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 02ba02dd2..bc8c2f17c 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -189,7 +189,7 @@ protected void onCreate(Bundle savedInstanceState) { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.topMargin = 8; - linearLayout.setPadding(1, 1, 25, 1); + linearLayout.setPadding(1, 1, 20, 1); linearLayout.setLayoutParams(params); layout.addView(linearLayout); From b966b422dc7221759dd2cf6d894b0b49dfc82d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 9 Aug 2016 18:07:38 +0200 Subject: [PATCH 065/103] sender of reply message doesn't appear in list users --- .../swadroid/modules/messages/Messages.java | 10 +++++---- .../modules/messages/SearchUsers.java | 22 ++++++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index bc8c2f17c..1fa72c4ca 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -111,7 +111,7 @@ public class Messages extends Module { */ private String sender; - private String photoSender; + private String senderPhoto; private ImageLoader loader; /** @@ -168,7 +168,7 @@ protected void onCreate(Bundle savedInstanceState) { if (eventCode != 0) { //is a reply message subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); sender = getIntent().getStringExtra("sender"); - photoSender = getIntent().getStringExtra("photo"); + senderPhoto = getIntent().getStringExtra("photo"); LayoutInflater inflater = LayoutInflater.from(this); final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); @@ -177,7 +177,7 @@ protected void onCreate(Bundle savedInstanceState) { textName.setText(sender); ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); - String userPhoto = photoSender; + String userPhoto = senderPhoto; if (Utils.connectionAvailable(this) && (userPhoto != null) && !userPhoto.equals("") && !userPhoto.equals(Constants.NULL_VALUE)) { @@ -205,6 +205,8 @@ public void onClick(View v) { intent.putExtra("receivers", arrayReceivers); intent.putExtra("receiversNames", arrayReceiversNames); intent.putExtra("receiversPhotos", arrayPhotos); + intent.putExtra("senderName", sender); + intent.putExtra("senderPhoto", senderPhoto); for(int i=0; i parent, View view, int position, long id) arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); + senderName = getIntent().getStringExtra("senderName"); + senderPhoto = getIntent().getStringExtra("senderPhoto"); search = ""; @@ -251,15 +255,21 @@ protected void requestService() throws Exception { String surname2 = pii.getPrimitiveProperty("userSurname2").toString(); String firstname = pii.getPrimitiveProperty("userFirstname").toString(); String userPhoto = pii.getPrimitiveProperty("userPhoto").toString(); - Log.d(TAG, nickname + " " + surname1 + " " + surname2 + " " + firstname + " " + userPhoto); + Log.d(TAG, nickname + ", " + firstname + " " + surname1 + " " + surname2 + ", " + userPhoto); boolean selected; - if (arrayReceivers.contains("@" + nickname)) { - selected = true; + + if (!(firstname + " " + surname1 + " " + surname2).equals(senderName) || !userPhoto.equals(senderPhoto)){ + //is not the sender of reply message + if (arrayReceivers.contains("@" + nickname)) { + selected = true; + } + else + selected = false; + userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); + } - else - selected = false; - userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); + } } numUsers = userFilters.getUsers().size(); From e4b6aee5c96e566c5d4d2861facae5196430fa45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 9 Aug 2016 19:00:28 +0200 Subject: [PATCH 066/103] showReceivers methods --- .../swadroid/modules/messages/Messages.java | 189 +++++++++--------- .../src/main/res/layout/messages_screen.xml | 8 + SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 4 files changed, 103 insertions(+), 96 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 1fa72c4ca..09e5252be 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -37,6 +37,8 @@ import android.widget.Toast; import com.nostra13.universalimageloader.core.ImageLoader; import org.ksoap2.serialization.SoapObject; +import org.w3c.dom.Text; + import java.util.ArrayList; import java.util.Vector; import es.ugr.swad.swadroid.Constants; @@ -170,32 +172,7 @@ protected void onCreate(Bundle savedInstanceState) { sender = getIntent().getStringExtra("sender"); senderPhoto = getIntent().getStringExtra("photo"); - LayoutInflater inflater = LayoutInflater.from(this); - final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); - - final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); - textName.setText(sender); - - ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); - String userPhoto = senderPhoto; - if (Utils.connectionAvailable(this) - && (userPhoto != null) && !userPhoto.equals("") - && !userPhoto.equals(Constants.NULL_VALUE)) { - ImageFactory.displayImage(loader, userPhoto, photo); - } else { - Log.d(TAG, "No connection or no photo " + userPhoto); - } - - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - - params.topMargin = 8; - linearLayout.setPadding(1, 1, 20, 1); - linearLayout.setLayoutParams(params); - - layout.addView(linearLayout); - - ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); - button.setVisibility(View.GONE); + showSenderReplyMessage(); } final ImageButton button = (ImageButton) findViewById(R.id.action_addUser); @@ -370,76 +347,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "Receivers of SearchUsers: " + receivers); writeData(); - // if there are not receivers, hide view group - layout.removeAllViewsInLayout(); - layout.setVisibility(View.GONE); - - if(sender != ""){ - layout.setVisibility(View.VISIBLE); - LayoutInflater inflater = LayoutInflater.from(this); - final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); - - final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); - textName.setText(sender); - - ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); - String userPhoto = senderPhoto; - if (Utils.connectionAvailable(this) - && (userPhoto != null) && !userPhoto.equals("") - && !userPhoto.equals(Constants.NULL_VALUE)) { - ImageFactory.displayImage(loader, userPhoto, photo); - } else { - Log.d(TAG, "No connection or no photo " + userPhoto); - } - - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - - params.topMargin = 8; - linearLayout.setPadding(1, 1, 25, 1); - linearLayout.setLayoutParams(params); - - layout.addView(linearLayout); - - ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); - button.setVisibility(View.GONE); - } - - for(int i=0; i 3) { + i = arrayReceiversNames.size() - 3; + seeAll.setVisibility(View.VISIBLE); + } + else { + i = 0; + seeAll.setVisibility(View.GONE); + } + + while (i < arrayReceiversNames.size()){ + layout.setVisibility(View.VISIBLE); + LayoutInflater inflater = LayoutInflater.from(this); + final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); + + final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); + textName.setText(arrayReceiversNames.get(i).toString()); + + final TextView textNickname = (TextView) linearLayout.findViewById(R.id.textNickname); + textNickname.setText(arrayReceivers.get(i).toString()); + + ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); + String userPhoto = arrayPhotos.get(i).toString(); + if (Utils.connectionAvailable(this) + && (userPhoto != null) && !userPhoto.equals("") + && !userPhoto.equals(Constants.NULL_VALUE)) { + ImageFactory.displayImage(loader, userPhoto, photo); + } else { + Log.d(TAG, "No connection or no photo " + userPhoto); + } + + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + + params.topMargin = 8; + linearLayout.setPadding(1, 1, 1, 1); + linearLayout.setLayoutParams(params); + + layout.addView(linearLayout); + + ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); + button.setOnClickListener( new View.OnClickListener() { + public void onClick(View view){ + showDialogDelete(linearLayout, textNickname, textName.getText().toString()); + } + }); + i++; + } + } } diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index 0997e23ea..f8da4a6a9 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -89,6 +89,14 @@ android:layout_marginBottom="5dp"/> + + ¿Quiere quitar a #nameUser# de la lista de destinatarios? Usuario añadido Usuario eliminado + Ver todos \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index c18c4777c..319e83933 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -340,5 +340,6 @@ Do you want to remove #nameUser# from the list of receivers? User added User deleted + See all \ No newline at end of file From aa41c98402815cecbce6e7b514115db2be0e6495 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 9 Aug 2016 20:39:37 +0200 Subject: [PATCH 067/103] see all or less receivers in list --- .../swadroid/modules/messages/Messages.java | 64 +++++++++++++++---- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 3 files changed, 53 insertions(+), 13 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 09e5252be..6a891bc2a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -20,6 +20,7 @@ import android.content.DialogInterface; import android.content.Intent; +import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; @@ -129,6 +130,10 @@ public class Messages extends Module { */ private LinearLayout messageLayout; + private TextView seeAll; + + private boolean showAll; + /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) */ @@ -184,6 +189,7 @@ public void onClick(View v) { intent.putExtra("receiversPhotos", arrayPhotos); intent.putExtra("senderName", sender); intent.putExtra("senderPhoto", senderPhoto); + receivers = ""; for(int i=0; i 3) { - i = arrayReceiversNames.size() - 3; - seeAll.setVisibility(View.VISIBLE); - } - else { + if(showAll){ i = 0; - seeAll.setVisibility(View.GONE); + seeAll.setText(getResources().getString(R.string.see_less)); + } + else{ + if (arrayReceiversNames.size() > 3) { + i = arrayReceiversNames.size() - 3; + seeAll.setVisibility(View.VISIBLE); + seeAll.setText(getResources().getString(R.string.see_all)); + } + else { + i = 0; + seeAll.setVisibility(View.GONE); + } } while (i < arrayReceiversNames.size()){ diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index e94a3f25b..6056170d3 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -331,5 +331,6 @@ Usuario añadido Usuario eliminado Ver todos + Ver menos \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 319e83933..fc2e3017f 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -341,5 +341,6 @@ User added User deleted See all + See less \ No newline at end of file From 3a99adf71643f790f95ab355dc6b7aeeddee395a Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 10 Aug 2016 18:14:06 +0200 Subject: [PATCH 068/103] Removed the preferences button from the action bar for all screens except for the main menu --- .../main/java/es/ugr/swad/swadroid/SWADMain.java | 13 +++++-------- .../swadroid/gui/MenuExpandableListActivity.java | 1 + SWADroid/src/main/res/menu/menu_main.xml | 1 + 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 3fe8d2f0b..176777713 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -445,19 +445,16 @@ private void createMenu() { if (lastSelected != -1 && lastSelected < listCourses.size()) { courseSelected = (Course) listCourses.get(lastSelected); - Courses.setSelectedCourseCode(courseSelected.getId()); - Courses.setSelectedCourseShortName(courseSelected.getShortName()); - Courses.setSelectedCourseFullName(courseSelected.getFullName()); - Login.setCurrentUserRole(courseSelected.getUserRole()); Preferences.setLastCourseSelected(lastSelected); } else { courseSelected = (Course) listCourses.get(0); - Courses.setSelectedCourseCode(courseSelected.getId()); - Courses.setSelectedCourseShortName(courseSelected.getShortName()); - Courses.setSelectedCourseFullName(courseSelected.getFullName()); - Login.setCurrentUserRole(courseSelected.getUserRole()); Preferences.setLastCourseSelected(0); } + + Courses.setSelectedCourseCode(courseSelected.getId()); + Courses.setSelectedCourseShortName(courseSelected.getShortName()); + Courses.setSelectedCourseFullName(courseSelected.getFullName()); + Login.setCurrentUserRole(courseSelected.getUserRole()); } if (courseSelected != null) { diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/MenuExpandableListActivity.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/MenuExpandableListActivity.java index 919614f7d..28dcc813a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/MenuExpandableListActivity.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/gui/MenuExpandableListActivity.java @@ -177,6 +177,7 @@ public boolean onCreateOptionsMenu(Menu menu) { menu.findItem(R.id.clean_database_menu).setVisible(true); menu.findItem(R.id.share_menu).setVisible(true); menu.findItem(R.id.rate_menu).setVisible(true); + menu.findItem(R.id.preferences_menu).setVisible(true); } return super.onCreateOptionsMenu(menu); diff --git a/SWADroid/src/main/res/menu/menu_main.xml b/SWADroid/src/main/res/menu/menu_main.xml index b4fddd549..7155a3610 100644 --- a/SWADroid/src/main/res/menu/menu_main.xml +++ b/SWADroid/src/main/res/menu/menu_main.xml @@ -27,6 +27,7 @@ android:id="@+id/preferences_menu" android:icon="@drawable/ic_menu_settings_holo_light" android:title="@string/preferencesTitle_menu" + android:visible="false" swadroid:showAsAction="ifRoom|withText"> From 1d2f52b1d256509122dd25abb1cfcd26c316f18f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 10 Aug 2016 19:02:55 +0200 Subject: [PATCH 069/103] adding underline to see all text in receivers --- .../es/ugr/swad/swadroid/modules/messages/Messages.java | 6 +++--- SWADroid/src/main/res/layout/messages_screen.xml | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 6a891bc2a..bd1ec551b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -20,7 +20,7 @@ import android.content.DialogInterface; import android.content.Intent; -import android.content.res.Resources; +import android.graphics.Paint; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AlertDialog; @@ -38,8 +38,6 @@ import android.widget.Toast; import com.nostra13.universalimageloader.core.ImageLoader; import org.ksoap2.serialization.SoapObject; -import org.w3c.dom.Text; - import java.util.ArrayList; import java.util.Vector; import es.ugr.swad.swadroid.Constants; @@ -200,6 +198,7 @@ public void onClick(View v) { showAll = false; seeAll = (TextView) findViewById(R.id.see_more_receivers); + seeAll.setPaintFlags(seeAll.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); seeAll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { @@ -210,6 +209,7 @@ public void onClick(View view) { showReceivers(); } }); + seeAll.setText(getResources().getString(R.string.see_all)); setMETHOD_NAME("sendMessage"); } diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index f8da4a6a9..92842d653 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -93,8 +93,9 @@ android:id="@+id/see_more_receivers" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/see_all" - android:layout_margin="5dp" + android:layout_marginLeft="5dp" + android:layout_marginBottom="5dp" + android:textSize="17sp" android:visibility="gone"/> Date: Fri, 12 Aug 2016 17:33:50 +0200 Subject: [PATCH 070/103] adding again the confirm button in users list --- .../modules/messages/SearchUsers.java | 39 +++++++++++++++---- .../src/main/res/menu/search_users_bar.xml | 3 +- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/strings.xml | 1 + 4 files changed, 34 insertions(+), 10 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 89026c0de..065f737c2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -16,6 +16,7 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CheckBox; +import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; @@ -46,6 +47,9 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private ArrayList arrayReceivers; private ArrayList arrayReceiversNames; private ArrayList arrayPhotos; + private ArrayList oldReceivers; + private ArrayList oldReceiversNames; + private ArrayList oldPhotos; private UsersAdapter adapter; private CheckBox checkbox; private UsersList userFilters; @@ -79,7 +83,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceivers.remove(index); arrayReceiversNames.remove(index); arrayPhotos.remove(index); - Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); + //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); } else{ checkbox.setChecked(true); @@ -88,7 +92,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) userFilters.getUsers().get(position).getUserSurname1() + " " + userFilters.getUsers().get(position).getUserSurname2()); arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); - Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); + //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); } } }); @@ -100,6 +104,10 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); + //save the old receivers + oldReceivers = (ArrayList) arrayReceivers.clone(); + oldReceiversNames = (ArrayList) arrayReceiversNames.clone(); + oldPhotos = (ArrayList) arrayPhotos.clone(); senderName = getIntent().getStringExtra("senderName"); senderPhoto = getIntent().getStringExtra("senderPhoto"); @@ -122,7 +130,7 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - sendReceivers(true); //if confirm button exists, set to "false" + sendReceivers(false); //if confirm button exists, set to "false" return true; } }); @@ -133,6 +141,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { // listener to searchview searchView.setOnQueryTextListener(this); searchView.setMaxWidth(Integer.MAX_VALUE); + searchView.setPadding(-30,0,0,0); // searview expanded searchItem.expandActionView(); @@ -164,9 +173,15 @@ private void sendReceivers(boolean send){ hideMenu = true; invalidateOptionsMenu(); Intent intent = new Intent(); - intent.putExtra("receivers", arrayReceivers); // send receivers to parent activity - intent.putExtra("receiversNames", arrayReceiversNames); - intent.putExtra("receiversPhotos", arrayPhotos); + if(send){ + intent.putExtra("receivers", arrayReceivers); // send receivers to parent activity + intent.putExtra("receiversNames", arrayReceiversNames); + intent.putExtra("receiversPhotos", arrayPhotos); + }else{ + intent.putExtra("receivers", oldReceivers); + intent.putExtra("receiversNames", oldReceiversNames); + intent.putExtra("receiversPhotos", oldPhotos); + } setResult(RESULT_OK, intent); finish(); @@ -259,8 +274,10 @@ protected void requestService() throws Exception { boolean selected; + //is not the sender of reply message + /* if (!(firstname + " " + surname1 + " " + surname2).equals(senderName) || !userPhoto.equals(senderPhoto)){ - //is not the sender of reply message + if (arrayReceivers.contains("@" + nickname)) { selected = true; } @@ -268,8 +285,14 @@ protected void requestService() throws Exception { selected = false; userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); - } + }*/ + if (arrayReceivers.contains("@" + nickname)) { + selected = true; + } + else + selected = false; + userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); } } numUsers = userFilters.getUsers().size(); diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml index 4719f747b..f6b103311 100644 --- a/SWADroid/src/main/res/menu/search_users_bar.xml +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -19,6 +19,5 @@ android:id="@+id/confirm_receivers" android:icon="@drawable/ic_action_accept" swadroid:showAsAction="always" - android:title="@string/search" - android:visible="false"/> + android:title="@string/confirm"/> \ No newline at end of file diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 6056170d3..9a2931b60 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -332,5 +332,6 @@ Usuario eliminado Ver todos Ver menos + Confirmar \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index fc2e3017f..02361a1e7 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -342,5 +342,6 @@ User deleted See all See less + Confirm \ No newline at end of file From 439dd9966be778f83eae86ccbe161730767a6bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Fri, 12 Aug 2016 19:39:36 +0200 Subject: [PATCH 071/103] discard dialog in users search --- .../swadroid/modules/messages/Messages.java | 10 +++---- .../modules/messages/SearchUsers.java | 29 +++++++++++++++++-- .../src/main/res/menu/search_users_bar.xml | 2 +- SWADroid/src/main/res/values-es/strings.xml | 5 ++-- SWADroid/src/main/res/values/strings.xml | 5 ++-- 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index bd1ec551b..d0329f568 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -401,7 +401,7 @@ public boolean onOptionsItemSelected(MenuItem item) { } return true; case android.R.id.home: - showDialogCancel(); + showCancelDialog(); return true; default: @@ -412,10 +412,10 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public void onBackPressed() { - showDialogCancel(); + showCancelDialog(); } - private void showDialogCancel(){ + private void showCancelDialog(){ AlertDialog.Builder builder = new AlertDialog.Builder(Messages.this); builder.setTitle(R.string.areYouSure); builder.setMessage(R.string.cancelSendMessage); @@ -435,7 +435,7 @@ public void onClick(DialogInterface dialog, int which) { alert.show(); } - private void showDialogDelete(final View linearLayout, final TextView textNickname, String textName){ + private void showDeleteDialog(final View linearLayout, final TextView textNickname, String textName){ AlertDialog.Builder builder = new AlertDialog.Builder(Messages.this); builder.setTitle(R.string.areYouSure); String dialog = getResources().getString(R.string.cancelRemoveReceivers); @@ -561,7 +561,7 @@ private void showReceivers(){ ImageButton button = (ImageButton)linearLayout.findViewById(R.id.buttonDelete); button.setOnClickListener( new View.OnClickListener() { public void onClick(View view){ - showDialogDelete(linearLayout, textNickname, textName.getText().toString()); + showDeleteDialog(linearLayout, textNickname, textName.getText().toString()); } }); i++; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 065f737c2..63815d876 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -130,7 +130,8 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - sendReceivers(false); //if confirm button exists, set to "false" + //showDiscardDialog(); + sendReceivers(false); return true; } }); @@ -212,7 +213,7 @@ public boolean onQueryTextSubmit(String query) { } else { if (Courses.getSelectedCourseCode() != -1) { //is not a guest user - showDialogSearch(); + showSearchDialog(); } else { courseCode = -1; runConnection(); @@ -333,7 +334,7 @@ protected void onError() { } - private void showDialogSearch(){ + private void showSearchDialog(){ final String[] choiceList = {getString(R.string.in_subject) + " " + Courses.getSelectedCourseShortName(), getString(R.string.inAllPlatform)}; AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); @@ -366,4 +367,26 @@ public void onClick(DialogInterface dialog, int which) { AlertDialog alert = builder.create(); alert.show(); } + + private void showDiscardDialog(){ + AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); + builder.setTitle(R.string.areYouSure); + builder.setMessage(R.string.cancelSendReceivers); + builder.setCancelable(true); + + builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + // no need to write anything here just implement this interface into this button + } + }); + + builder.setPositiveButton(getString(R.string.discardMsg), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + sendReceivers(false); + } + }); + + AlertDialog alert = builder.create(); + alert.show(); + } } \ No newline at end of file diff --git a/SWADroid/src/main/res/menu/search_users_bar.xml b/SWADroid/src/main/res/menu/search_users_bar.xml index f6b103311..d22182ecd 100644 --- a/SWADroid/src/main/res/menu/search_users_bar.xml +++ b/SWADroid/src/main/res/menu/search_users_bar.xml @@ -19,5 +19,5 @@ android:id="@+id/confirm_receivers" android:icon="@drawable/ic_action_accept" swadroid:showAsAction="always" - android:title="@string/confirm"/> + android:title="@string/confirmMsg"/> \ No newline at end of file diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 9a2931b60..7169add7d 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -326,12 +326,13 @@ En toda la plataforma Introduzca un texto más largo Va a cancelar el envío del mensaje - Va a cancelar los destinatarios seleccionados + Va a descartar los destinatarios seleccionados ¿Quiere quitar a #nameUser# de la lista de destinatarios? Usuario añadido Usuario eliminado Ver todos Ver menos - Confirmar + Confirmar + Descartar \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 02361a1e7..a9a00e274 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -336,12 +336,13 @@ In all the platform Introduce a longer text You are going to cancel the sending message - You are going to cancel the selected receivers + You are going to discard the selected receivers Do you want to remove #nameUser# from the list of receivers? User added User deleted See all See less - Confirm + Confirm + Discard \ No newline at end of file From 903431b8e5c7b4e143293d929eba9e5c224af3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 13 Aug 2016 17:09:17 +0200 Subject: [PATCH 072/103] working dialog to discard receivers added --- .../swadroid/modules/messages/SearchUsers.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 63815d876..5f7388375 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -16,7 +16,6 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CheckBox; -import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; @@ -130,8 +129,13 @@ public boolean onMenuItemActionExpand(MenuItem item) { @Override public boolean onMenuItemActionCollapse(MenuItem item) { - //showDiscardDialog(); - sendReceivers(false); + if(arrayReceivers.equals(oldReceivers)) // there aren't new receivers added + sendReceivers(false); + else { + hideMenu = true; + invalidateOptionsMenu(); //reload the actionbar + showDiscardDialog(search); + } return true; } }); @@ -368,7 +372,7 @@ public void onClick(DialogInterface dialog, int which) { alert.show(); } - private void showDiscardDialog(){ + private void showDiscardDialog(final String search){ AlertDialog.Builder builder = new AlertDialog.Builder(SearchUsers.this); builder.setTitle(R.string.areYouSure); builder.setMessage(R.string.cancelSendReceivers); @@ -376,7 +380,10 @@ private void showDiscardDialog(){ builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - // no need to write anything here just implement this interface into this button + hideMenu = false; + invalidateOptionsMenu(); + searchView.setIconified(false); + searchView.setQuery(search, false); } }); From eba6e8ebac3e7d4cad888c829e1e64dce422cb2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 13 Aug 2016 17:27:32 +0200 Subject: [PATCH 073/103] error with margin in searchview corrected --- .../java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 5f7388375..15c5208cb 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -146,7 +146,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { // listener to searchview searchView.setOnQueryTextListener(this); searchView.setMaxWidth(Integer.MAX_VALUE); - searchView.setPadding(-30,0,0,0); + searchView.setPadding(-20,0,0,0); // searview expanded searchItem.expandActionView(); From 2a1f56f5f5e97f0cc8f6146ac68934f4adf6a47e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 15 Aug 2016 12:42:14 +0200 Subject: [PATCH 074/103] introducing the frequent users --- .../modules/messages/SearchUsers.java | 27 ++++++++++++++++++- .../src/main/res/layout-v11/list_users.xml | 19 ++++++++++--- SWADroid/src/main/res/values-es/strings.xml | 2 ++ SWADroid/src/main/res/values/strings.xml | 2 ++ 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 15c5208cb..96be0a20a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -4,11 +4,14 @@ import android.content.DialogInterface; import android.content.Intent; import android.content.res.Configuration; +import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AlertDialog; import android.support.v7.widget.SearchView; +import android.text.SpannableString; +import android.text.style.StyleSpan; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -58,6 +61,8 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private int numUsers; private String senderName; private String senderPhoto; + private TextView frequentUsers; + private TextView frequentUsersText; @Override protected void onCreate(Bundle savedInstanceState) { @@ -100,6 +105,17 @@ public void onItemClick(AdapterView parent, View view, int position, long id) TextView textLoading = (TextView) findViewById(R.id.text_progress); textLoading.setText(R.string.loadingMsg); + frequentUsers = (TextView) findViewById(R.id.listTitle); + + //font title of frequent users in bold + SpannableString title = new SpannableString(frequentUsers.getHint().toString()); + title.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), 0); + frequentUsers.setHint(title); + + frequentUsersText = (TextView) findViewById(R.id.listText); + + frequentUsersText.setVisibility(View.VISIBLE); //gone when there are frequent users + arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); @@ -196,8 +212,14 @@ private void sendReceivers(boolean send){ public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_search: - if(!search.equals("")) + if(!search.equals("")) { onQueryTextSubmit(search); //find users with string search + } + else { + lvUsers.setVisibility(View.GONE); + frequentUsers.setVisibility(View.VISIBLE); + frequentUsersText.setVisibility(View.VISIBLE); //gone when there are frequent users + } return true; case R.id.confirm_receivers: sendReceivers(true); @@ -317,9 +339,12 @@ protected void connect() { @Override protected void postConnect() { + frequentUsers.setVisibility(View.GONE); + frequentUsersText.setVisibility(View.GONE); progressLayout.setVisibility(View.GONE); adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); lvUsers.setAdapter(adapter); + lvUsers.setVisibility(View.VISIBLE); //toasts to inform about found users if (numUsers == 0){ diff --git a/SWADroid/src/main/res/layout-v11/list_users.xml b/SWADroid/src/main/res/layout-v11/list_users.xml index 355cd4225..90fd9ba4a 100644 --- a/SWADroid/src/main/res/layout-v11/list_users.xml +++ b/SWADroid/src/main/res/layout-v11/list_users.xml @@ -33,12 +33,25 @@ android:id="@+id/testsMenuLayout" > + + + diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 7169add7d..217f7dd67 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -334,5 +334,7 @@ Ver menos Confirmar Descartar + Usuarios frecuentes + No hay usuarios frecuentes \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index a9a00e274..b04ce8750 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -344,5 +344,7 @@ See less Confirm Discard + Frequent users + There are no frequent users \ No newline at end of file From 75958914ebb40fa8d9407d03bf478819c0d6c2ab Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 17 Aug 2016 10:03:58 +0200 Subject: [PATCH 075/103] Updated Gradle version --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 6caf4b926..e7ff91194 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.2' + classpath 'com.android.tools.build:gradle:2.1.3' classpath 'org.ajoberstar:grgit:1.7.0' } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d1db259b3..02c177ee4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sun Aug 23 16:37:03 CEST 2015 +#Wed Aug 17 10:01:56 CEST 2016 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip From 43707241ee99f8ee4b3c97d6f289b6ceff13f934 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 17 Aug 2016 10:19:09 +0200 Subject: [PATCH 076/103] Updated Build Tools version --- SWADroid/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWADroid/build.gradle b/SWADroid/build.gradle index 93683af23..0974696d4 100644 --- a/SWADroid/build.gradle +++ b/SWADroid/build.gradle @@ -8,7 +8,7 @@ ext { android { compileSdkVersion 24 - buildToolsVersion "24" + buildToolsVersion "24.0.1" dexOptions { maxProcessCount=2 From 3d847ded04c15aaf95ae49853da4570d9a111d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 18 Aug 2016 00:11:30 +0200 Subject: [PATCH 077/103] some changes in reply message --- .../swadroid/modules/messages/Messages.java | 26 +++++++++++++----- .../modules/messages/SearchUsers.java | 4 +-- .../drawable-hdpi/ic_action_add_person.png | Bin 1017 -> 0 bytes .../drawable-xhdpi/ic_action_add_person.png | Bin 1181 -> 0 bytes .../drawable-xxhdpi/ic_action_add_person.png | Bin 2553 -> 0 bytes SWADroid/src/main/res/values-es/strings.xml | 2 ++ SWADroid/src/main/res/values/strings.xml | 2 ++ 7 files changed, 25 insertions(+), 9 deletions(-) delete mode 100644 SWADroid/src/main/res/drawable-hdpi/ic_action_add_person.png delete mode 100644 SWADroid/src/main/res/drawable-xhdpi/ic_action_add_person.png delete mode 100644 SWADroid/src/main/res/drawable-xxhdpi/ic_action_add_person.png diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index d0329f568..a49c6ffc3 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -57,6 +57,7 @@ * @author Juan Miguel Boyero Corral * @author Antonio Aguilera Malagon * @author Jose Antonio Guerrero Aviles + * @author Rubén Martín Hidalgo */ public class Messages extends Module { /** @@ -111,9 +112,13 @@ public class Messages extends Module { * Name of reply notification receiver */ private String sender; - + /** + * Photo of reply notification receiver + */ private String senderPhoto; - + /** + * Image of every receiver + */ private ImageLoader loader; /** * View group of receivers @@ -127,9 +132,13 @@ public class Messages extends Module { * Layout of message screen */ private LinearLayout messageLayout; - + /** + * Link to expand the receivers + */ private TextView seeAll; - + /** + * Save if the list is expanded + */ private boolean showAll; /* (non-Javadoc) @@ -174,6 +183,7 @@ protected void onCreate(Bundle savedInstanceState) { subjEditText.setText("Re: " + getIntent().getStringExtra("summary")); sender = getIntent().getStringExtra("sender"); senderPhoto = getIntent().getStringExtra("photo"); + setTitle(getResources().getString(R.string.replyModuleLabel)); showSenderReplyMessage(); } @@ -191,7 +201,7 @@ public void onClick(View v) { for(int i=0; i0 zC%H|Urq}{ANNn_4VzEGMUU4=kq8FToZ6s(_vz-FkJuOdr49uE>=sVrDMK*u<`me1###bHC2HSXNbX0y9>!c@96OxiRf zfizam5Dz~%4G4*_B$29F#(rh&4!tX3XzRAwY?g31+=xrBWyZiQ_1{84l`Z{YKJa7MQ^&IHdc$S>lQJAYZ||`1M`7# zKe;E(b(<;Onwfg(N0S8l1z3^PykSYl2_C?aCO|?sBDJ=R)*1VNd)%h(XE@*^@E8F< z0kWq$_eZ`ja9ovhzOOK5oUvZhcY8?-_2a^w5H&TzaTdK*dWmCqaj%UrZdnXwzJyt^ z-^FHmm9#`r&?jUrmmf7KQO|zg;NV~YuqX;~&24xM0iw}MZsNcbm6qR;6r zz#L;n`TmrYy_4M@t#N&-tE=l4V7g&2(P%Wq!@sB?<(q3!Rvg+CsXkS#*ka_xZG{3K z;8}WE>aC(v!MNRS8^sw>u2k;wwcdxy&joOqbcahIw1W_8#ku;@DSd^9_*BO&o^qG3 z26;&O=46#pk6u!{C@YnP(Nb6O%Pe?#@4)UK=K!gM+Q#ve6hCmwOm=l>XsAUdUk{Lj zBAt*Xh_(RRJgZ7ICY>8+o&yvBXh{JD>jIL$G8AGAs9_NgIID659tLa#$$6Sr+Ca%6 zT11Fi)iFRPrvBF#IraZaJCAU~N$?o$VVrsqjZq5Yxb+=LIXq&*d9LMgFHeie82WZu zCG}1MK9)^c>Je?I4f;T-bWPwkfPck39y5V#Ebk7Waw_%GL`Mn!O#sln^7K;lNy&`a z`=6~MjSW&mxUx#BTBTu@els2Bgxd6!RvATI-?F~|pwsmslYyjDzXwR5f|mhEc7b;K n+zon=X1NR>fim?4&aBTLPztCgnsJ+x00000NkvXXu0mjfU5nGs diff --git a/SWADroid/src/main/res/drawable-xhdpi/ic_action_add_person.png b/SWADroid/src/main/res/drawable-xhdpi/ic_action_add_person.png deleted file mode 100644 index 6dd13b85cb2366a8b138efb206b823fdbf830ad7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1181 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 Usuarios frecuentes No hay usuarios frecuentes + Responder mensaje + Principal \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index b04ce8750..3ede5b610 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -346,5 +346,7 @@ Discard Frequent users There are no frequent users + Reply message + Primary \ No newline at end of file From 78887f693ed81227576f2845e39df773e6a59772 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Thu, 18 Aug 2016 09:58:50 +0200 Subject: [PATCH 078/103] Updated Android Support library --- SWADroid/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SWADroid/build.gradle b/SWADroid/build.gradle index 0974696d4..bf2ded8be 100644 --- a/SWADroid/build.gradle +++ b/SWADroid/build.gradle @@ -56,8 +56,8 @@ android { } dependencies { - compile 'com.android.support:support-v4:24.1.1' - compile 'com.android.support:appcompat-v7:24.1.1' + compile 'com.android.support:support-v4:24.2.0' + compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.google.android.gms:play-services-analytics:9.4.0' compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1' compile 'commons-io:commons-io:2.5' From a4f77bb489f524f7fa343e5b46ca3ec6f9e1aba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Thu, 18 Aug 2016 20:09:44 +0200 Subject: [PATCH 079/103] create table and functions of frequent recipients (provisional) --- .../swadroid/database/DataBaseHelper.java | 38 ++++ .../ugr/swad/swadroid/model/FrequentUser.java | 204 ++++++++++++++++++ .../swadroid/modules/messages/Messages.java | 34 +++ SWADroid/src/main/res/xml/tables.xml | 31 ++- 4 files changed, 306 insertions(+), 1 deletion(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index 498049443..8b999fc67 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -41,6 +41,7 @@ import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.model.Course; import es.ugr.swad.swadroid.model.Event; +import es.ugr.swad.swadroid.model.FrequentUser; import es.ugr.swad.swadroid.model.Group; import es.ugr.swad.swadroid.model.GroupType; import es.ugr.swad.swadroid.model.Model; @@ -172,6 +173,10 @@ public class DataBaseHelper { */ @Deprecated public static final String DB_TABLE_ROLLCALL = "rollcall"; + /** + * Table name for frequent recipients + */ + public static final String DB_TABLE_FREQUENT_RECIPIENTS = "frequent_recipients"; /** * Constructor @@ -455,6 +460,14 @@ private T createObjectByTable(String table, Entity ent) { ent.getInt("multiple"), ent.getLong("openTime")); break; + case DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS: + o = new FrequentUser(ent.getString("nicknameRecipient"), + ent.getString("firstnameRecipient"), + ent.getString("surname1Recipient"), + ent.getString("surname2Recipient"), + ent.getString("photoRecipient"), + ent.getDouble("score")); + break; } return (T) o; @@ -2364,4 +2377,29 @@ public static boolean isDbCleaned() { public static void setDbCleaned(boolean state) { dbCleaned = state; } + + public void insertFrequentRecipient(FrequentUser user) { + Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + ent.setValue("nicknameRecipient", user.getUserNickname()); + ent.setValue("firstnameRecipient", user.getUserFirstname()); + ent.setValue("surname1Recipient", user.getUserSurname1()); + ent.setValue("surname2Recipient", user.getUserSurname2()); + ent.setValue("photoRecipient", user.getUserPhoto()); + ent.setValue("score", user.getScore()); + ent.save(); + } + + public void updateFrequentRecipient(FrequentUser actual) { + List rows = db.getEntityList(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient = " + actual.getUserNickname()); + + for(Entity ent : rows) { + ent.setValue("nicknameRecipient", actual.getUserNickname()); + ent.setValue("firstnameRecipient", actual.getUserFirstname()); + ent.setValue("surname1Recipient", actual.getUserSurname1()); + ent.setValue("surname2Recipient", actual.getUserSurname2()); + ent.setValue("photoRecipient", actual.getUserPhoto()); + ent.setValue("score", actual.getScore()); + ent.save(); + } + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java new file mode 100644 index 000000000..0f030514e --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java @@ -0,0 +1,204 @@ +/* + * This file is part of SWADroid. + * + * Copyright (C) 2010 Juan Miguel Boyero Corral + * + * SWADroid is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * SWADroid is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with SWADroid. If not, see . + */ + +package es.ugr.swad.swadroid.model; + +import org.ksoap2.serialization.PropertyInfo; + +import java.text.ParseException; +import java.util.Hashtable; + +/** + * User data. + * + * @author Rubén Martín Hidalgo + */ +public class FrequentUser extends Model { + /** + * User identifier. + */ + private String userNickname; + /** + * User first surname. + */ + private String userSurname1; + /** + * User last surname. + */ + private String userSurname2; + /** + * User name. + */ + private String userFirstname; + /** + * Full path where user's picture is stored. + */ + private String userPhoto; + /** + * Score of frequent recipient + */ + private double score; + + /** + * Constructor. + * + * @param userNickname User identifier. + * @param userSurname1 User first surname. + * @param userSurname2 User last surname. + * @param userFirstname User name. + * @param userPhoto Full path where user's picture is stored. + * @param score Score of frequent recipient + */ + public FrequentUser(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, double score) { + this.userNickname = userNickname; + this.userSurname1 = userSurname1; + this.userSurname2 = userSurname2; + this.userFirstname = userFirstname; + this.userPhoto = userPhoto; + this.score = score; + } + + /** + * Gets user name. + * + * @return User name. + */ + public String getUserFirstname() { + return userFirstname; + } + + /** + * Sets user name. + * + * @param userFirstname User name. + */ + public void setUserFirstname(String userFirstname) { + this.userFirstname = userFirstname; + } + + /** + * Gets user identifier. + * + * @return User identifier. + */ + public String getUserNickname() { + return userNickname; + } + + /** + * Sets user identifier. + * + * @param userNickname User identifier. + */ + public void setUserNickname(String userNickname) { + this.userNickname = userNickname; + } + + /** + * Gets user first surname. + * + * @return User first surname. + */ + public String getUserSurname1() { + return userSurname1; + } + + /** + * Sets user first surname. + * + * @param userSurname1 User first surname. + */ + public void setUserSurname1(String userSurname1) { + this.userSurname1 = userSurname1; + } + + /** + * Gets user last surname. + * + * @return User last surname. + */ + public String getUserSurname2() { + return userSurname2; + } + + /** + * Sets user last surname. + * + * @param userSurname2 User last surname. + */ + public void setUserSurname2(String userSurname2) { + this.userSurname2 = userSurname2; + } + + /** + * Gets Full path where user's picture is stored. + * + * @return the userPhoto + */ + public String getUserPhoto() { + return userPhoto; + } + + /** + * Sets Full path where user's picture is stored. + * + * @param userPhoto the userPhoto to set + */ + public void setUserPhoto(String userPhoto) { + this.userPhoto = userPhoto; + } + + /** + * Get score of frequent recipient. + * + * @return score + */ + public double getScore() { + return score; + } + + /** + * Set score of frequent recipient. + * + * @param score + */ + public void setScore(double score){ + this.score = score; + } + + @Override + public Object getProperty(int index) { + return null; + } + + @Override + public int getPropertyCount() { + return 0; + } + + @Override + public void setProperty(int index, Object value) { + + } + + @Override + public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { + + } +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index a49c6ffc3..5cd57d482 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -39,11 +39,14 @@ import com.nostra13.universalimageloader.core.ImageLoader; import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; +import java.util.List; import java.util.Vector; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; +import es.ugr.swad.swadroid.database.DataBaseHelper; import es.ugr.swad.swadroid.gui.ImageFactory; +import es.ugr.swad.swadroid.model.FrequentUser; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.login.Login; @@ -141,6 +144,8 @@ public class Messages extends Module { */ private boolean showAll; + private List listFrequents; + /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) */ @@ -314,6 +319,35 @@ protected void connect() { protected void postConnect() { progressLayout.setVisibility(View.GONE); String messageSent = getString(R.string.messageSentMsg) + ":\n" + receiversNames; + + listFrequents = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + boolean frequent = false; + int newFrequents = 0; + for(int i=0; i < arrayReceivers.size(); i++){ + for(int j=0; j < listFrequents.size(); j++){ + if(listFrequents.get(j).getUserNickname() == arrayReceivers.get(i)){ + frequent = true; + listFrequents.get(j).setScore(listFrequents.get(j).getScore() * 1.2); + } + else{ + listFrequents.get(j).setScore(listFrequents.get(j).getScore() * 0.95); + } + } + if(frequent == false){ + listFrequents.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversNames.get(i), "s1", "s2", arrayPhotos.get(i), 1)); + newFrequents++; + } + frequent = false; + } + + for(int i=0; i < listFrequents.size()-newFrequents; i++){ + dbHelper.updateFrequentRecipient(listFrequents.get(i)); + } + + for(int i=listFrequents.size()-newFrequents+1; i < listFrequents.size(); i++){ + dbHelper.insertFrequentRecipient(listFrequents.get(i)); + } + Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); finish(); } diff --git a/SWADroid/src/main/res/xml/tables.xml b/SWADroid/src/main/res/xml/tables.xml index e7851a00f..9cc22965a 100644 --- a/SWADroid/src/main/res/xml/tables.xml +++ b/SWADroid/src/main/res/xml/tables.xml @@ -1,7 +1,7 @@ + version="21" >
+ + + + + + + +
\ No newline at end of file From d93215a21f2cac83cc8e82caf4ef684d5e209f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 20 Aug 2016 17:32:03 +0200 Subject: [PATCH 080/103] add list of frequent recipients --- .../swadroid/database/DataBaseHelper.java | 9 +- .../ugr/swad/swadroid/model/FrequentUser.java | 23 ++- .../messages/FrequentUsersAdapter.java | 92 ++++++++++ .../modules/messages/FrequentUsersList.java | 25 +++ .../swadroid/modules/messages/Messages.java | 57 +++--- .../modules/messages/SearchUsers.java | 164 +++++++++++++----- .../swadroid/modules/messages/UsersList.java | 1 - 7 files changed, 304 insertions(+), 67 deletions(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index 8b999fc67..f6bbdc4bd 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -462,10 +462,11 @@ private T createObjectByTable(String table, Entity ent) { break; case DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS: o = new FrequentUser(ent.getString("nicknameRecipient"), - ent.getString("firstnameRecipient"), ent.getString("surname1Recipient"), ent.getString("surname2Recipient"), + ent.getString("firstnameRecipient"), ent.getString("photoRecipient"), + false, ent.getDouble("score")); break; } @@ -2381,22 +2382,22 @@ public static void setDbCleaned(boolean state) { public void insertFrequentRecipient(FrequentUser user) { Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); ent.setValue("nicknameRecipient", user.getUserNickname()); - ent.setValue("firstnameRecipient", user.getUserFirstname()); ent.setValue("surname1Recipient", user.getUserSurname1()); ent.setValue("surname2Recipient", user.getUserSurname2()); + ent.setValue("firstnameRecipient", user.getUserFirstname()); ent.setValue("photoRecipient", user.getUserPhoto()); ent.setValue("score", user.getScore()); ent.save(); } public void updateFrequentRecipient(FrequentUser actual) { - List rows = db.getEntityList(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient = " + actual.getUserNickname()); + List rows = db.getEntityList(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient = '" + actual.getUserNickname() + "'"); for(Entity ent : rows) { ent.setValue("nicknameRecipient", actual.getUserNickname()); - ent.setValue("firstnameRecipient", actual.getUserFirstname()); ent.setValue("surname1Recipient", actual.getUserSurname1()); ent.setValue("surname2Recipient", actual.getUserSurname2()); + ent.setValue("firstnameRecipient", actual.getUserFirstname()); ent.setValue("photoRecipient", actual.getUserPhoto()); ent.setValue("score", actual.getScore()); ent.save(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java index 0f030514e..0a13f721f 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java @@ -55,6 +55,8 @@ public class FrequentUser extends Model { */ private double score; + private boolean selectedCheckbox; + /** * Constructor. * @@ -65,12 +67,13 @@ public class FrequentUser extends Model { * @param userPhoto Full path where user's picture is stored. * @param score Score of frequent recipient */ - public FrequentUser(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, double score) { + public FrequentUser(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox, double score) { this.userNickname = userNickname; this.userSurname1 = userSurname1; this.userSurname2 = userSurname2; this.userFirstname = userFirstname; this.userPhoto = userPhoto; + this.selectedCheckbox = selectedCheckbox; this.score = score; } @@ -164,6 +167,24 @@ public void setUserPhoto(String userPhoto) { this.userPhoto = userPhoto; } + /** + * Get if checkbox is selected. + * + * @return if checkbox is selected (true / false) + */ + public boolean getCheckbox() { + return selectedCheckbox; + } + + /** + * Sets Full path where user's picture is stored. + * + * @param selected the checkbox is selected or not + */ + public void setCheckbox(boolean selected){ + this.selectedCheckbox = selected; + } + /** * Get score of frequent recipient. * diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java new file mode 100644 index 000000000..baeb46ef3 --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java @@ -0,0 +1,92 @@ +/* + * + * * This file is part of SWADroid. + * * + * * Copyright (C) 2010 Juan Miguel Boyero Corral + * * + * * SWADroid is free software: you can redistribute it and/or modify + * * it under the terms of the GNU General Public License as published by + * * the Free Software Foundation, either version 3 of the License, or + * * (at your option) any later version. + * * + * * SWADroid is distributed in the hope that it will be useful, + * * but WITHOUT ANY WARRANTY; without even the implied warranty of + * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * * GNU General Public License for more details. + * * + * * You should have received a copy of the GNU General Public License + * * along with SWADroid. If not, see . + * + */ +package es.ugr.swad.swadroid.modules.messages; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.CheckBox; +import android.widget.ImageView; +import android.widget.TextView; + +import com.nostra13.universalimageloader.core.ImageLoader; + +import java.util.List; + +import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.gui.ImageFactory; +import es.ugr.swad.swadroid.model.FrequentUser; + +/** + * Custom CursorAdapter for display users + * + * @author Rubén Martín Hidalgo + */ +public class FrequentUsersAdapter extends ArrayAdapter { + private LayoutInflater inflater; + private ImageLoader loader; + + private static class ViewHolder { + ImageView image; + TextView name; + CheckBox checkbox; + } + + public FrequentUsersAdapter(Context context, List objects) { + super(context, 0, objects); + this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, + R.drawable.usr_bl); + + this.inflater = LayoutInflater.from(context); + } + + public View getView(int position, View convertView, ViewGroup parent) { + // Does the current view exist? + if (convertView == null) { + convertView = inflater.inflate(R.layout.row_user, parent, false); + } + + ViewHolder holder = new ViewHolder(); + + // UI references + holder.image = (ImageView) convertView.findViewById(R.id.imageView); + holder.name = (TextView) convertView.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); + + // Current user + FrequentUser user = getItem(position); + + holder.checkbox.setChecked(user.getCheckbox()); + + // Setup row + if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty + holder.image.setImageResource(R.drawable.usr_bl); + + else + ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); + + holder.name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); + + return convertView; + } +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java new file mode 100644 index 000000000..93f13c876 --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java @@ -0,0 +1,25 @@ +package es.ugr.swad.swadroid.modules.messages; + +/** + * Created by Romilgildo on 24/07/2016. + */ + +import java.util.ArrayList; +import java.util.List; + +import es.ugr.swad.swadroid.model.FrequentUser; + +/** + * FrequentUser list + */ +public class FrequentUsersList { + private List users = new ArrayList(); + + public void saveUser(FrequentUser user) { + users.add(user); + } + + public List getUsers() { + return users; + } +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 5cd57d482..8047474b0 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -86,7 +86,11 @@ public class Messages extends Module { /** * Array of names */ - private ArrayList arrayReceiversNames; + private ArrayList arrayReceiversFirstNames; + + private ArrayList arrayReceiversSurNames1; + + private ArrayList arrayReceiversSurNames2; /** * Array of photos */ @@ -144,7 +148,7 @@ public class Messages extends Module { */ private boolean showAll; - private List listFrequents; + private List frequentsList; /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) @@ -156,7 +160,9 @@ protected void onCreate(Bundle savedInstanceState) { receivers = ""; receiversNames = ""; arrayReceivers = new ArrayList<>(); - arrayReceiversNames = new ArrayList<>(); + arrayReceiversFirstNames = new ArrayList<>(); + arrayReceiversSurNames1 = new ArrayList<>(); + arrayReceiversSurNames2 = new ArrayList<>(); arrayPhotos = new ArrayList<>(); sender = ""; @@ -198,7 +204,9 @@ protected void onCreate(Bundle savedInstanceState) { public void onClick(View v) { Intent intent = new Intent (Messages.this, SearchUsers.class); intent.putExtra("receivers", arrayReceivers); - intent.putExtra("receiversNames", arrayReceiversNames); + intent.putExtra("receiversFirstNames", arrayReceiversFirstNames); + intent.putExtra("receiversSurNames1", arrayReceiversSurNames1); + intent.putExtra("receiversSurNames2", arrayReceiversSurNames2); intent.putExtra("receiversPhotos", arrayPhotos); intent.putExtra("senderName", sender); intent.putExtra("senderPhoto", senderPhoto); @@ -271,7 +279,7 @@ protected void requestService() throws Exception { addFootBody(); receivers = ""; for(int i=0; i 3) { - i = arrayReceiversNames.size() - 3; + if (arrayReceiversFirstNames.size() > 3) { + i = arrayReceiversFirstNames.size() - 3; seeAll.setVisibility(View.VISIBLE); seeAll.setText(getResources().getString(R.string.see_all)); } @@ -575,13 +588,15 @@ private void showReceivers(){ } } - while (i < arrayReceiversNames.size()){ + while (i < arrayReceiversFirstNames.size()){ layout.setVisibility(View.VISIBLE); LayoutInflater inflater = LayoutInflater.from(this); final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); - textName.setText(arrayReceiversNames.get(i).toString()); + textName.setText(arrayReceiversFirstNames.get(i).toString() + " " + + arrayReceiversSurNames1.get(i).toString() + " " + + arrayReceiversSurNames2.get(i).toString()); final TextView textNickname = (TextView) linearLayout.findViewById(R.id.textNickname); textNickname.setText(arrayReceivers.get(i).toString()); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 08e6b6a8a..becb32d97 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -25,9 +25,12 @@ import android.widget.Toast; import org.ksoap2.serialization.SoapObject; import java.util.ArrayList; +import java.util.List; import java.util.Vector; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.database.DataBaseHelper; +import es.ugr.swad.swadroid.model.FrequentUser; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.model.UserFilter; import es.ugr.swad.swadroid.modules.Module; @@ -47,22 +50,27 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private static ListView lvUsers; private String search; private ArrayList arrayReceivers; - private ArrayList arrayReceiversNames; + private ArrayList arrayReceiversFirstNames; + private ArrayList arrayReceiversSurNames1; + private ArrayList arrayReceiversSurNames2; private ArrayList arrayPhotos; private ArrayList oldReceivers; - private ArrayList oldReceiversNames; + private ArrayList oldReceiversFirstNames; + private ArrayList oldReceiversSurNames1; + private ArrayList oldReceiversSurNames2; private ArrayList oldPhotos; private UsersAdapter adapter; + private FrequentUsersAdapter frequentAdapter; private CheckBox checkbox; private UsersList userFilters; + private FrequentUsersList frequentUsers; private LinearLayout progressLayout; private boolean hideMenu = false; private long courseCode; private int numUsers; - private String senderName; - private String senderPhoto; - private TextView frequentUsers; + private TextView frequentUsersTitle; private TextView frequentUsersText; + private List frequentsList; @Override protected void onCreate(Bundle savedInstanceState) { @@ -76,6 +84,42 @@ protected void onCreate(Bundle savedInstanceState) { lvUsers = (ListView) findViewById(R.id.listItems); lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); + TextView textLoading = (TextView) findViewById(R.id.text_progress); + textLoading.setText(R.string.loadingMsg); + + frequentUsersTitle = (TextView) findViewById(R.id.listTitle); + + //font title of frequent users in bold + SpannableString title = new SpannableString(frequentUsersTitle.getHint().toString()); + title.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), 0); + frequentUsersTitle.setHint(title); + + frequentUsers = new FrequentUsersList(); + frequentUsersText = (TextView) findViewById(R.id.listText); + + frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "", "score"); + + if(frequentsList.size() == 0) { + frequentUsersText.setVisibility(View.VISIBLE); + } + else{ + frequentUsersText.setVisibility(View.GONE); + for(int i=0; i parent, View view, int position, long id) checkbox = (CheckBox) view.findViewById(R.id.check); if (checkbox.isChecked()){ checkbox.setChecked(false); - int index = arrayReceivers.indexOf("@" + userFilters.getUsers().get(position).getUserNickname()); + int index = arrayReceivers.indexOf(frequentUsers.getUsers().get(position).getUserNickname()); arrayReceivers.remove(index); - arrayReceiversNames.remove(index); + arrayReceiversFirstNames.remove(index); + arrayReceiversSurNames1.remove(index); + arrayReceiversSurNames2.remove(index); arrayPhotos.remove(index); //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); } else{ checkbox.setChecked(true); - arrayReceivers.add("@" + userFilters.getUsers().get(position).getUserNickname()); - arrayReceiversNames.add(userFilters.getUsers().get(position).getUserFirstname() + " " + - userFilters.getUsers().get(position).getUserSurname1() + " " + - userFilters.getUsers().get(position).getUserSurname2()); - arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); + arrayReceivers.add(frequentUsers.getUsers().get(position).getUserNickname()); + arrayReceiversFirstNames.add(frequentUsers.getUsers().get(position).getUserFirstname()); + arrayReceiversSurNames1.add(frequentUsers.getUsers().get(position).getUserSurname1()); + arrayReceiversSurNames2.add(frequentUsers.getUsers().get(position).getUserSurname2()); + arrayPhotos.add(frequentUsers.getUsers().get(position).getUserPhoto()); //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); } } }); - progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); - TextView textLoading = (TextView) findViewById(R.id.text_progress); - textLoading.setText(R.string.loadingMsg); - - frequentUsers = (TextView) findViewById(R.id.listTitle); - - //font title of frequent users in bold - SpannableString title = new SpannableString(frequentUsers.getHint().toString()); - title.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), 0); - frequentUsers.setHint(title); - - frequentUsersText = (TextView) findViewById(R.id.listText); - - frequentUsersText.setVisibility(View.VISIBLE); //gone when there are frequent users - arrayReceivers = getIntent().getStringArrayListExtra("receivers"); - arrayReceiversNames = getIntent().getStringArrayListExtra("receiversNames"); + arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); + arrayReceiversSurNames1 = getIntent().getStringArrayListExtra("receiversSurNames1"); + arrayReceiversSurNames2 = getIntent().getStringArrayListExtra("receiversSurNames2"); arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); //save the old receivers oldReceivers = (ArrayList) arrayReceivers.clone(); - oldReceiversNames = (ArrayList) arrayReceiversNames.clone(); + oldReceiversFirstNames = (ArrayList) arrayReceiversFirstNames.clone(); + oldReceiversSurNames1 = (ArrayList) arrayReceiversSurNames1.clone(); + oldReceiversSurNames2 = (ArrayList) arrayReceiversSurNames2.clone(); oldPhotos = (ArrayList) arrayPhotos.clone(); - senderName = getIntent().getStringExtra("senderName"); - senderPhoto = getIntent().getStringExtra("senderPhoto"); search = ""; @@ -177,7 +210,7 @@ public boolean onMenuItemActionCollapse(MenuItem item) { public void onFocusChange(View v, boolean hasFocus) { //select checkboxes who users were added before for(int i=0; i parent, View view, int position, long id) { + checkbox = (CheckBox) view.findViewById(R.id.check); + if (checkbox.isChecked()){ + checkbox.setChecked(false); + int index = arrayReceivers.indexOf(userFilters.getUsers().get(position).getUserNickname()); + arrayReceivers.remove(index); + arrayReceiversFirstNames.remove(index); + arrayReceiversSurNames1.remove(index); + arrayReceiversSurNames2.remove(index); + arrayPhotos.remove(index); + //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); + } + else{ + checkbox.setChecked(true); + arrayReceivers.add(userFilters.getUsers().get(position).getUserNickname()); + arrayReceiversFirstNames.add(userFilters.getUsers().get(position).getUserFirstname()); + arrayReceiversSurNames1.add(userFilters.getUsers().get(position).getUserSurname1()); + arrayReceiversSurNames2.add(userFilters.getUsers().get(position).getUserSurname2()); + arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); + //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); + } + } + }); + //toasts to inform about found users if (numUsers == 0){ Toast.makeText(SearchUsers.this, R.string.users_NOTfound, Toast.LENGTH_SHORT).show(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index 6113415e5..77690059d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -5,7 +5,6 @@ */ import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import es.ugr.swad.swadroid.model.UserFilter; From a0a52c877b2ed361eac642f800a69dfd15aaef85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 21 Aug 2016 13:06:13 +0200 Subject: [PATCH 081/103] management of frequent users list is working --- .../swadroid/modules/messages/Messages.java | 5 +- .../modules/messages/SearchUsers.java | 83 ++++++++++++------- 2 files changed, 56 insertions(+), 32 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 8047474b0..965300dcf 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -333,7 +333,7 @@ protected void postConnect() { int newFrequents = 0; for(int i=0; i < arrayReceivers.size(); i++){ for(int j=0; j < frequentsList.size(); j++){ - if(frequentsList.get(j).getUserNickname() == arrayReceivers.get(i)){ + if(frequentsList.get(j).getUserNickname().equals(arrayReceivers.get(i).toString())){ frequent = true; frequentsList.get(j).setScore(frequentsList.get(j).getScore() * 1.2); } @@ -350,11 +350,12 @@ protected void postConnect() { for(int i=0; i < frequentsList.size()-newFrequents; i++){ dbHelper.updateFrequentRecipient(frequentsList.get(i)); + Log.d(TAG, "frequent user updated, score = " + frequentsList.get(i).getScore()); } for(int i=frequentsList.size()-newFrequents; i < frequentsList.size(); i++){ - Log.d(TAG, "new frequent user"); dbHelper.insertFrequentRecipient(frequentsList.get(i)); + Log.d(TAG, "frequent user added = " + frequentsList.get(i).getScore()); } Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index becb32d97..c05e601da 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -68,6 +68,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene private boolean hideMenu = false; private long courseCode; private int numUsers; + private int numFrequents; private TextView frequentUsersTitle; private TextView frequentUsersText; private List frequentsList; @@ -80,6 +81,20 @@ protected void onCreate(Bundle savedInstanceState) { userFilters = new UsersList(); + arrayReceivers = getIntent().getStringArrayListExtra("receivers"); + arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); + arrayReceiversSurNames1 = getIntent().getStringArrayListExtra("receiversSurNames1"); + arrayReceiversSurNames2 = getIntent().getStringArrayListExtra("receiversSurNames2"); + arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); + //save the old receivers + oldReceivers = (ArrayList) arrayReceivers.clone(); + oldReceiversFirstNames = (ArrayList) arrayReceiversFirstNames.clone(); + oldReceiversSurNames1 = (ArrayList) arrayReceiversSurNames1.clone(); + oldReceiversSurNames2 = (ArrayList) arrayReceiversSurNames2.clone(); + oldPhotos = (ArrayList) arrayPhotos.clone(); + + search = ""; + //users list lvUsers = (ListView) findViewById(R.id.listItems); lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); @@ -98,14 +113,15 @@ protected void onCreate(Bundle savedInstanceState) { frequentUsers = new FrequentUsersList(); frequentUsersText = (TextView) findViewById(R.id.listText); - frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "", "score"); + frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "", "score DESC"); + numFrequents = frequentsList.size(); - if(frequentsList.size() == 0) { + if(numFrequents == 0) { frequentUsersText.setVisibility(View.VISIBLE); } else{ frequentUsersText.setVisibility(View.GONE); - for(int i=0; i parent, View view, int position, long id) } }); - arrayReceivers = getIntent().getStringArrayListExtra("receivers"); - arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); - arrayReceiversSurNames1 = getIntent().getStringArrayListExtra("receiversSurNames1"); - arrayReceiversSurNames2 = getIntent().getStringArrayListExtra("receiversSurNames2"); - arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); - //save the old receivers - oldReceivers = (ArrayList) arrayReceivers.clone(); - oldReceiversFirstNames = (ArrayList) arrayReceiversFirstNames.clone(); - oldReceiversSurNames1 = (ArrayList) arrayReceiversSurNames1.clone(); - oldReceiversSurNames2 = (ArrayList) arrayReceiversSurNames2.clone(); - oldPhotos = (ArrayList) arrayPhotos.clone(); - - search = ""; - setMETHOD_NAME("findUsers"); } @@ -216,6 +228,14 @@ public void onFocusChange(View v, boolean hasFocus) { else userFilters.getUsers().get(i).setCheckbox(false); } + + for(int i=0; i Date: Sun, 21 Aug 2016 13:46:51 +0200 Subject: [PATCH 082/103] Added no courses message to main menu --- .../java/es/ugr/swad/swadroid/SWADMain.java | 43 +++++++++++++------ .../modules/notifications/Notifications.java | 4 +- .../expandablelist_items_pulltorefresh.xml | 2 +- .../res/layout/list_items_pulltorefresh.xml | 2 +- SWADroid/src/main/res/layout/main.xml | 2 +- ...{birthday_layout.xml => notify_layout.xml} | 15 ++++--- SWADroid/src/main/res/values-es/strings.xml | 1 + SWADroid/src/main/res/values/colors.xml | 2 +- SWADroid/src/main/res/values/strings.xml | 1 + 9 files changed, 47 insertions(+), 25 deletions(-) rename SWADroid/src/main/res/layout/{birthday_layout.xml => notify_layout.xml} (69%) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 176777713..4a3c6a242 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -36,6 +36,7 @@ import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SimpleCursorAdapter; import android.widget.Spinner; @@ -117,8 +118,9 @@ public class SWADMain extends MenuExpandableListActivity { private boolean dBCleaned = false; - private LinearLayout mBirthdayLayout; - private TextView mBirthdayTextView; + private LinearLayout mNotifyLayout; + private TextView mNotifyTextView; + private ImageView mNotifyImageView; private ExpandableListView mExpandableListView; private TextExpandableListAdapter mExpandableListAdapter; private Spinner mCoursesSpinner; @@ -245,16 +247,30 @@ protected void onResume() { //If today is the user birthday, show birthday message if((Login.getLoggedUser() != null) && DateTimeUtils.isBirthday(Login.getLoggedUser().getUserBirthday())) { - mBirthdayTextView.setText(getString(R.string.birthdayMsg).replace( - Constants.USERNAME_TEMPLATE, Login.getLoggedUser().getUserFirstname())); - mBirthdayLayout.setVisibility(View.VISIBLE); + showBirthdayMessage(); + } else if ((listCourses == null) || listCourses.isEmpty()) { + showNoCoursesMessage(); } else { - mBirthdayLayout.setVisibility(View.GONE); + mNotifyLayout.setVisibility(View.GONE); } } SWADroidTracker.sendScreenView(getApplicationContext(), TAG); } + + private void showBirthdayMessage() { + mNotifyImageView.setImageResource(R.drawable.fabirthdaycake); + mNotifyImageView.setVisibility(View.VISIBLE); + mNotifyTextView.setText(getString(R.string.birthdayMsg).replace( + Constants.USERNAME_TEMPLATE, Login.getLoggedUser().getUserFirstname())); + mNotifyLayout.setVisibility(View.VISIBLE); + } + + private void showNoCoursesMessage() { + mNotifyImageView.setVisibility(View.GONE); + mNotifyTextView.setText(getString(R.string.noCoursesMsg)); + mNotifyLayout.setVisibility(View.VISIBLE); + } /** * Initializes application on first run @@ -347,17 +363,17 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } private void createSpinnerAdapter() { - listCourses = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES, null, "fullName"); + listCourses = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES, null, "shortName"); /* Cursor for database access */ - Cursor dbCursor = dbHelper.getDb().getCursor(DataBaseHelper.DB_TABLE_COURSES, null, "fullName"); + Cursor dbCursor = dbHelper.getDb().getCursor(DataBaseHelper.DB_TABLE_COURSES, null, "shortName"); startManagingCursor(dbCursor); if (listCourses.size() != 0) { SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, dbCursor, - new String[]{"fullName"}, + new String[]{"shortName"}, new int[]{android.R.id.text1}); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); @@ -490,7 +506,7 @@ private void createMenu() { * Creates menu when there are no courses available. This menu is common for students and teachers. */ private void createNoCourseMenu() { - if (currentRole == -1) { + if ((listCourses == null) || listCourses.isEmpty()) { clearMenu(); //Order: @@ -660,8 +676,9 @@ private boolean isUserOrPasswordEmpty() { private void initializeMainViews() { mExpandableListView = (ExpandableListView) findViewById(R.id.expandableList); - mBirthdayLayout = (LinearLayout) findViewById(R.id.birthday_layout); - mBirthdayTextView = (TextView) findViewById(R.id.birthdayTextView); + mNotifyLayout = (LinearLayout) findViewById(R.id.notify_layout); + mNotifyTextView = (TextView) findViewById(R.id.notifyTextView); + mNotifyImageView = (ImageView) findViewById(R.id.notifyImageView); View mProgressScreenView = findViewById(R.id.progress_screen); View mCoursesListView = findViewById(R.id.courses_list_view); mCoursesSpinner = (Spinner) this.findViewById(R.id.spinner); @@ -800,6 +817,8 @@ private HashMap getMenuItem(int resName, int resImage) { } private void clearMenu() { + mNotifyLayout.setVisibility(View.GONE); + mHeaderData.clear(); mChildData.clear(); mUsersData.clear(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java index 5e8e851b2..8d7f7e5e6 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/Notifications.java @@ -284,8 +284,8 @@ protected void onCreate(Bundle savedInstanceState) { refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container_expandablelist); list = (ExpandableListView) findViewById(R.id.expandablelist_pulltorefresh); emptyNotifTextView = (TextView) findViewById(R.id.list_item_title); - mBirthdayLayout = (LinearLayout) findViewById(R.id.birthday_layout); - mBirthdayTextView = (TextView) findViewById(R.id.birthdayTextView); + mBirthdayLayout = (LinearLayout) findViewById(R.id.notify_layout); + mBirthdayTextView = (TextView) findViewById(R.id.notifyTextView); groupItem = new ArrayList<>(); childItem = new ArrayList<>(); diff --git a/SWADroid/src/main/res/layout/expandablelist_items_pulltorefresh.xml b/SWADroid/src/main/res/layout/expandablelist_items_pulltorefresh.xml index dd184ece1..efae9c314 100644 --- a/SWADroid/src/main/res/layout/expandablelist_items_pulltorefresh.xml +++ b/SWADroid/src/main/res/layout/expandablelist_items_pulltorefresh.xml @@ -20,7 +20,7 @@ android:layout_height="match_parent" android:orientation="vertical" > - + diff --git a/SWADroid/src/main/res/layout/list_items_pulltorefresh.xml b/SWADroid/src/main/res/layout/list_items_pulltorefresh.xml index 1c1c32481..1caf689c8 100644 --- a/SWADroid/src/main/res/layout/list_items_pulltorefresh.xml +++ b/SWADroid/src/main/res/layout/list_items_pulltorefresh.xml @@ -18,7 +18,7 @@ android:layout_height="match_parent" android:orientation="vertical" > - + diff --git a/SWADroid/src/main/res/layout/main.xml b/SWADroid/src/main/res/layout/main.xml index e09034b08..4397fa79f 100644 --- a/SWADroid/src/main/res/layout/main.xml +++ b/SWADroid/src/main/res/layout/main.xml @@ -19,7 +19,7 @@ android:layout_height="wrap_content" android:prompt="@string/selectCourseTitle" /> - + + android:layout_marginStart="5dip" + android:scaleType="centerCrop" + android:visibility="gone"/> diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 2d12398c4..3a1cb4b83 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -316,5 +316,6 @@ No hay documentos disponibles Marcando todas las notificaciones como leídas… Sincronizando… + Es necesario estar inscrito en al menos una asignatura para poder ver todas las funciones. Cuando esté inscrito en una asignatura, pulse el botón refrescar en la action bar para actualizar el menú principal. \ No newline at end of file diff --git a/SWADroid/src/main/res/values/colors.xml b/SWADroid/src/main/res/values/colors.xml index 1bc3730ae..cb9eb546d 100644 --- a/SWADroid/src/main/res/values/colors.xml +++ b/SWADroid/src/main/res/values/colors.xml @@ -35,7 +35,7 @@ #ffff0000 #60000000 #c0ffff00 - #CCEEFF + #CCEEFF #C1C1C1 #515151 #D1D0CE diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 850fc2c0d..5f73ce185 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -326,5 +326,6 @@ No documents currently available Marking all notifications as read… Syncronizing… + You must be enrolled in at least one subject to see all functions. When enrolled in a subject, press the refresh button in the action bar to update the main menu. \ No newline at end of file From e00e1a9a89c44d35af2958e59b15614498127dd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 21 Aug 2016 14:43:27 +0200 Subject: [PATCH 083/103] cleaning code --- .../swadroid/database/DataBaseHelper.java | 55 +++++----- .../ugr/swad/swadroid/model/FrequentUser.java | 9 +- .../ugr/swad/swadroid/model/UserFilter.java | 27 ++++- .../modules/messages/FrequentUsersList.java | 1 - .../swadroid/modules/messages/Messages.java | 16 ++- .../modules/messages/SearchUsers.java | 101 ++++++++++++++++-- .../swadroid/modules/messages/UsersList.java | 6 +- 7 files changed, 164 insertions(+), 51 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index f6bbdc4bd..f92a2968d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -1401,6 +1401,22 @@ public void insertEventCourse(long eventCode, long crsCod) { ent.save(); } + /** + * Inserts a new Frequent Recipient + * + * @param user the frequent recipient to insert in the list + */ + public void insertFrequentRecipient(FrequentUser user) { + Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + ent.setValue("nicknameRecipient", user.getUserNickname()); + ent.setValue("surname1Recipient", user.getUserSurname1()); + ent.setValue("surname2Recipient", user.getUserSurname2()); + ent.setValue("firstnameRecipient", user.getUserFirstname()); + ent.setValue("photoRecipient", user.getUserPhoto()); + ent.setValue("score", user.getScore()); + ent.save(); + } + /** * Updates a course in database * @@ -1827,6 +1843,21 @@ public boolean updateGroup(long groupCode, long courseCode, Group currentGroup, return false; } + /** + * Updates a Frequent Recipient with the new score + * + * @param nickname the identifier of recipient + * @param score the score to order the frequent recipients list + */ + public void updateFrequentRecipient(String nickname, Double score) { + List rows = db.getEntityList(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient = '" + nickname + "'"); + + for(Entity ent : rows) { + ent.setValue("score", score); + ent.save(); + } + } + /** * Removes a User from database * @@ -2379,28 +2410,4 @@ public static void setDbCleaned(boolean state) { dbCleaned = state; } - public void insertFrequentRecipient(FrequentUser user) { - Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); - ent.setValue("nicknameRecipient", user.getUserNickname()); - ent.setValue("surname1Recipient", user.getUserSurname1()); - ent.setValue("surname2Recipient", user.getUserSurname2()); - ent.setValue("firstnameRecipient", user.getUserFirstname()); - ent.setValue("photoRecipient", user.getUserPhoto()); - ent.setValue("score", user.getScore()); - ent.save(); - } - - public void updateFrequentRecipient(FrequentUser actual) { - List rows = db.getEntityList(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient = '" + actual.getUserNickname() + "'"); - - for(Entity ent : rows) { - ent.setValue("nicknameRecipient", actual.getUserNickname()); - ent.setValue("surname1Recipient", actual.getUserSurname1()); - ent.setValue("surname2Recipient", actual.getUserSurname2()); - ent.setValue("firstnameRecipient", actual.getUserFirstname()); - ent.setValue("photoRecipient", actual.getUserPhoto()); - ent.setValue("score", actual.getScore()); - ent.save(); - } - } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java index 0a13f721f..3dd2ff0af 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java @@ -20,8 +20,6 @@ package es.ugr.swad.swadroid.model; import org.ksoap2.serialization.PropertyInfo; - -import java.text.ParseException; import java.util.Hashtable; /** @@ -50,13 +48,15 @@ public class FrequentUser extends Model { * Full path where user's picture is stored. */ private String userPhoto; + /** + * Is a receiver?. + */ + private boolean selectedCheckbox; /** * Score of frequent recipient */ private double score; - private boolean selectedCheckbox; - /** * Constructor. * @@ -65,6 +65,7 @@ public class FrequentUser extends Model { * @param userSurname2 User last surname. * @param userFirstname User name. * @param userPhoto Full path where user's picture is stored. + * @param selectedCheckbox Is a receiver?. * @param score Score of frequent recipient */ public FrequentUser(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox, double score) { diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index 5a6d11259..e9753ba6b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -19,14 +19,16 @@ package es.ugr.swad.swadroid.model; -import java.text.ParseException; +import org.ksoap2.serialization.PropertyInfo; + +import java.util.Hashtable; /** * User data. * * @author Rubén Martín Hidalgo */ -public class UserFilter { +public class UserFilter extends Model{ /** * User identifier. */ @@ -62,7 +64,7 @@ public class UserFilter { * @param userPhoto Full path where user's picture is stored. * @param selectedCheckbox Is a receiver?. */ - public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox) throws ParseException { + public UserFilter(String userNickname, String userSurname1, String userSurname2, String userFirstname, String userPhoto, boolean selectedCheckbox){ this.userNickname = userNickname; this.userSurname1 = userSurname1; this.userSurname2 = userSurname2; @@ -179,4 +181,23 @@ public void setCheckbox(boolean selected){ this.selectedCheckbox = selected; } + @Override + public Object getProperty(int index) { + return null; + } + + @Override + public int getPropertyCount() { + return 0; + } + + @Override + public void setProperty(int index, Object value) { + + } + + @Override + public void getPropertyInfo(int index, Hashtable properties, PropertyInfo info) { + + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java index 93f13c876..105b1eed2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.List; - import es.ugr.swad.swadroid.model.FrequentUser; /** diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 965300dcf..c5767ac5d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -84,12 +84,16 @@ public class Messages extends Module { */ private ArrayList arrayReceivers; /** - * Array of names + * Array of firstnames */ private ArrayList arrayReceiversFirstNames; - + /** + * Array of first surnames + */ private ArrayList arrayReceiversSurNames1; - + /** + * Array of second surnames + */ private ArrayList arrayReceiversSurNames2; /** * Array of photos @@ -147,7 +151,9 @@ public class Messages extends Module { * Save if the list is expanded */ private boolean showAll; - + /** + * List where requests of database are saved + */ private List frequentsList; /* (non-Javadoc) @@ -349,7 +355,7 @@ protected void postConnect() { } for(int i=0; i < frequentsList.size()-newFrequents; i++){ - dbHelper.updateFrequentRecipient(frequentsList.get(i)); + dbHelper.updateFrequentRecipient(frequentsList.get(i).getUserNickname(), frequentsList.get(i).getScore()); Log.d(TAG, "frequent user updated, score = " + frequentsList.get(i).getScore()); } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index c05e601da..787953503 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -42,35 +42,117 @@ * Created by Rubén Martín Hidalgo on 17/07/2016. */ public class SearchUsers extends Module implements SearchView.OnQueryTextListener { - + /** + * SearchUsers tag name for Logcat + */ private static final String TAG = Constants.APP_TAG + " SearchUsers"; - + /** + * SearchView to search users field + */ private SearchView searchView; + /** + * Messages tag name for Logcat + */ private MenuItem searchItem; + /** + * List of users + */ private static ListView lvUsers; + /** + * Current text in searchView + */ private String search; + /** + * Array of nicknames + */ private ArrayList arrayReceivers; + /** + * Array of firstnames + */ private ArrayList arrayReceiversFirstNames; + /** + * Array of first surnames + */ private ArrayList arrayReceiversSurNames1; + /** + * Array of second surnames + */ private ArrayList arrayReceiversSurNames2; + /** + * Array of photos + */ private ArrayList arrayPhotos; + /** + * Array of old nicknames. It's used when we discard the users added + */ private ArrayList oldReceivers; + /** + * Array of old firstnames + */ private ArrayList oldReceiversFirstNames; + /** + * Array of old first surnames + */ private ArrayList oldReceiversSurNames1; + /** + * Array of old second surnames + */ private ArrayList oldReceiversSurNames2; + /** + * Array of old photos + */ private ArrayList oldPhotos; + /** + * Adapter to show UserFilter in list + */ private UsersAdapter adapter; + /** + * Adapter to show FrequentUser in list + */ private FrequentUsersAdapter frequentAdapter; + /** + * Checkbox of every user + */ private CheckBox checkbox; + /** + * List of UserFilter + */ private UsersList userFilters; + /** + * List of FrequentUser + */ private FrequentUsersList frequentUsers; + /** + * Loading screen + */ private LinearLayout progressLayout; + /** + * True if buttons of ActionBar are hidden + */ private boolean hideMenu = false; + /** + * Identifier of course to search users inside + */ private long courseCode; + /** + * Number of users in user list + */ private int numUsers; + /** + * Number of frequent users + */ private int numFrequents; + /** + * Title of frequent users + */ private TextView frequentUsersTitle; + /** + * Text to inform that there aren't frequent users + */ private TextView frequentUsersText; + /** + * List where requests of database are saved + */ private List frequentsList; @Override @@ -80,7 +162,7 @@ protected void onCreate(Bundle savedInstanceState) { setTitle(R.string.actionBarAddUser); userFilters = new UsersList(); - + frequentUsers = new FrequentUsersList(); arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); arrayReceiversSurNames1 = getIntent().getStringArrayListExtra("receiversSurNames1"); @@ -99,10 +181,12 @@ protected void onCreate(Bundle savedInstanceState) { lvUsers = (ListView) findViewById(R.id.listItems); lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); + //loading screen progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); TextView textLoading = (TextView) findViewById(R.id.text_progress); textLoading.setText(R.string.loadingMsg); + //frequent users screen frequentUsersTitle = (TextView) findViewById(R.id.listTitle); //font title of frequent users in bold @@ -110,7 +194,6 @@ protected void onCreate(Bundle savedInstanceState) { title.setSpan(new StyleSpan(Typeface.BOLD), 0, title.length(), 0); frequentUsersTitle.setHint(title); - frequentUsers = new FrequentUsersList(); frequentUsersText = (TextView) findViewById(R.id.listText); frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "", "score DESC"); @@ -142,8 +225,6 @@ protected void onCreate(Bundle savedInstanceState) { frequentAdapter = new FrequentUsersAdapter(getBaseContext(), frequentUsers.getUsers()); lvUsers.setAdapter(frequentAdapter); lvUsers.setVisibility(View.VISIBLE); - - } //checkbox is checked when the row of an user is clicked @@ -243,12 +324,15 @@ public void onFocusChange(View v, boolean hasFocus) { return super.onCreateOptionsMenu(menu); } + /* + * send receivers to parent activity + */ private void sendReceivers(boolean send){ hideMenu = true; invalidateOptionsMenu(); Intent intent = new Intent(); if(send){ - intent.putExtra("receivers", arrayReceivers); // send receivers to parent activity + intent.putExtra("receivers", arrayReceivers); intent.putExtra("receiversFirstNames", arrayReceiversFirstNames); intent.putExtra("receiversSurNames1", arrayReceiversSurNames1); intent.putExtra("receiversSurNames2", arrayReceiversSurNames2); @@ -272,7 +356,7 @@ public boolean onOptionsItemSelected(MenuItem item) { if(!search.equals("")) { onQueryTextSubmit(search); //find users with string search } - else { + else { // shows frequent users if(numFrequents == 0) { lvUsers.setVisibility(View.GONE); frequentUsersText.setVisibility(View.VISIBLE); @@ -485,7 +569,6 @@ public void onClick(DialogInterface dialog, int item) { builder.setNegativeButton(getString(R.string.cancelMsg), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { - // no need to write anything here just implement this interface into this button } }); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index 77690059d..d9471c976 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -6,7 +6,6 @@ import java.util.ArrayList; import java.util.List; - import es.ugr.swad.swadroid.model.UserFilter; /** @@ -19,8 +18,5 @@ public void saveUser(UserFilter user) { users.add(user); } - public List getUsers() { - - return users; - } + public List getUsers() { return users; } } From 0456b8461a047ec5c2ba8c047ec5cf910f557247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 21 Aug 2016 19:06:15 +0200 Subject: [PATCH 084/103] frequent recipient can be removed, and listener of users list has been corrected --- .../swadroid/modules/messages/Messages.java | 37 ++++++-- .../modules/messages/SearchUsers.java | 89 +++++++++++-------- 2 files changed, 79 insertions(+), 47 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index c5767ac5d..4fd0d1b24 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -67,6 +67,20 @@ public class Messages extends Module { * Messages tag name for Logcat */ private static final String TAG = Constants.APP_TAG + " Messages"; + + /** + * Constants to manage the frequents recipients + */ + private static final Double MIN_SCORE = 0.5; + + private static final Double MAX_SCORE = 20.0; + + private static final Double INITIAL_SCORE = 1.0; + + private static final Double INCREASE_FACTOR = 1.2; + + private static final Double DECREASE_FACTOR = 0.95; + /** * Message code */ @@ -337,28 +351,35 @@ protected void postConnect() { frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); boolean frequent = false; int newFrequents = 0; + double score; for(int i=0; i < arrayReceivers.size(); i++){ for(int j=0; j < frequentsList.size(); j++){ if(frequentsList.get(j).getUserNickname().equals(arrayReceivers.get(i).toString())){ frequent = true; - frequentsList.get(j).setScore(frequentsList.get(j).getScore() * 1.2); + score = frequentsList.get(j).getScore() * INCREASE_FACTOR; + if(score > MAX_SCORE) + score = MAX_SCORE; + dbHelper.updateFrequentRecipient(frequentsList.get(j).getUserNickname(), score); + Log.d(TAG, "frequent user updated, score = " + score); } else{ - frequentsList.get(j).setScore(frequentsList.get(j).getScore() * 0.95); + score = frequentsList.get(j).getScore() * DECREASE_FACTOR; + if(score < MIN_SCORE) { + dbHelper.removeAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient", frequentsList.get(j).getUserNickname()); + Log.d(TAG, "frequent user removed"); + }else { + dbHelper.updateFrequentRecipient(frequentsList.get(j).getUserNickname(), score); + Log.d(TAG, "frequent user updated, score = " + score); + } } } if(frequent == false){ - frequentsList.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, 1)); + frequentsList.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); newFrequents++; } frequent = false; } - for(int i=0; i < frequentsList.size()-newFrequents; i++){ - dbHelper.updateFrequentRecipient(frequentsList.get(i).getUserNickname(), frequentsList.get(i).getScore()); - Log.d(TAG, "frequent user updated, score = " + frequentsList.get(i).getScore()); - } - for(int i=frequentsList.size()-newFrequents; i < frequentsList.size(); i++){ dbHelper.insertFrequentRecipient(frequentsList.get(i)); Log.d(TAG, "frequent user added = " + frequentsList.get(i).getScore()); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 787953503..db0cb2083 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -228,31 +228,7 @@ protected void onCreate(Bundle savedInstanceState) { } //checkbox is checked when the row of an user is clicked - lvUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - checkbox = (CheckBox) view.findViewById(R.id.check); - if (checkbox.isChecked()){ - checkbox.setChecked(false); - int index = arrayReceivers.indexOf(frequentUsers.getUsers().get(position).getUserNickname()); - arrayReceivers.remove(index); - arrayReceiversFirstNames.remove(index); - arrayReceiversSurNames1.remove(index); - arrayReceiversSurNames2.remove(index); - arrayPhotos.remove(index); - //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); - } - else{ - checkbox.setChecked(true); - arrayReceivers.add(frequentUsers.getUsers().get(position).getUserNickname()); - arrayReceiversFirstNames.add(frequentUsers.getUsers().get(position).getUserFirstname()); - arrayReceiversSurNames1.add(frequentUsers.getUsers().get(position).getUserSurname1()); - arrayReceiversSurNames2.add(frequentUsers.getUsers().get(position).getUserSurname2()); - arrayPhotos.add(frequentUsers.getUsers().get(position).getUserPhoto()); - //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); - } - } - }); + listenerFrequentUsers(); setMETHOD_NAME("findUsers"); } @@ -374,6 +350,9 @@ public boolean onOptionsItemSelected(MenuItem item) { frequentAdapter = new FrequentUsersAdapter(getBaseContext(), frequentUsers.getUsers()); lvUsers.setAdapter(frequentAdapter); lvUsers.setVisibility(View.VISIBLE); + + //checkbox is checked when the row of an user is clicked + listenerFrequentUsers(); } } return true; @@ -511,6 +490,26 @@ protected void postConnect() { lvUsers.setVisibility(View.VISIBLE); //checkbox is checked when the row of an user is clicked + listenerUserList(); + + //toasts to inform about found users + if (numUsers == 0){ + Toast.makeText(SearchUsers.this, R.string.users_NOTfound, Toast.LENGTH_SHORT).show(); + } + else if (numUsers == 1) { + Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.user_found), Toast.LENGTH_SHORT).show(); + } + else{ + Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); + } + } + + @Override + protected void onError() { + + } + + private void listenerUserList() { lvUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { @@ -536,22 +535,34 @@ public void onItemClick(AdapterView parent, View view, int position, long id) } } }); - - //toasts to inform about found users - if (numUsers == 0){ - Toast.makeText(SearchUsers.this, R.string.users_NOTfound, Toast.LENGTH_SHORT).show(); - } - else if (numUsers == 1) { - Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.user_found), Toast.LENGTH_SHORT).show(); - } - else{ - Toast.makeText(SearchUsers.this, String.valueOf(numUsers) + " " + getResources().getString(R.string.users_found), Toast.LENGTH_SHORT).show(); - } } - @Override - protected void onError() { - + private void listenerFrequentUsers() { + lvUsers.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + checkbox = (CheckBox) view.findViewById(R.id.check); + if (checkbox.isChecked()){ + checkbox.setChecked(false); + int index = arrayReceivers.indexOf(frequentUsers.getUsers().get(position).getUserNickname()); + arrayReceivers.remove(index); + arrayReceiversFirstNames.remove(index); + arrayReceiversSurNames1.remove(index); + arrayReceiversSurNames2.remove(index); + arrayPhotos.remove(index); + //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); + } + else{ + checkbox.setChecked(true); + arrayReceivers.add(frequentUsers.getUsers().get(position).getUserNickname()); + arrayReceiversFirstNames.add(frequentUsers.getUsers().get(position).getUserFirstname()); + arrayReceiversSurNames1.add(frequentUsers.getUsers().get(position).getUserSurname1()); + arrayReceiversSurNames2.add(frequentUsers.getUsers().get(position).getUserSurname2()); + arrayPhotos.add(frequentUsers.getUsers().get(position).getUserPhoto()); + //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); + } + } + }); } private void showSearchDialog(){ From a7ba54cd42dd2033ff2aaf8ea91fa0d93d4334e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 21 Aug 2016 19:23:34 +0200 Subject: [PATCH 085/103] adding strings --- SWADroid/src/main/res/values-es/strings.xml | 342 +++++++++++++++++++ SWADroid/src/main/res/values/strings.xml | 352 ++++++++++++++++++++ 2 files changed, 694 insertions(+) create mode 100644 SWADroid/src/main/res/values-es/strings.xml create mode 100644 SWADroid/src/main/res/values/strings.xml diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml new file mode 100644 index 000000000..2dd8ce5ca --- /dev/null +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -0,0 +1,342 @@ + + + + SWADroid + Servidor + Cerrar sesión en + Cerrar Sesión + Servidor (sin http://) + Servidor + Conectar + Notificaciones + Asignaturas + Tests + Enviar mensaje + Publicar aviso + Generar código QR + ERROR + ¿Está usted seguro? + Cerrar + Configuración + Datos del usuario + Contraseña + Contraseña + Contraseña + Configuración + Compartir SWADroid + Calificar + Limpiar base de datos + Acerca de + Versión de la aplicación + Autores + Identificación + Recuperación de contraseña + Conectando… + Conectando… + Asignaturas + Obteniendo asignaturas… + Notificaciones + Obteniendo nuevas notificaciones… + No se ha descargado ninguna notificación.\n\nPara descargar las + notificaciones más recientes deslice este mensaje hacia abajo. + Tests + Sincronizando preguntas de test.\n\nDependiendo del número de + preguntas a sincronizar, el procesamiento de los datos puede tardar unos minutos.\n\nPor favor, + espere… + Ha ocurrido un error durante la ejecución de la + operación + No hay conexión + Convocatoria de examen + Calificaciones + Aviso + Mensaje + Mensaje en un foro + Respuesta en foro + Mensajes + Evaluación + Actividad + Encuesta + Documento + Documento compartido + Inscripción + Petición de inscripción + Notificación desconocida + Sin asunto + Sin contenido + + No + Verdadero + Falso + Aceptar + Cancelar + Todos + Seleccione asignatura + No hay preguntas de test disponibles para esta asignatura + El profesor de esta asignatura no permite la descarga de las + preguntas de test + Preguntas de test sincronizadas + No se ha descargado ninguna pregunta de test para esta asignatura + Antes de realizar un test debe descargar las preguntas de test de al menos una + asignatura + No hay ninguna pregunta que se ajuste a los criterios + especificados + Indique el número de preguntas del test + Seleccione los descriptores que desea incluir en el test + Debe seleccionar al menos un descriptor + Seleccione los tipos de respuesta que desea incluir en el test + Debe seleccionar al menos un tipo de respuesta + Corregir + Puntuación + Ver totales + Ver detalles + El profesor no permite ver los detalles + El profesor no permite ver los resultados del test + Usuario o contraseña incorrectos + Error en respuesta del servidor + Error interno del servidor + Clave de aplicación incorrecta. Por favor, contacte con el desarrollador. + Error durante la conexión con el servidor + Tiempo de espera agotado intentando conectar con el + servidor + SWAD se encuentra en mantenimiento en estos momentos. + Por favor, inténtelo más tarde + Enviando mensaje… + Debe indicar al menos un destinatario + Debe introducir el asunto del mensaje + Destinatarios (separados por comas) + Asunto + Mensaje + Aviso + Publicando aviso… + Aviso publicado + Debe introducir el contenido del aviso + Enviar + Seleccionar Destinatarios + Filtrar Destinatarios + Filtrar + Cancel + Todos los datos de la base de datos han sido borrados + Todos los datos de la base de datos serán borrados.\n\n + Se borrarán las notificaciones, tests, información de grupos y listados de usuarios.\n\n + ¿Está seguro de que desea borrar todos los datos de la base de datos? + Estoy usando #SWADroid en mi Android para acceder a la + plataforma de teleformación SWAD.\nObtenlo gratis aquí: + https://play.google.com/store/apps/details?id=es.ugr.swad.swadroid + Twitter + Facebook + Google+ + Blog + Google Play + Sincronización + Frecuencia de sincronización + Frecuencia de sincronización de las notificaciones + Sincronización automática + Habilitar la sincronización automática + Notificaciones + Límite de notificaciones + Seleccione el número máximo de notificaciones que serán almacenadas: + notificaciones + nuevas notificaciones + Enviado desde + Pulse sobre la notificación para ver la calificación. + Pulse aquí para conseguir sus asignaturas + Usuarios + Documentos + Pulse aquí para abrir el archivo + Archivos compartidos + Para esta funcionalidad se necesita conexión a Internet + Asignatura + Formato + Tipo + Tiempo + Metadata + Coloque un código QR o un código de barras en el interior del rectángulo del visor para + escanear. + Lo sentimos, la cámara de Android ha encontrado un problema. Es posible que + necesite reiniciar el dispositivo. + OK + Alumno de esta asignatura + Alumno de otra asignatura + Nombre + DNI + Código no válido + No existen datos de este alumno + No se ha detectado ningún código QR válido + No hay nuevas notificaciones + Muestra la carpeta inicial + Muestra la carpeta superior a la actual + Grupo + Descargando… + completo + Tamaño: + Fecha: + Licencia: + Subido por: + Descargar + Tarjeta SD no disponible + La tarjeta SD está ocupada ahora mismo. Para permitir descargas, selecciona “Desactiva + almacenamiento USB” en la notificación + Vacantes + Nº de estudiantes + Máx. estudiantes + Grupos + No se ha descargado ningún evento.\n\nPara descargar los + eventos más recientes deslice este mensaje hacia abajo. + Foto del estudiante + El dispositivo no dispone de cámara + Guardar + No existen grupos para la asignatura seleccionada + ¿Seguro que desea salir sin guardar los cambios? + Seleccione grupo + Envío a SWAD: + Pendiente + Pasar lista + Usuarios + Sincronizando usuarios.\n\nDependiendo del número de + usuarios a sincronizar, el procesamiento de los datos puede tardar unos minutos.\n\nPor favor, + espere… + Usuarios + Actualizar + Nueva + Escanear QR + Modo manual + Evento de pasar lista + : + Conseguir tipos de grupo + Apertura: + No se han creado grupos dentro de la asignatura + Resultado de la inscripción + Todas las inscripciones se han realizado con éxito. Por favor, compruebe que + está inscrito en los grupos deseados + Confirmar inscripciones solicitadas + ¿Seguro que quiere inscribirse en los grupos seleccionados? + Lo sentimos pero la inscripción en los grupos seleccionados no se pudo realizar + Obteniendo tipos de grupo…\nPor favor, espere… + Obteniendo grupos…\nPor favor, espere… + Tipos de grupos + Grupos + Enviando inscripción a grupos… + Inscripción a grupos + sin límite + Problema en descarga + Lo sentimos. La descarga fue interrumpida. Inténtelo de nuevo + Descarga completa + Desconocido + Seleccione zona + Archivo: + Esta función necesita conexión. + No se puede abrir este archivo. + Información de contacto + Dirección de correo electrónico + Coordenadas geográficas + Número de teléfono + Dirección SMS + Texto + Última sincronización + Nunca + Sonido + Activar/desactivar el sonido de las alertas de nuevas notificaciones + Vibración + Activar/desactivar la vibración de las alertas de nuevas notificaciones + Led + Activar/desactivar los indicadores luminosos de las alertas de nuevas notificaciones + Historial de cambios + Información + Introducción + FAQs + Enlaces + Bibliografía + Programa de Prácticas + Programa de Teoría + Guía Docente + Sistema de Evaluación + Obteniendo información…\nPor favor, espere… + Información + Información no disponible + La contraseña de SWAD tiene al menos 8 caracteres alfanuméricos + Recuerda que debes introducir la contraseña de SWAD, no la de Acceso identificado (PRADO) + Recuerda que la contraseña de SWAD debe tener al menos 8 caracteres alfanuméricos + El certificado del servidor no es válido. Por favor, contacte con el administrador de SWAD + Marcar todas como leidas + Responder + Leídas + No leídas + Actualizar + Guardar + Agregar usuarios + Filtrar usuarios + Todo + Profesores + Alumnos + No hay ninguna aplicación registrada para abrir el tipo de archivo seleccionado. + ¡Feliz cumpleaños, {userName}! + Debe definir un apodo en SWAD + Eventos + eventos actualizados + Sincronización de eventos.\n\nDependiendo del número de eventos a sincronizar, el procesamiento de los datos puede tardar varios minutos.\n\nPor favor, espere… + No hay eventos en esta asignatura + Evento + usuarios actualizados + No hay usuarios en este evento + Debe marcar al menos un usuario + No se ha descargado ningún usuario.\n\nPara descargar los + usuarios más recientes deslice este mensaje hacia abajo. + Error al enviar las asistencias + Por favor, presione ATRÁS de nuevo para salir + Cargando… + Limpiar usuariosEl listado de usuarios será eliminado localmente.\n\n + ¿Está seguro de que quiere eliminar localmente el listado de usuarios? + Todos los usuarios marcados como ausentes + Esta función requiere Android 3.0 (Honeycomb) o superior + Hay eventos con cambios pendientes de enviar al servidor. Si actualiza el listado de eventos puede perder los cambios que no haya enviado.\n\n¿Está seguro de que quiere actualizar el listado de eventos? + Nuevo seguidor + Mensaje enviado + Calificaciones + Calificaciones + Obteniendo calificaciones…\nPor favor, espere… + Crear cuenta + \@apodo + Correo electrónico + Cuenta creada correctamente + Creando cuenta… + Apodo no válido./nEl apodo debe tener la sintaxis \@apodo + El apodo ya está siendo utilizado por otro usuario + Correo electrónico no válido + El correo electrónico ya está siendo utilizado por otro usuario + Contraseña no válida. Debe contener al menos 6 caracteres alfanuméricos + El apodo debe tener la sintaxis \@apodo + Otro + Debe introducir el servidor + Nuevo comentario a mis mensajes sociales + Nuevo favorito a mis mensajes sociales + Nueva compartición de mis mensajes sociales + Nueva mención + No hay calificaciones disponibles o el DNI del estudiante no ha sido verificado por el profesor + No hay calificaciones disponibles + No hay documentos disponibles + Marcando todas las notificaciones como leídas… + Sincronizando… + Es necesario estar inscrito en al menos una asignatura para poder ver todas las funciones. Cuando esté inscrito en una asignatura, pulse el botón refrescar en la action bar para actualizar el menú principal. + Buscar + Buscar usuario + usuarios encontrados + usuario encontrado + No se encontraron usuarios + ¿Dónde desea buscar? + En + En toda la plataforma + Introduzca un texto más largo + Va a cancelar el envío del mensaje + Va a descartar los destinatarios seleccionados + ¿Quiere quitar a #nameUser# de la lista de destinatarios? + Usuario añadido + Usuario eliminado + Ver todos + Ver menos + Confirmar + Descartar + Usuarios frecuentes + No hay usuarios frecuentes + Responder mensaje + Principal + \ No newline at end of file diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml new file mode 100644 index 000000000..919de0a75 --- /dev/null +++ b/SWADroid/src/main/res/values/strings.xml @@ -0,0 +1,352 @@ + + + + SWADroid + Server + Log Out of + Log Out + Server (without http://) + Server + Login + Notifications + NotificationsMarkAsRead + Courses + Tests + Send message + Publish notice + Generate QR code + ERROR + Are you sure? + Close + Preferences + User data + Password + Password + Password + Preferences + Share SWADroid + Rate + Clean database + About + Application version + Authors + Login + Connecting… + Recover password + Connecting… + Courses + Retrieving courses… + Notifications + Retrieving new notifications… + Did not download any notification.\n\nTo download most recent + notifications slide down this message. + Tests + Synchronizing test questions.\n\nDepending on the number of + questions to synchronize, the data processing can take several minutes.\n\nPlease wait… + An error occurred during the execution of the + operation + No connection found + Exam announcement + Marks file + Notice + Message + Forum message + Forum reply + Messages + Evaluation + Assignment + Survey + Document + Shared document + Enrollment + Enrollment request + Unknown notification + No subject + No content + Yes + No + True + False + OK + Cancel + All + Select course + There are no questions available for this course + The teacher does not allows the questions download + Questions downloaded successfully + Not downloaded any test question for this course + Before performing a test you should download the test questions for at least + one course + There is no question that meets the specified + criteria + Indicate the number of test questions + Select the tags that will be included in the test + You must select at least one tag + Select the answer types that will be included in the test + You must select at least one answer type + Evaluate + Score + Show totals + Show details + The teacher does not allow to see the details + The teacher does not allow to see the results + Username or password incorrect + Error in server response + Internal server error + Unknown application key. Please contact the developer + Error while connecting to server + Timeout trying to connect to the server + SWAD is under maintenance right now. Please try again later + Sending message… + Message sent successfully + You must specify at least one recipient + You must enter the subject of the message + Receivers (separated by comma) + Subject + Message + Notice + Publishing notice… + Notice published + You must enter the contents of the notice + Send + Select Receivers + Filter Receivers + Filter + Cancel + The database has been cleaned + All data in the database will be deleted.\n\n + Notifications, tests, group information and lists of users will be deleted.\n\n + Are you sure you want to delete all data in the database? + I\'m using #SWADroid in my Android mobile for access to + the e-learning platform SWAD.\nGet it for free here: + https://play.google.com/store/apps/details?id=es.ugr.swad.swadroid + market://details?id=es.ugr.swad.swadroid + http://goo.gl/Wgo1y + https://twitter.com/#!/SWADroid + https://www.facebook.com/SWADroid + http://goo.gl/kuezQ + http://swadroid.wordpress.com + \@SWADroid + Twitter + Facebook + Google+ + Blog + Google Play + Synchronization + Synchronization frecuency + Synchronization frecuency of notifications + prefSyncTime + Auto Sync + Enable auto sync + prefSyncEnable + Notifications + Notifications limit + Select the max number of notifications to be stored: + notifications + prefNotifLimit + new notifications + Sent from + Click on the notification to view the mark. + Click here to get your courses + Users + Documents + Click here to open the file + Shared files + Internet connection is required for this functionality + Course + Format + Type + Time + Metadata + Place a QR code or barcode inside the viewfinder rectangle to scan it. + Sorry, the Android camera encountered a problem. You may need to restart the + device. + OK + Student of this course + Student of another course + Name + ID + Invalid code + No data on this student + Not detect any valid QR code + There are no new notifications + Shows home folder + Shows upper folder + Group + Downloading… + complete + Size: + Date: + Uploaded by: + License: + Download + SD card unavailable + The SD card is busy. To allow downloads, select “Turn off USB storage” in the + notification + Vacants + No. of students + Max. students + Groups + There are no events in this course + events updated + Did not download any event.\n\nTo download most recent + events slide down this message. + Photo of student + The device has no camera + Save + Retrieving groups…\n\nPlease wait… + Groups + No groups for selected course + Are you sure you want to exit without saving changes? + Select group + Sending to SWAD: + Pending + Rollcall + Users + Synchronizing users.\n\nDepending on the number of + users to synchronize, the data processing can take several minutes.\n\nPlease wait… + Users + Synchronizing events.\n\nDepending on the number of + events to synchronize, the data processing can take several minutes.\n\nPlease wait… + Events + Update + New + Scan QR + Manual mode + Rollcall event + Retrieving group types…\nPlease wait… + Group Types + : + Group Types + Sending enrollment into groups… + Enrolment into groups + Opening: + No groups have been created in the course + Result on the enrollment + All the enrollments were made successfully. Please check that you are enrolled + in your wished groups + Confirm requested enrollments + Are you sure, that you want to enroll on the selected groups? + OK + Sorry but the enrollment on the selected groups could not be performed + unlimited + Download problem + Sorry. The download of file was interrupted. Try again + Download completed + Unknown + Select zone + File: + This function needs connection. + No application can open this file + Contact info + Email address + Geographic coordinates + Phone number + SMS address + Plain text + Last synchronization + Never + prefNotifSoundEnable + prefNotifVibrateEnable + prefNotifLightsEnable + Sound + Enable/disable sound alerts for new notifications + Vibration + Enable/disable vibration alerts for new notifications + Led + Enable/disable led alerts for new notifications + Changelog + Information + Introduction + FAQs + Links + Bibliography + Practices Program + Theory Program + Teaching Guide + Assessment + Getting information…\nWait, please… + Information + Information unavailable + SWAD\'s password is at least 8 alphanumeric characters long + Remember you must enter SWAD\'s password, not e-Administration (PRADO) + SWAD\'s password is at least 8 alphanumeric characters long + The server certificate is invalid. Please contact SWAD admininstrator + Mark all as read + Reply + Seen + Not seen + Refresh + Save + Add users + Filter users + All + Teachers + Students + There are no registered applications to open the selected file type. + Happy birthday, {userName}! + You must set a nickname in SWAD + Event + users updated + There are no users in this event + You must check almost one user + Did not download any user.\n\nTo download most recent + users slide down this message. + Please click BACK again to exit + Error sending attendances + Loading… + Clean usersThe list of users will be locally deleted.\n\n + Are you sure you want to locally delete the list of users? + All users marked as absent + This function requires Android 3.0 (Honeycomb) or higher + There are pending changes waiting to be sent to the server. If you update the list of events can lose the changes.\n\nAre you sure you want to update the list of events? + New follower + Marks + Marks + Getting marks…\nWait, please… + Create account + \@nickname + Email + Account created successfully + Creating account… + Nickname not valid./nThe nickname must have the syntax \@nickname + Nickname registered by another user + Email not valid + Email registered by another user + Password not valid. Must be at least 6 alphanumeric characters + The nickname must have the syntax \@nickname + Other + You must enter the server + Comment to one of my social publishings + Fav to one of my social publishings + Sharing of one of my social posts + Mention to me in a social publishing + No marks currently available or the student ID has not been verified by the teacher + No marks currently available + No documents currently available + Marking all notifications as read… + Syncronizing… + You must be enrolled in at least one subject to see all functions. When enrolled in a subject, press the refresh button in the action bar to update the main menu. + Search + Search user + users found + user found + Users not found + Where do you want to search? + In + In all the platform + Introduce a longer text + You are going to cancel the sending message + You are going to discard the selected receivers + Do you want to remove #nameUser# from the list of receivers? + User added + User deleted + See all + See less + Confirm + Discard + Frequent users + There are no frequent users + Reply message + Primary + \ No newline at end of file From caf09722bfeb2d231d7a09de2179bc550487b80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sun, 21 Aug 2016 20:08:53 +0200 Subject: [PATCH 086/103] some strings changed to file --- SWADroid/src/main/res/values-es/strings.xml | 14 +++++++------- SWADroid/src/main/res/values/strings.xml | 12 ++++++------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 2dd8ce5ca..1111c079f 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -101,18 +101,18 @@ SWAD se encuentra en mantenimiento en estos momentos. Por favor, inténtelo más tarde Enviando mensaje… - Debe indicar al menos un destinatario + Debe añadir al menos un destinatario Debe introducir el asunto del mensaje - Destinatarios (separados por comas) - Asunto - Mensaje + Destinatarios: + Asunto: + Mensaje: Aviso Publicando aviso… Aviso publicado Debe introducir el contenido del aviso Enviar - Seleccionar Destinatarios - Filtrar Destinatarios + Seleccionar destinatarios + Filtrar destinatarios Filtrar Cancel Todos los datos de la base de datos han sido borrados @@ -263,7 +263,7 @@ No leídas Actualizar Guardar - Agregar usuarios + Añadir usuarios Filtrar usuarios Todo Profesores diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index 919de0a75..a7c218de2 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -99,18 +99,18 @@ SWAD is under maintenance right now. Please try again later Sending message… Message sent successfully - You must specify at least one recipient + You must add at least one recipient You must enter the subject of the message - Receivers (separated by comma) - Subject - Message + Receivers: + Subject: + Message: Notice Publishing notice… Notice published You must enter the contents of the notice Send - Select Receivers - Filter Receivers + Select receivers + Filter receivers Filter Cancel The database has been cleaned From aa89726d2c8cd87498fdcc5cd3f2af4972880d21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Mon, 22 Aug 2016 17:32:37 +0200 Subject: [PATCH 087/103] transaction code included --- .../java/es/ugr/swad/swadroid/modules/messages/Messages.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 4fd0d1b24..b8a91e2b5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -352,6 +352,9 @@ protected void postConnect() { boolean frequent = false; int newFrequents = 0; double score; + + dbHelper.beginTransaction(); + for(int i=0; i < arrayReceivers.size(); i++){ for(int j=0; j < frequentsList.size(); j++){ if(frequentsList.get(j).getUserNickname().equals(arrayReceivers.get(i).toString())){ @@ -385,6 +388,8 @@ protected void postConnect() { Log.d(TAG, "frequent user added = " + frequentsList.get(i).getScore()); } + dbHelper.endTransaction(true); + Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); finish(); } From 0c87120a4d3e65408c063858da623346b8641fca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Tue, 23 Aug 2016 18:23:14 +0200 Subject: [PATCH 088/103] management of frequent users is working, including photo in users without photo --- .../messages/FrequentUsersAdapter.java | 8 ++- .../swadroid/modules/messages/Messages.java | 72 ++++++++++--------- .../modules/messages/SearchUsers.java | 3 + .../modules/messages/UsersAdapter.java | 7 +- 4 files changed, 56 insertions(+), 34 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java index baeb46ef3..c124eb83b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java @@ -85,7 +85,13 @@ public View getView(int position, View convertView, ViewGroup parent) { else ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); - holder.name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); + String name; + + if(!user.getUserSurname2().isEmpty()) + name = user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname(); + else + name = user.getUserSurname1() + ", " + user.getUserFirstname(); + holder.name.setText(name); return convertView; } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index b8a91e2b5..c53b9bd94 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -316,13 +316,20 @@ protected void requestService() throws Exception { receiversNames = ""; for (int i = 0; i < csSize; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); - String firstname = pii.getProperty("userFirstname").toString(); - String surname1 = pii.getProperty("userSurname1").toString(); - String surname2 = pii.getProperty("userSurname2").toString(); - if (i == csSize-1) - receiversNames += firstname + " " + surname1 + " " + surname2 + ""; - else - receiversNames += firstname + " " + surname1 + " " + surname2 + ",\n"; + String firstname = pii.getPrimitiveProperty("userFirstname").toString(); + String surname1 = pii.getPrimitiveProperty("userSurname1").toString(); + String surname2 = pii.getPrimitiveProperty("userSurname2").toString(); + if (i == csSize-1) { + receiversNames += firstname + " " + surname1; + if (!surname2.isEmpty()) + receiversNames += " " + surname2; + } + else { + receiversNames += firstname + " " + surname1; + if (!surname2.isEmpty()) + receiversNames += " " + surname2; + receiversNames += ",\n"; + } } } @@ -352,40 +359,45 @@ protected void postConnect() { boolean frequent = false; int newFrequents = 0; double score; + String nickname; dbHelper.beginTransaction(); - for(int i=0; i < arrayReceivers.size(); i++){ - for(int j=0; j < frequentsList.size(); j++){ - if(frequentsList.get(j).getUserNickname().equals(arrayReceivers.get(i).toString())){ + for(int i=0; i < frequentsList.size(); i++){ + nickname = frequentsList.get(i).getUserNickname(); + for(int j=0; j < arrayReceivers.size(); j++){ + if(nickname.equals(arrayReceivers.get(j).toString())){ frequent = true; - score = frequentsList.get(j).getScore() * INCREASE_FACTOR; + score = frequentsList.get(i).getScore() * INCREASE_FACTOR; + if(score > MAX_SCORE) score = MAX_SCORE; - dbHelper.updateFrequentRecipient(frequentsList.get(j).getUserNickname(), score); - Log.d(TAG, "frequent user updated, score = " + score); - } - else{ - score = frequentsList.get(j).getScore() * DECREASE_FACTOR; - if(score < MIN_SCORE) { - dbHelper.removeAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient", frequentsList.get(j).getUserNickname()); - Log.d(TAG, "frequent user removed"); - }else { - dbHelper.updateFrequentRecipient(frequentsList.get(j).getUserNickname(), score); - Log.d(TAG, "frequent user updated, score = " + score); - } + dbHelper.updateFrequentRecipient(nickname, score); + arrayReceivers.remove(j); + arrayReceiversFirstNames.remove(j); + arrayReceiversSurNames1.remove(j); + arrayReceiversSurNames2.remove(j); + arrayPhotos.remove(j); + j = arrayReceivers.size(); + Log.d(TAG, "frequent user '" + nickname + "' updated, score = " + score); } } if(frequent == false){ - frequentsList.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); - newFrequents++; + score = frequentsList.get(i).getScore() * DECREASE_FACTOR; + if(score < MIN_SCORE) { + dbHelper.removeAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient", nickname); + Log.d(TAG, "frequent user '" + nickname + "' removed"); + }else { + dbHelper.updateFrequentRecipient(nickname, score); + Log.d(TAG, "frequent user '" + nickname + "' updated, score = " + score); + } } frequent = false; } - for(int i=frequentsList.size()-newFrequents; i < frequentsList.size(); i++){ - dbHelper.insertFrequentRecipient(frequentsList.get(i)); - Log.d(TAG, "frequent user added = " + frequentsList.get(i).getScore()); + for(int i=0; i < arrayReceivers.size(); i++){ + dbHelper.insertFrequentRecipient(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); + Log.d(TAG, "frequent user '" + arrayReceivers.get(i) + "' added = " + INITIAL_SCORE); } dbHelper.endTransaction(true); @@ -570,8 +582,6 @@ private void showSenderReplyMessage(){ && (userPhoto != null) && !userPhoto.equals("") && !userPhoto.equals(Constants.NULL_VALUE)) { ImageFactory.displayImage(loader, userPhoto, photo); - } else { - Log.d(TAG, "No connection or no photo " + userPhoto); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -640,8 +650,6 @@ private void showReceivers(){ && (userPhoto != null) && !userPhoto.equals("") && !userPhoto.equals(Constants.NULL_VALUE)) { ImageFactory.displayImage(loader, userPhoto, photo); - } else { - Log.d(TAG, "No connection or no photo " + userPhoto); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index db0cb2083..bd93bf8b8 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -210,6 +210,8 @@ protected void onCreate(Bundle savedInstanceState) { String surname2 = frequentsList.get(i).getUserSurname2(); String firstname = frequentsList.get(i).getUserFirstname(); String userPhoto = frequentsList.get(i).getUserPhoto(); + if(userPhoto.isEmpty()) + userPhoto = "https://swad.ugr.es/swad/icon/usr_bl.jpg"; //if I don't use this, put any image boolean selected = frequentsList.get(i).getCheckbox(); Double score = frequentsList.get(i).getScore(); frequentUsers.saveUser(new FrequentUser(nickname, surname1, surname2, firstname, userPhoto, selected, score)); @@ -335,6 +337,7 @@ public boolean onOptionsItemSelected(MenuItem item) { else { // shows frequent users if(numFrequents == 0) { lvUsers.setVisibility(View.GONE); + frequentUsersTitle.setVisibility(View.VISIBLE); frequentUsersText.setVisibility(View.VISIBLE); } else{ diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java index 7e0d4460d..6b979358e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersAdapter.java @@ -82,7 +82,12 @@ public View getView(int position, View convertView, ViewGroup parent) { else ImageFactory.displayImage(loader, user.getUserPhoto(), holder.image); - holder.name.setText(user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname()); + String name; + if(!user.getUserSurname2().isEmpty()) + name = user.getUserSurname1() + " " + user.getUserSurname2() + ", " + user.getUserFirstname(); + else + name = user.getUserSurname1() + ", " + user.getUserFirstname(); + holder.name.setText(name); return convertView; } From b8c3ad989a3b7e684bad2e4d0408e2f5f7f625f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 24 Aug 2016 00:08:11 +0200 Subject: [PATCH 089/103] editing data of frequent users in memory --- .../swadroid/database/DataBaseHelper.java | 24 ++++++++++++++++++ .../swadroid/modules/messages/Messages.java | 25 +++++++++++-------- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index f92a2968d..fc06df5a8 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -1417,6 +1417,30 @@ public void insertFrequentRecipient(FrequentUser user) { ent.save(); } + /** + * Inserts a list of frequent recipients + * + * @param list the list of users + * @return number of users inserted in the table + */ + public int insertFrequentsList(List list) { + int numElements = 0; + + for(int i=0; i MAX_SCORE) score = MAX_SCORE; - dbHelper.updateFrequentRecipient(nickname, score); + frequentsList.get(i).setScore(score); arrayReceivers.remove(j); arrayReceiversFirstNames.remove(j); arrayReceiversSurNames1.remove(j); @@ -385,10 +382,10 @@ protected void postConnect() { if(frequent == false){ score = frequentsList.get(i).getScore() * DECREASE_FACTOR; if(score < MIN_SCORE) { - dbHelper.removeAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "nicknameRecipient", nickname); + frequentsList.remove(i); Log.d(TAG, "frequent user '" + nickname + "' removed"); }else { - dbHelper.updateFrequentRecipient(nickname, score); + frequentsList.get(i).setScore(score); Log.d(TAG, "frequent user '" + nickname + "' updated, score = " + score); } } @@ -396,12 +393,18 @@ protected void postConnect() { } for(int i=0; i < arrayReceivers.size(); i++){ - dbHelper.insertFrequentRecipient(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); + frequentsList.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); Log.d(TAG, "frequent user '" + arrayReceivers.get(i) + "' added = " + INITIAL_SCORE); } - dbHelper.endTransaction(true); + //empty table of frequent recipients + dbHelper.emptyTable(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + + //insert new data in data base + dbHelper.insertFrequentsList(frequentsList); + progressLayout.setVisibility(View.GONE); + String messageSent = getString(R.string.messageSentMsg) + ":\n" + receiversNames; Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); finish(); } From dd45acb04d88aec091a99b308bb19a3f4cde0040 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Wed, 24 Aug 2016 11:34:33 +0200 Subject: [PATCH 090/103] Now login data is saved to SharedPreferences --- SWADroid/build.gradle | 1 + .../es/ugr/swad/swadroid/model/LoginInfo.java | 125 ++++++++++ .../java/es/ugr/swad/swadroid/model/User.java | 18 ++ .../swad/swadroid/modules/login/Login.java | 218 ++++++++++-------- .../swadroid/modules/login/LoginActivity.java | 2 +- .../swadroid/preferences/Preferences.java | 42 +++- .../preferences/PreferencesActivity.java | 4 +- 7 files changed, 306 insertions(+), 104 deletions(-) create mode 100644 SWADroid/src/main/java/es/ugr/swad/swadroid/model/LoginInfo.java diff --git a/SWADroid/build.gradle b/SWADroid/build.gradle index bf2ded8be..35bf3d8bd 100644 --- a/SWADroid/build.gradle +++ b/SWADroid/build.gradle @@ -64,4 +64,5 @@ dependencies { compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' compile 'com.journeyapps:zxing-android-embedded:3.2.0@aar' compile 'com.google.zxing:core:3.2.1' + compile 'com.google.code.gson:gson:2.7' } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/LoginInfo.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/LoginInfo.java new file mode 100644 index 000000000..ae044a2e8 --- /dev/null +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/LoginInfo.java @@ -0,0 +1,125 @@ +package es.ugr.swad.swadroid.model; + +import es.ugr.swad.swadroid.Constants; + +/** + * Login data. + * + * @author Juan Miguel Boyero Corral + */ +public class LoginInfo { + /** + * User logged flag + */ + private boolean logged; + /** + * Logged user + */ + private User loggedUser; + /** + * Time of application's last login + */ + private long lastLoginTime; + /** + * Role of the logged User in the current selected course + */ + private int currentUserRole; + + public LoginInfo() { + this.logged = false; + this.loggedUser = new User(); + this.lastLoginTime = -1; + this.currentUserRole = -1; + } + + public LoginInfo(boolean logged, User loggedUser, long lastLoginTime, int currentUserRole) { + this.logged = logged; + this.loggedUser = loggedUser; + this.lastLoginTime = lastLoginTime; + this.currentUserRole = currentUserRole; + } + + /** + * Checks if user is already logged on SWAD + * + * @return User logged flag + */ + public boolean isLogged() { + return logged; + } + + /** + * Sets user logged flag + * + * @param logged User logged flag + */ + public void setLogged(boolean logged) { + this.logged = logged; + } + + /** + * Gets the user logged on SWAD + */ + public User getLoggedUser() { + return loggedUser; + } + + /** + * Sets the user logged on SWAD + */ + public void setLoggedUser(User loggedUser) { + this.loggedUser = loggedUser; + } + + /** + * Gets the last synchronization time + * + * @return The last synchronization time + */ + public long getLastLoginTime() { + return lastLoginTime; + } + + /** + * Sets the last synchronization time + * + * @param lastLoginTime The last synchronization time + */ + public void setLastLoginTime(long lastLoginTime) { + this.lastLoginTime = lastLoginTime; + } + + /** + * Gets the role of the logged user in the current selected course + * + * @return -1 if the user role has not been fixed, + * 0 if the user role is unknown + * 2 (STUDENT_TYPE_CODE) if the user is a student + * 3 (TEACHER_TYPE_CODE) if the user is a teacher + */ + public int getCurrentUserRole() { + return currentUserRole; + } + + /** + * Sets user role in the current selected course + * + * @param userRole Role of the user: 0- unknown STUDENT_TYPE_CODE - student TEACHER_TYPE_CODE - teacher + */ + public void setCurrentUserRole(int userRole) { + if (userRole == 0 || userRole == Constants.TEACHER_TYPE_CODE || userRole == Constants.STUDENT_TYPE_CODE) + currentUserRole = userRole; + else + currentUserRole = -1; + } + + @Override + public String toString() { + return "LoginInfo{" + + "logged=" + logged + + ", loggedUser=" + loggedUser + + ", lastLoginTime=" + lastLoginTime + + ", currentUserRole=" + currentUserRole + + '}'; + } +} diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java index 865978bee..ff8e79cdd 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java @@ -94,6 +94,10 @@ public class User extends Model { PI_userRole }; + public User() { + super(-1); + } + /** * Constructor. * @@ -416,4 +420,18 @@ public void setProperty(int param, Object obj) { } } + @Override + public String toString() { + return "User{" + + "wsKey='" + wsKey + '\'' + + ", userID='" + userID + '\'' + + ", userNickname='" + userNickname + '\'' + + ", userSurname1='" + userSurname1 + '\'' + + ", userSurname2='" + userSurname2 + '\'' + + ", userFirstname='" + userFirstname + '\'' + + ", userPhoto='" + userPhoto + '\'' + + ", userBirthday=" + userBirthday + + ", userRole=" + userRole + + '}'; + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/Login.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/Login.java index 9cffce706..b452e100a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/Login.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/Login.java @@ -27,6 +27,7 @@ import es.ugr.swad.swadroid.Config; import es.ugr.swad.swadroid.Constants; +import es.ugr.swad.swadroid.model.LoginInfo; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.preferences.Preferences; @@ -41,34 +42,30 @@ * @author Antonio Aguilera Malagon */ public class Login extends Module { + /** + * Login tag name for Logcat + */ + private static final String TAG = Constants.APP_TAG + " Login"; /** * Time to force relogin */ public static final int RELOGIN_TIME = 86400000; //24h - /** - * User logged flag - */ - private static boolean logged; - /** - * Logged user - */ - private static User loggedUser; - /** - * Time of application's last login - */ - private static long lastLoginTime; - /** - * Role of the logged User in the current selected course - */ - private static int currentUserRole = -1; /** - * Login tag name for Logcat + * Login data */ - private static final String TAG = Constants.APP_TAG + " Login"; + private static LoginInfo loginInfo; + + //Initialize login data + static { + loginInfo = Preferences.getLoginInfo(); + if(loginInfo == null) { + loginInfo = new LoginInfo(); + } + } /* (non-Javadoc) - * @see android.app.Activity#onCreate() - */ + * @see android.app.Activity#onCreate() + */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -104,12 +101,12 @@ protected void requestService() throws Exception { //If last login time > Global.RELOGIN_TIME, force login - if (System.currentTimeMillis() - Login.getLastLoginTime() > Login.RELOGIN_TIME) { - Login.setLogged(false); + if (System.currentTimeMillis() - loginInfo.getLastLoginTime() > Login.RELOGIN_TIME) { + loginInfo.setLogged(false); } //If the application isn't logged, force login - if (!Login.isLogged()) { + if (!loginInfo.isLogged()) { String userID = Preferences.getUserID(); //If the user ID is a DNI @@ -148,11 +145,11 @@ protected void requestService() Integer.parseInt(soap.getProperty("userRole").toString()) // userRole ); - Login.setLogged(true); - Login.setLoggedUser(user); + loginInfo.setLogged(true); + loginInfo.setLoggedUser(user); //Update application last login time - Login.setLastLoginTime(System.currentTimeMillis()); + loginInfo.setLastLoginTime(System.currentTimeMillis()); if(isDebuggable) { Log.d(TAG, "id=" + user.getId()); @@ -165,12 +162,15 @@ protected void requestService() Log.d(TAG, "userPhoto=" + user.getUserPhoto()); Log.d(TAG, "userBirthday=" + ((user.getUserBirthday() != null) ? user.getUserBirthday().getTime(): "null")); Log.d(TAG, "userRole=" + user.getUserRole()); - Log.d(TAG, "isLogged=" + Login.isLogged()); - Log.d(TAG, "lastLoginTime=" + Login.getLastLoginTime()); + Log.d(TAG, "isLogged=" + loginInfo.isLogged()); + Log.d(TAG, "lastLoginTime=" + loginInfo.getLastLoginTime()); } } } + //Save login data + setLoginInfo(loginInfo); + //Request finalized without errors setResult(RESULT_OK); } @@ -191,77 +191,97 @@ protected void onError() { } - /** - * Checks if user is already logged on SWAD - * - * @return User logged flag - */ - public static boolean isLogged() { - return logged; - } - - /** - * Sets user logged flag - * - * @param logged User logged flag - */ - public static void setLogged(boolean logged) { - Login.logged = logged; - } + /** + * Gets the login data + * + * @return The login data + */ + public static LoginInfo getLoginInfo() { + return loginInfo; + } - /** - * Gets the user logged on SWAD - */ - public static User getLoggedUser() { - return loggedUser; - } + /** + * Sets the login data + * + * @param loginInfo The login data + */ + public static void setLoginInfo(LoginInfo loginInfo) { + Login.loginInfo = loginInfo; + Preferences.setLoginInfo(loginInfo); - /** - * Sets the user logged on SWAD - */ - public static void setLoggedUser(User loggedUser) { - Login.loggedUser = loggedUser; - } - - /** - * Gets start time of application - * - * @return Start time of application - */ - public static long getLastLoginTime() { - return lastLoginTime; - } - - /** - * Sets start time of application - * - * @param l Start time of application - */ - public static void setLastLoginTime(long l) { - Login.lastLoginTime = l; - } - - /** - * Sets user role in the current selected course - * - * @param userRole Role of the user: 0- unknown STUDENT_TYPE_CODE - student TEACHER_TYPE_CODE - teacher - */ - public static void setCurrentUserRole(int userRole) { - if (userRole == 0 || userRole == Constants.TEACHER_TYPE_CODE || userRole == Constants.STUDENT_TYPE_CODE) - currentUserRole = userRole; - else - currentUserRole = -1; - } - - /** - * Gets the role of the logged user in the current selected course - * - * @return -1 if the user role has not been fixed, - * 0 if the user role is unknown - * 2 (STUDENT_TYPE_CODE) if the user is a student - * 3 (TEACHER_TYPE_CODE) if the user is a teacher - */ - public static int getCurrentUserRole() { - return currentUserRole; - } + Log.i(TAG, "LoginInfo saved: " + loginInfo.toString()); + } + + + + /** + * Checks if user is already logged on SWAD + * + * @return User logged flag + */ + public static boolean isLogged() { + return loginInfo.isLogged(); + } + + /** + * Sets user logged flag + * + * @param logged User logged flag + */ + public static void setLogged(boolean logged) { + loginInfo.setLogged(logged); + } + + /** + * Gets the user logged on SWAD + */ + public static User getLoggedUser() { + return loginInfo.getLoggedUser(); + } + + /** + * Sets the user logged on SWAD + */ + public static void setLoggedUser(User loggedUser) { + loginInfo.setLoggedUser(loggedUser); + } + + /** + * Gets the last synchronization time + * + * @return The last synchronization time + */ + public static long getLastLoginTime() { + return loginInfo.getLastLoginTime(); + } + + /** + * Sets the last synchronization time + * + * @param lastLoginTime The last synchronization time + */ + public static void setLastLoginTime(long lastLoginTime) { + loginInfo.setLastLoginTime(lastLoginTime); + } + + /** + * Gets the role of the logged user in the current selected course + * + * @return -1 if the user role has not been fixed, + * 0 if the user role is unknown + * 2 (STUDENT_TYPE_CODE) if the user is a student + * 3 (TEACHER_TYPE_CODE) if the user is a teacher + */ + public static int getCurrentUserRole() { + return loginInfo.getCurrentUserRole(); + } + + /** + * Sets user role in the current selected course + * + * @param userRole Role of the user: 0- unknown STUDENT_TYPE_CODE - student TEACHER_TYPE_CODE - teacher + */ + public static void setCurrentUserRole(int userRole) { + loginInfo.setCurrentUserRole(userRole); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/LoginActivity.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/LoginActivity.java index 63fc51ae2..6ccd7ff65 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/LoginActivity.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/login/LoginActivity.java @@ -324,7 +324,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case Constants.LOGIN_REQUEST_CODE: mProgressScreen.hide(); - Login.setLogged(true); + Login.getLoginInfo().setLogged(true); setResult(RESULT_OK); mFromPreference = false; finish(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java index 40eb0d384..f2ffcbbb2 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java @@ -26,11 +26,14 @@ import android.os.Bundle; import android.util.Log; +import com.google.gson.Gson; + import java.security.NoSuchAlgorithmException; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.database.DataBaseHelper; +import es.ugr.swad.swadroid.model.LoginInfo; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.sync.SyncUtils; import es.ugr.swad.swadroid.utils.Crypto; @@ -145,6 +148,10 @@ public class Preferences { * Authors preference name */ public static final String AUTHORSPREF = "authorsPref"; + /** + * Authors preference name + */ + public static final String LOGININFOPREF = "loginInfoPref"; /** * Database Helper. */ @@ -157,7 +164,6 @@ public class Preferences { /** * Gets application preferences * @param ctx Application context - * @return Application preferences */ private static void getPreferences(Context ctx) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { @@ -423,6 +429,37 @@ public static void setNotifLightsEnabled(boolean notifLightsEnabled) { editor.commit(); } + /** + * Gets the login data + * + * @return The login data + */ + public static LoginInfo getLoginInfo() { + Gson gson = new Gson(); + String json = prefs.getString(LOGININFOPREF, null); + return gson.fromJson(json, LoginInfo.class); + } + + /** + * Sets the login data + * + * @param loginInfo The login data + */ + public static void setLoginInfo(LoginInfo loginInfo) { + Gson gson = new Gson(); + String json = gson.toJson(loginInfo); + editor = editor.putString(LOGININFOPREF, json); + editor.commit(); + } + + /** + * Removes the login data + */ + public static void removeLoginInfo() { + editor = editor.remove(LOGININFOPREF); + editor.commit(); + } + /** * Upgrade password encryption * @@ -446,7 +483,8 @@ private static void cleanDatabase() { } public static void logoutClean(Context context, String key) { - Login.setLogged(false); + Login.getLoginInfo().setLogged(false); + removeLoginInfo(); Log.i(TAG, "Forced logout due to " + key + " change in preferences"); cleanDatabase(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/PreferencesActivity.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/PreferencesActivity.java index fa2cd95c2..d229e7266 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/PreferencesActivity.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/PreferencesActivity.java @@ -45,6 +45,7 @@ import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.gui.DialogFactory; +import es.ugr.swad.swadroid.model.LoginInfo; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.modules.login.LoginActivity; import es.ugr.swad.swadroid.sync.SyncUtils; @@ -214,7 +215,6 @@ public boolean onPreferenceClick(Preference preference) { Preferences.logoutClean(ctx, Preferences.LOGOUTPREF); Preferences.setUserID(""); Preferences.setUserPassword(""); - Login.setLogged(false); startActivity(new Intent(getBaseContext(), LoginActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP).putExtra("fromPreference", true)); @@ -339,7 +339,7 @@ public boolean onPreferenceChange(Preference preference, Object newValue) { userPasswordPrefChanged = true; syncPrefsChanged = true; Preferences.setPreferencesChanged(); - Login.setLogged(false); + Login.getLoginInfo().setLogged(false); } else { Toast.makeText(getApplicationContext(), R.string.pradoLoginToast, Toast.LENGTH_LONG).show(); From f9c26cc196f301bce3959040935f5744f3236065 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Wed, 24 Aug 2016 17:38:46 +0200 Subject: [PATCH 091/103] table multiuser in frequent recipients --- .../swadroid/database/DataBaseHelper.java | 5 +++- .../ugr/swad/swadroid/model/FrequentUser.java | 30 +++++++++++++++++-- .../swadroid/modules/messages/Messages.java | 20 +++++++++---- .../modules/messages/SearchUsers.java | 11 +++++-- SWADroid/src/main/res/xml/tables.xml | 4 +++ 5 files changed, 59 insertions(+), 11 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index fc06df5a8..75429e6af 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -461,7 +461,8 @@ private T createObjectByTable(String table, Entity ent) { ent.getLong("openTime")); break; case DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS: - o = new FrequentUser(ent.getString("nicknameRecipient"), + o = new FrequentUser(ent.getString("idUser"), + ent.getString("nicknameRecipient"), ent.getString("surname1Recipient"), ent.getString("surname2Recipient"), ent.getString("firstnameRecipient"), @@ -1408,6 +1409,7 @@ public void insertEventCourse(long eventCode, long crsCod) { */ public void insertFrequentRecipient(FrequentUser user) { Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + ent.setValue("idUser", user.getidUser()); ent.setValue("nicknameRecipient", user.getUserNickname()); ent.setValue("surname1Recipient", user.getUserSurname1()); ent.setValue("surname2Recipient", user.getUserSurname2()); @@ -1428,6 +1430,7 @@ public int insertFrequentsList(List list) { for(int i=0; i frequentsList; + /** + * User logged identifier + */ + private String userLogged; /* (non-Javadoc) * @see es.ugr.swad.swadroid.modules.Module#onCreate(android.os.Bundle) @@ -186,6 +190,8 @@ protected void onCreate(Bundle savedInstanceState) { arrayPhotos = new ArrayList<>(); sender = ""; + userLogged = Login.getLoggedUser().getUserID(); + setContentView(R.layout.messages_screen); setTitle(R.string.messagesModuleLabel); @@ -357,7 +363,7 @@ protected void postConnect() { String nickname; //get data of frequent users - frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "idUser='" + userLogged + "'", ""); //modify data in memory for(int i=0; i < frequentsList.size(); i++){ @@ -393,16 +399,20 @@ protected void postConnect() { } for(int i=0; i < arrayReceivers.size(); i++){ - frequentsList.add(new FrequentUser(arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); - Log.d(TAG, "frequent user '" + arrayReceivers.get(i) + "' added = " + INITIAL_SCORE); + frequentsList.add(new FrequentUser(userLogged, arrayReceivers.get(i), arrayReceiversSurNames1.get(i), arrayReceiversSurNames2.get(i), arrayReceiversFirstNames.get(i), arrayPhotos.get(i), false, INITIAL_SCORE)); + Log.d(TAG, "frequent user '" + arrayReceivers.get(i) + "' added = " + INITIAL_SCORE + " (sender = '" + userLogged + "')"); } - //empty table of frequent recipients - dbHelper.emptyTable(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); + dbHelper.beginTransaction(); + + //delete frequent recipients of user logged + dbHelper.removeAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "idUser='" + userLogged + "'"); //insert new data in data base dbHelper.insertFrequentsList(frequentsList); + dbHelper.endTransaction(true); + progressLayout.setVisibility(View.GONE); String messageSent = getString(R.string.messageSentMsg) + ":\n" + receiversNames; Toast.makeText(this, messageSent, Toast.LENGTH_LONG).show(); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index bd93bf8b8..d9f424ad1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -154,6 +154,10 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene * List where requests of database are saved */ private List frequentsList; + /** + * User logged identifier + */ + private String userLogged; @Override protected void onCreate(Bundle savedInstanceState) { @@ -161,6 +165,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.list_users); setTitle(R.string.actionBarAddUser); + userLogged = Login.getLoggedUser().getUserID(); + userFilters = new UsersList(); frequentUsers = new FrequentUsersList(); arrayReceivers = getIntent().getStringArrayListExtra("receivers"); @@ -196,7 +202,7 @@ protected void onCreate(Bundle savedInstanceState) { frequentUsersText = (TextView) findViewById(R.id.listText); - frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "", "score DESC"); + frequentsList = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS, "idUser='" + userLogged + "'", "score DESC"); numFrequents = frequentsList.size(); if(numFrequents == 0) { @@ -205,6 +211,7 @@ protected void onCreate(Bundle savedInstanceState) { else{ frequentUsersText.setVisibility(View.GONE); for(int i=0; i + Date: Fri, 26 Aug 2016 00:29:23 +0200 Subject: [PATCH 092/103] some changes in the code to optimize it --- .../swadroid/modules/messages/Messages.java | 35 ++-- .../modules/messages/SearchUsers.java | 158 +++++++----------- 2 files changed, 66 insertions(+), 127 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 85be13486..1b73f931d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -240,7 +240,6 @@ public void onClick(View v) { for(int i=0; i"); body = body + "

" + getString(R.string.footMessageMsg) + " " + getString(R.string.app_name) + "
" + getString(R.string.marketWebURL); - //body = body + "

"+ getString(R.string.footMessageMsg) + " " + getString(R.string.app_name) + ""; } /* (non-Javadoc) @@ -350,7 +344,6 @@ protected void connect() { startConnection(); messageLayout.setVisibility(View.INVISIBLE); progressLayout.setVisibility(View.VISIBLE); - //Toast.makeText(this, R.string.sendingMessageMsg, Toast.LENGTH_SHORT).show(); } /* (non-Javadoc) @@ -610,13 +603,6 @@ private void showSenderReplyMessage(){ } private void showReceivers(){ - /* - Log.d(TAG, "Receivers of SearchUsers: " + receivers); - for (int i=0; i 3) { - i = arrayReceiversFirstNames.size() - 3; - seeAll.setVisibility(View.VISIBLE); - seeAll.setText(getResources().getString(R.string.see_all)); - } - else { - i = 0; - seeAll.setVisibility(View.GONE); - } + else if (arrayReceiversFirstNames.size() > 3) { + i = arrayReceiversFirstNames.size() - 3; + seeAll.setVisibility(View.VISIBLE); + seeAll.setText(getResources().getString(R.string.see_all)); } + else { + i = 0; + seeAll.setVisibility(View.GONE); + } + while (i < arrayReceiversFirstNames.size()){ layout.setVisibility(View.VISIBLE); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index d9f424ad1..a950b8cfd 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -117,7 +117,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene /** * List of UserFilter */ - private UsersList userFilters; + private UsersList usersFilter; /** * List of FrequentUser */ @@ -167,7 +167,7 @@ protected void onCreate(Bundle savedInstanceState) { userLogged = Login.getLoggedUser().getUserID(); - userFilters = new UsersList(); + usersFilter = new UsersList(); frequentUsers = new FrequentUsersList(); arrayReceivers = getIntent().getStringArrayListExtra("receivers"); arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); @@ -286,22 +286,8 @@ public boolean onMenuItemActionCollapse(MenuItem item) { searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { - //select checkboxes who users were added before - for(int i=0; i res = new ArrayList((Vector) result); SoapObject soap = (SoapObject) res.get(1); int csSize = soap.getPropertyCount(); - userFilters = new UsersList(); + usersFilter = new UsersList(); for (int i = 0; i < csSize; i++) { SoapObject pii = (SoapObject) soap.getProperty(i); @@ -450,32 +412,12 @@ protected void requestService() throws Exception { String surname2 = pii.getPrimitiveProperty("userSurname2").toString(); String firstname = pii.getPrimitiveProperty("userFirstname").toString(); String userPhoto = pii.getPrimitiveProperty("userPhoto").toString(); - //Log.d(TAG, nickname + ", " + firstname + " " + surname1 + " " + surname2 + ", " + userPhoto); - - boolean selected; - - //is not the sender of reply message - /* - if (!(firstname + " " + surname1 + " " + surname2).equals(senderName) || !userPhoto.equals(senderPhoto)){ - - if (arrayReceivers.contains("@" + nickname)) { - selected = true; - } - else - selected = false; - userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); - }*/ - - if (arrayReceivers.contains(nickname)) { - selected = true; - } - else - selected = false; - userFilters.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); + boolean selected = arrayReceivers.contains(nickname); + usersFilter.saveUser(new UserFilter(nickname, surname1, surname2, firstname, userPhoto, selected)); } } - numUsers = userFilters.getUsers().size(); + numUsers = usersFilter.getUsers().size(); Log.d(TAG, "numUsersSWAD = " + String.valueOf(csSize) + ", numUsersSWADroid = " + numUsers); } @@ -495,7 +437,7 @@ protected void postConnect() { frequentUsersTitle.setVisibility(View.GONE); frequentUsersText.setVisibility(View.GONE); progressLayout.setVisibility(View.GONE); - adapter = new UsersAdapter(getBaseContext(), userFilters.getUsers()); + adapter = new UsersAdapter(getBaseContext(), usersFilter.getUsers()); lvUsers.setAdapter(adapter); lvUsers.setVisibility(View.VISIBLE); @@ -526,22 +468,20 @@ public void onItemClick(AdapterView parent, View view, int position, long id) checkbox = (CheckBox) view.findViewById(R.id.check); if (checkbox.isChecked()){ checkbox.setChecked(false); - int index = arrayReceivers.indexOf(userFilters.getUsers().get(position).getUserNickname()); + int index = arrayReceivers.indexOf(usersFilter.getUsers().get(position).getUserNickname()); arrayReceivers.remove(index); arrayReceiversFirstNames.remove(index); arrayReceiversSurNames1.remove(index); arrayReceiversSurNames2.remove(index); arrayPhotos.remove(index); - //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); } else{ checkbox.setChecked(true); - arrayReceivers.add(userFilters.getUsers().get(position).getUserNickname()); - arrayReceiversFirstNames.add(userFilters.getUsers().get(position).getUserFirstname()); - arrayReceiversSurNames1.add(userFilters.getUsers().get(position).getUserSurname1()); - arrayReceiversSurNames2.add(userFilters.getUsers().get(position).getUserSurname2()); - arrayPhotos.add(userFilters.getUsers().get(position).getUserPhoto()); - //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); + arrayReceivers.add(usersFilter.getUsers().get(position).getUserNickname()); + arrayReceiversFirstNames.add(usersFilter.getUsers().get(position).getUserFirstname()); + arrayReceiversSurNames1.add(usersFilter.getUsers().get(position).getUserSurname1()); + arrayReceiversSurNames2.add(usersFilter.getUsers().get(position).getUserSurname2()); + arrayPhotos.add(usersFilter.getUsers().get(position).getUserPhoto()); } } }); @@ -560,7 +500,6 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceiversSurNames1.remove(index); arrayReceiversSurNames2.remove(index); arrayPhotos.remove(index); - //Toast.makeText(SearchUsers.this, R.string.user_deleted, Toast.LENGTH_SHORT).show(); } else{ checkbox.setChecked(true); @@ -569,11 +508,26 @@ public void onItemClick(AdapterView parent, View view, int position, long id) arrayReceiversSurNames1.add(frequentUsers.getUsers().get(position).getUserSurname1()); arrayReceiversSurNames2.add(frequentUsers.getUsers().get(position).getUserSurname2()); arrayPhotos.add(frequentUsers.getUsers().get(position).getUserPhoto()); - //Toast.makeText(SearchUsers.this, R.string.user_added, Toast.LENGTH_SHORT).show(); } } }); } + + private void updateCheckboxesUsersFilter(){ + boolean result; + for(int i=0; i Date: Wed, 24 Aug 2016 18:26:40 +0200 Subject: [PATCH 093/103] Fixed bug in refreshing of main menu --- .../java/es/ugr/swad/swadroid/SWADMain.java | 270 ++++++++++-------- .../es/ugr/swad/swadroid/model/Course.java | 16 +- .../es/ugr/swad/swadroid/model/Event.java | 5 +- .../es/ugr/swad/swadroid/model/Group.java | 18 +- .../es/ugr/swad/swadroid/model/GroupType.java | 17 +- .../es/ugr/swad/swadroid/model/Model.java | 7 +- .../java/es/ugr/swad/swadroid/model/Pair.java | 8 +- .../es/ugr/swad/swadroid/model/PairTable.java | 17 +- .../swad/swadroid/model/SWADNotification.java | 40 +-- .../java/es/ugr/swad/swadroid/model/Test.java | 29 +- .../ugr/swad/swadroid/model/TestAnswer.java | 24 +- .../ugr/swad/swadroid/model/TestQuestion.java | 22 +- .../es/ugr/swad/swadroid/model/TestTag.java | 15 +- .../java/es/ugr/swad/swadroid/model/User.java | 5 +- .../swad/swadroid/model/UserAttendance.java | 2 +- 15 files changed, 266 insertions(+), 229 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 4a3c6a242..9d431259b 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -105,7 +105,7 @@ public class SWADMain extends MenuExpandableListActivity { * SWADMain tag name for Logcat */ private static final String TAG = Constants.APP_TAG; - + /** * Indicates if it is the first run */ @@ -116,8 +116,6 @@ public class SWADMain extends MenuExpandableListActivity { */ private int currentRole = -1; - private boolean dBCleaned = false; - private LinearLayout mNotifyLayout; private TextView mNotifyTextView; private ImageView mNotifyImageView; @@ -143,11 +141,13 @@ public static DataBaseHelper getDbHelper() { /** * Shows initial dialog after application upgrade. + * + * @param context Application context */ private void showUpgradeDialog(Context context) { AlertDialog alertDialog = DialogFactory.createWebViewDialog(context, - R.string.changelogTitle, - R.raw.changes); + R.string.changelogTitle, + R.raw.changes); alertDialog.show(); } @@ -160,31 +160,31 @@ public void onCreate(Bundle icicle) { int lastVersion, currentVersion; SWADroidTracker.initTracker(getApplicationContext()); - + //Initialize screen super.onCreate(icicle); setContentView(R.layout.main); initializeMainViews(); - + try { - + //Initialize HTTPS connections /* * SSL root certificates for SWAD are not included by default on Gingerbread and older * If Android API < 11 (HONEYCOMB) add SSL certificates manually */ - if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { + if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { /* SSL connection */ SecureConnection conn = new SecureConnection(); - conn.initSecureConnection(); - //conn.initUntrustedSecureConnection(); - Log.i(TAG, "Android API < 11 (HONEYCOMB). Adding SSL certificates manually"); - } else { - Log.i(TAG, "Android API >= 11 (HONEYCOMB). Using SSL built-in certificates"); - } + conn.initSecureConnection(); + //conn.initUntrustedSecureConnection(); + Log.i(TAG, "Android API < 11 (HONEYCOMB). Adding SSL certificates manually"); + } else { + Log.i(TAG, "Android API >= 11 (HONEYCOMB). Using SSL built-in certificates"); + } //Check if this is the first run after an install or upgrade lastVersion = Preferences.getLastVersion(); @@ -195,26 +195,15 @@ public void onCreate(Bundle icicle) { //If this is the first run, show configuration dialog if (lastVersion == 0) { - firstRun(currentVersion); + firstRun(currentVersion); - //If this is an upgrade, show upgrade dialog + //If this is an upgrade, show upgrade dialog } else if (lastVersion < currentVersion) { - upgradeApp(lastVersion, currentVersion); + upgradeApp(lastVersion, currentVersion); } - listCourses = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES, "", "shortName"); - if (listCourses.size() > 0) { - Course c = (Course) listCourses.get(Preferences.getLastCourseSelected()); - Courses.setSelectedCourseCode(c.getId()); - Courses.setSelectedCourseShortName(c.getShortName()); - Courses.setSelectedCourseFullName(c.getFullName()); - Login.setCurrentUserRole(c.getUserRole()); - } else { - Courses.setSelectedCourseCode(-1); - Courses.setSelectedCourseShortName(""); - Courses.setSelectedCourseFullName(""); - Login.setCurrentUserRole(-1); - } + loadCourses(); + currentRole = -1; } catch (Exception ex) { error(ex.getMessage(), ex, true); @@ -222,37 +211,39 @@ public void onCreate(Bundle icicle) { } /* - * (non-Javadoc) - * @see android.app.Activity#onResume() - */ + * (non-Javadoc) + * @see android.app.Activity#onResume() + */ @Override protected void onResume() { super.onResume(); - if (isUserOrPasswordEmpty() && (listCourses.size() == 0)) { + if (isUserOrPasswordEmpty() && listCourses.isEmpty()) { + Log.i(TAG, "Logging on user " + Preferences.getUserID() + " against the server " + + Preferences.getServer() + " ..."); + startActivityForResult(new Intent(this, LoginActivity.class), Constants.LOGIN_REQUEST_CODE); } else { - if (!Preferences.isPreferencesChanged() && !DataBaseHelper.isDbCleaned()) { - createSpinnerAdapter(); - if (!firstRun) { - courseCode = Courses.getSelectedCourseCode(); - createMenu(); - } - } else { + if(Preferences.isPreferencesChanged() || DataBaseHelper.isDbCleaned()) { Preferences.setPreferencesChanged(false); - DataBaseHelper.setDbCleaned(false); setMenuDbClean(); + } else if(!firstRun) { + courseCode = Courses.getSelectedCourseCode(); } //If today is the user birthday, show birthday message if((Login.getLoggedUser() != null) && DateTimeUtils.isBirthday(Login.getLoggedUser().getUserBirthday())) { + showBirthdayMessage(); } else if ((listCourses == null) || listCourses.isEmpty()) { showNoCoursesMessage(); } else { mNotifyLayout.setVisibility(View.GONE); } + + createSpinnerAdapter(); + createMenu(); } SWADroidTracker.sendScreenView(getApplicationContext(), TAG); @@ -271,75 +262,68 @@ private void showNoCoursesMessage() { mNotifyTextView.setText(getString(R.string.noCoursesMsg)); mNotifyLayout.setVisibility(View.VISIBLE); } - - /** - * Initializes application on first run - * @param currentVersion Current version of application - */ - private void firstRun(int currentVersion) { + + /** + * Initializes application on first run + * @param currentVersion Current version of application + */ + private void firstRun(int currentVersion) { Intent activity = new Intent(this, AccountAuthenticator.class); - - //Configure automatic synchronization + + //Configure automatic synchronization Preferences.setSyncTime(String.valueOf(Constants.DEFAULT_SYNC_TIME)); startActivity(activity); Preferences.setLastVersion(currentVersion); firstRun = true; - Courses.setSelectedCourseCode(-1); - Courses.setSelectedCourseShortName(""); - Courses.setSelectedCourseFullName(""); + initializeSelectedCourse(); + } - Login.setCurrentUserRole(-1); - } - - /** - * Makes appropriate changes on application upgrade - * @param lastVersion Version from which the application is updated - * @param currentVersion Version to which the application is updated - */ - private void upgradeApp(int lastVersion, int currentVersion) throws NoSuchAlgorithmException { - showUpgradeDialog(this); + /** + * Makes appropriate changes on application upgrade + * @param lastVersion Version from which the application is updated + * @param currentVersion Version to which the application is updated + */ + private void upgradeApp(int lastVersion, int currentVersion) throws NoSuchAlgorithmException { + showUpgradeDialog(this); dbHelper.upgradeDB(); - + if(lastVersion < 52) { - //Encrypts users table - dbHelper.encryptUsers(); - - //If the app is updating from an unencrypted user password version, encrypt user password - Preferences.upgradeCredentials(); - - Preferences.setSyncTime(String.valueOf(Constants.DEFAULT_SYNC_TIME)); + //Encrypts users table + dbHelper.encryptUsers(); + + //If the app is updating from an unencrypted user password version, encrypt user password + Preferences.upgradeCredentials(); + + Preferences.setSyncTime(String.valueOf(Constants.DEFAULT_SYNC_TIME)); } else if(lastVersion < 57) { - //Reconfigure automatic synchronization - SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, this); - if(!Preferences.getSyncTime().equals("0") && Preferences.isSyncEnabled()) { - SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, - Long.valueOf(Preferences.getSyncTime()), this); - } + //Reconfigure automatic synchronization + SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, this); + if(!Preferences.getSyncTime().equals("0") && Preferences.isSyncEnabled()) { + SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, + Long.valueOf(Preferences.getSyncTime()), this); + } } Preferences.setLastVersion(currentVersion); - } + } - @Override + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { switch (requestCode) { - //After get the list of courses, a dialog is launched to choice the course + //After get the list of courses, a spinner is showed to choice the course case Constants.COURSES_REQUEST_CODE: - - setMenuDbClean(); - createSpinnerAdapter(); - createMenu(); + loadCourses(); //User credentials are correct. Set periodic synchronization if enabled - if (!Preferences.getSyncTime().equals("0") - && Preferences.isSyncEnabled() && SyncUtils.isPeriodicSynced(this)) { - SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, - Long.parseLong(Preferences.getSyncTime()), this); - } + if (!"0".equals(Preferences.getSyncTime()) + && Preferences.isSyncEnabled() && SyncUtils.isPeriodicSynced(this)) { + SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, + Long.parseLong(Preferences.getSyncTime()), this); + } mProgressScreen.hide(); break; @@ -369,7 +353,7 @@ private void createSpinnerAdapter() { */ Cursor dbCursor = dbHelper.getDb().getCursor(DataBaseHelper.DB_TABLE_COURSES, null, "shortName"); startManagingCursor(dbCursor); - if (listCourses.size() != 0) { + if (!listCourses.isEmpty()) { SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_spinner_item, dbCursor, @@ -387,10 +371,11 @@ private void createSpinnerAdapter() { mCoursesSpinner.setOnTouchListener(Spinner_OnTouch); mCoursesSpinner.setVisibility(View.VISIBLE); + + Log.i(TAG, "Created Spinner adapter"); } else { cleanSpinner(); } - } /** @@ -401,6 +386,8 @@ private void cleanSpinner() { mCoursesSpinner.setAdapter(adapter); mCoursesSpinner.setOnTouchListener(Spinner_OnTouch);*/ mCoursesSpinner.setVisibility(View.GONE); + + Log.i(TAG, "Cleaned Spinner adapter"); } private class onItemSelectedListener implements OnItemSelectedListener { @@ -408,13 +395,18 @@ private class onItemSelectedListener implements OnItemSelectedListener { public void onItemSelected(AdapterView parent, View view, int position, long id) { if (!listCourses.isEmpty()) { - Preferences.setLastCourseSelected(position); + Preferences.setLastCourseSelected(position); + Course courseSelected = (Course) listCourses.get(position); + courseCode = courseSelected.getId(); + Courses.setSelectedCourseCode(courseCode); Courses.setSelectedCourseShortName(courseSelected.getShortName()); Courses.setSelectedCourseFullName(courseSelected.getFullName()); + Login.setCurrentUserRole(courseSelected.getUserRole()); + createMenu(); } } @@ -430,11 +422,9 @@ public void onNothingSelected(AdapterView arg0) { public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { - if (dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES).size() == 0) { + if (dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES).isEmpty()) { if (Utils.connectionAvailable(getApplicationContext())) getCurrentCourses(); - //else - } else { v.performClick(); } @@ -444,57 +434,65 @@ public boolean onTouch(View v, MotionEvent event) { }; private void getCurrentCourses() { + Log.i(TAG, "Downloading courses..."); + mProgressScreen.show(); - + Intent activity = new Intent(this, Courses.class); startActivityForResult(activity, Constants.COURSES_REQUEST_CODE); } private void createMenu() { - if (listCourses.size() != 0) { + if (!listCourses.isEmpty()) { Course courseSelected; if (Courses.getSelectedCourseCode() != -1) { courseSelected = dbHelper.getRow(DataBaseHelper.DB_TABLE_COURSES, "id", String.valueOf(Courses.getSelectedCourseCode())); + + Log.i(TAG + " createMenu", "Recovered selected course " + courseSelected + " from database"); } else { + Log.w(TAG + " createMenu", "There is no selected course"); + int lastSelected = Preferences.getLastCourseSelected(); if (lastSelected != -1 && lastSelected < listCourses.size()) { courseSelected = (Course) listCourses.get(lastSelected); Preferences.setLastCourseSelected(lastSelected); + + Log.i(TAG + " createMenu", "Setted last course selected to " + courseSelected); } else { courseSelected = (Course) listCourses.get(0); Preferences.setLastCourseSelected(0); + + Log.w(TAG + " createMenu", "No last course selected. Initialized last course selected to " + courseSelected); } Courses.setSelectedCourseCode(courseSelected.getId()); Courses.setSelectedCourseShortName(courseSelected.getShortName()); Courses.setSelectedCourseFullName(courseSelected.getFullName()); + Login.setCurrentUserRole(courseSelected.getUserRole()); } if (courseSelected != null) { - if ((mExpandableListView.getAdapter() == null) || dBCleaned) { - createBaseMenu(); - } + createBaseMenu(); int userRole = courseSelected.getUserRole(); switch(userRole) { case Constants.STUDENT_TYPE_CODE: - changeToStudentMenu(); - break; + changeToStudentMenu(); + break; case Constants.TEACHER_TYPE_CODE: - changeToTeacherMenu(); - break; + changeToTeacherMenu(); + break; } - - dBCleaned = false; } } else { - Courses.setSelectedCourseCode(-1); - currentRole = -1; + initializeSelectedCourse(); + + Log.w(TAG + " createMenu", "No courses available. Resetted selected course and current role to -1"); createNoCourseMenu(); } @@ -643,18 +641,11 @@ private void changeToTeacherMenu() { * Creates an empty Menu and mCoursesSpinner when the data base is empty */ protected void setMenuDbClean() { + initializeSelectedCourse(); + DataBaseHelper.setDbCleaned(false); - Courses.setSelectedCourseCode(-1); - Courses.setSelectedCourseShortName(""); - Courses.setSelectedCourseFullName(""); - Login.setCurrentUserRole(-1); - Preferences.setLastCourseSelected(-1); - dBCleaned = true; - listCourses.clear(); - cleanSpinner(); - createNoCourseMenu(); - refreshMainMenu(); + listCourses.clear(); } /** @@ -665,16 +656,16 @@ protected void setMenuDbClean() { public void onRefreshClick(View v) { getCurrentCourses(); } - + /** * @return true if user or password preference is empty */ - private boolean isUserOrPasswordEmpty() { - return TextUtils.isEmpty(Preferences.getUserID()) - || TextUtils.isEmpty(Preferences.getUserPassword()); - } - - private void initializeMainViews() { + private boolean isUserOrPasswordEmpty() { + return TextUtils.isEmpty(Preferences.getUserID()) + || TextUtils.isEmpty(Preferences.getUserPassword()); + } + + private void initializeMainViews() { mExpandableListView = (ExpandableListView) findViewById(R.id.expandableList); mNotifyLayout = (LinearLayout) findViewById(R.id.notify_layout); mNotifyTextView = (TextView) findViewById(R.id.notifyTextView); @@ -787,7 +778,7 @@ public boolean onChildClick(ExpandableListView parent, View v, int groupPosition }; mExpandableListView.setOnChildClickListener(mExpandableClickListener); - } + } private void refreshMainMenu() { mExpandableListAdapter = new TextExpandableListAdapter(this, mHeaderData, @@ -827,6 +818,31 @@ private void clearMenu() { Log.i(TAG, "Cleared Main Menu"); } + private void loadCourses() { + listCourses = dbHelper.getAllRows(DataBaseHelper.DB_TABLE_COURSES, "", "shortName"); + if (!listCourses.isEmpty()) { + Course c = (Course) listCourses.get(0); + + Courses.setSelectedCourseCode(c.getId()); + Courses.setSelectedCourseShortName(c.getShortName()); + Courses.setSelectedCourseFullName(c.getFullName()); + + Login.setCurrentUserRole(c.getUserRole()); + } else { + initializeSelectedCourse(); + } + } + + private void initializeSelectedCourse() { + Courses.setSelectedCourseCode(-1); + Courses.setSelectedCourseShortName(""); + Courses.setSelectedCourseFullName(""); + + Login.setCurrentUserRole(-1); + + Preferences.setLastCourseSelected(-1); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Course.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Course.java index 4f1d0519c..d58809b44 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Course.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Course.java @@ -117,14 +117,6 @@ public int hashCode() { return result; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "Course [id=" + getId() + " userRole=" + userRole + "getShortName=" + shortName + "getFullName=" + fullName + "]"; - } - /* (non-Javadoc) * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) */ @@ -208,4 +200,12 @@ public boolean equals(Object obj) { return userRole == other.userRole && shortName.compareTo(other.getShortName()) == 0 && fullName.compareTo(other.getFullName()) == 0; } + @Override + public String toString() { + return "Course{" + + "userRole=" + userRole + + ", shortName='" + shortName + '\'' + + ", fullName='" + fullName + '\'' + + "} " + super.toString(); + } } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Event.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Event.java index 455e240ca..fc1053506 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Event.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Event.java @@ -402,8 +402,7 @@ public void setProperty(int param, Object obj) { @Override public String toString() { return "Event{" + - "id=" + super.getId() + - ", hidden=" + hidden + + "hidden=" + hidden + ", userSurname1='" + userSurname1 + '\'' + ", userSurname2='" + userSurname2 + '\'' + ", userFirstName='" + userFirstName + '\'' + @@ -415,6 +414,6 @@ public String toString() { ", text='" + text + '\'' + ", groups='" + groups + '\'' + ", status='" + status + '\'' + - '}'; + "} " + super.toString(); } } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Group.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Group.java index 54371cb5b..bdd44a539 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Group.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Group.java @@ -190,12 +190,6 @@ public void setProperty(int param, Object obj) { } - @Override - public String toString() { - return "Group [id=" + getId() + ", name=" + groupName + ", getId()=" + getId() + ", getGroupTypeCode()=" + groupTypeCode + ", getMaxStudents()=" + maxStudents + ", getCurrentStudents()=" - + students + ", getOpen()=" + open + ", getDocumentsArea()=" + fileZones + ", getMember()= " + member; - } - /** * Gets group name * @@ -369,4 +363,16 @@ public boolean equals(Object obj) { return maxStudents == other.maxStudents && students == other.students && open == other.open && fileZones == other.fileZones && member == other.member; } + @Override + public String toString() { + return "Group{" + + "groupName='" + groupName + '\'' + + ", groupTypeCode=" + groupTypeCode + + ", maxStudents=" + maxStudents + + ", students=" + students + + ", open=" + open + + ", fileZones=" + fileZones + + ", member=" + member + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/GroupType.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/GroupType.java index 4b0f80c22..427c63556 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/GroupType.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/GroupType.java @@ -153,12 +153,6 @@ public void setProperty(int param, Object obj) { } - @Override - public String toString() { - return "GroupType [id=" + getId() + ", name=" + groupTypeName + ", getId()=" + getId() + ", getCourseCode()= " + courseCode + ", getMandatory()=" + mandatory + - ", getMultiple()=" + multiple + ", getOpenTime()= " + openTime; - } - /** * Gets group type name * @@ -225,4 +219,15 @@ public int getMultiple() { public long getOpenTime() { return openTime; } + + @Override + public String toString() { + return "GroupType{" + + "groupTypeName='" + groupTypeName + '\'' + + ", courseCode=" + courseCode + + ", mandatory=" + mandatory + + ", multiple=" + multiple + + ", openTime=" + openTime + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Model.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Model.java index dcc47bf86..634efb9f1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Model.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Model.java @@ -80,11 +80,10 @@ public boolean equals(Object obj) { return id == other.id; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ @Override public String toString() { - return "Model [id=" + id + "]"; + return "Model{" + + "id=" + id + + '}'; } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Pair.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Pair.java index 027f32fce..28e27e36d 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Pair.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Pair.java @@ -90,11 +90,11 @@ public int hashCode() { return result; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ @Override public String toString() { - return "Pair [first=" + first + ", second=" + second + "]"; + return "Pair{" + + "first=" + first + + ", second=" + second + + '}'; } } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/PairTable.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/PairTable.java index c45f29ad7..1c2b835f5 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/PairTable.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/PairTable.java @@ -121,15 +121,6 @@ public int hashCode() { return result; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "PairTable [values=" + values + ", table=" + table - + ", getId()=" + getId() + "]"; - } - public Object getProperty(int arg0) { // TODO Auto-generated method stub return null; @@ -149,4 +140,12 @@ public void setProperty(int arg0, Object arg1) { // TODO Auto-generated method stub } + + @Override + public String toString() { + return "PairTable{" + + "values=" + values + + ", table='" + table + '\'' + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java index 499d0e60b..f0ceeea74 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/SWADNotification.java @@ -409,26 +409,6 @@ public void setSeenRemote(boolean seenRemote) { this.seenRemote = seenRemote; } - @Override - public String toString() { - return "SWADNotification{" + - "eventCode=" + eventCode + - ", eventType='" + eventType + '\'' + - ", eventTime=" + eventTime + - ", userNickname='" + userNickname + '\'' + - ", userSurname1='" + userSurname1 + '\'' + - ", userSurname2='" + userSurname2 + '\'' + - ", userFirstName='" + userFirstName + '\'' + - ", userPhoto='" + userPhoto + '\'' + - ", location='" + location + '\'' + - ", summary='" + summary + '\'' + - ", status=" + status + - ", content='" + content + '\'' + - ", seenLocal=" + seenLocal + - ", seenRemote=" + seenRemote + - '}'; - } - @Override public boolean equals(Object o) { if (this == o) return true; @@ -644,4 +624,24 @@ public void setProperty(int param, Object obj) { break; } } + + @Override + public String toString() { + return "SWADNotification{" + + "eventCode=" + eventCode + + ", eventType='" + eventType + '\'' + + ", eventTime=" + eventTime + + ", userNickname='" + userNickname + '\'' + + ", userSurname1='" + userSurname1 + '\'' + + ", userSurname2='" + userSurname2 + '\'' + + ", userFirstName='" + userFirstName + '\'' + + ", userPhoto='" + userPhoto + '\'' + + ", location='" + location + '\'' + + ", summary='" + summary + '\'' + + ", status=" + status + + ", content='" + content + '\'' + + ", seenLocal=" + seenLocal + + ", seenRemote=" + seenRemote + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Test.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Test.java index acedc542c..97b289353 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Test.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/Test.java @@ -557,19 +557,6 @@ public void evaluate() { evaluated = true; } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "Test [CORRECT_ANSWER_SCORE=" + CORRECT_ANSWER_SCORE - + ", questionsAndAnswers=" + questions + ", min=" - + min + ", def=" + def + ", max=" + max + ", feedback=" - + feedback + ", editTime=" + editTime + ", totalScore=" - + totalScore + ", questionsScore=" + questionsScore - + ", getId()=" + getId() + "]"; - } - /* (non-Javadoc) * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) */ @@ -643,4 +630,20 @@ public void setProperty(int param, Object obj) { break; } } + + @Override + public String toString() { + return "Test{" + + "CORRECT_ANSWER_SCORE=" + CORRECT_ANSWER_SCORE + + ", questions=" + questions + + ", min=" + min + + ", def=" + def + + ", max=" + max + + ", feedback='" + feedback + '\'' + + ", editTime=" + editTime + + ", totalScore=" + totalScore + + ", questionsScore=" + questionsScore + + ", evaluated=" + evaluated + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestAnswer.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestAnswer.java index 878364085..b79c7431e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestAnswer.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestAnswer.java @@ -279,17 +279,6 @@ public boolean equals(Object obj) { return this == obj || super.equals(obj) && getClass() == obj.getClass(); } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "TestAnswer [id=" + getId() + ", qstCod=" + qstCod + ", ansInd=" + ansInd - + ", correct=" + correct + ", correctAnswered=" - + correctAnswered + ", answer=" + answer + ", feedback=" - + feedback + ", userAnswer=" + userAnswer + "]"; - } - /* (non-Javadoc) * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) */ @@ -383,4 +372,17 @@ public void setProperty(int param, Object obj) { break; } } + + @Override + public String toString() { + return "TestAnswer{" + + "qstCod=" + qstCod + + ", ansInd=" + ansInd + + ", correct=" + correct + + ", correctAnswered=" + correctAnswered + + ", answer='" + answer + '\'' + + ", feedback='" + feedback + '\'' + + ", userAnswer='" + userAnswer + '\'' + + "} " + super.toString(); + } } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestQuestion.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestQuestion.java index 8f86ac280..ed20ea184 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestQuestion.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestQuestion.java @@ -273,16 +273,6 @@ public boolean equals(Object obj) { return this == obj || super.equals(obj) && getClass() == obj.getClass(); } - /* (non-Javadoc) - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - return "TestQuestion [id=" + getId() + ", crsCod=" + crsCod + ", stem=" + stem - + ", answerType=" + answerType + ", shuffle=" + shuffle - + ", feedback=" + feedback + ", answers=" + answers + "]"; - } - /* (non-Javadoc) * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) */ @@ -366,4 +356,16 @@ public void setProperty(int param, Object obj) { break; } } + + @Override + public String toString() { + return "TestQuestion{" + + "crsCod=" + crsCod + + ", stem='" + stem + '\'' + + ", answerType='" + answerType + '\'' + + ", shuffle=" + shuffle + + ", feedback='" + feedback + '\'' + + ", answers=" + answers + + "} " + super.toString(); + } } \ No newline at end of file diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestTag.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestTag.java index 42cefcd29..8d60d81e3 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestTag.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/TestTag.java @@ -116,12 +116,6 @@ public void setTagInd(int tagInd) { this.tagInd = tagInd; } - @Override - public String toString() { - return "TestTag [id=" + getId() + ", qstCodList=" + qstCodList + ", tagTxt=" + tagTxt - + ", tagInd=" + tagInd + "]"; - } - /* (non-Javadoc) * @see org.ksoap2.serialization.KvmSerializable#getProperty(int) */ @@ -226,4 +220,13 @@ public void addQstCod(Integer qstCod) { this.qstCodList.add(qstCod); } + + @Override + public String toString() { + return "TestTag{" + + "qstCodList=" + qstCodList + + ", tagTxt='" + tagTxt + '\'' + + ", tagInd=" + tagInd + + "} " + super.toString(); + } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java index ff8e79cdd..552b6dc8e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/User.java @@ -21,6 +21,7 @@ import org.ksoap2.serialization.PropertyInfo; +import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; @@ -94,6 +95,8 @@ public class User extends Model { PI_userRole }; + private static DateFormat dateFormat = DateFormat.getDateInstance(); + public User() { super(-1); } @@ -432,6 +435,6 @@ public String toString() { ", userPhoto='" + userPhoto + '\'' + ", userBirthday=" + userBirthday + ", userRole=" + userRole + - '}'; + "} " + super.toString(); } } diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserAttendance.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserAttendance.java index fc9a061c3..8a3d0bc7e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserAttendance.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserAttendance.java @@ -157,6 +157,6 @@ public String toString() { return "UserAttendance{" + "eventCode=" + eventCode + ", userPresent=" + userPresent + - '}'; + "} " + super.toString(); } } From 1b9ad36c904fc039f013dcc2b6e18495414963f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rub=C3=A9n=20Mart=C3=ADn=20Hidalgo?= Date: Sat, 27 Aug 2016 18:36:21 +0200 Subject: [PATCH 094/103] corrections in pull request --- .../ugr/swad/swadroid/model/FrequentUser.java | 4 +- .../ugr/swad/swadroid/model/UserFilter.java | 3 +- .../messages/FrequentUsersAdapter.java | 4 + .../swadroid/modules/messages/Messages.java | 101 ++++-------- .../modules/messages/SearchUsers.java | 145 ++++++------------ .../src/main/res/layout-v11/list_users.xml | 25 +-- .../src/main/res/layout/messages_screen.xml | 21 +-- 7 files changed, 89 insertions(+), 214 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java index 1633aa582..8e9ac970e 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/FrequentUser.java @@ -20,6 +20,8 @@ package es.ugr.swad.swadroid.model; import org.ksoap2.serialization.PropertyInfo; + +import java.io.Serializable; import java.util.Hashtable; /** @@ -27,7 +29,7 @@ * * @author Rubén Martín Hidalgo */ -public class FrequentUser extends Model { +public class FrequentUser extends Model implements Serializable{ /** * Sender identifier. */ diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java index e9753ba6b..f57ac09df 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/model/UserFilter.java @@ -21,6 +21,7 @@ import org.ksoap2.serialization.PropertyInfo; +import java.io.Serializable; import java.util.Hashtable; /** @@ -28,7 +29,7 @@ * * @author Rubén Martín Hidalgo */ -public class UserFilter extends Model{ +public class UserFilter extends Model implements Serializable{ /** * User identifier. */ diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java index c124eb83b..4a5b7b48a 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java @@ -21,6 +21,7 @@ package es.ugr.swad.swadroid.modules.messages; import android.content.Context; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -33,6 +34,7 @@ import java.util.List; +import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.FrequentUser; @@ -46,6 +48,8 @@ public class FrequentUsersAdapter extends ArrayAdapter { private LayoutInflater inflater; private ImageLoader loader; + private static final String TAG = Constants.APP_TAG + " FrequentUsersAdapter"; + private static class ViewHolder { ImageView image; TextView name; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java index 1b73f931d..efe78bc1f 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/Messages.java @@ -46,8 +46,10 @@ import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.database.DataBaseHelper; import es.ugr.swad.swadroid.gui.ImageFactory; +import es.ugr.swad.swadroid.gui.ProgressScreen; import es.ugr.swad.swadroid.model.FrequentUser; import es.ugr.swad.swadroid.model.User; +import es.ugr.swad.swadroid.model.UserFilter; import es.ugr.swad.swadroid.modules.Module; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.utils.Utils; @@ -94,25 +96,9 @@ public class Messages extends Module { */ private String receiversNames; /** - * Array of nicknames + * Array of receivers */ - private ArrayList arrayReceivers; - /** - * Array of firstnames - */ - private ArrayList arrayReceiversFirstNames; - /** - * Array of first surnames - */ - private ArrayList arrayReceiversSurNames1; - /** - * Array of second surnames - */ - private ArrayList arrayReceiversSurNames2; - /** - * Array of photos - */ - private ArrayList arrayPhotos; + private ArrayList arrayReceivers; /** * Message's subject */ @@ -121,10 +107,6 @@ public class Messages extends Module { * Message's body */ private String body; - /** - * Receivers EditText - */ - private EditText rcvEditText; /** * Subject EditText */ @@ -152,7 +134,7 @@ public class Messages extends Module { /** * Layout of sending progress */ - private LinearLayout progressLayout; + private ProgressScreen progressLayout; /** * Layout of message screen */ @@ -183,11 +165,7 @@ protected void onCreate(Bundle savedInstanceState) { receivers = ""; receiversNames = ""; - arrayReceivers = new ArrayList<>(); - arrayReceiversFirstNames = new ArrayList<>(); - arrayReceiversSurNames1 = new ArrayList<>(); - arrayReceiversSurNames2 = new ArrayList<>(); - arrayPhotos = new ArrayList<>(); + arrayReceivers = new ArrayList(); sender = ""; userLogged = Login.getLoggedUser().getUserID(); @@ -208,9 +186,10 @@ protected void onCreate(Bundle savedInstanceState) { layout = (ViewGroup) findViewById(R.id.layout_receivers); messageLayout = (LinearLayout) findViewById(R.id.message_screen); - progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); - TextView textLoading = (TextView) findViewById(R.id.text_progress); - textLoading.setText(R.string.sendingMessageMsg); + View mMessageView = findViewById(R.id.message_screen); + View mProgressScreenView = findViewById(R.id.progress_screen); + progressLayout = new ProgressScreen(mProgressScreenView, mMessageView, + getString(R.string.sendingMessageMsg), this); loader = ImageFactory.init(this, true, true, R.drawable.usr_bl, R.drawable.usr_bl, R.drawable.usr_bl); @@ -230,16 +209,8 @@ protected void onCreate(Bundle savedInstanceState) { public void onClick(View v) { Intent intent = new Intent (Messages.this, SearchUsers.class); intent.putExtra("receivers", arrayReceivers); - intent.putExtra("receiversFirstNames", arrayReceiversFirstNames); - intent.putExtra("receiversSurNames1", arrayReceiversSurNames1); - intent.putExtra("receiversSurNames2", arrayReceiversSurNames2); - intent.putExtra("receiversPhotos", arrayPhotos); intent.putExtra("senderName", sender); intent.putExtra("senderPhoto", senderPhoto); - receivers = ""; - for(int i=0; i 3) { - i = arrayReceiversFirstNames.size() - 3; + else if (arrayReceivers.size() > 3) { + i = arrayReceivers.size() - 3; seeAll.setVisibility(View.VISIBLE); seeAll.setText(getResources().getString(R.string.see_all)); } @@ -629,21 +586,21 @@ else if (arrayReceiversFirstNames.size() > 3) { } - while (i < arrayReceiversFirstNames.size()){ + while (i < arrayReceivers.size()){ layout.setVisibility(View.VISIBLE); LayoutInflater inflater = LayoutInflater.from(this); final View linearLayout = inflater.inflate(R.layout.receivers_item, null, false); final TextView textName = (TextView) linearLayout.findViewById(R.id.textName); - textName.setText(arrayReceiversFirstNames.get(i).toString() + " " - + arrayReceiversSurNames1.get(i).toString() + " " - + arrayReceiversSurNames2.get(i).toString()); + textName.setText(arrayReceivers.get(i).getUserFirstname() + " " + + arrayReceivers.get(i).getUserSurname1() + " " + + arrayReceivers.get(i).getUserSurname2()); final TextView textNickname = (TextView) linearLayout.findViewById(R.id.textNickname); - textNickname.setText(arrayReceivers.get(i).toString()); + textNickname.setText(arrayReceivers.get(i).getUserNickname()); ImageView photo = (ImageView) linearLayout.findViewById(R.id.imageView); - String userPhoto = arrayPhotos.get(i).toString(); + String userPhoto = arrayReceivers.get(i).getUserPhoto(); if (Utils.connectionAvailable(this) && (userPhoto != null) && !userPhoto.equals("") && !userPhoto.equals(Constants.NULL_VALUE)) { diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index a950b8cfd..1329139a1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -19,7 +19,6 @@ import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.CheckBox; -import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; @@ -30,6 +29,7 @@ import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.database.DataBaseHelper; +import es.ugr.swad.swadroid.gui.ProgressScreen; import es.ugr.swad.swadroid.model.FrequentUser; import es.ugr.swad.swadroid.model.User; import es.ugr.swad.swadroid.model.UserFilter; @@ -63,45 +63,13 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene */ private String search; /** - * Array of nicknames + * Array of receivers */ - private ArrayList arrayReceivers; + private ArrayList arrayReceivers; /** - * Array of firstnames + * Array of old receivers. It's used when we discard the users added */ - private ArrayList arrayReceiversFirstNames; - /** - * Array of first surnames - */ - private ArrayList arrayReceiversSurNames1; - /** - * Array of second surnames - */ - private ArrayList arrayReceiversSurNames2; - /** - * Array of photos - */ - private ArrayList arrayPhotos; - /** - * Array of old nicknames. It's used when we discard the users added - */ - private ArrayList oldReceivers; - /** - * Array of old firstnames - */ - private ArrayList oldReceiversFirstNames; - /** - * Array of old first surnames - */ - private ArrayList oldReceiversSurNames1; - /** - * Array of old second surnames - */ - private ArrayList oldReceiversSurNames2; - /** - * Array of old photos - */ - private ArrayList oldPhotos; + private ArrayList oldReceivers; /** * Adapter to show UserFilter in list */ @@ -125,7 +93,7 @@ public class SearchUsers extends Module implements SearchView.OnQueryTextListene /** * Loading screen */ - private LinearLayout progressLayout; + private ProgressScreen progressLayout; /** * True if buttons of ActionBar are hidden */ @@ -169,17 +137,9 @@ protected void onCreate(Bundle savedInstanceState) { usersFilter = new UsersList(); frequentUsers = new FrequentUsersList(); - arrayReceivers = getIntent().getStringArrayListExtra("receivers"); - arrayReceiversFirstNames = getIntent().getStringArrayListExtra("receiversFirstNames"); - arrayReceiversSurNames1 = getIntent().getStringArrayListExtra("receiversSurNames1"); - arrayReceiversSurNames2 = getIntent().getStringArrayListExtra("receiversSurNames2"); - arrayPhotos = getIntent().getStringArrayListExtra("receiversPhotos"); + arrayReceivers = (ArrayList) getIntent().getSerializableExtra("receivers"); //save the old receivers oldReceivers = (ArrayList) arrayReceivers.clone(); - oldReceiversFirstNames = (ArrayList) arrayReceiversFirstNames.clone(); - oldReceiversSurNames1 = (ArrayList) arrayReceiversSurNames1.clone(); - oldReceiversSurNames2 = (ArrayList) arrayReceiversSurNames2.clone(); - oldPhotos = (ArrayList) arrayPhotos.clone(); search = ""; @@ -188,9 +148,10 @@ protected void onCreate(Bundle savedInstanceState) { lvUsers.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); //loading screen - progressLayout = (LinearLayout) findViewById(R.id.progressbar_view); - TextView textLoading = (TextView) findViewById(R.id.text_progress); - textLoading.setText(R.string.loadingMsg); + View mUsersListView = findViewById(R.id.layoutUsersList); + View mProgressScreenView = findViewById(R.id.progress_screen); + progressLayout = new ProgressScreen(mProgressScreenView, mUsersListView, + getString(R.string.loadingMsg), this); //frequent users screen frequentUsersTitle = (TextView) findViewById(R.id.listTitle); @@ -217,20 +178,12 @@ protected void onCreate(Bundle savedInstanceState) { String surname2 = frequentsList.get(i).getUserSurname2(); String firstname = frequentsList.get(i).getUserFirstname(); String userPhoto = frequentsList.get(i).getUserPhoto(); - if(userPhoto.isEmpty()) - userPhoto = "https://swad.ugr.es/swad/icon/usr_bl.jpg"; //if I don't use this, put any image boolean selected = frequentsList.get(i).getCheckbox(); Double score = frequentsList.get(i).getScore(); frequentUsers.saveUser(new FrequentUser(idUser, nickname, surname1, surname2, firstname, userPhoto, selected, score)); } - for(int i=0; i parent, View view, int position, long id) checkbox = (CheckBox) view.findViewById(R.id.check); if (checkbox.isChecked()){ checkbox.setChecked(false); - int index = arrayReceivers.indexOf(usersFilter.getUsers().get(position).getUserNickname()); - arrayReceivers.remove(index); - arrayReceiversFirstNames.remove(index); - arrayReceiversSurNames1.remove(index); - arrayReceiversSurNames2.remove(index); - arrayPhotos.remove(index); + for(int i=0; i parent, View view, int position, long id) checkbox = (CheckBox) view.findViewById(R.id.check); if (checkbox.isChecked()){ checkbox.setChecked(false); - int index = arrayReceivers.indexOf(frequentUsers.getUsers().get(position).getUserNickname()); - arrayReceivers.remove(index); - arrayReceiversFirstNames.remove(index); - arrayReceiversSurNames1.remove(index); - arrayReceiversSurNames2.remove(index); - arrayPhotos.remove(index); + for(int i=0; i parent, View view, int position, long id) private void updateCheckboxesUsersFilter(){ boolean result; - for(int i=0; i - - - - - - + + android:id="@+id/layoutUsersList" > diff --git a/SWADroid/src/main/res/layout/messages_screen.xml b/SWADroid/src/main/res/layout/messages_screen.xml index 92842d653..67f11dc92 100644 --- a/SWADroid/src/main/res/layout/messages_screen.xml +++ b/SWADroid/src/main/res/layout/messages_screen.xml @@ -5,26 +5,7 @@ android:gravity="center_horizontal" android:orientation="vertical" > - - - - - - + Date: Sat, 27 Aug 2016 19:37:10 +0200 Subject: [PATCH 095/103] Added a new contributor --- README.md | 3 +++ SWADroid/src/main/res/raw-es/authors.html | 5 +++++ SWADroid/src/main/res/raw/authors.html | 5 +++++ 3 files changed, 13 insertions(+) diff --git a/README.md b/README.md index da0156513..c7fb288b6 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,8 @@ Copyright (C) 2010, Juan Miguel Boyero Corral [![Copyright and License](https://img.shields.io/badge/license-Apache%202-green.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) SWADroid uses [MathJax](https://www.mathjax.org/) library developed by The MathJax Team and licensed under [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0). +[![Copyright and License](https://img.shields.io/badge/license-Apache%202-green.svg?style=flat)](http://www.apache.org/licenses/LICENSE-2.0) SWADroid uses [GSon](https://github.com/google/gson) library developed by Google and licensed under [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0). + Author ------ @@ -40,6 +42,7 @@ Contributors - [Antonio Aguilera Malagón](http://www.slideshare.net/antonioaguileramalagon) - [José Antonio Guerrero Avilés](http://www.linkedin.com/in/antonioguerreroaviles) - [Alejandro Alcalde](http://elbauldelprogramador.com/) +- [Rubén Martín Hidalgo](https://github.com/romilgildo) Contributing ------------ diff --git a/SWADroid/src/main/res/raw-es/authors.html b/SWADroid/src/main/res/raw-es/authors.html index 3320551fa..e1bfe1296 100644 --- a/SWADroid/src/main/res/raw-es/authors.html +++ b/SWADroid/src/main/res/raw-es/authors.html @@ -39,5 +39,10 @@
  • Módulos de autenticación
  • +
  • Rubén Martín Hidalgo +
      +
    • Mensajes: Búsqueda de destinatarios
    • +
    +
  • diff --git a/SWADroid/src/main/res/raw/authors.html b/SWADroid/src/main/res/raw/authors.html index 2ecb70bcf..87c223b64 100644 --- a/SWADroid/src/main/res/raw/authors.html +++ b/SWADroid/src/main/res/raw/authors.html @@ -39,5 +39,10 @@
  • Module for authentication
  • +
  • Rubén Martín Hidalgo +
      +
    • Messages: Search of recipients
    • +
    +
  • From 0e7b0ef2de35dd4fb5590a5c15cbe6a56dee796d Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Sat, 27 Aug 2016 20:17:59 +0200 Subject: [PATCH 096/103] Now all tables except frequent_recipients are emptied during logout --- .../swad/swadroid/database/DataBaseHelper.java | 16 ++++++++++++++++ .../swad/swadroid/preferences/Preferences.java | 14 +++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index 75429e6af..78c162fc1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -567,6 +567,22 @@ public T getRow(String table, String fieldName, Object fieldVa return row; } + /** + * Gets all tablenames of the database + * + * @return A list of all tablenames of the database + */ + public List getAllTablenames() { + List result = new ArrayList<>(); + Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name", null); + + while (cursor.moveToNext()) { + result.add(cursor.getString(0)); + } + + return result; + } + /** * Gets an user * diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java index f2ffcbbb2..ac3ce8507 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java @@ -29,6 +29,7 @@ import com.google.gson.Gson; import java.security.NoSuchAlgorithmException; +import java.util.List; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.analytics.SWADroidTracker; @@ -474,7 +475,18 @@ public static void upgradeCredentials() throws NoSuchAlgorithmException { * Clean data of all tables from database. Removes users photos from external storage */ private static void cleanDatabase() { - dbHelper.cleanTables(); + List tablenames = dbHelper.getAllTablenames(); + + //Empty all tables except DB_TABLE_FREQUENT_RECIPIENTS + dbHelper.beginTransaction(); + + for(String table : tablenames) { + if(!DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS.equals(table)) { + dbHelper.emptyTable(table); + } + } + + dbHelper.endTransaction(true); Preferences.setLastCourseSelected(0); DataBaseHelper.setDbCleaned(true); From b29e6efe6395918ee9bf84e5858eee4e09455320 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Sun, 28 Aug 2016 12:17:46 +0200 Subject: [PATCH 097/103] Encrypted frequent recipients --- .../java/es/ugr/swad/swadroid/SWADMain.java | 1 - .../swadroid/database/DataBaseHelper.java | 37 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 4a3c6a242..0102acc80 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -180,7 +180,6 @@ public void onCreate(Bundle icicle) { */ SecureConnection conn = new SecureConnection(); conn.initSecureConnection(); - //conn.initUntrustedSecureConnection(); Log.i(TAG, "Android API < 11 (HONEYCOMB). Adding SSL certificates manually"); } else { Log.i(TAG, "Android API >= 11 (HONEYCOMB). Using SSL built-in certificates"); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java index 78c162fc1..e4ada3463 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/database/DataBaseHelper.java @@ -462,11 +462,11 @@ private T createObjectByTable(String table, Entity ent) { break; case DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS: o = new FrequentUser(ent.getString("idUser"), - ent.getString("nicknameRecipient"), - ent.getString("surname1Recipient"), - ent.getString("surname2Recipient"), - ent.getString("firstnameRecipient"), - ent.getString("photoRecipient"), + crypto.decrypt(ent.getString("nicknameRecipient")), + crypto.decrypt(ent.getString("surname1Recipient")), + crypto.decrypt(ent.getString("surname2Recipient")), + crypto.decrypt(ent.getString("firstnameRecipient")), + crypto.decrypt(ent.getString("photoRecipient")), false, ent.getDouble("score")); break; @@ -1426,11 +1426,11 @@ public void insertEventCourse(long eventCode, long crsCod) { public void insertFrequentRecipient(FrequentUser user) { Entity ent = new Entity(DataBaseHelper.DB_TABLE_FREQUENT_RECIPIENTS); ent.setValue("idUser", user.getidUser()); - ent.setValue("nicknameRecipient", user.getUserNickname()); - ent.setValue("surname1Recipient", user.getUserSurname1()); - ent.setValue("surname2Recipient", user.getUserSurname2()); - ent.setValue("firstnameRecipient", user.getUserFirstname()); - ent.setValue("photoRecipient", user.getUserPhoto()); + ent.setValue("nicknameRecipient", crypto.encrypt(user.getUserNickname())); + ent.setValue("surname1Recipient", crypto.encrypt(user.getUserSurname1())); + ent.setValue("surname2Recipient", crypto.encrypt(user.getUserSurname2())); + ent.setValue("firstnameRecipient", crypto.encrypt(user.getUserFirstname())); + ent.setValue("photoRecipient", crypto.encrypt(user.getUserPhoto())); ent.setValue("score", user.getScore()); ent.save(); } @@ -1445,15 +1445,18 @@ public int insertFrequentsList(List list) { int numElements = 0; for(int i=0; i Date: Sun, 28 Aug 2016 22:07:23 +0200 Subject: [PATCH 098/103] fixes in adapters of userslist and frequentslist --- .../messages/FrequentUsersAdapter.java | 46 +++++++++++-------- .../modules/messages/SearchUsers.java | 26 ++++++----- .../modules/messages/UsersAdapter.java | 38 +++++++++------ 3 files changed, 66 insertions(+), 44 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java index 4a5b7b48a..6343016af 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersAdapter.java @@ -21,12 +21,12 @@ package es.ugr.swad.swadroid.modules.messages; import android.content.Context; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; +import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.TextView; @@ -34,7 +34,6 @@ import java.util.List; -import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.gui.ImageFactory; import es.ugr.swad.swadroid.model.FrequentUser; @@ -47,8 +46,7 @@ public class FrequentUsersAdapter extends ArrayAdapter { private LayoutInflater inflater; private ImageLoader loader; - - private static final String TAG = Constants.APP_TAG + " FrequentUsersAdapter"; + List list; private static class ViewHolder { ImageView image; @@ -57,32 +55,42 @@ private static class ViewHolder { } public FrequentUsersAdapter(Context context, List objects) { - super(context, 0, objects); + super(context, R.layout.row_user, objects); this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, R.drawable.usr_bl); this.inflater = LayoutInflater.from(context); + this.list = objects; } public View getView(int position, View convertView, ViewGroup parent) { - // Does the current view exist? + FrequentUser user = getItem(position); + ViewHolder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.row_user, parent, false); + holder = new ViewHolder(); + + // UI references + holder.image = (ImageView) convertView.findViewById(R.id.imageView); + holder.name = (TextView) convertView.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); + + holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. + list.get(getPosition).setCheckbox(buttonView.isChecked()); // Set the value of checkbox to maintain its state. + } + }); + convertView.setTag(holder); + convertView.setTag(R.id.check, holder.checkbox); + } else { + holder = (ViewHolder) convertView.getTag(); } + holder.checkbox.setTag(position); // This line is important. + holder.checkbox.setChecked(list.get(position).getCheckbox()); - ViewHolder holder = new ViewHolder(); - - // UI references - holder.image = (ImageView) convertView.findViewById(R.id.imageView); - holder.name = (TextView) convertView.findViewById(R.id.text_user); - holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); - - // Current user - FrequentUser user = getItem(position); - - holder.checkbox.setChecked(user.getCheckbox()); - - // Setup row if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty holder.image.setImageResource(R.drawable.usr_bl); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index 1329139a1..f3519def9 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -455,25 +455,27 @@ public void onItemClick(AdapterView parent, View view, int position, long id) } private void updateCheckboxesUsersFilter(){ - boolean result; + boolean selected; String nickname; - for(int i=0; i { private LayoutInflater inflater; private ImageLoader loader; + List list; private static class ViewHolder { ImageView image; @@ -50,32 +52,42 @@ private static class ViewHolder { } public UsersAdapter(Context context, List objects) { - super(context, 0, objects); + super(context, R.layout.row_user, objects); this.loader = ImageFactory.init(context, true, true, R.drawable.usr_bl, R.drawable.usr_bl, R.drawable.usr_bl); this.inflater = LayoutInflater.from(context); + this.list = objects; } public View getView(int position, View convertView, ViewGroup parent) { - // Does the current view exist? + UserFilter user = getItem(position); + ViewHolder holder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.row_user, parent, false); - } + holder = new ViewHolder(); - ViewHolder holder = new ViewHolder(); + // UI references + holder.image = (ImageView) convertView.findViewById(R.id.imageView); + holder.name = (TextView) convertView.findViewById(R.id.text_user); + holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); - // UI references - holder.image = (ImageView) convertView.findViewById(R.id.imageView); - holder.name = (TextView) convertView.findViewById(R.id.text_user); - holder.checkbox = (CheckBox) convertView.findViewById(R.id.check); + holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { - // Current user - UserFilter user = getItem(position); - - holder.checkbox.setChecked(user.getCheckbox()); + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. + list.get(getPosition).setCheckbox(buttonView.isChecked()); // Set the value of checkbox to maintain its state. + } + }); + convertView.setTag(holder); + convertView.setTag(R.id.check, holder.checkbox); + } else { + holder = (ViewHolder) convertView.getTag(); + } + holder.checkbox.setTag(position); // This line is important. + holder.checkbox.setChecked(list.get(position).getCheckbox()); - // Setup row if(user.getUserPhoto().isEmpty()) //when the user don't have photo, the string is empty holder.image.setImageResource(R.drawable.usr_bl); From 43d70abb6c0e4191ecb2ff7b315e60d9e768a5e8 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Mon, 29 Aug 2016 20:01:50 +0200 Subject: [PATCH 099/103] Fixed bug in refreshing of main menu --- .../java/es/ugr/swad/swadroid/SWADMain.java | 215 ++++++++---------- .../swadroid/preferences/Preferences.java | 17 +- SWADroid/src/main/res/values-es/strings.xml | 1 - SWADroid/src/main/res/values/strings.xml | 1 - 4 files changed, 110 insertions(+), 124 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java index 32f2387b1..579f9b929 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/SWADMain.java @@ -34,6 +34,7 @@ import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ImageView; @@ -111,6 +112,7 @@ public class SWADMain extends MenuExpandableListActivity { */ private boolean firstRun = false; + /** * Current role 2 - student 3 - teacher -1 - none role was chosen */ @@ -218,14 +220,16 @@ protected void onResume() { super.onResume(); if (isUserOrPasswordEmpty() && listCourses.isEmpty()) { - Log.i(TAG, "Logging on user " + Preferences.getUserID() + " against the server " - + Preferences.getServer() + " ..."); - startActivityForResult(new Intent(this, LoginActivity.class), Constants.LOGIN_REQUEST_CODE); } else { if(Preferences.isPreferencesChanged() || DataBaseHelper.isDbCleaned()) { + DataBaseHelper.setDbCleaned(false); + Preferences.setPreferencesChanged(false); - setMenuDbClean(); + Preferences.initializeSelectedCourse(); + + listCourses.clear(); + courseCode = -1; } else if(!firstRun) { courseCode = Courses.getSelectedCourseCode(); } @@ -235,8 +239,6 @@ protected void onResume() { && DateTimeUtils.isBirthday(Login.getLoggedUser().getUserBirthday())) { showBirthdayMessage(); - } else if ((listCourses == null) || listCourses.isEmpty()) { - showNoCoursesMessage(); } else { mNotifyLayout.setVisibility(View.GONE); } @@ -256,12 +258,6 @@ private void showBirthdayMessage() { mNotifyLayout.setVisibility(View.VISIBLE); } - private void showNoCoursesMessage() { - mNotifyImageView.setVisibility(View.GONE); - mNotifyTextView.setText(getString(R.string.noCoursesMsg)); - mNotifyLayout.setVisibility(View.VISIBLE); - } - /** * Initializes application on first run * @param currentVersion Current version of application @@ -276,7 +272,7 @@ private void firstRun(int currentVersion) { Preferences.setLastVersion(currentVersion); firstRun = true; - initializeSelectedCourse(); + Preferences.initializeSelectedCourse(); } /** @@ -325,6 +321,10 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } mProgressScreen.hide(); + + createSpinnerAdapter(); + createMenu(); + break; case Constants.LOGIN_REQUEST_CODE: getCurrentCourses(); @@ -381,10 +381,9 @@ private void createSpinnerAdapter() { * Create an empty spinner. It is called when the database is cleaned. */ private void cleanSpinner() { - /*ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]{getString(R.string.clickToGetCourses)}); + ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, new String[]{getString(R.string.clickToGetCourses)}); mCoursesSpinner.setAdapter(adapter); - mCoursesSpinner.setOnTouchListener(Spinner_OnTouch);*/ - mCoursesSpinner.setVisibility(View.GONE); + mCoursesSpinner.setOnTouchListener(Spinner_OnTouch); Log.i(TAG, "Cleaned Spinner adapter"); } @@ -469,27 +468,24 @@ private void createMenu() { Courses.setSelectedCourseCode(courseSelected.getId()); Courses.setSelectedCourseShortName(courseSelected.getShortName()); Courses.setSelectedCourseFullName(courseSelected.getFullName()); - - Login.setCurrentUserRole(courseSelected.getUserRole()); } - if (courseSelected != null) { - createBaseMenu(); - - int userRole = courseSelected.getUserRole(); + createBaseMenu(); - switch(userRole) { - case Constants.STUDENT_TYPE_CODE: - changeToStudentMenu(); - break; - case Constants.TEACHER_TYPE_CODE: - changeToTeacherMenu(); - break; + int userRole = courseSelected.getUserRole(); - } + switch(userRole) { + case Constants.STUDENT_TYPE_CODE: + changeToStudentMenu(); + break; + case Constants.TEACHER_TYPE_CODE: + changeToTeacherMenu(); + break; } + + Login.setCurrentUserRole(userRole); } else { - initializeSelectedCourse(); + Preferences.initializeSelectedCourse(); Log.w(TAG + " createMenu", "No courses available. Resetted selected course and current role to -1"); @@ -534,74 +530,72 @@ private void createNoCourseMenu() { * Sets currentRole to student role */ private void createBaseMenu() { - if (mExpandableListView.getAdapter() == null || currentRole == -1) { - clearMenu(); - - //the menu base is equal to students menu. - currentRole = Constants.STUDENT_TYPE_CODE; - - //Order: - // 1- Course - // 2- Evaluation - // 3- Messages - // 4- Enrollment - // 5- Users - mHeaderData.add(getMenuItem(R.string.course, R.string.fa_folder_open)); - mHeaderData.add(getMenuItem(R.string.evaluation, R.string.fa_check_square_o)); - mHeaderData.add(getMenuItem(R.string.users, R.string.fa_users)); - mHeaderData.add(getMenuItem(R.string.messages, R.string.fa_envelope)); - - final ArrayList> courseData = new ArrayList<>(); - mChildData.add(courseData); - - final ArrayList> evaluationData = new ArrayList<>(); - mChildData.add(evaluationData); - - mChildData.add(mUsersData); - mChildData.add(mMessagesData); - - //Course category - //Introduction - courseData.add(getMenuItem(R.string.introductionModuleLabel, R.string.fa_info)); - //Teaching Guide - courseData.add(getMenuItem(R.string.teachingguideModuleLabel, R.string.fa_file_text)); - //Syllabus (lectures) - courseData.add(getMenuItem(R.string.syllabusLecturesModuleLabel, R.string.fa_list_ol)); - //Syllabus (practicals) - courseData.add(getMenuItem(R.string.syllabusPracticalsModuleLabel, R.string.fa_flask)); - //Documents - courseData.add(getMenuItem(R.string.documentsDownloadModuleLabel, R.string.fa_folder_open)); - //Shared area - courseData.add(getMenuItem(R.string.sharedsDownloadModuleLabel, R.string.fa_folder_open)); - //Bibliography - courseData.add(getMenuItem(R.string.bibliographyModuleLabel, R.string.fa_folder_open)); - //FAQs - courseData.add(getMenuItem(R.string.faqsModuleLabel, R.string.fa_question)); - //Links - courseData.add(getMenuItem(R.string.linksModuleLabel, R.string.fa_link)); - - //Evaluation category - //Assessment system - evaluationData.add(getMenuItem(R.string.assessmentModuleLabel, R.string.fa_info)); - //Test - evaluationData.add(getMenuItem(R.string.testsModuleLabel, R.string.fa_check_square_o)); - //Marks - evaluationData.add(getMenuItem(R.string.marksModuleLabel, R.string.fa_list_alt)); - - //Users category - //Groups - mUsersData.add(getMenuItem(R.string.myGroupsModuleLabel, R.string.fa_sitemap)); - //Generate QR code - mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.string.fa_qrcode)); - - //Messages category - //Notifications - mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.string.fa_bell)); - //Messages - mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.string.fa_pencil_square_o)); - - Log.i(TAG, "Created Base Menu"); - } + clearMenu(); + + //the menu base is equal to students menu. + currentRole = Constants.STUDENT_TYPE_CODE; + + //Order: + // 1- Course + // 2- Evaluation + // 3- Messages + // 4- Enrollment + // 5- Users + mHeaderData.add(getMenuItem(R.string.course, R.string.fa_folder_open)); + mHeaderData.add(getMenuItem(R.string.evaluation, R.string.fa_check_square_o)); + mHeaderData.add(getMenuItem(R.string.users, R.string.fa_users)); + mHeaderData.add(getMenuItem(R.string.messages, R.string.fa_envelope)); + + final ArrayList> courseData = new ArrayList<>(); + mChildData.add(courseData); + + final ArrayList> evaluationData = new ArrayList<>(); + mChildData.add(evaluationData); + + mChildData.add(mUsersData); + mChildData.add(mMessagesData); + + //Course category + //Introduction + courseData.add(getMenuItem(R.string.introductionModuleLabel, R.string.fa_info)); + //Teaching Guide + courseData.add(getMenuItem(R.string.teachingguideModuleLabel, R.string.fa_file_text)); + //Syllabus (lectures) + courseData.add(getMenuItem(R.string.syllabusLecturesModuleLabel, R.string.fa_list_ol)); + //Syllabus (practicals) + courseData.add(getMenuItem(R.string.syllabusPracticalsModuleLabel, R.string.fa_flask)); + //Documents + courseData.add(getMenuItem(R.string.documentsDownloadModuleLabel, R.string.fa_folder_open)); + //Shared area + courseData.add(getMenuItem(R.string.sharedsDownloadModuleLabel, R.string.fa_folder_open)); + //Bibliography + courseData.add(getMenuItem(R.string.bibliographyModuleLabel, R.string.fa_folder_open)); + //FAQs + courseData.add(getMenuItem(R.string.faqsModuleLabel, R.string.fa_question)); + //Links + courseData.add(getMenuItem(R.string.linksModuleLabel, R.string.fa_link)); + + //Evaluation category + //Assessment system + evaluationData.add(getMenuItem(R.string.assessmentModuleLabel, R.string.fa_info)); + //Test + evaluationData.add(getMenuItem(R.string.testsModuleLabel, R.string.fa_check_square_o)); + //Marks + evaluationData.add(getMenuItem(R.string.marksModuleLabel, R.string.fa_list_alt)); + + //Users category + //Groups + mUsersData.add(getMenuItem(R.string.myGroupsModuleLabel, R.string.fa_sitemap)); + //Generate QR code + mUsersData.add(getMenuItem(R.string.generateQRModuleLabel, R.string.fa_qrcode)); + + //Messages category + //Notifications + mMessagesData.add(getMenuItem(R.string.notificationsModuleLabel, R.string.fa_bell)); + //Messages + mMessagesData.add(getMenuItem(R.string.messagesModuleLabel, R.string.fa_pencil_square_o)); + + Log.i(TAG, "Created Base Menu"); } /** @@ -636,17 +630,6 @@ private void changeToTeacherMenu() { } } - /** - * Creates an empty Menu and mCoursesSpinner when the data base is empty - */ - protected void setMenuDbClean() { - initializeSelectedCourse(); - - DataBaseHelper.setDbCleaned(false); - - listCourses.clear(); - } - /** * Launches an action when refresh button is pushed * @@ -828,20 +811,10 @@ private void loadCourses() { Login.setCurrentUserRole(c.getUserRole()); } else { - initializeSelectedCourse(); + Preferences.initializeSelectedCourse(); } } - private void initializeSelectedCourse() { - Courses.setSelectedCourseCode(-1); - Courses.setSelectedCourseShortName(""); - Courses.setSelectedCourseFullName(""); - - Login.setCurrentUserRole(-1); - - Preferences.setLastCourseSelected(-1); - } - @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java index ac3ce8507..461b2ef14 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/preferences/Preferences.java @@ -35,6 +35,7 @@ import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.database.DataBaseHelper; import es.ugr.swad.swadroid.model.LoginInfo; +import es.ugr.swad.swadroid.modules.courses.Courses; import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.sync.SyncUtils; import es.ugr.swad.swadroid.utils.Crypto; @@ -497,7 +498,7 @@ private static void cleanDatabase() { public static void logoutClean(Context context, String key) { Login.getLoginInfo().setLogged(false); removeLoginInfo(); - Log.i(TAG, "Forced logout due to " + key + " change in preferences"); + initializeSelectedCourse(); cleanDatabase(); setPreferencesChanged(); @@ -505,6 +506,20 @@ public static void logoutClean(Context context, String key) { if(isSyncEnabled()) { SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, context); } + + Log.i(TAG, "Forced logout due to " + key + " change in preferences"); + } + + public static void initializeSelectedCourse() { + Courses.setSelectedCourseCode(-1); + Courses.setSelectedCourseShortName(""); + Courses.setSelectedCourseFullName(""); + + Login.setCurrentUserRole(-1); + + Preferences.setLastCourseSelected(-1); + + Log.i(TAG, "Initialized selected course to -1"); } public static boolean isPreferencesChanged() { diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 1111c079f..153e8e657 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -316,7 +316,6 @@ No hay documentos disponibles Marcando todas las notificaciones como leídas… Sincronizando… - Es necesario estar inscrito en al menos una asignatura para poder ver todas las funciones. Cuando esté inscrito en una asignatura, pulse el botón refrescar en la action bar para actualizar el menú principal. Buscar Buscar usuario usuarios encontrados diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index a7c218de2..c24fbac0d 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -326,7 +326,6 @@ No documents currently available Marking all notifications as read… Syncronizing… - You must be enrolled in at least one subject to see all functions. When enrolled in a subject, press the refresh button in the action bar to update the main menu. Search Search user users found From 9bbeb0f8aac5c81a33bbff83332075582abf0192 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Mon, 29 Aug 2016 22:25:39 +0200 Subject: [PATCH 100/103] Added Google Analytics to SearchUsers activity --- .../swadroid/modules/messages/FrequentUsersList.java | 4 +++- .../swad/swadroid/modules/messages/SearchUsers.java | 12 +++++++++++- .../swad/swadroid/modules/messages/UsersList.java | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java index 105b1eed2..48383f038 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/FrequentUsersList.java @@ -1,7 +1,9 @@ package es.ugr.swad.swadroid.modules.messages; /** - * Created by Romilgildo on 24/07/2016. + * Class for manage a list of frequent recipients + * + * @author Rubén Martín Hidalgo */ import java.util.ArrayList; diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java index f3519def9..7b1ef23b9 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/SearchUsers.java @@ -28,6 +28,7 @@ import java.util.Vector; import es.ugr.swad.swadroid.Constants; import es.ugr.swad.swadroid.R; +import es.ugr.swad.swadroid.analytics.SWADroidTracker; import es.ugr.swad.swadroid.database.DataBaseHelper; import es.ugr.swad.swadroid.gui.ProgressScreen; import es.ugr.swad.swadroid.model.FrequentUser; @@ -39,7 +40,10 @@ import es.ugr.swad.swadroid.webservices.SOAPClient; /** - * Created by Rubén Martín Hidalgo on 17/07/2016. + * Class for search users + * @see findUsers + * + * @author Rubén Martín Hidalgo */ public class SearchUsers extends Module implements SearchView.OnQueryTextListener { /** @@ -195,6 +199,12 @@ protected void onCreate(Bundle savedInstanceState) { setMETHOD_NAME("findUsers"); } + @Override + protected void onStart() { + super.onStart(); + SWADroidTracker.sendScreenView(getApplicationContext(), TAG); + } + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public boolean onCreateOptionsMenu(Menu menu) { diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java index d9471c976..47dc92bd1 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/messages/UsersList.java @@ -1,7 +1,9 @@ package es.ugr.swad.swadroid.modules.messages; /** - * Created by Romilgildo on 24/07/2016. + * Class for manage a list of users + * + * @author Rubén Martín Hidalgo */ import java.util.ArrayList; From 7b282fa2201042937cc1e3252628e8b47bdeb76d Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Tue, 30 Aug 2016 23:36:19 +0200 Subject: [PATCH 101/103] Updated build tools --- SWADroid/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SWADroid/build.gradle b/SWADroid/build.gradle index 35bf3d8bd..f8cf6c554 100644 --- a/SWADroid/build.gradle +++ b/SWADroid/build.gradle @@ -8,7 +8,7 @@ ext { android { compileSdkVersion 24 - buildToolsVersion "24.0.1" + buildToolsVersion "24.0.2" dexOptions { maxProcessCount=2 From 7d7ce178dc6d8054a485d62c54a727bb3de12bc4 Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Tue, 30 Aug 2016 23:44:44 +0200 Subject: [PATCH 102/103] Removed toast --- .../modules/notifications/NotificationsMarkAllAsRead.java | 6 +----- SWADroid/src/main/res/values-es/strings.xml | 1 - SWADroid/src/main/res/values/strings.xml | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsMarkAllAsRead.java b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsMarkAllAsRead.java index d58ae6f72..b595ee04c 100644 --- a/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsMarkAllAsRead.java +++ b/SWADroid/src/main/java/es/ugr/swad/swadroid/modules/notifications/NotificationsMarkAllAsRead.java @@ -20,15 +20,13 @@ import android.os.Bundle; import android.util.Log; -import android.widget.Toast; import org.ksoap2.serialization.SoapPrimitive; import es.ugr.swad.swadroid.Constants; -import es.ugr.swad.swadroid.R; import es.ugr.swad.swadroid.analytics.SWADroidTracker; -import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.modules.Module; +import es.ugr.swad.swadroid.modules.login.Login; import es.ugr.swad.swadroid.utils.Utils; import es.ugr.swad.swadroid.webservices.SOAPClient; @@ -108,8 +106,6 @@ protected void requestService() throws Exception { */ @Override protected void connect() { - Toast.makeText(this, R.string.notificationsMarkingAllAsReadMsg , Toast.LENGTH_SHORT).show(); - startConnection(); } diff --git a/SWADroid/src/main/res/values-es/strings.xml b/SWADroid/src/main/res/values-es/strings.xml index 153e8e657..3896247b3 100644 --- a/SWADroid/src/main/res/values-es/strings.xml +++ b/SWADroid/src/main/res/values-es/strings.xml @@ -314,7 +314,6 @@ No hay calificaciones disponibles o el DNI del estudiante no ha sido verificado por el profesor No hay calificaciones disponibles No hay documentos disponibles - Marcando todas las notificaciones como leídas… Sincronizando… Buscar Buscar usuario diff --git a/SWADroid/src/main/res/values/strings.xml b/SWADroid/src/main/res/values/strings.xml index c24fbac0d..458dcae92 100644 --- a/SWADroid/src/main/res/values/strings.xml +++ b/SWADroid/src/main/res/values/strings.xml @@ -324,7 +324,6 @@ No marks currently available or the student ID has not been verified by the teacher No marks currently available No documents currently available - Marking all notifications as read… Syncronizing… Search Search user From b70ca956600583a40d0218ad8aa404790f86ef1e Mon Sep 17 00:00:00 2001 From: Juan Miguel Boyero Corral Date: Thu, 1 Sep 2016 17:06:24 +0200 Subject: [PATCH 103/103] Updated changelog --- SWADroid/src/main/res/raw-es/changes.html | 5 +++++ SWADroid/src/main/res/raw/changes.html | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/SWADroid/src/main/res/raw-es/changes.html b/SWADroid/src/main/res/raw-es/changes.html index d11a68f94..815034c10 100644 --- a/SWADroid/src/main/res/raw-es/changes.html +++ b/SWADroid/src/main/res/raw-es/changes.html @@ -15,6 +15,11 @@ +

    1.5.0 (2016-09-01)

    +
      + [NOVEDADES] +
    • Mensajes: Añadida búsqueda de destinatarios
    • +

    1.4.0 (2016-07-25)

      [NOVEDADES] diff --git a/SWADroid/src/main/res/raw/changes.html b/SWADroid/src/main/res/raw/changes.html index dc3c619fb..588378b4a 100644 --- a/SWADroid/src/main/res/raw/changes.html +++ b/SWADroid/src/main/res/raw/changes.html @@ -15,6 +15,11 @@ +

      1.5.0 (2016-09-01)

      +
        + [NEW] +
      • Messages: Added search of recipients
      • +

      1.4.0 (2016-07-25)

        [NEW]