From 7d97d15e7272b129090b9453655711bffed8b3a4 Mon Sep 17 00:00:00 2001 From: Shobhit Agarwal Date: Mon, 10 Jul 2017 02:07:17 +0530 Subject: [PATCH 01/19] Adds icons --- .../drawable-hdpi/ic_access_time_black_24dp.png | Bin 0 -> 531 bytes .../ic_assignment_late_black_24dp.png | Bin 0 -> 215 bytes .../ic_assignment_turned_in_black_24dp.png | Bin 0 -> 304 bytes .../drawable-mdpi/ic_access_time_black_24dp.png | Bin 0 -> 347 bytes .../ic_assignment_late_black_24dp.png | Bin 0 -> 149 bytes .../ic_assignment_turned_in_black_24dp.png | Bin 0 -> 198 bytes .../ic_sort_by_alpha_black_24dp.png | Bin 0 -> 328 bytes .../drawable-xhdpi/ic_access_time_black_24dp.png | Bin 0 -> 687 bytes .../ic_assignment_late_black_24dp.png | Bin 0 -> 235 bytes .../ic_assignment_turned_in_black_24dp.png | Bin 0 -> 329 bytes .../ic_sort_by_alpha_black_24dp.png | Bin 0 -> 587 bytes .../ic_access_time_black_24dp.png | Bin 0 -> 1029 bytes .../ic_assignment_late_black_24dp.png | Bin 0 -> 329 bytes .../ic_assignment_turned_in_black_24dp.png | Bin 0 -> 476 bytes .../ic_sort_by_alpha_black_24dp.png | Bin 0 -> 822 bytes .../ic_access_time_black_24dp.png | Bin 0 -> 1364 bytes .../ic_assignment_late_black_24dp.png | Bin 0 -> 444 bytes .../ic_assignment_turned_in_black_24dp.png | Bin 0 -> 631 bytes .../ic_sort_by_alpha_black_24dp.png | Bin 0 -> 1038 bytes 19 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 collect_app/src/main/res/drawable-hdpi/ic_access_time_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-hdpi/ic_assignment_late_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-hdpi/ic_assignment_turned_in_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-mdpi/ic_access_time_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-mdpi/ic_assignment_late_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-mdpi/ic_assignment_turned_in_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-mdpi/ic_sort_by_alpha_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xhdpi/ic_access_time_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xhdpi/ic_assignment_late_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xhdpi/ic_assignment_turned_in_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xhdpi/ic_sort_by_alpha_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxhdpi/ic_access_time_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxhdpi/ic_assignment_late_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxhdpi/ic_assignment_turned_in_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxhdpi/ic_sort_by_alpha_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxxhdpi/ic_access_time_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxxhdpi/ic_assignment_late_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxxhdpi/ic_assignment_turned_in_black_24dp.png create mode 100644 collect_app/src/main/res/drawable-xxxhdpi/ic_sort_by_alpha_black_24dp.png diff --git a/collect_app/src/main/res/drawable-hdpi/ic_access_time_black_24dp.png b/collect_app/src/main/res/drawable-hdpi/ic_access_time_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..9e003f0e93f4459b1320dbd0feb5abd230899093 GIT binary patch literal 531 zcmV+u0_^>XP)Ze!=!jB8v>CRp#r$@?Ze^FOn9c^Qlx z7IKac^zpk;y}ai%^RUUJmc0y+3#mSKP)$l}=_40Y-K-#y#bt6@4eVnYLve5z#x(ZR zg!VX#Neq*R8f;`427U%BXx7BtxKWohbd@rqlyhBE=ZLUI0|!ZRRFf;h?^Lh;8m~$0 zWD|Zj^s-kIuv@Q<|D<-3;{|>dv`BtCJ`VlTSPrQM!76>OY&;g|4L4E`GW7n<#pA3j z?t|2W;Gpa|g~xkYoR(?O4B7J*54mFu%`|9)?CHVdw=6oD2D!55SC&C-j88d8Pi+`M zOZh>Le_Wt0`PAYrHjLw$bo<$ifdXcRUFe;=CAT$oiby8+HPpf?jFA2sS~YPS1L8(qAg9&LL1r)l zw@@RP$st|k0wldT1B8LpJWm(LkP61PQw_PA9Yk1#@*jaLh8~S`Rlq5B!@W&1g zl5Ik_?08i}oR+tqiq@`Q>n=IV+FjC&lX>O??)vOZL#IV<&aPIh`vRo5iEsGFd=BVR N22WQ%mvv4FO#nTFOymFn literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-hdpi/ic_assignment_turned_in_black_24dp.png b/collect_app/src/main/res/drawable-hdpi/ic_assignment_turned_in_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3443eafca2dbd1fcdb4cf0704f34b5022f98aa1e GIT binary patch literal 304 zcmV-00nh%4P)41O3M##Uat$gy0PJau-H%U-)+VNkIXo0*X*%lEmu^p#iCv*+=vE;4?SZT11r`H7{*g{UD7a0GdnEN3V==W zwo6eBmTV2cHgjEYGKVD_*sx{DTpcI#SVjJlpab1+KyQq><@;QyWemW*fC`x@y@tw} zN@$;AG}Q5>84Y#ZFyT`%8oC2u!Uu-&o@W%)Gd)rV!3Zd#1S6q92}VMJ5{!fbB^V6_ zs=tJXZCM4m;_pZ_FZ>`yFS);Vfx{Q(n8(cj^nL)V*OscD!8nWn0000VGZaoR{A3)xD=Pc+H>h|l?3UaXh6ecwN47oABKVy{z&>*d%kYoeXD-RgAaC&yuUQlknJ>`3i*vTAm8wjH;ft tc_*^>+C~EucDw1NpMH4Zx*Zy(*ngZNff|JO<+}g?002ovPDHLkV1k3jo|XUr literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-mdpi/ic_assignment_late_black_24dp.png b/collect_app/src/main/res/drawable-mdpi/ic_assignment_late_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..3e19aa65f66a137f3bcea3132b629f97685ba37e GIT binary patch literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+i7*7|+kP61+1#AxzW}N!a`B3?= z3Y*y@6Q9H%{H?V+L|KjYuxL3r2(uN7{L^Nu7x|iT>Ob?;=!KnoT&{kYZy=Mw>tL`d wQRN78qWWH?6@OS)vDLRtXPNTbh$oDJAw0{ZX@6qXTcAA*p00i_>zopr0N|G~X#fBK literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-mdpi/ic_assignment_turned_in_black_24dp.png b/collect_app/src/main/res/drawable-mdpi/ic_assignment_turned_in_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..02e67353c6fa3f521d83713df39e70e4f8643786 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iUQZXtkP61Lmkx3=849#MlxIqE zJk(@+BFT9YmrY060?pSX4!6UQr`nSR@ zOB45OPnz)k%nFC%XnvzSg_=k>YYXxuuB>EuVpdF%;YMe=VnV*cJ?7uAR{;cpN) wTdUwwEYGp>?|wJFXD0hKB{DttJ&b?Psc5a%cs@@_80attPgg&ebxsLQ06%(3>i_@% literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-mdpi/ic_sort_by_alpha_black_24dp.png b/collect_app/src/main/res/drawable-mdpi/ic_sort_by_alpha_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1c50aa8d330350a209301c97bda644fb38796fc1 GIT binary patch literal 328 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 literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-xxhdpi/ic_assignment_late_black_24dp.png b/collect_app/src/main/res/drawable-xxhdpi/ic_assignment_late_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..25772d0fa6c88dc982b53312d8845bc7b295d6c5 GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXoKNz$oD9;uuoF`1Xpe7qg?pv5)np zw_C5|sdklfWT1=2K7Y26wkF3G>z8Ot#(NT{QiM_-=)b$!})M zeq7ANT5L8WIr8`bGW>`Z`Dr@wHYF>eYNXMrw_(wH+1b`}Nq>e7Ql&$J=RwGAM&GXn9;&JStm4$P7 z&|}(sGH?zI>H~0#kJveO5KjoT_+aJOK?A<;iuX2-9pw12n=H^dc91~2WFd3xAdxgT zb5xK>y3jdBkV-Oe3?P-{Qk_B0$T5I)l1qIkIs?Z5(n#)DPHCre%pjTMPUGK?49cJk z+D7ASkeWmTjgaa_1C>ZMm_^~dra-L8Gy>-adNk-TX7i6eFA literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-xxhdpi/ic_sort_by_alpha_black_24dp.png b/collect_app/src/main/res/drawable-xxhdpi/ic_sort_by_alpha_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..8e0c43eb734bef0df1a88df47ebdc04675941df3 GIT binary patch literal 822 zcmV-61Ihe}P)Ac@tjj?T3)CO?Lq^^vM{J1k|xrHut`^=Q;njKiXdtb-Jn4OEvOU{BBY@2 z>x-ZwD5Q}^Sej56-4K$b5G4&%EVZ|R@~}A9z4kfa3ij`rcs6UjJnDAsEs6h;L?S~_ z+L$93Qk?~i19BnNF;xntjw*#wCxA+-6H28PzGSy(wz-3VB@*3Sd6Z@<>7~yrm*TCF zP3$PoQpq~zm0i5u?`;2-y5leO1?J?2<1W;jH{iV*7h1#9OL+tS=4{FtXR1PGF(>!n z9w4q8F()_U=_3Bs_mbgh z4VogJHh#yHNxZ$F&11m%92|Yx=1k%^i787o;VI3Ew)X+>nLa;+zq@f?;jYEokhafr zD5opm;H!%bOnDLfeW>k^=&AOXu3dqTI;Jt@TTaK@dF<&Z)E_5rXy^n!9(IpbF2^5F zX~6pk1G>6N15x#`gDFqqj}%K9a0@P-M%+gYh?vf-X^v;vB){#0!n!YQ+}g` zn3~zbJn}rn-GwS5bv=4f>AqhPCn^&cW5qPVsxpUjrMF|JkW`);@ud;VVp;BTE(T)u27jrIJbK zE)kx=oJ{k2#oSIwGaB@f*8yr=r=Rg2=9w`{=)sg*i9!!f-r`UbR=Yx@TCzsg^R04+ zvua%^%c_>VN;F;0yU|Fk3)R!Fv=G%L+H)ZQY5Kj>NiY(LdOl#KXqFk|ShO-<^gVJI zAe2g~6GkP~38Rwggi%R#!l*RMFhNNZzCYQ+NcIT~l$u2T7 zGBPqUEYgWRxRj^)ih)dF0ZW^l&m{Wu1y67hyV9N(NhJsHBqNXj4(3tzp-2lM#~!@N zd?ciEd6}IkCsnGskkLpChjBI)q(TK(G6S*T6fUAbqLgto;}MIF;vf>Ej;|00enby& z&vDE_966K2a7vNq0~Et6T*BV0O(zQEnk>+Xwb`3Xc{RY0e~cAzL}&g)JYB}OoJk#i z)N>Z!vkdX{C)(kFl^BJ1IE|aBB@Ff4!gR#Lq10lT)tTry30_Dk;zWEg(>%U)EGt`m z`X1e1!adXwht}NBQjZ9=SfZ0h@$_c{Y_Kr{JqoEE7AWusqUA{n*rLQUh?XC1%t+5Q zTRNvixA`(sh&Vhq5;~d3K&K?f!Pf)ybux%0GA<#I}(`J z)qcN}cz{ZE=ka3j33Q&(^kzsr0NiHuVm1W=vA;Sj)}|7mK^;8zBoL1q&Ax?H0>Dp3 zPaYx=!;EHUrWW8_qbCCiKu5%|F0}wFBZlq5PobkAwE(F7*v|NJvC-s}R0F&oeoyq2 z(d3d;16-l*?fg)On7vaCu%FSJ&+%n|(PZsZ1FUQGrZ2usHkx!wH9%LRHxuzg9jgne z1}Lh3*8EUMiCn4ya_U(1{}14zgx;r)Xq0pbr7?(w1zbL7MMjVecR0AX1#{51Nd zrG;#Fh9b%@SQSn1v&m=p@}$w^QlgUQYW)fVi@B4k$Xkg=!*AwZB@VT`k0{4;BxR8{ zbLWTOPLC!odom1B{=ho;qTUDC312!OhV{fH&o#Q3Sjt1R#v52wwP{NLhIrqJSudt3 zoJ4ux`@sPO;xVJy_t;`jh9k;9*qG+|+4$rG1Y%!xtx|_A3S7$qME$};Xc`g2-3dgA zxkkfVut^;sAcj|3lYQVbOW&YzQh9darE>T+Idex-&X5FI@>|*FGZ9O5}Q1~ zB3hoKge@v~5z+D;D`0^R3`evKViQZt))0^HZ-XToJl<7b%7Za~q%Dtlyu~}3o>*j6 zj|jpvE~AntRB;6}5RdLRVwna;ARf-(HW~;+BeydX@o*45aX<%tLp)u^Pn^rj_^~SI z^E2Wt-_r(1e3!mxad~ert;&>@_%29uTnd8N*WuN{ODR(4Pp3}5G z^u6x21PGcXM^e9BjCjclgC)Y1Mm?Nx}{c zj4T2mVu#v+LM9G{1_pFu3D1RoU5KKRiJV{s3%Y$67`1d3POaGP$F;Z6a@3WKMspUXO@geCyPqpnK; literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-xxxhdpi/ic_assignment_turned_in_black_24dp.png b/collect_app/src/main/res/drawable-xxxhdpi/ic_assignment_turned_in_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..88991d237e16189a9ffd627d177e91afb1aa5035 GIT binary patch literal 631 zcmV--0*L*IP)I=*4hT^Komg~7a+k=?H(FhI&ce)oGbX}w}-YS`1YL%E}|gCHE2V+0G$Xn z86|4((Mcc(Ho52etw%WDGfsFua5K3fm&-|ZhbJ8JiElseBZoZZHvi0S@rE<(m;26Z zZbJM$V1)hVPT3*&9#LWET*X5IZ-)w-b7yo2x*L4K7P!w`Bjob5j z3)?+5XVU-Sj$EPO@=+dUqE^&Z4?>(29ZjCjB#Q0DvL){rP%;Bwr7B#YmU02RsEf z7-{nLfM)> z@}&R=!I3WnI0%k>CBQ-O=j#DZLW%rxw+Qle00*HE|MfaWo395L#h0)QcF%kEbGckDm&@gHKLDLlXrw+M R31$EQ002ovPDHLkV1m4z5`X{z literal 0 HcmV?d00001 diff --git a/collect_app/src/main/res/drawable-xxxhdpi/ic_sort_by_alpha_black_24dp.png b/collect_app/src/main/res/drawable-xxxhdpi/ic_sort_by_alpha_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..e2fd55880ab57efb8c5456fc9273f455db9f37a4 GIT binary patch literal 1038 zcmV+p1o8WcP)I&GIN@AqJ5~6oLISLZZ5A>W!vCq|wbPC`L1D6{DTOukcK?IgtmeiKeQFh_-2Lh#As(G=1GQyE4~%R^dV1%mCJ zkQUgDU^~O?hAnU}PUdqKsnR3lvz#Xj^eSR{j|3;ZNY#GAzm!1)-7#k4q?zB<A*GT7nPL_`!_-JuNs}W`2PI zU@4;7h7ZqUkIAd?;BEEDvy=dUgtGelB(1o*6)|<=!9|=_kKD_I9-jw2vp8(V-$yeZ zbRnuWOempGgU@iY!;D{H0bU$X4;`TmZ4aVaNc}ny(?-0wA@f9B?dcC*J15NegQR%z zTGo+bPJ>~lQjdfW&G;wiz>67F)MF2lU~NZKoz!CkVp@qO8)|-qzY$UGqPPWA%=kM= z@Z>8*H6O4NenFoS^C)HtUzqWaa3P*7MpU0r-6ll!6vaG_m~O|LenhpF>gJ(OgTpkD z-xBPrTR+~ka#B6`Po^`Oy@=`#@|wm0Gyc!C;msOE^?L6A`7U{FHRF$S9Ugs(sBS^Y zJPpRUxXxF%UMz37pnvl)T^a31RF6{IOb(gxzvetV>O<;oh=f|+M0A{H5r*?Es6#iC z?HSj-v!m$p{Bc|W{@B7Q_v>(N@+kC-;oRj4bA-hzHkF^`#h9ql>9xpi2X->-!G zC}s}hh-wiNb~RuDa|=4k42t>)QEhGX0z2&sL1C*9)p5>m-~#3rRJe`eTFhy%vXKj{ zeYe z_-2K&8UMu)#y2YjJib|B8!17$lyZRMn-w-!9Y2bqD2k$g0OI0N4e~np&Hw-a07*qo IM6N<$f?F8#sQ>@~ literal 0 HcmV?d00001 From 67a96a9287dfce99b34226e5614c57f6f19a195a Mon Sep 17 00:00:00 2001 From: Shobhit Agarwal Date: Mon, 10 Jul 2017 02:14:55 +0530 Subject: [PATCH 02/19] Adds bottom sheet dialog --- .../android/activities/AppListActivity.java | 158 +++++++++--------- .../android/adapters/SortDialogAdapter.java | 65 +++++++ .../utilities/ApplicationConstants.java | 21 +++ .../src/main/res/layout/bottom_sheet.xml | 31 ++++ .../src/main/res/layout/sort_item_layout.xml | 40 +++++ 5 files changed, 239 insertions(+), 76 deletions(-) create mode 100644 collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java create mode 100644 collect_app/src/main/res/layout/bottom_sheet.xml create mode 100644 collect_app/src/main/res/layout/sort_item_layout.xml diff --git a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java index 5ad54d02a98..33982d914f2 100644 --- a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java +++ b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java @@ -18,19 +18,21 @@ import android.content.res.Configuration; import android.database.Cursor; -import android.graphics.Color; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.design.widget.BottomSheetDialog; import android.support.v4.content.ContextCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; import android.text.Editable; import android.text.TextWatcher; -import android.view.Gravity; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -45,6 +47,7 @@ import android.widget.TextView; import org.odk.collect.android.R; +import org.odk.collect.android.adapters.SortDialogAdapter; import org.odk.collect.android.application.Collect; import org.odk.collect.android.database.ActivityLogger; import org.odk.collect.android.provider.InstanceProviderAPI; @@ -56,26 +59,59 @@ import static org.odk.collect.android.utilities.ApplicationConstants.SortingOrder.BY_NAME_ASC; abstract class AppListActivity extends AppCompatActivity { - protected final ActivityLogger logger = Collect.getInstance().getActivityLogger(); - private static final String SELECTED_INSTANCES = "selectedInstances"; private static final String IS_SEARCH_BOX_SHOWN = "isSearchBoxShown"; - - private ListView drawerList; + protected final ActivityLogger logger = Collect.getInstance().getActivityLogger(); + protected SimpleCursorAdapter listAdapter; + protected LinkedHashSet selectedInstances = new LinkedHashSet<>(); + protected String[] sortingOptions; + protected Integer selectedSortingOrder; + protected Toolbar toolbar; + protected ListView listView; private DrawerLayout drawerLayout; private ActionBarDrawerToggle drawerToggle; private LinearLayout searchBoxLayout; private EditText inputSearch; + private boolean isSearchBoxShown; - protected SimpleCursorAdapter listAdapter; - protected LinkedHashSet selectedInstances = new LinkedHashSet<>(); - protected String[] sortingOptions; + // toggles to all checked or all unchecked + // returns: + // true if result is all checked + // false if result is all unchecked + // + // Toggle behavior is as follows: + // if ANY items are unchecked, check them all + // if ALL items are checked, uncheck them all + public static boolean toggleChecked(ListView lv) { + // shortcut null case + if (lv == null) { + return false; + } - private boolean isSearchBoxShown; + boolean newCheckState = lv.getCount() > lv.getCheckedItemCount(); + setAllToCheckedState(lv, newCheckState); + return newCheckState; + } - protected Integer selectedSortingOrder; - protected Toolbar toolbar; - protected ListView listView; + public static void setAllToCheckedState(ListView lv, boolean check) { + // no-op if ListView null + if (lv == null) { + return; + } + + for (int x = 0; x < lv.getCount(); x++) { + lv.setItemChecked(x, check); + } + } + + // Function to toggle button label + public static void toggleButtonLabel(Button toggleButton, ListView lv) { + if (lv.getCheckedItemCount() != lv.getCount()) { + toggleButton.setText(R.string.select_all); + } else { + toggleButton.setText(R.string.clear_all); + } + } @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -101,8 +137,8 @@ protected void onResume() { searchBoxLayout = (LinearLayout) findViewById(R.id.searchBoxLayout); restoreSelectedSortingOrder(); setupSearchBox(); - setupDrawer(); - setupDrawerItems(); + //setupDrawer(); + //setupDrawerItems(); } @Override @@ -132,12 +168,13 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sort: - if (drawerLayout.isDrawerOpen(Gravity.END)) { + openBottomDialog(); + /*if (drawerLayout.isDrawerOpen(Gravity.END)) { drawerLayout.closeDrawer(Gravity.END); } else { Collect.getInstance().hideKeyboard(inputSearch); drawerLayout.openDrawer(Gravity.END); - } + }*/ return true; case R.id.menu_filter: @@ -203,6 +240,7 @@ private void showSearchBox() { } private void setupDrawerItems() { + ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sortingOptions) { @NonNull @Override @@ -215,16 +253,17 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { return textView; } }; - drawerList.setAdapter(adapter); - drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - parent.getChildAt(selectedSortingOrder).setBackgroundColor(Color.TRANSPARENT); - view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.tintColor)); - performSelectedSearch(position); - drawerLayout.closeDrawer(Gravity.END); - } - }); + + //drawerList.setAdapter(adapter); +// drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { +// @Override +// public void onItemClick(AdapterView parent, View view, int position, long id) { +// parent.getChildAt(selectedSortingOrder).setBackgroundColor(Color.TRANSPARENT); +// view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.light_blue)); +// performSelectedSearch(position); +// drawerLayout.closeDrawer(Gravity.END); +// } +// }); } private void performSelectedSearch(int position) { @@ -233,7 +272,7 @@ private void performSelectedSearch(int position) { } private void setupDrawer() { - drawerList = (ListView) findViewById(R.id.sortingMenu); + ListView drawerList = (ListView) findViewById(R.id.sortingMenu); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.sorting_menu_open, R.string.sorting_menu_close) { @@ -286,54 +325,6 @@ protected int getCheckedCount() { return listView.getCheckedItemCount(); } - // toggles to all checked or all unchecked - // returns: - // true if result is all checked - // false if result is all unchecked - // - // Toggle behavior is as follows: - // if ANY items are unchecked, check them all - // if ALL items are checked, uncheck them all - public static boolean toggleChecked(ListView lv) { - // shortcut null case - if (lv == null) { - return false; - } - - boolean newCheckState = lv.getCount() > lv.getCheckedItemCount(); - setAllToCheckedState(lv, newCheckState); - return newCheckState; - } - - public static void setAllToCheckedState(ListView lv, boolean check) { - // no-op if ListView null - if (lv == null) { - return; - } - - for (int x = 0; x < lv.getCount(); x++) { - lv.setItemChecked(x, check); - } - } - - // Function to toggle button label - public static void toggleButtonLabel(Button toggleButton, ListView lv) { - if (lv.getCheckedItemCount() != lv.getCount()) { - toggleButton.setText(R.string.select_all); - } else { - toggleButton.setText(R.string.clear_all); - } - } - - @Override - public void onBackPressed() { - if (drawerLayout.isDrawerOpen(Gravity.END)) { - drawerLayout.closeDrawer(Gravity.END); - } else { - super.onBackPressed(); - } - } - private void saveSelectedSortingOrder(int selectedStringOrder) { selectedSortingOrder = selectedStringOrder; PreferenceManager.getDefaultSharedPreferences(Collect.getInstance()) @@ -358,4 +349,19 @@ protected int getSelectedSortingOrder() { protected CharSequence getFilterText() { return inputSearch != null ? inputSearch.getText() : ""; } + + protected void openBottomDialog() { + BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this); + View sheetView = getLayoutInflater().inflate(R.layout.bottom_sheet, null); + RecyclerView recyclerView = (RecyclerView) sheetView.findViewById(R.id.recyclerView); + + SortDialogAdapter adapter = new SortDialogAdapter(sortingOptions); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); + recyclerView.setLayoutManager(layoutManager); + recyclerView.setAdapter(adapter); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + + bottomSheetDialog.setContentView(sheetView); + bottomSheetDialog.show(); + } } diff --git a/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java b/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java new file mode 100644 index 00000000000..eeae8e6b0b0 --- /dev/null +++ b/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2017 Shobhit + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.odk.collect.android.adapters; + +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import org.odk.collect.android.R; +import org.odk.collect.android.utilities.ApplicationConstants; + +public class SortDialogAdapter extends RecyclerView.Adapter { + private String[] sortList; + + public SortDialogAdapter(String[] sortList) { + this.sortList = sortList; + } + + @Override + public SortDialogAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemLayoutView = LayoutInflater.from(parent.getContext()) + .inflate(R.layout.sort_item_layout, parent, false); + return new ViewHolder(itemLayoutView); + } + + @Override + public void onBindViewHolder(ViewHolder viewHolder, int position) { + viewHolder.txtViewTitle.setText(sortList[position]); + viewHolder.imgViewIcon.setImageResource(ApplicationConstants.getSortIcon(sortList[position])); + } + + // Return the size of your itemsData (invoked by the layout manager) + @Override + public int getItemCount() { + return sortList.length; + } + + // inner class to hold a reference to each item of RecyclerView + static class ViewHolder extends RecyclerView.ViewHolder { + + TextView txtViewTitle; + ImageView imgViewIcon; + + ViewHolder(View itemLayoutView) { + super(itemLayoutView); + txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.title); + imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.icon); + } + } +} diff --git a/collect_app/src/main/java/org/odk/collect/android/utilities/ApplicationConstants.java b/collect_app/src/main/java/org/odk/collect/android/utilities/ApplicationConstants.java index 6dd908be3e8..d6d234150f2 100644 --- a/collect_app/src/main/java/org/odk/collect/android/utilities/ApplicationConstants.java +++ b/collect_app/src/main/java/org/odk/collect/android/utilities/ApplicationConstants.java @@ -16,6 +16,9 @@ package org.odk.collect.android.utilities; +import org.odk.collect.android.R; +import org.odk.collect.android.application.Collect; + public class ApplicationConstants { // based on http://www.sqlite.org/limits.html @@ -28,6 +31,24 @@ public class ApplicationConstants { "sq", "sw", "sw_KE", "ta", "th_TH", "tl", "tr", "uk", "ur", "ur_PK", "vi", "zh", "zu"}; + public static int getSortIcon(String sortBy) { + int resource = 0; + if (Collect.getInstance().getString(R.string.sort_by_name_asc).equals(sortBy)) { + resource = R.drawable.ic_sort_by_alpha_black_24dp; + } else if (Collect.getInstance().getString(R.string.sort_by_name_desc).equals(sortBy)) { + resource = R.drawable.ic_sort_by_alpha_black_24dp; + } else if (Collect.getInstance().getString(R.string.sort_by_date_asc).equals(sortBy)) { + resource = R.drawable.ic_access_time_black_24dp; + } else if (Collect.getInstance().getString(R.string.sort_by_date_desc).equals(sortBy)) { + resource = R.drawable.ic_access_time_black_24dp; + } else if (Collect.getInstance().getString(R.string.sort_by_status_asc).equals(sortBy)) { + resource = R.drawable.ic_assignment_turned_in_black_24dp; + } else if (Collect.getInstance().getString(R.string.sort_by_status_desc).equals(sortBy)) { + resource = R.drawable.ic_assignment_late_black_24dp; + } + return resource; + } + public abstract static class BundleKeys { public static final String FORM_MODE = "formMode"; } diff --git a/collect_app/src/main/res/layout/bottom_sheet.xml b/collect_app/src/main/res/layout/bottom_sheet.xml new file mode 100644 index 00000000000..c819ac109ed --- /dev/null +++ b/collect_app/src/main/res/layout/bottom_sheet.xml @@ -0,0 +1,31 @@ + + + + + + \ No newline at end of file diff --git a/collect_app/src/main/res/layout/sort_item_layout.xml b/collect_app/src/main/res/layout/sort_item_layout.xml new file mode 100644 index 00000000000..37993aa5c76 --- /dev/null +++ b/collect_app/src/main/res/layout/sort_item_layout.xml @@ -0,0 +1,40 @@ + + + + + + + From a2ceb90a9f4974ef6fd4ec1509a131db707ede9c Mon Sep 17 00:00:00 2001 From: Shobhit Agarwal Date: Mon, 10 Jul 2017 09:11:45 +0530 Subject: [PATCH 03/19] Makes selected item title bold --- .../android/activities/AppListActivity.java | 109 ++++-------------- .../android/adapters/SortDialogAdapter.java | 25 +++- .../listeners/RecyclerViewClickListener.java | 25 ++++ .../src/main/res/layout/bottom_sheet.xml | 5 +- .../src/main/res/layout/sort_item_layout.xml | 1 - collect_app/src/main/res/values/colors.xml | 4 +- 6 files changed, 72 insertions(+), 97 deletions(-) create mode 100644 collect_app/src/main/java/org/odk/collect/android/listeners/RecyclerViewClickListener.java diff --git a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java index 33982d914f2..bc51b5a51b3 100644 --- a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java +++ b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java @@ -16,16 +16,12 @@ package org.odk.collect.android.activities; -import android.content.res.Configuration; import android.database.Cursor; +import android.graphics.Typeface; import android.os.Bundle; import android.preference.PreferenceManager; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.widget.BottomSheetDialog; -import android.support.v4.content.ContextCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; @@ -36,9 +32,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; @@ -50,6 +44,7 @@ import org.odk.collect.android.adapters.SortDialogAdapter; import org.odk.collect.android.application.Collect; import org.odk.collect.android.database.ActivityLogger; +import org.odk.collect.android.listeners.RecyclerViewClickListener; import org.odk.collect.android.provider.InstanceProviderAPI; import java.util.ArrayList; @@ -68,11 +63,10 @@ abstract class AppListActivity extends AppCompatActivity { protected Integer selectedSortingOrder; protected Toolbar toolbar; protected ListView listView; - private DrawerLayout drawerLayout; - private ActionBarDrawerToggle drawerToggle; private LinearLayout searchBoxLayout; private EditText inputSearch; private boolean isSearchBoxShown; + private BottomSheetDialog bottomSheetDialog; // toggles to all checked or all unchecked // returns: @@ -137,8 +131,10 @@ protected void onResume() { searchBoxLayout = (LinearLayout) findViewById(R.id.searchBoxLayout); restoreSelectedSortingOrder(); setupSearchBox(); - //setupDrawer(); - //setupDrawerItems(); + + if (bottomSheetDialog == null) { + setupBottomSheet(); + } } @Override @@ -168,13 +164,7 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sort: - openBottomDialog(); - /*if (drawerLayout.isDrawerOpen(Gravity.END)) { - drawerLayout.closeDrawer(Gravity.END); - } else { - Collect.getInstance().hideKeyboard(inputSearch); - drawerLayout.openDrawer(Gravity.END); - }*/ + bottomSheetDialog.show(); return true; case R.id.menu_filter: @@ -189,22 +179,6 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - if (drawerToggle != null) { - drawerToggle.syncState(); - } - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (drawerToggle != null) { - drawerToggle.onConfigurationChanged(newConfig); - } - } - private void setupSearchBox() { inputSearch = (EditText) findViewById(R.id.inputSearch); inputSearch.addTextChangedListener(new TextWatcher() { @@ -239,60 +213,11 @@ private void showSearchBox() { Collect.getInstance().showKeyboard(inputSearch); } - private void setupDrawerItems() { - - ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, sortingOptions) { - @NonNull - @Override - public View getView(int position, View convertView, @NonNull ViewGroup parent) { - TextView textView = (TextView) super.getView(position, convertView, parent); - if (position == getSelectedSortingOrder()) { - textView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.tintColor)); - } - textView.setPadding(50, 0, 0, 0); - return textView; - } - }; - - //drawerList.setAdapter(adapter); -// drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { -// @Override -// public void onItemClick(AdapterView parent, View view, int position, long id) { -// parent.getChildAt(selectedSortingOrder).setBackgroundColor(Color.TRANSPARENT); -// view.setBackgroundColor(ContextCompat.getColor(getBaseContext(), R.color.light_blue)); -// performSelectedSearch(position); -// drawerLayout.closeDrawer(Gravity.END); -// } -// }); - } - private void performSelectedSearch(int position) { saveSelectedSortingOrder(position); updateAdapter(); } - private void setupDrawer() { - ListView drawerList = (ListView) findViewById(R.id.sortingMenu); - drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.sorting_menu_open, R.string.sorting_menu_close) { - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - supportInvalidateOptionsMenu(); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); - } - - public void onDrawerClosed(View view) { - super.onDrawerClosed(view); - supportInvalidateOptionsMenu(); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); - } - }; - - drawerToggle.setDrawerIndicatorEnabled(true); - drawerLayout.addDrawerListener(drawerToggle); - } - protected void checkPreviouslyCheckedItems() { listView.clearChoices(); List selectedPositions = new ArrayList<>(); @@ -350,18 +275,26 @@ protected CharSequence getFilterText() { return inputSearch != null ? inputSearch.getText() : ""; } - protected void openBottomDialog() { - BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(this); + private void setupBottomSheet() { + bottomSheetDialog = new BottomSheetDialog(this); View sheetView = getLayoutInflater().inflate(R.layout.bottom_sheet, null); - RecyclerView recyclerView = (RecyclerView) sheetView.findViewById(R.id.recyclerView); + final RecyclerView recyclerView = (RecyclerView) sheetView.findViewById(R.id.recyclerView); - SortDialogAdapter adapter = new SortDialogAdapter(sortingOptions); + final SortDialogAdapter adapter = new SortDialogAdapter(sortingOptions, getSelectedSortingOrder(), new RecyclerViewClickListener() { + @Override + public void onItemClicked(SortDialogAdapter.ViewHolder holder, int position) { + TextView previousSelected = (TextView) recyclerView.getChildAt(selectedSortingOrder).findViewById(R.id.title); + previousSelected.setTypeface(null, Typeface.NORMAL); + holder.txtViewTitle.setTypeface(null, Typeface.BOLD); + performSelectedSearch(position); + bottomSheetDialog.dismiss(); + } + }); RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext()); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter); recyclerView.setItemAnimator(new DefaultItemAnimator()); bottomSheetDialog.setContentView(sheetView); - bottomSheetDialog.show(); } } diff --git a/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java b/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java index eeae8e6b0b0..f32eed0431e 100644 --- a/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java +++ b/collect_app/src/main/java/org/odk/collect/android/adapters/SortDialogAdapter.java @@ -14,6 +14,7 @@ package org.odk.collect.android.adapters; +import android.graphics.Typeface; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; @@ -22,13 +23,18 @@ import android.widget.TextView; import org.odk.collect.android.R; +import org.odk.collect.android.listeners.RecyclerViewClickListener; import org.odk.collect.android.utilities.ApplicationConstants; public class SortDialogAdapter extends RecyclerView.Adapter { + private final RecyclerViewClickListener listener; + private final int selectedSortingOrder; private String[] sortList; - public SortDialogAdapter(String[] sortList) { + public SortDialogAdapter(String[] sortList, int selectedSortingOrder, RecyclerViewClickListener recyclerViewClickListener) { this.sortList = sortList; + this.selectedSortingOrder = selectedSortingOrder; + listener = recyclerViewClickListener; } @Override @@ -40,6 +46,10 @@ public SortDialogAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int vie @Override public void onBindViewHolder(ViewHolder viewHolder, int position) { + if (position == selectedSortingOrder) { + viewHolder.txtViewTitle.setTypeface(null, Typeface.BOLD); + } + viewHolder.txtViewTitle.setText(sortList[position]); viewHolder.imgViewIcon.setImageResource(ApplicationConstants.getSortIcon(sortList[position])); } @@ -51,15 +61,22 @@ public int getItemCount() { } // inner class to hold a reference to each item of RecyclerView - static class ViewHolder extends RecyclerView.ViewHolder { + public class ViewHolder extends RecyclerView.ViewHolder { - TextView txtViewTitle; + public TextView txtViewTitle; ImageView imgViewIcon; - ViewHolder(View itemLayoutView) { + ViewHolder(final View itemLayoutView) { super(itemLayoutView); txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.title); imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.icon); + + itemLayoutView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + listener.onItemClicked(ViewHolder.this, getLayoutPosition()); + } + }); } } } diff --git a/collect_app/src/main/java/org/odk/collect/android/listeners/RecyclerViewClickListener.java b/collect_app/src/main/java/org/odk/collect/android/listeners/RecyclerViewClickListener.java new file mode 100644 index 00000000000..3021eb9d252 --- /dev/null +++ b/collect_app/src/main/java/org/odk/collect/android/listeners/RecyclerViewClickListener.java @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2017 Shobhit + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package org.odk.collect.android.listeners; + + +import android.view.View; + +import org.odk.collect.android.adapters.SortDialogAdapter; + +public interface RecyclerViewClickListener { + + void onItemClicked(SortDialogAdapter.ViewHolder holder, int position); +} diff --git a/collect_app/src/main/res/layout/bottom_sheet.xml b/collect_app/src/main/res/layout/bottom_sheet.xml index c819ac109ed..0fcea0bc9cb 100644 --- a/collect_app/src/main/res/layout/bottom_sheet.xml +++ b/collect_app/src/main/res/layout/bottom_sheet.xml @@ -1,5 +1,4 @@ - - - #2196F3 #000000 + #2196F3 + #000000 #ffffff + #eee \ No newline at end of file From 17773e5c728db1f81f4e90aa7ce2063b8c2c9a6f Mon Sep 17 00:00:00 2001 From: Shobhit Agarwal Date: Mon, 10 Jul 2017 09:23:50 +0530 Subject: [PATCH 04/19] Adds bottom sheet dialog to Delete Saved Forms --- .../android/activities/FileManagerTabs.java | 10 -- .../android/fragments/AppListFragment.java | 125 +++++------------- 2 files changed, 32 insertions(+), 103 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/activities/FileManagerTabs.java b/collect_app/src/main/java/org/odk/collect/android/activities/FileManagerTabs.java index 3302df390f2..a5895d1b0c8 100644 --- a/collect_app/src/main/java/org/odk/collect/android/activities/FileManagerTabs.java +++ b/collect_app/src/main/java/org/odk/collect/android/activities/FileManagerTabs.java @@ -87,14 +87,4 @@ protected void onStop() { Collect.getInstance().getActivityLogger().logOnStop(this); super.onStop(); } - - @Override - public void onBackPressed() { - if (dataManagerList.getDrawerStatus()) { - dataManagerList.setUserVisibleHint(false); - } else { - super.onBackPressed(); - } - } - } diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java b/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java index 4e720fba45e..e3e0524349a 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java @@ -14,24 +14,20 @@ package org.odk.collect.android.fragments; -import android.content.res.Configuration; import android.database.Cursor; -import android.graphics.Color; +import android.graphics.Typeface; import android.os.Bundle; import android.preference.PreferenceManager; +import android.support.design.widget.BottomSheetDialog; import android.support.v4.app.ListFragment; -import android.support.v4.content.ContextCompat; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarDrawerToggle; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.support.v7.widget.Toolbar; -import android.view.Gravity; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; -import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; @@ -40,8 +36,10 @@ import android.widget.TextView; import org.odk.collect.android.R; +import org.odk.collect.android.adapters.SortDialogAdapter; import org.odk.collect.android.application.Collect; import org.odk.collect.android.database.ActivityLogger; +import org.odk.collect.android.listeners.RecyclerViewClickListener; import org.odk.collect.android.provider.InstanceProviderAPI; import java.util.ArrayList; @@ -56,17 +54,13 @@ abstract class AppListFragment extends ListFragment { protected final ActivityLogger logger = Collect.getInstance().getActivityLogger(); protected String[] sortingOptions; - View rootView; - private ListView drawerList; - private DrawerLayout drawerLayout; - private ActionBarDrawerToggle drawerToggle; - protected LinearLayout searchBoxLayout; protected SimpleCursorAdapter listAdapter; protected LinkedHashSet selectedInstances = new LinkedHashSet<>(); protected EditText inputSearch; - + View rootView; private Integer selectedSortingOrder; + private BottomSheetDialog bottomSheetDialog; // toggles to all checked or all unchecked // returns: @@ -106,21 +100,6 @@ public static void toggleButtonLabel(Button toggleButton, ListView lv) { } } - //to get present drawer status - public Boolean getDrawerStatus() { - return drawerLayout != null && drawerLayout.isDrawerOpen(Gravity.END); - } - - @Override - public void setUserVisibleHint(boolean isVisibleToUser) { - if (!isVisibleToUser) { - // close the drawer if open - if (drawerLayout != null && drawerLayout.isDrawerOpen(Gravity.END)) { - drawerLayout.closeDrawer(Gravity.END); - } - } - } - @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { Collect.getInstance().getActivityLogger().logInstanceAction(this, "onCreateOptionsMenu", "show"); @@ -141,12 +120,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_SORT: - if (drawerLayout.isDrawerOpen(Gravity.END)) { - drawerLayout.closeDrawer(Gravity.END); - } else { - Collect.getInstance().hideKeyboard(inputSearch); - drawerLayout.openDrawer(Gravity.END); - } + bottomSheetDialog.show(); return true; case MENU_FILTER: @@ -160,39 +134,6 @@ public boolean onOptionsItemSelected(MenuItem item) { return super.onOptionsItemSelected(item); } - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (drawerToggle != null) { - drawerToggle.onConfigurationChanged(newConfig); - } - } - - private void setupDrawerItems() { - ArrayAdapter adapter = new ArrayAdapter(getContext(), - android.R.layout.simple_list_item_1, sortingOptions) { - @Override - public View getView(int position, View convertView, ViewGroup parent) { - TextView textView = (TextView) super.getView(position, convertView, parent); - if (position == getSelectedSortingOrder()) { - textView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.tintColor)); - } - textView.setPadding(50, 0, 0, 0); - return textView; - } - }; - drawerList.setAdapter(adapter); - drawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - parent.getChildAt(selectedSortingOrder).setBackgroundColor(Color.TRANSPARENT); - view.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.tintColor)); - performSelectedSearch(position); - drawerLayout.closeDrawer(Gravity.END); - } - }); - } - private void performSelectedSearch(int position) { saveSelectedSortingOrder(position); updateAdapter(); @@ -201,11 +142,6 @@ private void performSelectedSearch(int position) { @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - setupDrawer(view); - setupDrawerItems(); - if (drawerToggle != null) { - drawerToggle.syncState(); - } } @Override @@ -213,30 +149,33 @@ public void onResume() { super.onResume(); Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.notes); + + if (bottomSheetDialog == null) { + setupBottomSheet(); + } } - private void setupDrawer(View rootView) { - drawerList = (ListView) rootView.findViewById(R.id.sortingMenu); - drawerLayout = (DrawerLayout) rootView.findViewById(R.id.drawer_layout); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); - drawerToggle = new ActionBarDrawerToggle( - getActivity(), drawerLayout, - R.string.sorting_menu_open, R.string.sorting_menu_close) { - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - getActivity().invalidateOptionsMenu(); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); - } + private void setupBottomSheet() { + bottomSheetDialog = new BottomSheetDialog(getActivity()); + View sheetView = getActivity().getLayoutInflater().inflate(R.layout.bottom_sheet, null); + final RecyclerView recyclerView = (RecyclerView) sheetView.findViewById(R.id.recyclerView); - public void onDrawerClosed(View view) { - super.onDrawerClosed(view); - getActivity().invalidateOptionsMenu(); - drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); + final SortDialogAdapter adapter = new SortDialogAdapter(sortingOptions, getSelectedSortingOrder(), new RecyclerViewClickListener() { + @Override + public void onItemClicked(SortDialogAdapter.ViewHolder holder, int position) { + TextView previousSelected = (TextView) recyclerView.getChildAt(selectedSortingOrder).findViewById(R.id.title); + previousSelected.setTypeface(null, Typeface.NORMAL); + holder.txtViewTitle.setTypeface(null, Typeface.BOLD); + performSelectedSearch(position); + bottomSheetDialog.dismiss(); } - }; + }); + RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity()); + recyclerView.setLayoutManager(layoutManager); + recyclerView.setAdapter(adapter); + recyclerView.setItemAnimator(new DefaultItemAnimator()); - drawerToggle.setDrawerIndicatorEnabled(true); - drawerLayout.addDrawerListener(drawerToggle); + bottomSheetDialog.setContentView(sheetView); } protected void checkPreviouslyCheckedItems() { From d7a66cd233fed2c0ad38c2ceb500afea4017c9c2 Mon Sep 17 00:00:00 2001 From: Shobhit Agarwal Date: Mon, 10 Jul 2017 09:31:28 +0530 Subject: [PATCH 05/19] Removes drawerLayout from xmls --- .../android/activities/AppListActivity.java | 1 + .../android/fragments/AppListFragment.java | 1 + .../main/res/layout/chooser_list_layout.xml | 91 +++++------- .../res/layout/instance_uploader_list.xml | 132 ++++++++--------- .../res/layout/remote_file_manage_list.xml | 137 ++++++++---------- .../src/main/res/layout/tab_layout.xml | 112 +++++++------- 6 files changed, 208 insertions(+), 266 deletions(-) diff --git a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java index bc51b5a51b3..a39ff272755 100644 --- a/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java +++ b/collect_app/src/main/java/org/odk/collect/android/activities/AppListActivity.java @@ -164,6 +164,7 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_sort: + Collect.getInstance().hideKeyboard(inputSearch); bottomSheetDialog.show(); return true; diff --git a/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java b/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java index e3e0524349a..7ceb159618a 100644 --- a/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java +++ b/collect_app/src/main/java/org/odk/collect/android/fragments/AppListFragment.java @@ -120,6 +120,7 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_SORT: + Collect.getInstance().hideKeyboard(inputSearch); bottomSheetDialog.show(); return true; diff --git a/collect_app/src/main/res/layout/chooser_list_layout.xml b/collect_app/src/main/res/layout/chooser_list_layout.xml index 62d52f65c70..745eaf4f0a3 100644 --- a/collect_app/src/main/res/layout/chooser_list_layout.xml +++ b/collect_app/src/main/res/layout/chooser_list_layout.xml @@ -13,65 +13,50 @@ License for the specific language governing permissions and limitations under the License. --> - - - - - - - - - - - + + - - - - + - - + android:background="#DDDDDD" + android:paddingBottom="4dip" + android:paddingEnd="8dip" + android:paddingLeft="8dip" + android:paddingRight="8dip" + android:paddingStart="8dip" + android:paddingTop="4dip" + android:text="@string/form_scan_starting" + android:textSize="14sp" /> + + + + - - + + - \ No newline at end of file + + \ No newline at end of file diff --git a/collect_app/src/main/res/layout/instance_uploader_list.xml b/collect_app/src/main/res/layout/instance_uploader_list.xml index bac66ec450f..fc40c61fd5d 100644 --- a/collect_app/src/main/res/layout/instance_uploader_list.xml +++ b/collect_app/src/main/res/layout/instance_uploader_list.xml @@ -9,93 +9,79 @@ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> - + android:layout_height="match_parent" + android:orientation="vertical"> - + + + - - - - + android:layout_height="wrap_content" + android:background="#DDDDDD" + android:paddingBottom="4dip" + android:paddingEnd="8dip" + android:paddingLeft="8dip" + android:paddingRight="8dip" + android:paddingStart="8dip" + android:paddingTop="4dip" + android:text="@string/form_scan_starting" + android:textSize="14sp" /> - + - + - + - + - - -