From e95edc696b8608de220ce0e660c38025b6d42091 Mon Sep 17 00:00:00 2001 From: Yusuke Matsubara Date: Thu, 20 Jul 2017 23:19:06 +0900 Subject: [PATCH 01/42] Remove lint results from Travis reports --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 898b0a8cf..fc6f81ad7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,8 +33,6 @@ after_success: after_failure: - echo '*** Connected Test Rsults ***' - w3m -dump ${TRAVIS_BUILD_DIR}/app/build/reports/androidTests/connected/*Test.html - - echo '*** Lint Results ***' - - cat ${TRAVIS_BUILD_DIR}/app/build/reports/lint-results.xml jdk: # - openjdk8 # not yet available - oraclejdk8 From 84a655a1ecbb672b5040a09140bb24da77d874c9 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:46:01 +0100 Subject: [PATCH 02/42] Replace Exit icon in Drawer with vector --- .../drawable-hdpi/ic_exit_to_app_black_24dp.png | Bin 251 -> 0 bytes .../drawable-mdpi/ic_exit_to_app_black_24dp.png | Bin 171 -> 0 bytes .../drawable-xhdpi/ic_exit_to_app_black_24dp.png | Bin 246 -> 0 bytes .../drawable-xxhdpi/ic_exit_to_app_black_24dp.png | Bin 354 -> 0 bytes .../ic_exit_to_app_black_24dp.png | Bin 432 -> 0 bytes .../res/drawable/ic_exit_to_app_black_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_exit_to_app_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_exit_to_app_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_exit_to_app_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_exit_to_app_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_exit_to_app_black_24dp.png create mode 100644 app/src/main/res/drawable/ic_exit_to_app_black_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_exit_to_app_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_exit_to_app_black_24dp.png deleted file mode 100644 index ad0f63e5b8a97d5951f1b4e8576dadee1ed7b06c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmV7p6eU`=zZX-N|=GVrD^) zClqF&$Jv?-QOwy=^+Y}F$nfc4Bot;$_dOXQ9RzHI`#%>oY-)%aZoJrjFFFv3NmVRr z2?Sa`S#md3dQVyL$W)m~R+X1#=Sa*{6V0AVQq>n#Elps}Q)srP(H~^4sXZe4&|XbV z{WbCr8*-?%{P#rkbYwX65AuY=z)4@Wr^6vI^9JtMV7dP`o`V1Y002ovPDHLkV1iCn BWIO-> diff --git a/app/src/main/res/drawable-mdpi/ic_exit_to_app_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_exit_to_app_black_24dp.png deleted file mode 100644 index dee407b59836072bd89a0f869c53cc8e47f3f7b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iB2O2`kP60Ri9HGv9;zO$xA`F2 zY~NKip@`{&YFE_;0j&cQmak%SZDZ!)T9OgL`NY;CL-7rhUE5<0T@KzKTjw-n9DJ$2{8En0ePbXTEv8+xH$tl7$*|>0Q(JcpPKIn>;M1&07*qoM6N<$f)PV!8UO$Q diff --git a/app/src/main/res/drawable-xxhdpi/ic_exit_to_app_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_exit_to_app_black_24dp.png deleted file mode 100644 index 53b79d4c7b9cdad40cb666c5bb30ed44daa143a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmV-o0iFJdP)3fpZFa4cDyL4)iGZOvQJns;a8`1-tx#POU72+yDRo07*qoM6N<$g3C0W AH~;_u diff --git a/app/src/main/res/drawable-xxxhdpi/ic_exit_to_app_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_exit_to_app_black_24dp.png deleted file mode 100644 index e30632b6b1dc6d3b8e1c7556a9f73e231851051f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432 zcmV;h0Z;ykP)Q*LDW#NB5A+;4Q?5K`4y@^Lb;E`dIs-k^@$0`)8kp@^!iLhwtjC@G(##BWRM%4) znibU@n*!{q?%WjMM0MrY_zL*@!2kgS5I_I{49g67rckh~fcf`zmJu-jaiwJgy!^S= zG69|_|BU4U-16=r!~^_<;O`+n!4HTh!~@)fcz~A>4{#FV0Zu|Zz)6S)I0 zK*6#D3YHyEFadOg#*gV^^a{-azQ_XBZxk@&BjU$g{QB_#=lbyg-}>=@8K0T|slW5A zAAe)ZwSGLnxqdw0G5gJ3umrc)s|c3y5tHS9!~|fD_4Sxl54r^qKmY**NdMyNp(((Q z>efvG7F5?UH1zuYJ!F0Xf61t(Y@1mBl?jX`^uY&dV95km9V_;n0zNo*EH0gWrIb=i aDfI + + From da0913ab75c50fa233235ff13b649aa23e3437c2 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:49:07 +0100 Subject: [PATCH 03/42] Replace Feedback icon in Drawer with vector --- .../res/drawable-hdpi/ic_feedback_black_24dp.png | Bin 149 -> 0 bytes .../res/drawable-mdpi/ic_feedback_black_24dp.png | Bin 127 -> 0 bytes .../res/drawable-xhdpi/ic_feedback_black_24dp.png | Bin 187 -> 0 bytes .../drawable-xxhdpi/ic_feedback_black_24dp.png | Bin 246 -> 0 bytes .../drawable-xxxhdpi/ic_feedback_black_24dp.png | Bin 311 -> 0 bytes .../main/res/drawable/ic_feedback_black_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_feedback_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_feedback_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_feedback_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_feedback_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_feedback_black_24dp.png create mode 100644 app/src/main/res/drawable/ic_feedback_black_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_feedback_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_feedback_black_24dp.png deleted file mode 100644 index f03168559b3ca90ff3223edcca99bdeb69fab070..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8jHioZNCo5DOB;C`40v2F#hkaU{$pwX`Q{|-xzl;s!!o(ZPixsi1yiwa(I*%-G}&=ob-s4h wtig%3lvSkUmTbzJB}oB>DmdKI;Vst0I{<%xc~qF diff --git a/app/src/main/res/drawable-mdpi/ic_feedback_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_feedback_black_24dp.png deleted file mode 100644 index 8be6849cbc05874a2aa44d7103d49acf1630b3bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1H%}MGkP61+1;QLD6(>K;XQ(;) zfIpl+%uiyUOU4g>nI)^(6eNVC+VV9N7512(jy6 ZU}$NyaNHmn{TXN?gQu&X%Q~loCID#lCawSg diff --git a/app/src/main/res/drawable-xhdpi/ic_feedback_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_feedback_black_24dp.png deleted file mode 100644 index 63bec23315f1d4c4239102fb5ff07c23815834fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DCQlc~kP61Pmkjw1IqSf^O2*--OcVX9fx*LjPh=D zd*wSN?p5*vrXT4G>e==kXJI?nu-}8BMNYz=xteK~RK%78rw8U{~SKbLh*2~7YkkxJ_T diff --git a/app/src/main/res/drawable-xxhdpi/ic_feedback_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_feedback_black_24dp.png deleted file mode 100644 index e68ceb906ae6b9192e3bfe3b5b77139d8f871f8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhaw_IkQFhEy=Vz2eAq$Uws7;r6cb z74B0Oxqm2W3e~9+a^%pvvO_#c(DQ%fnc1~JPCPnpXZRf|fP6E-N(i{Hi$zB#mC!UpTGM%;a!Y zGG&6}K4&&lhN&+lMT~$lE8cFB$_QZo8ns~J5*DeK4$M;|UwD47&hU;%lDT5BqA=j` rf@6-o%~I^9d|5z&BgJ!y-&Qlv?EZPH<*5`i&?5|C5 z0U~ZGtWyrOOR&voRMJSkp!#RyOTj~JZRJag?=gM9e&fdWnKN&)aSFYa7jweIF5ED9(-rq)o#eL=sSjs1Ouy8ie7Nt+ zCG$5b4h;=l>JA5{v-mK_v2q9~0Qo5gW-~A{vGA-j0dmTLES35cCKiq#D;Nb79^|V# zG%zsw9^hAhFoW;La^`I}8;)5?Z)i?AV4J?P;aFat9jp8~+vsaPW=t_b`#$_!a$ddG x?&W9C`ToCZE + + From 42c6749e9d6143ad160bf2300279d979f9eb92ad Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:50:39 +0100 Subject: [PATCH 04/42] Remove unused Upload icon --- .../drawable-hdpi/ic_file_upload_black_24dp.png | Bin 139 -> 0 bytes .../drawable-mdpi/ic_file_upload_black_24dp.png | Bin 114 -> 0 bytes .../drawable-xhdpi/ic_file_upload_black_24dp.png | Bin 144 -> 0 bytes .../drawable-xxhdpi/ic_file_upload_black_24dp.png | Bin 175 -> 0 bytes .../ic_file_upload_black_24dp.png | Bin 214 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_file_upload_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_file_upload_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_file_upload_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_file_upload_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_file_upload_black_24dp.png diff --git a/app/src/main/res/drawable-hdpi/ic_file_upload_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_file_upload_black_24dp.png deleted file mode 100644 index 5e5b9fc4ac45134e7fc93da768e8730bd06734f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K8kf)1dNCo5DGaGpw3^|ws-A=CP z`DLzH68?wnq{+mZb$^po%d51{T(_3?`MN-a%`0UAi`$|E6)p&|G$EzyQ~7y`l#B_A h(*qAb&7M%bkXz5?Z!+^^k2av`44$rjF6*2UngDS|nb&%Fb3ug|-}yriBQ0#W+tVLn7qpS_ zP~Tf$6T85n@f^2^MgWjr<#oZ@0>}sr4gL3m|Lx7MUUi92n}IH1@O1TaS?83{1OQ8~ BM!^68 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_file_upload_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_file_upload_black_24dp.png deleted file mode 100644 index 9ce5b8a7b0f464d42bcc455c8649337e2c417d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeG3?%1&o4*=JaR&H=xB_ViXik240LWr03GxeO zXqc_-CjsPDdAc};R4~3hyOH;>fxyuV-isA&dY@l3kvio2ZwliL$%Lg^W_`Nd;nAh@ zH}Bba%6i?WXWQp^$Vi?nQYuVQYjTiaO5|Ya5bOdoS`-Boyc#4JlYk-$ZVeoaN-YWk s5H&!lrhpY0`CndqJXiEO^YQ;zbrQ36Ec&9=#Xzp}boFyt=akR{0EMJP4gdfE From a0963b913acfe34171f86fc3c6c9abfba4e7aead Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:51:29 +0100 Subject: [PATCH 05/42] Replace Home icon in Drawer with vector --- .../main/res/drawable-hdpi/ic_home_black_24dp.png | Bin 214 -> 0 bytes .../main/res/drawable-mdpi/ic_home_black_24dp.png | Bin 177 -> 0 bytes .../res/drawable-xhdpi/ic_home_black_24dp.png | Bin 239 -> 0 bytes .../res/drawable-xxhdpi/ic_home_black_24dp.png | Bin 303 -> 0 bytes .../res/drawable-xxxhdpi/ic_home_black_24dp.png | Bin 356 -> 0 bytes app/src/main/res/drawable/ic_home_black_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_home_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_home_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_home_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_home_black_24dp.png create mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_home_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_home_black_24dp.png deleted file mode 100644 index 9f61d7bf25be9f17f17688cc948ddf7bb65a5f2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8LpTu&FrkP61Pmp1Y?C5X5_baq^> z%l&}uOoQ_S37rE>ISaiFn)41YT`3WX(bUkm@?9j!=~Mmk{Z~_k9j&%D_T*_LFEzGx z`toE=L83!3GpoIpqpofCTIo7I*N{}&pFv^CjQFumQ;FJ@X8kqC4s NgQu&X%Q~loCID<(Ql|g_ diff --git a/app/src/main/res/drawable-mdpi/ic_home_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_home_black_24dp.png deleted file mode 100644 index 9f2c3d2f75d467de0bb9ab7db131a0d04840492f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+i3QrfukP61Pr`KO?VvupT=)E8_ zmGN$aWC@3Cv*jJ9=?QJ;c_SKpls{Z{cu?>|T&HT^?@ym~g|?S>_6G4Q-dSpPL)$ez zGu`!>CfnbWIu@&rtT=VBCq`Fo)l;=Orb)|=ojeh$EtVC_BVx5NXt{w9cOyUF-v1BV a_b`O!Zw%F1#TE>71B0ilpUXO@geCyf)Iq)g diff --git a/app/src/main/res/drawable-xhdpi/ic_home_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_home_black_24dp.png deleted file mode 100644 index dcdcfc0a80de0fe05a62160fc706e9363a0239e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0DZJsWUAr*{oC+`((au8vg-ry4~ zb%Adko37L81$?_NsI6eMUeMTmlA}UM!ovJt4Ria&+qwyhkN!0FJD9pDLDeho#*?X& zL~mS5@Rv4AS@x)J?~R~|6K!Ru-Pous+}N?#Q0T;giE_Ua&NsHsk=&rqHz&g3Y{%b% zCG+g3b}svTGWaEe*cS3BWY?jZLm|5+D)=nbIHT^Pss$vLYM)6rp1RSpO5rH8+y{qq d4eT<ojwUa*oC)#{gQu&X%Q~loCIET=VpRYD diff --git a/app/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_home_black_24dp.png deleted file mode 100644 index 2e86cc2557d602e22c29bf90ff3cd9b76c86bc6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXhawzInPhhEy=Vow70Tu!9I|c%#we zRg9M#vkY8k7=^U&Ht=1+cDYe1V2w|s9SaLj^TVd&_GdqoN#Dr$$=zdk%p~Ss?hQ^| zeU^h$r^$Xe;89~yw7^Jq{So#2l8`48JAXVnGSTbHnIq=szJxsJY~AtrP-n`#$WHkf z%gHAWxczx_Y=ZegjW141kUOFI fTfgBkiO*~+jBKNAm>6EUQ`Ct*wSx>5qK>6$=Oo3Qm;g)G0o&@&xPba3#K6 z%^S&y&BmS5-@bSqnrJIp9eMMi%d*6LGb28kmp9tyGS|O5b6}s$oE^sD?xs9P9R!Z_ z75`B8Z(s2HaaOv+jvdD3_xj(@iQ5wQ?NL}~*gq)I8fJEYcY)~s9ia=R@)j^>s50MS zi2B(b%@}o%$-H0e=-I`tg`YD5@7P3%U~s1aWuF3ND}l0d=Ka%-V{k(oZvXyV8UMT3 y0~izy3@`p?t4o+3U}gb + + From 8d422c83010f91884802d3800f09a6f2ac942189 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:52:18 +0100 Subject: [PATCH 06/42] Replace Info icon in Drawer with vector --- .../drawable-hdpi/ic_info_outline_black_24dp.png | Bin 487 -> 0 bytes .../drawable-mdpi/ic_info_outline_black_24dp.png | Bin 323 -> 0 bytes .../ic_info_outline_black_24dp.png | Bin 640 -> 0 bytes .../ic_info_outline_black_24dp.png | Bin 940 -> 0 bytes .../ic_info_outline_black_24dp.png | Bin 1256 -> 0 bytes .../res/drawable/ic_info_outline_black_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_info_outline_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_info_outline_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_info_outline_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_info_outline_black_24dp.png create mode 100644 app/src/main/res/drawable/ic_info_outline_black_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_info_outline_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index 4b5ab06e19d61515cf3a7395db43a81bb30a8203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 487 zcmVS-P=?%O3jv@aJa6HGW<0ceyC!`rEoc~?j{U=`ic|b z9N*QPsMv*+MQv@1i8kR%)UIh1`=XoCqqIYBOKErvea{GWZ!y>;D~RpT`=%tUi9cM8 zjMJd-5IZXpx*;AQpQG66NVp4e3Hh{Q=T<@);yl@>u@F125nkF002ovPDHLkV1kFY-~<2w diff --git a/app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index e0c9fe0eb8457013fbfa6e2efea61fca70bb9303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmV-J0lfZ+P)&s5ci5fY}sT-yed|rRg0)~VyRe(RxP5| ziKSu?+iDTDUGbuL5L2~?+LgFdoQk=|C}Pxj7RQRtyXcJ~MwepHsvL@iJ?s4SCH8$Y z6AQgYt#Ro~-1uQ)CSvZwj!tLSm1hyxCe}LeCL$stVz6(6)`@$smX==JIoA4R{{X3C VfQx`Hg^K_H002ovPDHLkV1oM>kN^Mx diff --git a/app/src/main/res/drawable-xhdpi/ic_info_outline_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_info_outline_black_24dp.png deleted file mode 100644 index b706f0d06a9a1e5e2f6606c01e84094ee6a99b42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmV-`0)PF9P)o#88fEO5na|OlO{3G z*yIPEVO{WsIjnKnVT>2DMzkql!ApMPMO=L<#3I9oI}LubOO+CNvScYxqQ)LKcQkDr zB9h}Xp02N~GG)+JIYyNnkc)PDZOnzu*#; zB8R%~1(i4Rl0>e>Eb#WLtxfOV(#vvo;8MrfX8# zOJwj-6bRC^RW#U^^>`Uk%GqUlp=9>%y-#&$qZ(w=qV2=#%SNueJg~}R_Q4VL}5`+@9~aM z91c`Iph*TZkfp^?^`Dp^0y)$Ij}vN48)8+LhbiruA|j3sO47|fb;`I*GKou>Ivq)^ z4u=V1QQ;ad;<{u73-W9;3T-}Qiy5qW$_D4g=4Y%kOJdS2(WFCmdcfcOtJM6uO{+z8D@UxkKMBq1+Buz@6?P#P0jG1VJo zr4$sRhK5k2Z=fXRN~6nW@y^{1KD~XI=}gYdoFjX&pWp3sm>a@9yM-m0@&}6isAEB(Qj;>qRst`p9~=6q zAu7LO=u+TQ_K7Dd@dg8*_ZUX>5!&WBSSti4^<9Bi7`TY2+y<+KU=~psWnX%OzQeO# z$Y%%reeR=-{wJ-1^+Iq9eT6F#>jwG=^_&zcppV__#9BjN7F^M%z)NCy=&SoFTsf2ppC<<**2_ZI5@SJo9Db@pv9Dwel>@Q2Y|A^pR+ zXm)h0I4$&8t(hXy6*cz3S)t(J`aO{jqc{F(SB1>4AMjd@E;uWs|KhZ2{;};ky2AQ2 z)rxDxD$`NJH=PukQuA$!?4zc}-&3$&Xn>Du{t5dULsafqFEod!oWp?rpGSuiRtueB z&+LQNE+8tK3|cF6gtuz;3+FNP08y#Yj|~U-15sJR*io8@$}eQs#}cB_phN-_NT5>I zKj|$a=v*bC1q7WMgQRsN@Unzi63g)%L1&Ybq;ZC~2s(dqkQ990An0_M#V3gY=Ga5f z`5TXvN})=^4!0;^!e^R~NT^Pc418W7q3m*(v-Aa=K4XNz?fnc_RXp{J*(OZ^8ac7(2N>$@cY O0000P)W$LQv#I8j8T_{yf~=m$~;IXzu5?eh%l+bI*O5LnIQ3L?S-g zNEKIT<0XBJGshx}%rQL6n2^)65BytPpur(aAq3mzkx5L*!vp z0a@Ola>x)hq%a~$J)clM5drmH23z#q<|xU<0`*qKPGo7Si~n z%wqBU&0hSlj{%E?RDuuU7MJcXB=Jj%b`&x_e(Xp;ExUAT@Y|(jm(qjWZ(B;_Uor&Y z6!R#Nv*chaGsx+GPf(5^TbQOC&z>U}Plh0!MlPf-JUW9CsUc{WQ6klNkmN0L=W$Hb zI`=E``6_{H*O2>uGL!}iknh%)aH)U^vHJHyC=I|j;!5~HKCWcN1R5Z;2B2BgU%-W! zczBp#L#PcDi)Yo>;Taa!Y@Ptv;<}7l4r)8NeQGlwNF& zYb9ky8`z|cGKQ@=tt4)=frR*F&DNq;5;NLBOdDlk)i+CZzQKZh$R zK8n3)UuX^N7uDk=aj8xWGC(Sn1_~Jx)mdCiFf4{?52b-lQTv8C9#o@5E)leAD3OzR z)Fn^Gaf%@QAdedG1kbj}b8XCXgrFSb3rcL@n*sbhFEP*Qfd2Kr_;5}_cz_aF;&K3M ze+ebhM9$XHgOZ`06n-hB6D318YwImEMS(?`<%O>vfHEvXL&vNpLe#!|zDLp9b&_k9T z*x5;~c-Pf0-68_APCn*}yr+}vWZ1(d62yp+WD|SHaD&H;+SWI+mO!0l8Wm6`sU`&F zbfE&s6E+i?YKBohW{8u7EWu?ypnS+US>hOx&jq=;y2>EuNMckT2YAG1l*`QUkZ)PT z3X$L_jr@gjkUknXOq>;|goD)5%rkl!W0nOLm}QJ!o^qco2Ph^Ii9{k1-~0zqnGDmx SqDLYC0000 diff --git a/app/src/main/res/drawable/ic_info_outline_black_24dp.xml b/app/src/main/res/drawable/ic_info_outline_black_24dp.xml new file mode 100644 index 000000000..cf53e145c --- /dev/null +++ b/app/src/main/res/drawable/ic_info_outline_black_24dp.xml @@ -0,0 +1,9 @@ + + + From 07ee6b2d71cd486dda0e13c5684505e1feb86972 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:54:57 +0100 Subject: [PATCH 07/42] Replace List icon in NearbyActivity with vector --- .../main/res/drawable-hdpi/ic_list_white_24dp.png | Bin 116 -> 0 bytes .../main/res/drawable-mdpi/ic_list_white_24dp.png | Bin 86 -> 0 bytes .../res/drawable-xhdpi/ic_list_white_24dp.png | Bin 95 -> 0 bytes .../res/drawable-xxhdpi/ic_list_white_24dp.png | Bin 94 -> 0 bytes .../res/drawable-xxxhdpi/ic_list_white_24dp.png | Bin 100 -> 0 bytes app/src/main/res/drawable/ic_list_white_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_list_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_list_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_list_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_list_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_list_white_24dp.png deleted file mode 100644 index f8f7e7dda6e4a5b45a97917c20dfaeddc3645077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8K;wWo_?h{y5d1PRu~2@%cz`Tk2c zTwv_<E5juBY?z2sqDoGA^{8xbs2ogzZvA71C3$u MboFyt=akR{08!Q;k^lez diff --git a/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_list_white_24dp.png deleted file mode 100644 index 15d8fc2bb488d6654651ec05f3ecba1fb7163394..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_*1Sx*gTe~DWM4fOr#gq diff --git a/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_list_white_24dp.png deleted file mode 100644 index 2b7253975cc58f5814084bab87ca50729cbfa262..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZA`BpB)|k7xlYrjj7PUMy@67>e^mO%eS?83{1OWFN8fX9j diff --git a/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_list_white_24dp.png deleted file mode 100644 index 2a6d3b0449b8c59366b29c2209bb23e80325080c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^2_Vb}Bp6OT_L>T$m`Z~Df*BafCZDwc@?O(%@xS>XdsLA^!WH|)|0G!%Hn8t^oG?pW9;DsV)z4*}Q$iB}k@*`j diff --git a/app/src/main/res/drawable/ic_list_white_24dp.xml b/app/src/main/res/drawable/ic_list_white_24dp.xml new file mode 100644 index 000000000..7f5d99c3b --- /dev/null +++ b/app/src/main/res/drawable/ic_list_white_24dp.xml @@ -0,0 +1,9 @@ + + + From 77ff73e7d09151170e1af73d37af9e3d5fcde661 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:56:32 +0100 Subject: [PATCH 08/42] Replace Map icon in NearbyActivity with vector --- .../main/res/drawable-hdpi/ic_map_white_24dp.png | Bin 317 -> 0 bytes .../main/res/drawable-mdpi/ic_map_white_24dp.png | Bin 231 -> 0 bytes .../main/res/drawable-xhdpi/ic_map_white_24dp.png | Bin 373 -> 0 bytes .../res/drawable-xxhdpi/ic_map_white_24dp.png | Bin 528 -> 0 bytes .../res/drawable-xxxhdpi/ic_map_white_24dp.png | Bin 678 -> 0 bytes app/src/main/res/drawable/ic_map_white_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_map_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_map_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_map_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_map_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_map_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_map_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_map_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_map_white_24dp.png deleted file mode 100644 index b7631d7d76fb46081b1bbc0f38e99436e572ec69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmV-D0mA-?P)#Y|WVl#6e|~YC{#k-kvSPbO9!pG0^Hd&8s4H%R#Cqora46uzg+{#+v(63)D~4ER_8?c P00000NkvXXu0mjftW}8f diff --git a/app/src/main/res/drawable-mdpi/ic_map_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_map_white_24dp.png deleted file mode 100644 index 4edb178dc91bdb1388e7bd150995757e2fdd598c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmVt0I4V?X{casvx2f_73_+u-bQT}AK41*=ir?6A z;f0AHwlWu_Uj+YPbuM^wX;(HCv>Nc_T&e4Q3_LipVa diff --git a/app/src/main/res/drawable-xhdpi/ic_map_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_map_white_24dp.png deleted file mode 100644 index 301162e71baaafd76225314b2b3441586753f876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmV-*0gC>KP)i5HG0|Up6TAXrsgcU%T3b)&3ujCuJ?r?Zj2K2nwwpUiU{jM2$tE;*AG81_T_z!^J>e(n7 T(CC?}00000NkvXXu0mjf%iXV@ diff --git a/app/src/main/res/drawable-xxhdpi/ic_map_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_map_white_24dp.png deleted file mode 100644 index 0c38abeecc1814d8cdc677bbf3b4da09bbb44738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 528 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY0wn)GsXoKNz3#TCb7TBNk1xRe$t%B)%%#pEb-q2J4u48x0k91jn+FnNXNZ(Rj+1bc^QV=)9&$e1R#c6PHdc^=xi>(LY@;b^D@CtDRUVX_&;RDs)>Ze))?1z4qyt3S(^ovuQFh5#%Cmfr z);a^f9;=vNPs{2=(>o?a+4qV(64^GPmPg5TE928GpW410eYv!eDdyU3A8~s{Q(Ff~ zb%~^B%PJ1|9b#NBe(4OmN~#0raY>a3;gUe_I=1VdZya;}$MAx=%kmWWCVe;ct1UDB zvEMu=t`h1X*k0)-)O&2lfm`+O+HW3B-npKeqqt$Y%Ei2v%R0v&M!2irpLm7wF3ajk zWo{?8Ft$xdV`tS;LgK=hdl2sifvMVldkuRLFh}s|NAem&UvmZrTX%*fNN2t_=nD7 zox{Gndt;tP^U3d>uh#W+mfi#N@)e1GZu(d9pQ_n&Tw^%?Wc5XM7mGtlF$>NnTYvv? z^vvExGlPCw=N?cozcJx*{gF4z+AUsI`*J_En8~NmcEz2UyMQbDkmJ0`x2*j(3aMXa zxgz*fTYTjK&Gl2nlz1*LE4=;iG%y7INpUXO@geCx| C%_g1z diff --git a/app/src/main/res/drawable/ic_map_white_24dp.xml b/app/src/main/res/drawable/ic_map_white_24dp.xml new file mode 100644 index 000000000..4cb341e6e --- /dev/null +++ b/app/src/main/res/drawable/ic_map_white_24dp.xml @@ -0,0 +1,9 @@ + + + From a8f1a95b0650bd77a222422935d0cb3c3c31da32 Mon Sep 17 00:00:00 2001 From: Mikel Date: Fri, 21 Jul 2017 23:58:25 +0100 Subject: [PATCH 09/42] Remove unused Photo icon --- .../res/drawable-hdpi/ic_photo_black_24dp.png | Bin 256 -> 0 bytes .../res/drawable-mdpi/ic_photo_black_24dp.png | Bin 183 -> 0 bytes .../res/drawable-xhdpi/ic_photo_black_24dp.png | Bin 295 -> 0 bytes .../res/drawable-xxhdpi/ic_photo_black_24dp.png | Bin 424 -> 0 bytes .../res/drawable-xxxhdpi/ic_photo_black_24dp.png | Bin 548 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 app/src/main/res/drawable-hdpi/ic_photo_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_photo_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_photo_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_black_24dp.png diff --git a/app/src/main/res/drawable-hdpi/ic_photo_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_photo_black_24dp.png deleted file mode 100644 index 52c788746551c8c56b0b0c007d6d88b86e2491e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8LpaZeY=kP60R1X|{Hu@&s|&Ag-FGDXro&V_2U(SdKn8~3KLrKrI|Wt)y~N<@>gTe~DWM4f DxdmAD diff --git a/app/src/main/res/drawable-mdpi/ic_photo_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_photo_black_24dp.png deleted file mode 100644 index 377ce1331881a9e3a65230890c53d75a1afadf2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iI!_nJkP60Ri9HGv9;zO$xA`F2 zY~NKip@`{&>Z-Q?EsCWkJy}1F2%PyabwitRK^RAXP2+^NT%I#L+6ULftvJI}BlXUh zgYo7Zp5>B!h8rAGcSx*zbm_y~gB+(OCrxmebUEoqSFE$qxh-=XS`%tr1AcOc@c!e` h=hXNvyJe<4!{gtg&1u^v`~|v%!PC{xWt~$(698OCMb!WR diff --git a/app/src/main/res/drawable-xhdpi/ic_photo_black_24dp.png b/app/src/main/res/drawable-xhdpi/ic_photo_black_24dp.png deleted file mode 100644 index 6b7cd7838b5ab18a63036d58a054a7f7588df8d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 295 zcmV+?0oeYDP)A-PL#CT5Az5qiARtADF310vJ002ovPDHLkV1k7`cx3

0IdihI998&O^-W#$ zE8eR<`gyLR?O%&Chls5choVhVmCp&?Gd)wx?0#|VP~L8%%w$p-R(yr$;{~C~*0aQ- zs?IgBWz4kTp0!A|+(Jmj5e0owZ&G_RIaKonL&qxNl4CJJy$iIb&5VA0&o>}y-{Vf+ zDHG1r1x#19Qr&G{7AbO*Pb!!_%zNG?L)Xr;3&OX}$oL zDwTSQHR(l^wA|V&5Tv(BaLS|4S6@E=HsQVMvgUa=7p*v^YH9g=O3?HaqZf1cUXtJS zaF%GD*rb`FVdQ&MBb@09A9bRsaA1 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_photo_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_photo_black_24dp.png deleted file mode 100644 index ebe206ff7bb1de48d109e24282501264d1c85251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7!1&tJ#WAFU@$D_&t}6}_?H}DG zUtF78%ap#9!};-X(IfrAEF$5LMBUCCTvqAkux#a8#IvsSCC_EOFHChgM@+0V!-Go} ztWHi{v5xCs{noXv_7lwYO&kTx1qB6n`W>9Znszw-prK{(xhG7jYOgXiB))yeH<#dZofRb8aKMh65v4Km(J=0tQxe zrh}*HlLr2tohObjWUF~<#BlwG<&g&AcZFKgNe6i} zfNYr$^8};!yxS34JUMjJ3C3@0i#mVas^%|TnZ!1yV0v))k9T{%%dlH>PGl;JESr7* z+|{QE>WW?mxX)euR&jJ~e$Hi8Zm9Tj<;&2I@{RDB)ul%4IcxY~~shuCjiJz7=%!}+XkP3S}BH?LlOXmQ{1 zbtX&xyQ`v;<^mP(Zkg7~vthON3ayZa*jUD$>Ib8bzq<89<;SOp*oW$l^*Ndhtbf|& z_sOY?7IbX4S=nH_$2U{x*PlA}wm*#j?DqCp9#AQ`XVkQh)Ab4a%EbAC=|-u?1WQ}Q jpDR|sd7z>M1oey&Pa+y;l`K*O#y*3mtDnm{r-UW|Gl}p9 From 251046cbf300aaefb4af935ac6be342a7ed3b9a3 Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:01:40 +0100 Subject: [PATCH 10/42] Replace Camera icon in ContributionsList with vector --- .../drawable-hdpi/ic_photo_camera_white_24dp.png | Bin 364 -> 0 bytes .../drawable-mdpi/ic_photo_camera_white_24dp.png | Bin 240 -> 0 bytes .../drawable-xhdpi/ic_photo_camera_white_24dp.png | Bin 446 -> 0 bytes .../ic_photo_camera_white_24dp.png | Bin 666 -> 0 bytes .../ic_photo_camera_white_24dp.png | Bin 894 -> 0 bytes .../res/drawable/ic_photo_camera_white_24dp.xml | 12 ++++++++++++ 6 files changed, 12 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_photo_camera_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_photo_camera_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_photo_camera_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_photo_camera_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_photo_camera_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_photo_camera_white_24dp.png deleted file mode 100644 index 497c88ca82b139d8523f62d272569b97777cdec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9iTP)S{uX;NkkS)#&21u+#OWT?<*8xnfup2(UyYu`|TWayHRle3^B=LUseC>Hz3 z2?03L6F2Y)Y1vJelVK0EWmn2Ql$Ly?Q}HYJ&`ey8O(uTi9vWT@jom{_aSLoF;#2pK zl4W-|8up!*EPLl3g1*=uhfkRYaWVLWw$#P9nUaw)p(W=g$}a?K8bsDKc?-L=1LM-h zsPJb*v0}uSlpQ7f(8IPT6#ZR~|J)2!gMLSvx$!&t+WdOxKlA~ZoD~H=l;~Ih0000< KMNUMnLSTYiKb+YB diff --git a/app/src/main/res/drawable-mdpi/ic_photo_camera_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_photo_camera_white_24dp.png deleted file mode 100644 index e830522008b0a1b1f39fdde1156ff1bae3f955e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmVHkAXPXi!ebT=lL4K1x)6Wg_MY91 zzt7rrmFO;X_oUmq$FIPH+E8b!7Su|rTTt3JU}I)<+1$1SJPXOxL=vhYuo3Q@z)==< z{b1(CNz*~H=m#TH*Ja}&F!>pnOOBdeCCh%W6|%$U`K_?;2UJ3mWl4Bp2(Ys-zHDi) q+wWiFtfaRVtkebP_bn*je*_=o)*|^)1w=Uj0000S3bFt5nS?tU*5U+ zuRv$a3fXL!qPq!nmZ-`S-6wEv!Im}!G@?dn#;*=rm4ZHT$3Hy5 zK#ky=d(UOmFsQV^o<2gJx=}eIwnA3W7xau83lN!8vECcV2)4w<^v@2~67MD11sAjh ztGUt}LA${P1=0J3E1eNGc`3L+Gf5t=WKEt5E{OV^X;qWQ4p$&rl*20-lc(iB^4yia zijQ0lF6anWaiv8;dol|xA!y6No&?ck78<-*{Fa&B9E#TSq3mYYuttQ*QZ*_=*n0M$ zV!JjJ9`z`_U5gAzIwsc`sys4xbSaS{W>lIoJ$6TM=qna%_I>f1qB5iXUVh&=cfY<* oSSx7G$evyZ)YnOH5*(G_7e~OF#v^w+0000007*qoM6N<$g3E)#tN;K2 diff --git a/app/src/main/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png deleted file mode 100644 index c8e69dcebb98d43695027fcc7e39a339c84dda51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iS)P)y zDuP#FBS9M!QcYr?x(Xj5^OKhEOrZ0;%Xt?M^PS1$oUvkJVg?bG2*VOq|FP&lUkJx< zKARBwK%20%c&{z=j$iacgSVPOZ>ZBRKY6Vs^pYxn!v)X(MaU+{KDTId#}NxSK|*6x zFv$sHenK`COmmFwEtDe)3f@BdM8ToA&@EBW@D_@SSjd>rJ=jul4hPAn$ZYd zQ(^?GM-r@1H!ZY@i{+CPWphGpzG8()mbM9@HXpGBsG>9Ms~`YLf6Qp{EBmWamEC4dDr!XN=Tg=UR*LRnyXqu_l$^Po#V$T zj`&?_>IiL%W{Dt*qP?plloe0b6+u)P>h$wELg`L#hA>QZ`WYP|H+WzkLrdxi*`3}7 zVOSR<9(Dx^Vxd?l7V1BL0REY1s|}3R@&Et;07*qoM6N<$f_%9k Avj6}9 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png deleted file mode 100644 index 777658e95515ca47c9852d00621e2e6d45abc5c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 894 zcmV-^1A+XBP)zI9LJx5Cecy~F=}h8lwKtS@9n)MRxm2`AkqpItJs@p>)C(tu-V-#=CId=UD(s^ z#Zy@d`v;fOn~Tzu?OJHHNtIePI-lk`KN@Bx3G-g)`+Uz|m=FBkykXu`7K_DVu`~_~ z1Z4r$j3}CsFA0vr7p4ddb45K=_{;=>kNJmsIpZVU0%^)LLWz`4fe-nOMmgjIT>|g$ zGtFS1ZXE(|^ApYDN8W0_z#v8Txj;7;?6E~Um_R#sF$;$xalZoX{D6r(A?{D$E~c{O zM_>?haY%a$6fv1Q-U9oW%qwq!3ryzRTflV87q9|W;F{;GFv0){qSYiAAj>K*xHezl zfJJ&yHS#`7{A#YiA58NG$|F%`I5JV-9to7sbaLM;flIzZ1Lw!X3#^Fu{wYByi=R|$;R}qoTB8JI$kiVUUtqx1 zx=B!Su6`5*yii_yR9b4GhtSXus6)G54OU*Fzb<9Fuf)`*nQG!IEfB;+M}w za~X69{6e&@G0KTnj6*#FFeADVZuofoh-l4&E`cLDWuFO3wP#-rPc_|?^a;Rylnh;L z@)wd48zfOOJOnKQa*Rac43Xn8&v?osa%9ANUyhGPfeM+%FRSSkfU`OkhV}j2l~kBT z1bVSYwP7Nn+I` zNiohkFLCTaw-vAgjq*RZ@U(}??0O4qVKTS91=2W}ibKjn!0?Ng1(Y9wI8QK + + + From 94444210e79e62556dd1d7799fab6f6a3ac398c4 Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:03:03 +0100 Subject: [PATCH 11/42] Replace Photo icon in ContributionsList with vector --- .../res/drawable-hdpi/ic_photo_white_24dp.png | Bin 261 -> 0 bytes .../res/drawable-mdpi/ic_photo_white_24dp.png | Bin 185 -> 0 bytes .../res/drawable-xhdpi/ic_photo_white_24dp.png | Bin 304 -> 0 bytes .../res/drawable-xxhdpi/ic_photo_white_24dp.png | Bin 450 -> 0 bytes .../res/drawable-xxxhdpi/ic_photo_white_24dp.png | Bin 570 -> 0 bytes app/src/main/res/drawable/ic_photo_white_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_photo_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_photo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_photo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_photo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_photo_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_photo_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_photo_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_photo_white_24dp.png deleted file mode 100644 index b414cf5b6881d6ec172d2a7fbd73ada5bbf167ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmV+g0s8)lP)kmVzj-6zmROnb2dbs~(^j5ic0>pDDE2 jzES4mqy6s}oc+sic8*Qfk2kwOj%4t3^>bP0l+XkKat%vT diff --git a/app/src/main/res/drawable-xhdpi/ic_photo_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_photo_white_24dp.png deleted file mode 100644 index 2642b9e09ec00be308649f62d9323f22ae2b6c6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 zcmV-00nh%4P)0++mR7nD4pd~x$TQLGba6~{cu-M!3I>jYZG8L#~C$dSzGCa?>% zii{qBH_l~3H}Ow_R&mWIA6&_uY{DqeDkOK@%2_vI7ibl>$R-Q|t-=u5gh8NHSX1ob zZ91p^`0a>6o%RQ$Cqo6Qpk>-nPOXnuLHxL2AA)bf8YiVe5h%F;0000q8m|@f&vEk zXhJXy z)&q8Jdy{=h?m>-(r*@dK*d3epCi{|HgU+qz4*BYtIwp6bB0wo2#+nm8I>3B8iEGdk zTNzJQxB%cRn_*v)JJ1{dbN|paSFGhz>`QV3I>zMAKdKnfM6N&`Di|k|EDy3@h4PVK zk{o2e3gsieq-8-3jN^&)U)Wy&nw9O-LW-|?GEfU&#WGOH2p`=L$UkuoJ#eZRDaa7g sq|daVQ|=KHU?d>_qaXz-NI@l=ck_!~>**H-(*OVf07*qoM6N<$f*#evGXMYp diff --git a/app/src/main/res/drawable-xxxhdpi/ic_photo_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_photo_white_24dp.png deleted file mode 100644 index 2ffdb55f264ecd3610f90890f8202f93c00f72e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z{Ke3;uuoF`1aP>Ea5IfQowI9-hvuwR$tP^fy(>8sSO2|8{wRtGpvc@#B$n~B~Rwm&yIIB)&jy;7gW zTKL?7mzK@v|L<(N|7b3=;GHmT*|XKxR_ zisKEuaTo73N#D@a7GnOhx@e+huI&M-u%#?A#q8EMMfY92V!WoXj#HDtTEZ^x>C~Zf8IWQby>8Ib0dT5wN0yQ*dG`x>m;y#Wc*hW`8x0OY*zD)2SPUjd28<` z%OxHB?A^isVY&9DKSD{2WgAXtCo%nb*|kec?7;kW6+k(LjH+Fa;+@JJK3|^tK + + From f9846d1bbf73cc540019240ea626239d533bb67b Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:06:08 +0100 Subject: [PATCH 12/42] Replace Save icon in Categorization with vector --- .../main/res/drawable-hdpi/ic_save_white_24dp.png | Bin 247 -> 0 bytes .../main/res/drawable-mdpi/ic_save_white_24dp.png | Bin 168 -> 0 bytes .../res/drawable-xhdpi/ic_save_white_24dp.png | Bin 273 -> 0 bytes .../res/drawable-xxhdpi/ic_save_white_24dp.png | Bin 391 -> 0 bytes .../res/drawable-xxxhdpi/ic_save_white_24dp.png | Bin 504 -> 0 bytes app/src/main/res/drawable/ic_save_white_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_save_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_save_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_save_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_save_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_save_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_save_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_save_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_save_white_24dp.png deleted file mode 100644 index dd3f1066462df2ed7e407b3443a8ab28ae8064f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 247 zcmV42EYy@ILa0M5s>6LU8FOEP0!EMA1UJnE#X>H4|#tUDM{qm&kf2dMhR)ifj z8WUZ|7;_;tCIr>VOqfCg&;~EnCQz8@q32GR5=%FAqdn+F@^p=hssQl$U@002ovPDHLkV1jXsV!!|Z diff --git a/app/src/main/res/drawable-mdpi/ic_save_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_save_white_24dp.png deleted file mode 100644 index 015062ed3b316909362e3bfe43579715a4f2c14e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+id`}n05R2ZcmmRqp6hvGD%@cNQ zTrf?MD{tY`DCrY!+h+!7)MX@<|M>91UCT6U&6_Q^vKIW^bNn|gNPwG~q2dAY{6@(2Ul)|NDzIgd>D5-Nv3R_&pT)_9!>hC0v RLqMw;JYD@<);T3K0RZw0JMaJi diff --git a/app/src/main/res/drawable-xhdpi/ic_save_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_save_white_24dp.png deleted file mode 100644 index adda095754f015a58403af02df101e7213f3fa2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA0wn)(8}b0D8=fwXAr*{ouiIy}ILNd;e0ik1 zL&59A`M*Vsf!~yN-&Ah(m2P6Y@~YRDtG;K#iRnrf@56a{K3{q4q*%J-j>M1L^E>wD z_G`*BEKt%ZU=9!xlW_2kcwqhg@J~+L1PJQf&&tujU~xgSfq^Aq(NdMD@Qa448^br9 zJv*meXvT?xG}dmujKXXo3#U&Y*@0w|JqSu;kW8`%L1_GX^wikkMku z+!nN<`{#6z$_n(rC9(4bD+|yj&iNr#+MqpM!jbj0K{JA|g)V3yf=0TarU+{5f*K+y z*9B$&4b&1r9bM2+1dVk;a}l)E1wrp9=N7a<6~#f$6D?x75&I%ZEatS z3r4ib$>}g=S;qtI3$1o(pck}Sr-AO#YLW)JV1q`lWa+;+-xWC5gj7%<=ZrvIc=k>%>fl|gI;!tRK{Z;84l|>e7(Vy4L%kU(lfKjiFI>oQ3X>ech^2hYjIl+l`2ky&>*QB4^6 + + From 570853593d1c9d731015fde1bac089e5d4011e8d Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:13:36 +0100 Subject: [PATCH 13/42] Replace Send icon in MultipleUpload with vector --- .../main/res/drawable-hdpi/ic_send_white_24dp.png | Bin 251 -> 0 bytes .../drawable-ldrtl-hdpi/ic_send_white_24dp.png | Bin 255 -> 0 bytes .../drawable-ldrtl-mdpi/ic_send_white_24dp.png | Bin 207 -> 0 bytes .../drawable-ldrtl-xhdpi/ic_send_white_24dp.png | Bin 352 -> 0 bytes .../drawable-ldrtl-xxhdpi/ic_send_white_24dp.png | Bin 446 -> 0 bytes .../drawable-ldrtl-xxxhdpi/ic_send_white_24dp.png | Bin 590 -> 0 bytes .../main/res/drawable-mdpi/ic_send_white_24dp.png | Bin 208 -> 0 bytes .../res/drawable-xhdpi/ic_send_white_24dp.png | Bin 344 -> 0 bytes .../res/drawable-xxhdpi/ic_send_white_24dp.png | Bin 446 -> 0 bytes .../res/drawable-xxxhdpi/ic_send_white_24dp.png | Bin 586 -> 0 bytes app/src/main/res/drawable/ic_send_white_24dp.xml | 10 ++++++++++ 11 files changed, 10 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-ldrtl-hdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-ldrtl-mdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-ldrtl-xhdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-ldrtl-xxhdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-ldrtl-xxxhdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_send_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_send_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_send_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_send_white_24dp.png deleted file mode 100644 index 0f0017201499e7cb3f317605bb05a0536bd70227..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k0wldT1B8LpAx{^_kP61PS2yxD1&Fjhyx+o@ z!eDqYGlqYQ*!G6d0v@&svsndQ(kFL@9CLR5`tjeMCRypX-xn4oE?BbQ)3g~o3e(Ry zGZ^z*Ez|i@DV?c$rG;U_1s;`!nI2A?C$yv~a-MY-n$_?qpf$^{d-=jB`Bf9vEfU=E zPe{sf(~mtuyTq*Y7c@J?yi{KCNF)6QdnU8);w7y2d(1Ci{#dd;K8Yd5BPqrs*~cSU l2TUR}axyl@m+i6t!c>+yg|(=5O)$_m44$rjF6*2UngCSUU-bY0 diff --git a/app/src/main/res/drawable-ldrtl-hdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-ldrtl-hdpi/ic_send_white_24dp.png deleted file mode 100644 index 0cc14e7541455d7ac67d50d2fdfdd1c555047ac7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmV(cd_rXU-@1`zD_5C^0~SMi^&ef(Y!D!#OT$Pc!n=K@e0 z@fwbtXer2{mXQMuKnfK-6CDMhP!b~(D2T}*6B9r_#zIMqg_0NxB{3HIJZ5F)Ccj0X zotQ-*WM(yIZ6?ON)678w=Qrpf%yl2qw2q11r}5PLxcf9@e~b(?nC;!G5P%EKKS&MD zAs?DUJ~W4XXbAbx7}C%j@}W88Lo>*PDikmO%l7+e=mpYZYz2W_D-Zwx002ovPDHLk FV1h%3WfuSd diff --git a/app/src/main/res/drawable-ldrtl-mdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-ldrtl-mdpi/ic_send_white_24dp.png deleted file mode 100644 index d5fe50b36804643e509dcad7925ec3707dc1680c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iX`U{QAr*{g&pUD*G7xEbXwO~E zT0QBR(k<;7y*oEHeP#H_(At%9xsknDx^UB3_W#~BJNGl*K5%9#Pv+sgB?XBrlh|jT z>SR37C}((4yjg*X+2jyIZ-GKzMC6Y5alaXQGd?9Ix?Vfz^3;c2pRr$pK}K_m!pohH z&1cEgCM^54_@d_m_LfFD7BKQy!0MP_rf`G*fV8NNJIls*MVo*wWbkzLb6Mw<&;$Vc CrAyNQ diff --git a/app/src/main/res/drawable-ldrtl-xhdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-ldrtl-xhdpi/ic_send_white_24dp.png deleted file mode 100644 index 4735a7d71186c6c3762b44d2e6686dc793d9e7cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352 zcmV-m0iXVfP)c)f~kIRddy&k<*_Najm@&Oh&~$75AJC z{Bl0x<*Le*DO09QtA-A1TvL5*MZWE^M-9BU0W{AkuK@W$qew&2$q4GPOAXKl&>)HA zf`mxl=fejDB6%Pok_QqZ2_P$y1o9&VCI$JC@`Jibr0k#pCrPBNpbo3tAdCPKA_*WN zk^mAS2_QL=59$k%1W=Qa-ni$2LpE7rhKT@3kMzVXXY8}i0#l6re1upe;Rex-N78N( z2X)!u@n1I(HjVV6-9P}%ar`UjnLExoV1q@bn+A<`lI=ewd*G5IwpeD?O_uIBD}f*C z==}sxJfLvDI4J%*=iD#;ry~$hxL+J(1@u2Z! o7eIQzD-q;x0ToaI6;ST|1o-RvuW?C35dZ)H07*qoM6N<$f>2Jlvj6}9 diff --git a/app/src/main/res/drawable-ldrtl-xxxhdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-ldrtl-xxxhdpi/ic_send_white_24dp.png deleted file mode 100644 index 76d135b90f5ef53cdbda489af6f936bdb5b97fb0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 590 zcmV-U0Jt#p7>-Ipu8(Q1JDaQT7JRh-~a#s07*qoM6N<$f^nArkN^Mx diff --git a/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-mdpi/ic_send_white_24dp.png deleted file mode 100644 index 048d3eb29d98d77149a0294270eedc869d3a6205..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+i>7Fi*Ar*{AFC64Nm;#-%`{{Gnlwc zD^Lx5bil0BL3{yoEg12Bky(|#;Buq}gpb{DQUO1+WZP}|7e`EqW_nz$RCOMIS* z{e5}lgl$P!_lNUZN-70PCSatZ;n%{D^q+-4{d6?TjhRilKqoSIy85}Sb4q9e0N(CT AmjD0& diff --git a/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_send_white_24dp.png deleted file mode 100644 index ef59e77678dbd3f5d866bca9058b6e90cb8d6098..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmV-e0jK_nP)&W`22C;JryNwK41(MIA#GvFb#~s zwsao25E&6n03w(GL@)`A!D$_85` z%9!`-s3_@X0OI`y_5>OaJWhc7Ux1pxX-=Z&t1o;=Bq}NC$3*rSV}~5rah@Eqct#)^ z#sARKe>b^SMWD8;A|0im5z9_QQGnQ=9+)gN{ZC&+5rBvy01-u99ZM?OT$kUFh@ye? qUBLr0?$ZKzW0Q{J0Y5k327Cd{Pq+sr^Mm~W0000^MovOQy2%69g!l`1nlRu9q5pvE zX@myYNfB_YP>O(!La_r*Bos5CgHW7+xT6~oU$g=ef(baElh82WwP-+Oc&05B5IJN5 zB1?EcGzbZZ7QO+|!~|S(6`Ez4Z4SBMo;QAS3pm9ho9xr!mKQ!VTYnjTO4rC9j|;f3SF@(pKOI4j=1E3cc)~>%*CI9?W5jhI{pl# zB8ki(Y+Z@Yz#eJxok#U>^@^m0@8+i>;}%I($V3X;e=~@rA`}uySSUP_ppeEjA|O&b zm&b-m^(N!^U}YjHKUfWtNAeJ=)UTTkLOu0J4no~1k!nKyNvNc!iiyj@9(xVOVg#(7p003K_Gj#>nXC*>~ z2iWpwKJ$p7Er1B+1Rz;*lb$1h2o)J%M>$)bF?9w|p{xKzs8|5sDMy8xSOSPpT{8g5 znuiPw03r#cM?d%dGk^-^0w6*?WzsCbPb2|^Y6(Duas&{e0sur3N{^b!ng=Cx8fL2p~fB9RWlrPXH0B4&V$IxXN9QdBq2I(S<5~;1uV$%xw;N!HTa93iX6> zJwV&@S#X1H4M2eTh)@*(jm}4e8dU%UnU4rn28cJGPt5680EC#&=C@E00M2uTI~?(n z_k8;+fX7^FN1=;c;~pox=Hovrbf2@TP>>!Mvfw(W^-CP6$7N}>LiM=(yQ3AL#|3FB zA0?`LTp`VfPPtm@aakJIKQ#KdU<05JY(@YojR$~8V*nu1_+Bl}8TelAsx&45de>kA zp!d-R03wa+OFosx13;uP01#X7fJkEiAS(mD zi?1q;4S-5x1E8C59snYZ0l=obUhDy&(ij2gMzj&Y8 + + From d9c591e06e1a9e864b052ee500bc89ba9a8b2472 Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:14:37 +0100 Subject: [PATCH 14/42] Replace Settings icon in Drawer with vector --- .../res/drawable-hdpi/ic_settings_black_24dp.png | Bin 453 -> 0 bytes .../res/drawable-mdpi/ic_settings_black_24dp.png | Bin 322 -> 0 bytes .../drawable-xhdpi/ic_settings_black_24dp.png | Bin 557 -> 0 bytes .../drawable-xxhdpi/ic_settings_black_24dp.png | Bin 827 -> 0 bytes .../drawable-xxxhdpi/ic_settings_black_24dp.png | Bin 1073 -> 0 bytes .../main/res/drawable/ic_settings_black_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_settings_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png create mode 100644 app/src/main/res/drawable/ic_settings_black_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png b/app/src/main/res/drawable-hdpi/ic_settings_black_24dp.png deleted file mode 100644 index acf1ddf85b3388b4fb02a683664d7599d96ebfe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 453 zcmV;$0XqJPP)bdAc8oEppaIOE(LXPbaD_uiXgfuI0y=Ui?$Rg z3N9|rijvq&CiQlchlhJevpDqnjrr%mb8?c{t6qzumxlIL6n!zIh8Gl(U}e3LlM0Ef;V2BeJSjZb=;SQ|z+u z4yaibL-bf>PG6*TZCbM}(t2i;JWOXDi<+RJrJZgbD4Fy&xy-!MTym*5Ce+-mj<=}R zs*bfH=Sq2RG}Riq#p042E*7&*ne}3EUJe(E*_zBou{bA(tHo?vL#bs|A+IvyeHm7t#M^wEtHOK?m*3tk?OFDx*kh6Lst!v$eu1NdssLB&DM32-Q z^h4~jZ>A+~7n2>4r=NU@Dq}tg9ji`Suql$(%vHn+eg}v!7dsOm%)+nCb00000NkvXXu0mjfkE75f diff --git a/app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png b/app/src/main/res/drawable-mdpi/ic_settings_black_24dp.png deleted file mode 100644 index c59419c02b6273e09063a0529d2239784818207f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmV-I0lof-P)J%}fHzV<>iUk{yCv=|P(yFM9CIKrv6;vdj!^e)OQ=oM~3L z3Hov zYMc*TMS6^4Y*s#v8YK}AT(ig&XB4{J=afm7xZ$2C{CQWp)PoCx)G7YcXPY7T1DnU) UWG_v5V*mgE07*qoM6N<$f<$+V!TNkla9V}f0{{|82kXi@9MRd@?$weK4A^ju7 zLRBcZi6~YV4Y?x0YCBk^ee93}@A5qN9`;=V`Fy9md5-r894+Q7Vwa zKGHbsTJ3CbB>k$}G!3du63TIxO+;yvI}8$@RV#hZwGsJa1 zG(UeLOQIW*%YP$A_S8JsifkZzY=a`Er-+B1U^vMR;-MW*pvdqV@zg66vq)lJDKSEJ zw`0sxb4<_B;v8FuS(#q`)kg&}+hPL6xOrb?GQ?%fExvFHL!Kq|$LU4WPhFXQ&M?@z zxR1mtVOeOIy~lo>;tz)rETgf>fK;}TNLegBvB^KiQ=u3Ot|-Y( z2Uu+mzU3;1m}L#YE?|a1uJMlWb*&qR^Q=+kG@*msHr|$gaEk##XL&}z6#u1a9Hidf vu2=2VHre2#z3N8+Q5wRd6(rV6I@-ivWBUX&LwAlh00000NkvXXu0mjfs0IG% diff --git a/app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_settings_black_24dp.png deleted file mode 100644 index 3023ff8daa925ac79e863caf679d03c56c3afc93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 827 zcmV-B1H}A^P)>`06 zl!7Kix5q+Fq6=w?Bq2zRX%{Q=l9q~JFAfaD-fMk(ql{OMJp*hZ8Le@FKzb36b`fRvPbJZ#ihbmi`-huQ`v`H+dnnz5 zIO;AGB7BE9YM!%LJ&ic*2`mcPKpgfvmoR!03D^-c43Z$hAhR4H0ecmL8#qMtu}v3c zWQvny2hqm?F??uNd0r4z>Rub{-SwiV_KcJlc$@G(Y7OnY{oYXaZ@4M{dXjJ$v z`$eh=sKvO?Cei3I?)A;6Md`CXq2t(8SWgZw6G7n$pCQ&JiDGgU(}=YRim_lq5{{Tt>$z%L(Sw8>(002ovPDHLk FV1g%Ge~AD9 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_settings_black_24dp.png deleted file mode 100644 index 476d5c9780b6904004c7da0d86c1f02e4c37f892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1073 zcmV-11kU@3P)?ENDOXxEq##k{R3pG`V_=<^3NWfR4)j)KkE?kf% zU}CHb1trze6>4h;sTD;rtpyq(711_6TOXmFPeL**CLQm0&Kbrt$^HG8P44Zq_ne-d zIYT6GB9TZWvWW>Kq@TD8Z%rbKCJFFT3Q=|)UTQ^@t;I_ZBg!7bOS=$dFXN?m5M}%E z(wB&`ukq3!h_Yz{ypu!>x)$#=AqKVLoh^t#k5E8sIL>$MVhOq3&gY0hM`8YgceIr|YY&iqQ@`QK~6 zQos?!gFYj`%4WoqwqT*0?-5V>feMW6L_F#x3@zbr#H0S91|$0r&w3vNHzOXl4y8E9 z5Dz;}9F@lr$I={PD~(h#??P2Hv5k*OBaS_R%D0F^Gwfz5bE%<=S;V1HRE7}izM+=? zvXWuMx}&JnaTc-a1LhN^j9$d5v#dlZNx#*%UxG%$>Lq+a5(6c?YW(obN2{C>#Hd#& z!B{)f219oRCRP~?=PB;R(sE89s&->)k9y|05eEzCQO)~HF|~}eY5{Q-jsl(y{dFJ0 zLg+*>%Tom8#bC&-wqj#@$W=cjZ_b3=su3H_Ay*wEUqWZ2%FD7H{2O^AAiF$gQgUe1!CaxCt9AAy+*GP?%|S8#ZFe%*GOO> z#bLy_Ugb>^^dZI#kVL7TbBI;FloO_cKI?z#>rnXuv2KJ_AwQf^#JVG>3?mNBvWI0k zCeFQ%8(UwY@+jh1ntry^Op?+IC23&?1EdS}PEAbz5c&FESu5gU4Th($JgXZci}?%j zAcuGCUqC#n17l^3BOc^%YUO^!lkUMvz+uFL`muJC2Zudosl~w?NY31kB51DEg_A{d zo(4V7yWC2^CMFTbCfGp0ZS3d#oLeiEIC_%o8Q~cgkx|9lh(m9&kc<=^oYC)hXq9s6 z($m<(9mL4iY&qBmXe3*lJNfX^nst-}xU1(FC+XyRa$C!w;mW?1+!pg9Cm5oZ0(uZJ z=)Phh(s diff --git a/app/src/main/res/drawable/ic_settings_black_24dp.xml b/app/src/main/res/drawable/ic_settings_black_24dp.xml new file mode 100644 index 000000000..ace746c40 --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_black_24dp.xml @@ -0,0 +1,9 @@ + + + From 52b235f8b0d6c7285cbb9fa747195fcb7d774fa7 Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 00:16:57 +0100 Subject: [PATCH 15/42] Replace Undo/Retry icon in ImageDetail with vector --- .../main/res/drawable-hdpi/ic_undo_white_24dp.png | Bin 274 -> 0 bytes .../main/res/drawable-mdpi/ic_undo_white_24dp.png | Bin 196 -> 0 bytes .../res/drawable-xhdpi/ic_undo_white_24dp.png | Bin 339 -> 0 bytes .../res/drawable-xxhdpi/ic_undo_white_24dp.png | Bin 477 -> 0 bytes .../res/drawable-xxxhdpi/ic_undo_white_24dp.png | Bin 606 -> 0 bytes app/src/main/res/drawable/ic_undo_white_24dp.xml | 9 +++++++++ 6 files changed, 9 insertions(+) delete mode 100644 app/src/main/res/drawable-hdpi/ic_undo_white_24dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_undo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_undo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_undo_white_24dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_undo_white_24dp.png create mode 100644 app/src/main/res/drawable/ic_undo_white_24dp.xml diff --git a/app/src/main/res/drawable-hdpi/ic_undo_white_24dp.png b/app/src/main/res/drawable-hdpi/ic_undo_white_24dp.png deleted file mode 100644 index eb7522cdb1bb95fcb5d48e1d018fdf7a505079d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 274 zcmV+t0qy>YP)4&L<^}8G*Fn!6XpzR}Y@(EyK0Tihl%XpP!XLjqhwZF}SQ1py zTugwTv#Usu@L$nUy9-I_jI3fC}yCvtVKF!sca`eyb>*4FKdrw*xulirCLeRN& z^QFUAPo7a=d*Zn${r%>-c`OmTn@=6Q2_V^9|xQ)mki()6{CLnr9^_ w5bLw-m>HX4WMdr<)1s$ItM2}Jv;PZ=BijL0ndfp*KxZ*{y85}Sb4q9e0MIo~B>(^b diff --git a/app/src/main/res/drawable-xhdpi/ic_undo_white_24dp.png b/app/src/main/res/drawable-xhdpi/ic_undo_white_24dp.png deleted file mode 100644 index c4c28d0a4a8bf7746fff7a34a8df15aabc510bc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339 zcmV-Z0j&OsP)9KVVSO%^j7PWo5BRDgS~&Qbd>xvN%`yeR`YD z)4BDW`aIihmI&-SWsJ<(rgS(atdBC2BU0ko1l(JHGNkqUyB%Gpj!n6!HqQ(vxYCmi;AOMb-;F8eJ8CL;#qq`0VG)Wkymp(?Q z(`28N?w+ZuK(Pmw81!Da#v->AOG(0jPuBdmb?aw^cW^y1rUS1uh=k2>hl?{}70`e8 zC>OYBD?m7LPu>@kI-nD?e2{mj0O7D3GFD?@r<9B$_L#^*SyGd&g+Jmb7Sxo&$S^B*)YMEYl&O*2x^UI}yvXEwskcI2a*TTj-XPl1no0^H|`&&J`&+2iOWm%SGS(at}!x7@3b0c$+x9+x;wpo2(B+Ch~TpGoc$kEya<2PKmZ(&Q`Y`$Cfg z0w|GGrbCv-v?+_A7-<*xiO60=gQ5iTNay%~-h0k!pkJf{b!OLX@(Kv9^NOT?(5J;6 zu5pDM+@(XGh@@V!TL2~WmKrD7HuWu>pvDG&s?VNTgPw7U94>J=j?-q$wBGn64b$Up`%kb!;z6yinR TJ@r{w00000NkvXXu0mjf?+@0e diff --git a/app/src/main/res/drawable-xxxhdpi/ic_undo_white_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_undo_white_24dp.png deleted file mode 100644 index 6b10718b9ad10de899e3f46394b0d3e2e55eb055..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD0wg^q?%&M7z@+Nw;uuoF`1ZQJ$CN^u;~(c= zm*@7D(X#A*aX!gK#j)7gTVUGX=&ZuR%npS`8r%nc7ixAW7;jSS&F+}y(bbmSwT*3h z28Z4$h4mpW?<%*meYd&$@~>UfhsyeG@4rdyKWO=UPVqS?5yQbF5O#T${|nBnhItC? zFF1=Flw0o3d1#irC%G&0*~$$kcvP3oNNI_llhiJ^LB?sGo!SpS+o>}aOfS=2Q0F8q zt~qJL6``gsS~ake<1QEYNahySGrW0t_K3dcEGA}@j%HgVpTR8~wAb;}TE2;#8R z`z-C6s&`RDbb`|jXTj9`8=|}uoGjcWOH->JF()+0IIr>HY<`l&{6P3?=pqOE<(4k< zdY?piYgh6WPm{KJuKhK1fu-4kGWngy>YRGtKIVGA@@{ri7@xs$TRx#_8~oa4KKw75 z>ByfjFL9gDw2fwY*BtgF?Unk_Gq;6pTkmg`l + + From e39f6974810317ece0c0902d5f02477e9d1432e8 Mon Sep 17 00:00:00 2001 From: Mikel Date: Sat, 22 Jul 2017 12:17:23 +0100 Subject: [PATCH 16/42] Fix color of Photo icon --- app/src/main/res/drawable/ic_photo_camera_white_24dp.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/drawable/ic_photo_camera_white_24dp.xml b/app/src/main/res/drawable/ic_photo_camera_white_24dp.xml index c872f1670..4fa7158a0 100644 --- a/app/src/main/res/drawable/ic_photo_camera_white_24dp.xml +++ b/app/src/main/res/drawable/ic_photo_camera_white_24dp.xml @@ -4,9 +4,9 @@ android:viewportWidth="24.0" android:viewportHeight="24.0"> From 9c987efbd2d448ecd5c587e9dcd36201cb81b650 Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 22 Jul 2017 13:57:46 -0500 Subject: [PATCH 17/42] Swapped the ListView for a RecyclerView, made the fragment cleaner and fixed a whole bunch of code inspection issues. --- .../commons/category/CategoriesAdapter.java | 67 --- .../category/CategoriesAdapterFactory.java | 24 + .../commons/category/CategoriesRenderer.java | 57 ++ .../category/CategorizationFragment.java | 509 +++++++----------- .../free/nrw/commons/category/Category.java | 8 +- .../category/CategoryContentProvider.java | 21 +- .../category/CategoryCountUpdater.java | 59 ++ .../nrw/commons/category/CategoryItem.java | 42 ++ .../nrw/commons/category/MethodAUpdater.java | 6 +- .../category/OnCategoriesSaveHandler.java | 7 + .../nrw/commons/category/PrefixUpdater.java | 16 +- .../nrw/commons/category/TitleCategories.java | 7 +- .../commons/upload/MultipleShareActivity.java | 3 +- .../nrw/commons/upload/ShareActivity.java | 3 +- .../res/layout/fragment_categorization.xml | 2 +- .../res/layout/layout_categories_item.xml | 6 +- 16 files changed, 435 insertions(+), 402 deletions(-) delete mode 100644 app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapter.java create mode 100644 app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapterFactory.java create mode 100644 app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java create mode 100644 app/src/main/java/fr/free/nrw/commons/category/CategoryCountUpdater.java create mode 100644 app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java create mode 100644 app/src/main/java/fr/free/nrw/commons/category/OnCategoriesSaveHandler.java diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapter.java b/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapter.java deleted file mode 100644 index 2c0055c73..000000000 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapter.java +++ /dev/null @@ -1,67 +0,0 @@ -package fr.free.nrw.commons.category; - - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.CheckedTextView; - -import java.util.ArrayList; - -import fr.free.nrw.commons.R; - -public class CategoriesAdapter extends BaseAdapter { - - private LayoutInflater mInflater; - - private ArrayList items; - - public CategoriesAdapter(Context context, ArrayList items) { - this.items = items; - mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - } - - @Override - public int getCount() { - return items.size(); - } - - @Override - public Object getItem(int i) { - return items.get(i); - } - - public ArrayList getItems() { - return items; - } - - public void setItems(ArrayList items) { - this.items = items; - } - - @Override - public long getItemId(int i) { - return i; - } - - @Override - public View getView(int i, View view, ViewGroup viewGroup) { - CheckedTextView checkedView; - - if(view == null) { - checkedView = (CheckedTextView) mInflater.inflate(R.layout.layout_categories_item, null); - - } else { - checkedView = (CheckedTextView) view; - } - - CategorizationFragment.CategoryItem item = (CategorizationFragment.CategoryItem) this.getItem(i); - checkedView.setChecked(item.selected); - checkedView.setText(item.name); - checkedView.setTag(i); - - return checkedView; - } -} \ No newline at end of file diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapterFactory.java b/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapterFactory.java new file mode 100644 index 000000000..417121c44 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoriesAdapterFactory.java @@ -0,0 +1,24 @@ +package fr.free.nrw.commons.category; + +import com.pedrogomez.renderers.ListAdapteeCollection; +import com.pedrogomez.renderers.RVRendererAdapter; +import com.pedrogomez.renderers.RendererBuilder; + +import java.util.Collections; +import java.util.List; + +class CategoriesAdapterFactory { + private final CategoriesRenderer.CategoryClickedListener listener; + + CategoriesAdapterFactory(CategoriesRenderer.CategoryClickedListener listener) { + this.listener = listener; + } + + public RVRendererAdapter create(List placeList) { + RendererBuilder builder = new RendererBuilder() + .bind(CategoryItem.class, new CategoriesRenderer(listener)); + ListAdapteeCollection collection = new ListAdapteeCollection<>( + placeList != null ? placeList : Collections.emptyList()); + return new RVRendererAdapter<>(builder, collection); + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java b/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java new file mode 100644 index 000000000..426b0640e --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java @@ -0,0 +1,57 @@ +package fr.free.nrw.commons.category; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.CheckedTextView; + +import com.pedrogomez.renderers.Renderer; + +import butterknife.BindView; +import butterknife.ButterKnife; +import fr.free.nrw.commons.R; + +class CategoriesRenderer extends Renderer { + @BindView(R.id.tvName) CheckedTextView checkedView; + private final CategoryClickedListener listener; + + CategoriesRenderer(CategoryClickedListener listener) { + this.listener = listener; + } + + @Override + protected View inflate(LayoutInflater layoutInflater, ViewGroup viewGroup) { + return layoutInflater.inflate(R.layout.layout_categories_item, viewGroup, false); + } + + @Override + protected void setUpView(View view) { + ButterKnife.bind(this, view); + } + + @Override + protected void hookListeners(View view) { + view.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + CategoryItem item = getContent(); + item.selected = !item.selected; + checkedView.setChecked(item.selected); + if (listener != null) { + listener.categoryClicked(item); + } + } + }); + } + + @Override + public void render() { + CategoryItem item = getContent(); + checkedView.setChecked(item.selected); + checkedView.setText(item.name); + } + + interface CategoryClickedListener { + void categoryClicked(CategoryItem item); + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 3f467183d..748329ab8 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -6,12 +6,12 @@ import android.content.SharedPreferences; import android.database.Cursor; import android.os.AsyncTask; import android.os.Bundle; -import android.os.Parcel; -import android.os.Parcelable; import android.os.RemoteException; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v7.app.AlertDialog; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -22,15 +22,14 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.widget.AdapterView; -import android.widget.CheckedTextView; import android.widget.EditText; -import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; +import com.pedrogomez.renderers.ListAdapteeCollection; +import com.pedrogomez.renderers.RVRendererAdapter; + import java.util.ArrayList; -import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; @@ -40,6 +39,8 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; +import butterknife.BindView; +import butterknife.ButterKnife; import fr.free.nrw.commons.R; import fr.free.nrw.commons.upload.MwVolleyApi; import timber.log.Timber; @@ -47,83 +48,180 @@ import timber.log.Timber; /** * Displays the category suggestion and selection screen. Category search is initiated here. */ -public class CategorizationFragment extends Fragment { - public interface OnCategoriesSaveHandler { - void onCategoriesSave(ArrayList categories); - } +public class CategorizationFragment extends Fragment implements CategoriesRenderer.CategoryClickedListener { + public static final int SEARCH_CATS_LIMIT = 25; - ListView categoriesList; - protected EditText categoriesFilter; - ProgressBar categoriesSearchInProgress; - TextView categoriesNotFoundView; - TextView categoriesSkip; - private CategoryTextWatcher textWatcher = new CategoryTextWatcher(); - - CategoriesAdapter categoriesAdapter; - ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); + @BindView(R.id.categoriesListBox) RecyclerView categoriesList; + @BindView(R.id.categoriesSearchBox) EditText categoriesFilter; + @BindView(R.id.categoriesSearchInProgress) ProgressBar categoriesSearchInProgress; + @BindView(R.id.categoriesNotFound) TextView categoriesNotFoundView; + @BindView(R.id.categoriesExplanation) TextView categoriesSkip; + private RVRendererAdapter categoriesAdapter; private OnCategoriesSaveHandler onCategoriesSaveHandler; - - protected HashMap> categoriesCache; - + private HashMap> categoriesCache; private ArrayList selectedCategories = new ArrayList<>(); - + private ContentProviderClient client; + private PrefixUpdater prefixUpdaterSub; + private MethodAUpdater methodAUpdaterSub; + private final CategoryTextWatcher textWatcher = new CategoryTextWatcher(); + private final CategoriesAdapterFactory adapterFactory = new CategoriesAdapterFactory(this); + private final ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(2); + private final ArrayList titleCatItems = new ArrayList<>(); + private final CountDownLatch mergeLatch = new CountDownLatch(1); // LHS guarantees ordered insertions, allowing for prioritized method A results private final Set results = new LinkedHashSet<>(); - PrefixUpdater prefixUpdaterSub; - MethodAUpdater methodAUpdaterSub; - private final ArrayList titleCatItems = new ArrayList<>(); - final CountDownLatch mergeLatch = new CountDownLatch(1); + @SuppressWarnings("unchecked") + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_categorization, container, false); + ButterKnife.bind(this, rootView); - private ContentProviderClient client; + categoriesList.setLayoutManager(new LinearLayoutManager(getContext())); - protected final static int SEARCH_CATS_LIMIT = 25; - - public static class CategoryItem implements Parcelable { - public String name; - public boolean selected; - - public static Creator CREATOR = new Creator() { + categoriesSkip.setOnClickListener(new View.OnClickListener() { @Override - public CategoryItem createFromParcel(Parcel parcel) { - return new CategoryItem(parcel); + public void onClick(View view) { + getActivity().onBackPressed(); + getActivity().finish(); } + }); - @Override - public CategoryItem[] newArray(int i) { - return new CategoryItem[0]; - } - }; - - public CategoryItem(String name, boolean selected) { - this.name = name; - this.selected = selected; + ArrayList items; + if (savedInstanceState == null) { + items = new ArrayList<>(); + categoriesCache = new HashMap<>(); + } else { + items = savedInstanceState.getParcelableArrayList("currentCategories"); + categoriesCache = (HashMap>) savedInstanceState.getSerializable("categoriesCache"); } - public CategoryItem(Parcel in) { - name = in.readString(); - selected = in.readInt() == 1; - } + categoriesAdapter = adapterFactory.create(items); + categoriesList.setAdapter(categoriesAdapter); + categoriesFilter.addTextChangedListener(textWatcher); - @Override - public int describeContents() { - return 0; - } + startUpdatingCategoryList(); - @Override - public void writeToParcel(Parcel parcel, int flags) { - parcel.writeString(name); - parcel.writeInt(selected ? 1 : 0); + return rootView; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + menu.clear(); + inflater.inflate(R.menu.fragment_categorization, menu); + } + + @Override + public void onResume() { + super.onResume(); + + View rootView = getView(); + if (rootView != null) { + rootView.setFocusableInTouchMode(true); + rootView.requestFocus(); + rootView.setOnKeyListener(new View.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { + backButtonDialog(); + return true; + } + return false; + } + }); } } + @Override + public void onDestroyView() { + categoriesFilter.removeTextChangedListener(textWatcher); + super.onDestroyView(); + } + + @Override + public void onDestroy() { + super.onDestroy(); + client.release(); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + int itemCount = categoriesAdapter.getItemCount(); + ArrayList items = new ArrayList<>(itemCount); + for (int i = 0; i < itemCount; i++) { + items.add(categoriesAdapter.getItem(i)); + } + outState.putParcelableArrayList("currentCategories", items); + outState.putSerializable("categoriesCache", categoriesCache); + } + + @Override + public boolean onOptionsItemSelected(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.menu_save_categories: + + int numberSelected = 0; + + selectedCategories = new ArrayList<>(); + int count = categoriesAdapter.getItemCount(); + for (int i = 0; i < count; i++) { + CategoryItem item = categoriesAdapter.getItem(i); + if (item.selected) { + selectedCategories.add(item.name); + numberSelected++; + } + } + + //If no categories selected, display warning to user + if (numberSelected == 0) { + new AlertDialog.Builder(getActivity()) + .setMessage("Images without categories are rarely usable. Are you sure you want to submit without selecting categories?") + .setTitle("No Categories Selected") + .setPositiveButton("No, go back", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + //Exit menuItem so user can select their categories + } + }) + .setNegativeButton("Yes, submit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + //Proceed to submission + onCategoriesSaveHandler.onCategoriesSave(selectedCategories); + } + }) + .create() + .show(); + } else { + //Proceed to submission + onCategoriesSaveHandler.onCategoriesSave(selectedCategories); + return true; + } + } + return super.onOptionsItemSelected(menuItem); + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + setHasOptionsMenu(true); + onCategoriesSaveHandler = (OnCategoriesSaveHandler) getActivity(); + getActivity().setTitle(R.string.categories_activity_title); + client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY); + } + + public HashMap> getCategoriesCache() { + return categoriesCache; + } + /** * Retrieves category suggestions from title input + * * @return a list containing title-related categories */ - protected ArrayList titleCatQuery() { - + private ArrayList titleCatQuery() { TitleCategories titleCategoriesSub; //Retrieve the title that was saved when user tapped submit icon @@ -157,37 +255,41 @@ public class CategorizationFragment extends Fragment { /** * Retrieves recently-used categories + * * @return a list containing recent categories */ - protected ArrayList recentCatQuery() { + private ArrayList recentCatQuery() { ArrayList items = new ArrayList<>(); - + Cursor cursor = null; try { - Cursor cursor = client.query( + cursor = client.query( CategoryContentProvider.BASE_URI, Category.Table.ALL_FIELDS, null, new String[]{}, Category.Table.COLUMN_LAST_USED + " DESC"); // fixme add a limit on the original query instead of falling out of the loop? - while (cursor.moveToNext() && cursor.getPosition() < SEARCH_CATS_LIMIT) { + while (cursor != null && cursor.moveToNext() + && cursor.getPosition() < SEARCH_CATS_LIMIT) { Category cat = Category.fromCursor(cursor); items.add(cat.getName()); } - cursor.close(); - } - catch (RemoteException e) { + } catch (RemoteException e) { throw new RuntimeException(e); + } finally { + if (cursor != null) { + cursor.close(); + } } return items; } /** * Merges nearby categories, categories suggested based on title, and recent categories... without duplicates. + * * @return a list containing merged categories */ - protected ArrayList mergeItems() { - + ArrayList mergeItems() { Set mergedItems = new LinkedHashSet<>(); Timber.d("Calling APIs for GPS cats, title cats and recent cats..."); @@ -213,7 +315,7 @@ public class CategorizationFragment extends Fragment { Timber.d("Adding title items: %s", titleItems); mergedItems.addAll(recentItems); Timber.d("Adding recent items: %s", recentItems); - + //Needs to be an ArrayList and not a List unless we want to modify a big portion of preexisting code ArrayList mergedItemsList = new ArrayList<>(mergedItems); @@ -223,15 +325,17 @@ public class CategorizationFragment extends Fragment { /** * Displays categories found to the user as they type in the search box + * * @param categories a list of all categories found for the search string - * @param filter the search string + * @param filter the search string */ - protected void setCatsAfterAsync(ArrayList categories, String filter) { - + private void setCatsAfterAsync(ArrayList categories, String filter) { if (getActivity() != null) { ArrayList items = new ArrayList<>(); HashSet existingKeys = new HashSet<>(); - for (CategoryItem item : categoriesAdapter.getItems()) { + int count = categoriesAdapter.getItemCount(); + for (int i = 0; i < count; i++) { + CategoryItem item = categoriesAdapter.getItem(i); if (item.selected) { items.add(item); existingKeys.add(item.name); @@ -243,8 +347,8 @@ public class CategorizationFragment extends Fragment { } } - categoriesAdapter.setItems(items); - categoriesAdapter.notifyDataSetInvalidated(); + categoriesAdapter.setCollection(new ListAdapteeCollection<>(items)); + categoriesAdapter.notifyDataSetChanged(); categoriesSearchInProgress.setVisibility(View.GONE); if (categories.isEmpty()) { @@ -258,8 +362,7 @@ public class CategorizationFragment extends Fragment { } else { categoriesList.smoothScrollToPosition(existingKeys.size()); } - } - else { + } else { Timber.e("Error: Fragment is null"); } } @@ -272,7 +375,6 @@ public class CategorizationFragment extends Fragment { * above Prefix results. */ private void requestSearchResults() { - final CountDownLatch latch = new CountDownLatch(1); prefixUpdaterSub = new PrefixUpdater(this) { @@ -282,8 +384,7 @@ public class CategorizationFragment extends Fragment { try { result = super.doInBackground(); latch.await(); - } - catch (InterruptedException e) { + } catch (InterruptedException e) { Timber.w(e); //Thread.currentThread().interrupt(); } @@ -325,7 +426,6 @@ public class CategorizationFragment extends Fragment { } private void startUpdatingCategoryList() { - if (prefixUpdaterSub != null) { prefixUpdaterSub.cancel(true); } @@ -339,238 +439,41 @@ public class CategorizationFragment extends Fragment { public int getCurrentSelectedCount() { int count = 0; - for(CategoryItem item: categoriesAdapter.getItems()) { - if(item.selected) { + int numberOfItems = categoriesAdapter.getItemCount(); + for (int i = 0; i < numberOfItems; i++) { + CategoryItem item = categoriesAdapter.getItem(i); + if (item.selected) { count++; } } return count; } - private Category lookupCategory(String name) { - Cursor cursor = null; - try { - cursor = client.query( - CategoryContentProvider.BASE_URI, - Category.Table.ALL_FIELDS, - Category.Table.COLUMN_NAME + "=?", - new String[] {name}, - null); - if (cursor.moveToFirst()) { - return Category.fromCursor(cursor); - } - } catch (RemoteException e) { - // This feels lazy, but to hell with checked exceptions. :) - throw new RuntimeException(e); - } finally { - if ( cursor != null ) { - cursor.close(); - } - } - - // Newly used category... - Category cat = new Category(); - cat.setName(name); - cat.setLastUsed(new Date()); - cat.setTimesUsed(0); - return cat; - } - - private class CategoryCountUpdater extends AsyncTask { - - private String name; - - public CategoryCountUpdater(String name) { - this.name = name; - } - - @Override - protected Void doInBackground(Void... voids) { - Category cat = lookupCategory(name); - cat.incTimesUsed(); - - cat.setContentProviderClient(client); - cat.save(); - - return null; // Make the compiler happy. - } - } - - private void updateCategoryCount(String name) { - new CategoryCountUpdater(name).executeOnExecutor(executor); - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_categorization, null); - categoriesList = (ListView) rootView.findViewById(R.id.categoriesListBox); - categoriesFilter = (EditText) rootView.findViewById(R.id.categoriesSearchBox); - categoriesSearchInProgress = (ProgressBar) rootView.findViewById(R.id.categoriesSearchInProgress); - categoriesNotFoundView = (TextView) rootView.findViewById(R.id.categoriesNotFound); - categoriesSkip = (TextView) rootView.findViewById(R.id.categoriesExplanation); - - categoriesSkip.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - getActivity().onBackPressed(); - getActivity().finish(); - } - }); - - ArrayList items; - if(savedInstanceState == null) { - items = new ArrayList<>(); - categoriesCache = new HashMap<>(); - } else { - items = savedInstanceState.getParcelableArrayList("currentCategories"); - categoriesCache = (HashMap>) savedInstanceState.getSerializable("categoriesCache"); - } - - categoriesAdapter = new CategoriesAdapter(getActivity(), items); - categoriesList.setAdapter(categoriesAdapter); - - categoriesList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int index, long id) { - CheckedTextView checkedView = (CheckedTextView) view; - CategoryItem item = (CategoryItem) adapterView.getAdapter().getItem(index); - item.selected = !item.selected; - checkedView.setChecked(item.selected); - if (item.selected) { - updateCategoryCount(item.name); - } - } - }); - - categoriesFilter.addTextChangedListener(textWatcher); - - startUpdatingCategoryList(); - - return rootView; - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - menu.clear(); - inflater.inflate(R.menu.fragment_categorization, menu); - } - - @Override - public void onResume() { - super.onResume(); - - View rootView = getView(); - if (rootView != null) { - rootView.setFocusableInTouchMode(true); - rootView.requestFocus(); - rootView.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { - backButtonDialog(); - return true; - } - return false; - } - }); - } - } - - @Override - public void onDestroyView() { - categoriesFilter.removeTextChangedListener(textWatcher); - super.onDestroyView(); - } - public void backButtonDialog() { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - - builder.setMessage("Are you sure you want to go back? The image will not have any categories saved.") - .setTitle("Warning"); - builder.setPositiveButton("No", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //No need to do anything, user remains on categorization screen - } - }); - builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - getActivity().finish(); - } - }); - - AlertDialog dialog = builder.create(); - dialog.show(); - } - - @Override - public void onDestroy() { - super.onDestroy(); - client.release(); - } - - @Override - public void onSaveInstanceState(Bundle outState) { - super.onSaveInstanceState(outState); - outState.putParcelableArrayList("currentCategories", categoriesAdapter.getItems()); - outState.putSerializable("categoriesCache", categoriesCache); - } - - @Override - public boolean onOptionsItemSelected(MenuItem menuItem) { - switch(menuItem.getItemId()) { - case R.id.menu_save_categories: - - int numberSelected = 0; - - for(CategoryItem item: categoriesAdapter.getItems()) { - if(item.selected) { - selectedCategories.add(item.name); - numberSelected++; + new AlertDialog.Builder(getActivity()) + .setMessage("Are you sure you want to go back? The image will not have any categories saved.") + .setTitle("Warning") + .setPositiveButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + //No need to do anything, user remains on categorization screen } - } - - //If no categories selected, display warning to user - if (numberSelected == 0) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - - builder.setMessage("Images without categories are rarely usable. Are you sure you want to submit without selecting categories?") - .setTitle("No Categories Selected"); - builder.setPositiveButton("No, go back", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //Exit menuItem so user can select their categories - return; - } - }); - builder.setNegativeButton("Yes, submit", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //Proceed to submission - onCategoriesSaveHandler.onCategoriesSave(selectedCategories); - return; - } - }); - - AlertDialog dialog = builder.create(); - dialog.show(); - } else { - //Proceed to submission - onCategoriesSaveHandler.onCategoriesSave(selectedCategories); - return true; - } - } - return super.onOptionsItemSelected(menuItem); + }) + .setNegativeButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + getActivity().finish(); + } + }) + .create() + .show(); } @Override - public void onActivityCreated(Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - setHasOptionsMenu(true); - onCategoriesSaveHandler = (OnCategoriesSaveHandler) getActivity(); - getActivity().setTitle(R.string.categories_activity_title); - client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY); + public void categoryClicked(CategoryItem item) { + if (item.selected) { + new CategoryCountUpdater(item.name, client).executeOnExecutor(executor); + } } private class CategoryTextWatcher implements TextWatcher { diff --git a/app/src/main/java/fr/free/nrw/commons/category/Category.java b/app/src/main/java/fr/free/nrw/commons/category/Category.java index 9cb8d001e..68dd9200e 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/Category.java +++ b/app/src/main/java/fr/free/nrw/commons/category/Category.java @@ -26,7 +26,7 @@ public class Category { this.name = name; } - public Date getLastUsed() { + private Date getLastUsed() { // warning: Date objects are mutable. return (Date)lastUsed.clone(); } @@ -36,11 +36,11 @@ public class Category { this.lastUsed = (Date)lastUsed.clone(); } - public void touch() { + private void touch() { lastUsed = new Date(); } - public int getTimesUsed() { + private int getTimesUsed() { return timesUsed; } @@ -70,7 +70,7 @@ public class Category { } } - public ContentValues toContentValues() { + private ContentValues toContentValues() { ContentValues cv = new ContentValues(); cv.put(Table.COLUMN_NAME, getName()); cv.put(Table.COLUMN_LAST_USED, getLastUsed().getTime()); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java index de157265b..b7bc96ab2 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java @@ -7,6 +7,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.support.annotation.NonNull; import android.text.TextUtils; import fr.free.nrw.commons.CommonsApplication; @@ -41,8 +42,9 @@ public class CategoryContentProvider extends ContentProvider { return false; } + @SuppressWarnings("ConstantConditions") @Override - public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(Category.Table.TABLE_NAME); @@ -75,15 +77,16 @@ public class CategoryContentProvider extends ContentProvider { } @Override - public String getType(Uri uri) { + public String getType(@NonNull Uri uri) { return null; } + @SuppressWarnings("ConstantConditions") @Override - public Uri insert(Uri uri, ContentValues contentValues) { + public Uri insert(@NonNull Uri uri, ContentValues contentValues) { int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); - long id = 0; + long id; switch (uriType) { case CATEGORIES: id = sqlDB.insert(Category.Table.TABLE_NAME, null, contentValues); @@ -96,12 +99,13 @@ public class CategoryContentProvider extends ContentProvider { } @Override - public int delete(Uri uri, String s, String[] strings) { + public int delete(@NonNull Uri uri, String s, String[] strings) { return 0; } + @SuppressWarnings("ConstantConditions") @Override - public int bulkInsert(Uri uri, ContentValues[] values) { + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) { Timber.d("Hello, bulk insert! (CategoryContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); @@ -122,8 +126,9 @@ public class CategoryContentProvider extends ContentProvider { return values.length; } + @SuppressWarnings("ConstantConditions") @Override - public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { + public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { /* SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false") Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues @@ -133,7 +138,7 @@ public class CategoryContentProvider extends ContentProvider { */ int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); - int rowsUpdated = 0; + int rowsUpdated; switch (uriType) { case CATEGORIES_ID: int id = Integer.valueOf(uri.getLastPathSegment()); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryCountUpdater.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryCountUpdater.java new file mode 100644 index 000000000..bebbc03a8 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryCountUpdater.java @@ -0,0 +1,59 @@ +package fr.free.nrw.commons.category; + +import android.content.ContentProviderClient; +import android.database.Cursor; +import android.os.AsyncTask; +import android.os.RemoteException; + +import java.util.Date; + +class CategoryCountUpdater extends AsyncTask { + + private final String name; + private final ContentProviderClient client; + + CategoryCountUpdater(String name, ContentProviderClient client) { + this.name = name; + this.client = client; + } + + @Override + protected Void doInBackground(Void... voids) { + Category cat = lookupCategory(name); + cat.incTimesUsed(); + + cat.setContentProviderClient(client); + cat.save(); + + return null; // Make the compiler happy. + } + + private Category lookupCategory(String name) { + Cursor cursor = null; + try { + cursor = client.query( + CategoryContentProvider.BASE_URI, + Category.Table.ALL_FIELDS, + Category.Table.COLUMN_NAME + "=?", + new String[]{name}, + null); + if (cursor != null && cursor.moveToFirst()) { + return Category.fromCursor(cursor); + } + } catch (RemoteException e) { + // This feels lazy, but to hell with checked exceptions. :) + throw new RuntimeException(e); + } finally { + if (cursor != null) { + cursor.close(); + } + } + + // Newly used category... + Category cat = new Category(); + cat.setName(name); + cat.setLastUsed(new Date()); + cat.setTimesUsed(0); + return cat; + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java new file mode 100644 index 000000000..7198b6207 --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java @@ -0,0 +1,42 @@ +package fr.free.nrw.commons.category; + +import android.os.Parcel; +import android.os.Parcelable; + +class CategoryItem implements Parcelable { + public final String name; + public boolean selected; + + public static Creator CREATOR = new Creator() { + @Override + public CategoryItem createFromParcel(Parcel parcel) { + return new CategoryItem(parcel); + } + + @Override + public CategoryItem[] newArray(int i) { + return new CategoryItem[0]; + } + }; + + CategoryItem(String name, boolean selected) { + this.name = name; + this.selected = selected; + } + + private CategoryItem(Parcel in) { + name = in.readString(); + selected = in.readInt() == 1; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel parcel, int flags) { + parcel.writeString(name); + parcel.writeInt(selected ? 1 : 0); + } +} diff --git a/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java b/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java index 326f85ee3..72b1f5732 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java +++ b/app/src/main/java/fr/free/nrw/commons/category/MethodAUpdater.java @@ -13,6 +13,8 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.mwapi.MediaWikiApi; import timber.log.Timber; +import static fr.free.nrw.commons.category.CategorizationFragment.SEARCH_CATS_LIMIT; + /** * Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that are close to * the keyword typed in by the user. The 'srsearch' action-specific parameter is used for this @@ -20,8 +22,8 @@ import timber.log.Timber; */ class MethodAUpdater extends AsyncTask> { + private final CategorizationFragment catFragment; private String filter; - private CategorizationFragment catFragment; MethodAUpdater(CategorizationFragment catFragment) { this.catFragment = catFragment; @@ -84,7 +86,7 @@ class MethodAUpdater extends AsyncTask> { //URL https://commons.wikimedia.org/w/api.php?action=query&format=xml&list=search&srwhat=text&srenablerewrites=1&srnamespace=14&srlimit=10&srsearch= try { - categories = api.searchCategories(CategorizationFragment.SEARCH_CATS_LIMIT, filter); + categories = api.searchCategories(SEARCH_CATS_LIMIT, filter); Timber.d("Method A URL filter %s", categories); } catch (IOException e) { Timber.e(e, "IO Exception: "); diff --git a/app/src/main/java/fr/free/nrw/commons/category/OnCategoriesSaveHandler.java b/app/src/main/java/fr/free/nrw/commons/category/OnCategoriesSaveHandler.java new file mode 100644 index 000000000..a7ae0bfed --- /dev/null +++ b/app/src/main/java/fr/free/nrw/commons/category/OnCategoriesSaveHandler.java @@ -0,0 +1,7 @@ +package fr.free.nrw.commons.category; + +import java.util.ArrayList; + +public interface OnCategoriesSaveHandler { + void onCategoriesSave(ArrayList categories); +} diff --git a/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java b/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java index 773f758d0..7df56eff5 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java +++ b/app/src/main/java/fr/free/nrw/commons/category/PrefixUpdater.java @@ -7,6 +7,7 @@ import android.view.View; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; +import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -14,18 +15,20 @@ import fr.free.nrw.commons.CommonsApplication; import fr.free.nrw.commons.mwapi.MediaWikiApi; import timber.log.Timber; +import static fr.free.nrw.commons.category.CategorizationFragment.SEARCH_CATS_LIMIT; + /** * Sends asynchronous queries to the Commons MediaWiki API to retrieve categories that share the * same prefix as the keyword typed in by the user. The 'acprefix' action-specific parameter is used * for this purpose. This class should be subclassed in CategorizationFragment.java to aggregate * the results. */ -public class PrefixUpdater extends AsyncTask> { +class PrefixUpdater extends AsyncTask> { + private final CategorizationFragment catFragment; private String filter; - private CategorizationFragment catFragment; - public PrefixUpdater(CategorizationFragment catFragment) { + PrefixUpdater(CategorizationFragment catFragment) { this.catFragment = catFragment; } @@ -90,8 +93,9 @@ public class PrefixUpdater extends AsyncTask> { } //if user types in something that is in cache, return cached category - if (catFragment.categoriesCache.containsKey(filter)) { - ArrayList cachedItems = new ArrayList<>(catFragment.categoriesCache.get(filter)); + HashMap> categoriesCache = catFragment.getCategoriesCache(); + if (categoriesCache.containsKey(filter)) { + ArrayList cachedItems = new ArrayList<>(categoriesCache.get(filter)); Timber.d("Found cache items, waiting for filter"); return new ArrayList<>(filterIrrelevantResults(cachedItems)); } @@ -101,7 +105,7 @@ public class PrefixUpdater extends AsyncTask> { MediaWikiApi api = CommonsApplication.getInstance().getMWApi(); List categories = new ArrayList<>(); try { - categories = api.allCategories(CategorizationFragment.SEARCH_CATS_LIMIT, this.filter); + categories = api.allCategories(SEARCH_CATS_LIMIT, this.filter); Timber.d("Prefix URL filter %s", categories); } catch (IOException e) { Timber.e(e, "IO Exception: "); diff --git a/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java b/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java index 414c87e8a..a4a94cf1d 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java +++ b/app/src/main/java/fr/free/nrw/commons/category/TitleCategories.java @@ -19,17 +19,12 @@ class TitleCategories extends AsyncTask> { private final static int SEARCH_CATS_LIMIT = 25; - private String title; + private final String title; TitleCategories(String title) { this.title = title; } - @Override - protected void onPreExecute() { - super.onPreExecute(); - } - @Override protected List doInBackground(Void... voids) { diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index d7c807777..69a61cdfb 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -28,6 +28,7 @@ import fr.free.nrw.commons.Media; import fr.free.nrw.commons.R; import fr.free.nrw.commons.auth.AuthenticatedActivity; import fr.free.nrw.commons.category.CategorizationFragment; +import fr.free.nrw.commons.category.OnCategoriesSaveHandler; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.media.MediaDetailPagerFragment; import fr.free.nrw.commons.modifications.CategoryModifier; @@ -43,7 +44,7 @@ public class MultipleShareActivity AdapterView.OnItemClickListener, FragmentManager.OnBackStackChangedListener, MultipleUploadListFragment.OnMultipleUploadInitiatedHandler, - CategorizationFragment.OnCategoriesSaveHandler { + OnCategoriesSaveHandler { private CommonsApplication app; private ArrayList photosList = null; diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 7b9111841..95d091006 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -36,6 +36,7 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.Utils; import fr.free.nrw.commons.auth.AuthenticatedActivity; import fr.free.nrw.commons.category.CategorizationFragment; +import fr.free.nrw.commons.category.OnCategoriesSaveHandler; import fr.free.nrw.commons.contributions.Contribution; import fr.free.nrw.commons.modifications.CategoryModifier; import fr.free.nrw.commons.modifications.ModificationsContentProvider; @@ -51,7 +52,7 @@ import timber.log.Timber; public class ShareActivity extends AuthenticatedActivity implements SingleUploadFragment.OnUploadActionInitiated, - CategorizationFragment.OnCategoriesSaveHandler { + OnCategoriesSaveHandler { private static final int REQUEST_PERM_ON_CREATE_STORAGE = 1; private static final int REQUEST_PERM_ON_CREATE_LOCATION = 2; diff --git a/app/src/main/res/layout/fragment_categorization.xml b/app/src/main/res/layout/fragment_categorization.xml index a0b9b3c2f..83a8a746a 100644 --- a/app/src/main/res/layout/fragment_categorization.xml +++ b/app/src/main/res/layout/fragment_categorization.xml @@ -60,7 +60,7 @@ android:visibility="gone" /> - + android:padding="4dp" + android:theme="@style/DarkAppTheme"> \ No newline at end of file From eaffed24719e629cf17755f8e7093bddf5ed4adb Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 22 Jul 2017 14:12:35 -0500 Subject: [PATCH 18/42] Changes suggested by Codacy --- .../commons/category/CategoriesRenderer.java | 8 ++-- .../category/CategorizationFragment.java | 44 ++++++++++++------- .../category/CategoryContentProvider.java | 12 +++-- .../nrw/commons/category/CategoryItem.java | 16 ++++++- 4 files changed, 54 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java b/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java index 426b0640e..a138736cc 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoriesRenderer.java @@ -35,8 +35,8 @@ class CategoriesRenderer extends Renderer { @Override public void onClick(View v) { CategoryItem item = getContent(); - item.selected = !item.selected; - checkedView.setChecked(item.selected); + item.setSelected(!item.isSelected()); + checkedView.setChecked(item.isSelected()); if (listener != null) { listener.categoryClicked(item); } @@ -47,8 +47,8 @@ class CategoriesRenderer extends Renderer { @Override public void render() { CategoryItem item = getContent(); - checkedView.setChecked(item.selected); - checkedView.setText(item.name); + checkedView.setChecked(item.isSelected()); + checkedView.setText(item.getName()); } interface CategoryClickedListener { diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 748329ab8..15f1c8e1e 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -42,13 +42,18 @@ import java.util.concurrent.TimeUnit; import butterknife.BindView; import butterknife.ButterKnife; import fr.free.nrw.commons.R; +import fr.free.nrw.commons.category.CategoriesRenderer.CategoryClickedListener; import fr.free.nrw.commons.upload.MwVolleyApi; import timber.log.Timber; +import static android.view.KeyEvent.ACTION_UP; +import static android.view.KeyEvent.KEYCODE_BACK; +import static fr.free.nrw.commons.category.CategoryContentProvider.AUTHORITY; + /** * Displays the category suggestion and selection screen. Category search is initiated here. */ -public class CategorizationFragment extends Fragment implements CategoriesRenderer.CategoryClickedListener { +public class CategorizationFragment extends Fragment implements CategoryClickedListener { public static final int SEARCH_CATS_LIMIT = 25; @BindView(R.id.categoriesListBox) RecyclerView categoriesList; @@ -74,7 +79,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender @SuppressWarnings("unchecked") @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_categorization, container, false); ButterKnife.bind(this, rootView); @@ -94,7 +100,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender categoriesCache = new HashMap<>(); } else { items = savedInstanceState.getParcelableArrayList("currentCategories"); - categoriesCache = (HashMap>) savedInstanceState.getSerializable("categoriesCache"); + categoriesCache = (HashMap>) savedInstanceState + .getSerializable("categoriesCache"); } categoriesAdapter = adapterFactory.create(items); @@ -123,7 +130,7 @@ public class CategorizationFragment extends Fragment implements CategoriesRender rootView.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { + if (event.getAction() == ACTION_UP && keyCode == KEYCODE_BACK) { backButtonDialog(); return true; } @@ -168,8 +175,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender int count = categoriesAdapter.getItemCount(); for (int i = 0; i < count; i++) { CategoryItem item = categoriesAdapter.getItem(i); - if (item.selected) { - selectedCategories.add(item.name); + if (item.isSelected()) { + selectedCategories.add(item.getName()); numberSelected++; } } @@ -177,7 +184,9 @@ public class CategorizationFragment extends Fragment implements CategoriesRender //If no categories selected, display warning to user if (numberSelected == 0) { new AlertDialog.Builder(getActivity()) - .setMessage("Images without categories are rarely usable. Are you sure you want to submit without selecting categories?") + .setMessage("Images without categories are rarely usable. " + + "Are you sure you want to submit without selecting " + + "categories?") .setTitle("No Categories Selected") .setPositiveButton("No, go back", new DialogInterface.OnClickListener() { @Override @@ -209,7 +218,7 @@ public class CategorizationFragment extends Fragment implements CategoriesRender setHasOptionsMenu(true); onCategoriesSaveHandler = (OnCategoriesSaveHandler) getActivity(); getActivity().setTitle(R.string.categories_activity_title); - client = getActivity().getContentResolver().acquireContentProviderClient(CategoryContentProvider.AUTHORITY); + client = getActivity().getContentResolver().acquireContentProviderClient(AUTHORITY); } public HashMap> getCategoriesCache() { @@ -285,7 +294,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender } /** - * Merges nearby categories, categories suggested based on title, and recent categories... without duplicates. + * Merges nearby categories, categories suggested based on title, and recent categories... + * without duplicates. * * @return a list containing merged categories */ @@ -316,7 +326,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender mergedItems.addAll(recentItems); Timber.d("Adding recent items: %s", recentItems); - //Needs to be an ArrayList and not a List unless we want to modify a big portion of preexisting code + // Needs to be an ArrayList and not a List unless we want to modify a big portion + // of preexisting code ArrayList mergedItemsList = new ArrayList<>(mergedItems); Timber.d("Merged item list: %s", mergedItemsList); @@ -336,9 +347,9 @@ public class CategorizationFragment extends Fragment implements CategoriesRender int count = categoriesAdapter.getItemCount(); for (int i = 0; i < count; i++) { CategoryItem item = categoriesAdapter.getItem(i); - if (item.selected) { + if (item.isSelected()) { items.add(item); - existingKeys.add(item.name); + existingKeys.add(item.getName()); } } for (String category : categories) { @@ -442,7 +453,7 @@ public class CategorizationFragment extends Fragment implements CategoriesRender int numberOfItems = categoriesAdapter.getItemCount(); for (int i = 0; i < numberOfItems; i++) { CategoryItem item = categoriesAdapter.getItem(i); - if (item.selected) { + if (item.isSelected()) { count++; } } @@ -451,7 +462,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender public void backButtonDialog() { new AlertDialog.Builder(getActivity()) - .setMessage("Are you sure you want to go back? The image will not have any categories saved.") + .setMessage("Are you sure you want to go back? The image will not " + + "have any categories saved.") .setTitle("Warning") .setPositiveButton("No", new DialogInterface.OnClickListener() { @Override @@ -471,8 +483,8 @@ public class CategorizationFragment extends Fragment implements CategoriesRender @Override public void categoryClicked(CategoryItem item) { - if (item.selected) { - new CategoryCountUpdater(item.name, client).executeOnExecutor(executor); + if (item.isSelected()) { + new CategoryCountUpdater(item.getName(), client).executeOnExecutor(executor); } } diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java index b7bc96ab2..c95e17cf6 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryContentProvider.java @@ -44,7 +44,8 @@ public class CategoryContentProvider extends ContentProvider { @SuppressWarnings("ConstantConditions") @Override - public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + public Cursor query(@NonNull Uri uri, String[] projection, String selection, + String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(Category.Table.TABLE_NAME); @@ -55,7 +56,8 @@ public class CategoryContentProvider extends ContentProvider { switch(uriType) { case CATEGORIES: - cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder); + cursor = queryBuilder.query(db, projection, selection, selectionArgs, + null, null, sortOrder); break; case CATEGORIES_ID: cursor = queryBuilder.query(db, @@ -128,7 +130,8 @@ public class CategoryContentProvider extends ContentProvider { @SuppressWarnings("ConstantConditions") @Override - public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { + public int update(@NonNull Uri uri, ContentValues contentValues, String selection, + String[] selectionArgs) { /* SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false") Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues @@ -149,7 +152,8 @@ public class CategoryContentProvider extends ContentProvider { Category.Table.COLUMN_ID + " = ?", new String[] { String.valueOf(id) } ); } else { - throw new IllegalArgumentException("Parameter `selection` should be empty when updating an ID"); + throw new IllegalArgumentException( + "Parameter `selection` should be empty when updating an ID"); } break; default: diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java b/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java index 7198b6207..1063979ad 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategoryItem.java @@ -4,8 +4,8 @@ import android.os.Parcel; import android.os.Parcelable; class CategoryItem implements Parcelable { - public final String name; - public boolean selected; + private final String name; + private boolean selected; public static Creator CREATOR = new Creator() { @Override @@ -29,6 +29,18 @@ class CategoryItem implements Parcelable { selected = in.readInt() == 1; } + public String getName() { + return name; + } + + public boolean isSelected() { + return selected; + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + @Override public int describeContents() { return 0; From 3824f31ef9cb1788ae5026880a51aa14cc7ad86c Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 22 Jul 2017 17:46:53 -0500 Subject: [PATCH 19/42] Added Retrolambda and set the language level to JavaVersion.VERSION_1_8 --- app/build.gradle | 6 ++++++ build.gradle | 1 + 2 files changed, 7 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 197e6b4d9..f400c035a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'me.tatarka.retrolambda' apply plugin: 'jacoco-android' apply from: 'quality.gradle' apply plugin: 'com.getkeepsafe.dexcount' @@ -75,6 +76,11 @@ android { abortOnError false } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + //FIXME: Temporary fix for https://github.com/commons-app/apps-android-commons/issues/709 configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:25.2.0' diff --git a/build.gradle b/build.gradle index 4929fec36..ebdb2fa23 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,7 @@ buildscript { classpath "com.android.tools.build:gradle:${project.gradleVersion}" classpath 'com.dicedmelon.gradle:jacoco-android:0.1.1' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.7.1' + classpath 'me.tatarka:gradle-retrolambda:3.6.1' } } From 4796557fb77a2f65318c3aca745bd361f91f59ad Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 22 Jul 2017 18:04:40 -0500 Subject: [PATCH 20/42] Made a pass through the code to introduce lambdas / method references in the places the Android Studio suggested. --- .../free/nrw/commons/CommonsApplication.java | 4 +- .../fr/free/nrw/commons/WelcomeActivity.java | 7 +- .../free/nrw/commons/auth/LoginActivity.java | 40 ++++------- .../category/CategorizationFragment.java | 71 ++++++------------- .../BackgroundPoolExceptionHandler.java | 7 +- .../concurrency/ThreadFactoryMaker.java | 14 ++-- .../ContributionsListFragment.java | 19 ++--- .../contributions/UploadCountClient.java | 41 +++++------ .../commons/media/MediaDetailFragment.java | 22 ++---- .../media/MediaDetailPagerFragment.java | 29 +++----- .../mwapi/ApacheHttpClientMediaWikiApi.java | 7 +- .../nrw/commons/nearby/NearbyActivity.java | 49 +++++-------- .../nrw/commons/nearby/NearbyController.java | 11 ++- .../nrw/commons/nearby/NearbyInfoDialog.java | 9 +-- .../commons/nearby/NearbyListFragment.java | 7 +- .../nrw/commons/nearby/NearbyMapFragment.java | 28 +++----- .../nrw/commons/nearby/PlaceRenderer.java | 12 +--- .../commons/settings/SettingsFragment.java | 67 +++++++---------- .../commons/theme/NavigationBaseActivity.java | 35 +++------ .../nrw/commons/upload/ExistingFileAsync.java | 20 ++---- .../commons/upload/MultipleShareActivity.java | 23 +++--- .../free/nrw/commons/upload/MwVolleyApi.java | 2 +- .../nrw/commons/upload/ShareActivity.java | 39 ++++------ .../free/nrw/commons/utils/ExecutorUtils.java | 13 ++-- .../fr/free/nrw/commons/utils/FileUtils.java | 4 +- 25 files changed, 206 insertions(+), 374 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index b78bfdc6f..2af125032 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -197,8 +197,8 @@ public class CommonsApplication extends Application { AccountManager accountManager = AccountManager.get(this); Account[] allAccounts = accountManager.getAccountsByType(AccountUtil.accountType()); - for (int index = 0; index < allAccounts.length; index++) { - accountManager.removeAccount(allAccounts[index], null, null); + for (Account allAccount : allAccounts) { + accountManager.removeAccount(allAccount, null, null); } //TODO: fix preference manager diff --git a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java index e35c7e6d0..f6c5999e9 100644 --- a/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/WelcomeActivity.java @@ -27,12 +27,7 @@ public class WelcomeActivity extends BaseActivity { pager.setAdapter(adapter); indicator.setViewPager(pager); - adapter.setCallback(new WelcomePagerAdapter.Callback() { - @Override - public void onYesClicked() { - finish(); - } - }); + adapter.setCallback(this::finish); } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java index 9d9f021ea..aca419b9c 100644 --- a/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/auth/LoginActivity.java @@ -26,6 +26,9 @@ import fr.free.nrw.commons.PageTitle; import fr.free.nrw.commons.contributions.ContributionsActivity; import timber.log.Timber; +import static android.view.KeyEvent.KEYCODE_ENTER; +import static android.view.inputmethod.EditorInfo.IME_ACTION_DONE; + public class LoginActivity extends AccountAuthenticatorActivity { @@ -63,18 +66,8 @@ public class LoginActivity extends AccountAuthenticatorActivity { twoFactorEdit.addTextChangedListener(textWatcher); passwordEdit.setOnEditorActionListener(newLoginInputActionListener()); - loginButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - performLogin(); - } - }); - signupButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - signUp(v); - } - }); + loginButton.setOnClickListener(this::performLogin); + signupButton.setOnClickListener(this::signUp); } private class LoginTextWatcher implements TextWatcher { @@ -98,20 +91,17 @@ public class LoginActivity extends AccountAuthenticatorActivity { } private TextView.OnEditorActionListener newLoginInputActionListener() { - return new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { - if (loginButton.isEnabled()) { - if (actionId == EditorInfo.IME_ACTION_DONE) { - performLogin(); - return true; - } else if ((keyEvent != null) && keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER) { - performLogin(); - return true; - } + return (textView, actionId, keyEvent) -> { + if (loginButton.isEnabled()) { + if (actionId == IME_ACTION_DONE) { + performLogin(textView); + return true; + } else if ((keyEvent != null) && keyEvent.getKeyCode() == KEYCODE_ENTER) { + performLogin(textView); + return true; } - return false; } + return false; }; } @@ -142,7 +132,7 @@ public class LoginActivity extends AccountAuthenticatorActivity { super.onDestroy(); } - private void performLogin() { + private void performLogin(View view) { Timber.d("Login to start!"); LoginTask task = getLoginTask(); task.execute(); diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 3f467183d..d2d9f317f 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -409,12 +409,9 @@ public class CategorizationFragment extends Fragment { categoriesNotFoundView = (TextView) rootView.findViewById(R.id.categoriesNotFound); categoriesSkip = (TextView) rootView.findViewById(R.id.categoriesExplanation); - categoriesSkip.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - getActivity().onBackPressed(); - getActivity().finish(); - } + categoriesSkip.setOnClickListener(view -> { + getActivity().onBackPressed(); + getActivity().finish(); }); ArrayList items; @@ -429,16 +426,13 @@ public class CategorizationFragment extends Fragment { categoriesAdapter = new CategoriesAdapter(getActivity(), items); categoriesList.setAdapter(categoriesAdapter); - categoriesList.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView adapterView, View view, int index, long id) { - CheckedTextView checkedView = (CheckedTextView) view; - CategoryItem item = (CategoryItem) adapterView.getAdapter().getItem(index); - item.selected = !item.selected; - checkedView.setChecked(item.selected); - if (item.selected) { - updateCategoryCount(item.name); - } + categoriesList.setOnItemClickListener((adapterView, view, index, id) -> { + CheckedTextView checkedView = (CheckedTextView) view; + CategoryItem item = (CategoryItem) adapterView.getAdapter().getItem(index); + item.selected = !item.selected; + checkedView.setChecked(item.selected); + if (item.selected) { + updateCategoryCount(item.name); } }); @@ -463,15 +457,12 @@ public class CategorizationFragment extends Fragment { if (rootView != null) { rootView.setFocusableInTouchMode(true); rootView.requestFocus(); - rootView.setOnKeyListener(new View.OnKeyListener() { - @Override - public boolean onKey(View v, int keyCode, KeyEvent event) { - if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { - backButtonDialog(); - return true; - } - return false; + rootView.setOnKeyListener((v, keyCode, event) -> { + if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { + backButtonDialog(); + return true; } + return false; }); } } @@ -487,18 +478,10 @@ public class CategorizationFragment extends Fragment { builder.setMessage("Are you sure you want to go back? The image will not have any categories saved.") .setTitle("Warning"); - builder.setPositiveButton("No", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //No need to do anything, user remains on categorization screen - } - }); - builder.setNegativeButton("Yes", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - getActivity().finish(); - } + builder.setPositiveButton("No", (dialog, id) -> { + //No need to do anything, user remains on categorization screen }); + builder.setNegativeButton("Yes", (dialog, id) -> getActivity().finish()); AlertDialog dialog = builder.create(); dialog.show(); @@ -537,20 +520,12 @@ public class CategorizationFragment extends Fragment { builder.setMessage("Images without categories are rarely usable. Are you sure you want to submit without selecting categories?") .setTitle("No Categories Selected"); - builder.setPositiveButton("No, go back", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //Exit menuItem so user can select their categories - return; - } + builder.setPositiveButton("No, go back", (dialog, id) -> { + //Exit menuItem so user can select their categories }); - builder.setNegativeButton("Yes, submit", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //Proceed to submission - onCategoriesSaveHandler.onCategoriesSave(selectedCategories); - return; - } + builder.setNegativeButton("Yes, submit", (dialog, id) -> { + //Proceed to submission + onCategoriesSaveHandler.onCategoriesSave(selectedCategories); }); AlertDialog dialog = builder.create(); diff --git a/app/src/main/java/fr/free/nrw/commons/concurrency/BackgroundPoolExceptionHandler.java b/app/src/main/java/fr/free/nrw/commons/concurrency/BackgroundPoolExceptionHandler.java index 2c730a0d1..489a45c4e 100644 --- a/app/src/main/java/fr/free/nrw/commons/concurrency/BackgroundPoolExceptionHandler.java +++ b/app/src/main/java/fr/free/nrw/commons/concurrency/BackgroundPoolExceptionHandler.java @@ -9,11 +9,8 @@ public class BackgroundPoolExceptionHandler implements ExceptionHandler { public void onException(@NonNull final Throwable t) { //Crash for debug build if (BuildConfig.DEBUG) { - Thread thread = new Thread(new Runnable() { - @Override - public void run() { - throw new RuntimeException(t); - } + Thread thread = new Thread(() -> { + throw new RuntimeException(t); }); thread.start(); } diff --git a/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadFactoryMaker.java b/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadFactoryMaker.java index 221ebef41..d535fe5bd 100644 --- a/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadFactoryMaker.java +++ b/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadFactoryMaker.java @@ -11,17 +11,13 @@ class ThreadFactoryMaker { private int count = 0; @Override - public Thread newThread(final Runnable runnable) { + public Thread newThread(@NonNull final Runnable runnable) { count++; - Runnable wrapperRunnable = new Runnable() { - @Override - public void run() { - Process.setThreadPriority(priority); - runnable.run(); - } + Runnable wrapperRunnable = () -> { + Process.setThreadPriority(priority); + runnable.run(); }; - Thread t = new Thread(wrapperRunnable, String.format("%s-%s", name, count)); - return t; + return new Thread(wrapperRunnable, String.format("%s-%s", name, count)); } }; } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index 8025b94bf..c009243b9 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -29,6 +29,7 @@ import fr.free.nrw.commons.R; import fr.free.nrw.commons.nearby.NearbyActivity; import timber.log.Timber; +import static android.Manifest.permission.READ_EXTERNAL_STORAGE; import static android.app.Activity.RESULT_OK; public class ContributionsListFragment extends Fragment { @@ -110,11 +111,11 @@ public class ContributionsListFragment extends Fragment { // Here, thisActivity is the current activity if (ContextCompat.checkSelfPermission(getActivity(), - Manifest.permission.READ_EXTERNAL_STORAGE) + READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? - if (shouldShowRequestPermissionRationale(Manifest.permission.READ_EXTERNAL_STORAGE)) { + if (shouldShowRequestPermissionRationale(READ_EXTERNAL_STORAGE)) { // Show an explanation to the user *asynchronously* -- don't block // this thread waiting for the user's response! After the user @@ -122,15 +123,9 @@ public class ContributionsListFragment extends Fragment { new AlertDialog.Builder(getActivity()) .setMessage(getString(R.string.storage_permission_rationale)) - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - requestPermissions( - new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, - 1); - dialog.dismiss(); - } + .setPositiveButton("OK", (dialog, which) -> { + requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, 1); + dialog.dismiss(); }) .setNegativeButton("Cancel", null) .create() @@ -140,7 +135,7 @@ public class ContributionsListFragment extends Fragment { // No explanation needed, we can request the permission. - requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + requestPermissions(new String[]{READ_EXTERNAL_STORAGE}, 1); // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/UploadCountClient.java b/app/src/main/java/fr/free/nrw/commons/contributions/UploadCountClient.java index 9667f9057..4a04e3888 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/UploadCountClient.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/UploadCountClient.java @@ -14,10 +14,10 @@ import fr.free.nrw.commons.concurrency.BackgroundPoolExceptionHandler; import fr.free.nrw.commons.concurrency.ThreadPoolExecutorService; import timber.log.Timber; -public class UploadCountClient { +class UploadCountClient { private ThreadPoolExecutorService threadPoolExecutor; - public UploadCountClient() { + UploadCountClient() { threadPoolExecutor = new ThreadPoolExecutorService.Builder("bg-pool") .setPoolSize(Runtime.getRuntime().availableProcessors()) .setExceptionHandler(new BackgroundPoolExceptionHandler()) @@ -27,29 +27,26 @@ public class UploadCountClient { private static final String UPLOAD_COUNT_URL_TEMPLATE = "https://tools.wmflabs.org/urbanecmbot/uploadsbyuser/uploadsbyuser.py?user=%s"; - public ListenableFuture getUploadCount(final String userName) { + ListenableFuture getUploadCount(final String userName) { final SettableFuture future = SettableFuture.create(); - threadPoolExecutor.schedule(new Runnable() { - @Override - public void run() { - URL url; + threadPoolExecutor.schedule(() -> { + URL url; + try { + url = new URL(String.format(Locale.ENGLISH, UPLOAD_COUNT_URL_TEMPLATE, + new PageTitle(userName).getText())); + HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { - url = new URL(String.format(Locale.ENGLISH, UPLOAD_COUNT_URL_TEMPLATE, - new PageTitle(userName).getText())); - HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); - try { - BufferedReader bufferedReader = new BufferedReader(new - InputStreamReader(urlConnection.getInputStream())); - String uploadCount = bufferedReader.readLine(); - bufferedReader.close(); - future.set(Integer.parseInt(uploadCount)); - } finally { - urlConnection.disconnect(); - } - } catch (Exception e) { - Timber.e("Error getting upload count Error", e); - future.setException(e); + BufferedReader bufferedReader = new BufferedReader(new + InputStreamReader(urlConnection.getInputStream())); + String uploadCount = bufferedReader.readLine(); + bufferedReader.close(); + future.set(Integer.parseInt(uploadCount)); + } finally { + urlConnection.disconnect(); } + } catch (Exception e) { + Timber.e("Error getting upload count Error", e); + future.setException(e); } }); return future; diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java index cb879395c..d739e9040 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailFragment.java @@ -119,12 +119,7 @@ public class MediaDetailFragment extends Fragment { licenseList = new LicenseList(getActivity()); // Progressively darken the image in the background when we scroll detail pane up - scrollListener = new ViewTreeObserver.OnScrollChangedListener() { - @Override - public void onScrollChanged() { - updateTheDarkness(); - } - }; + scrollListener = this::updateTheDarkness; view.getViewTreeObserver().addOnScrollChangedListener(scrollListener); // Layout layoutListener to size the spacer item relative to the available space. @@ -280,15 +275,12 @@ public class MediaDetailFragment extends Fragment { textView.setText(catName); if (categoriesLoaded && categoriesPresent) { - textView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - String selectedCategoryTitle = "Category:" + catName; - Intent viewIntent = new Intent(); - viewIntent.setAction(Intent.ACTION_VIEW); - viewIntent.setData(new PageTitle(selectedCategoryTitle).getCanonicalUri()); - startActivity(viewIntent); - } + textView.setOnClickListener(view -> { + String selectedCategoryTitle = "Category:" + catName; + Intent viewIntent = new Intent(); + viewIntent.setAction(Intent.ACTION_VIEW); + viewIntent.setData(new PageTitle(selectedCategoryTitle).getCanonicalUri()); + startActivity(viewIntent); }); } return item; diff --git a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java index d0b2236ca..271ac5c92 100644 --- a/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/media/MediaDetailPagerFragment.java @@ -72,12 +72,7 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa public Fragment getItem(int i) { if (i == 0) { // See bug https://code.google.com/p/android/issues/detail?id=27526 - pager.postDelayed(new Runnable() { - @Override - public void run() { - getActivity().supportInvalidateOptionsMenu(); - } - }, 5); + pager.postDelayed(() -> getActivity().supportInvalidateOptionsMenu(), 5); } return MediaDetailFragment.forMedia(i, editable); } @@ -100,14 +95,11 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa final int pageNumber = savedInstanceState.getInt("current-page"); // Adapter doesn't seem to be loading immediately. // Dear God, please forgive us for our sins - view.postDelayed(new Runnable() { - @Override - public void run() { - pager.setAdapter(adapter); - pager.setCurrentItem(pageNumber, false); - getActivity().supportInvalidateOptionsMenu(); - adapter.notifyDataSetChanged(); - } + view.postDelayed(() -> { + pager.setAdapter(adapter); + pager.setCurrentItem(pageNumber, false); + getActivity().supportInvalidateOptionsMenu(); + adapter.notifyDataSetChanged(); }, 100); } else { pager.setAdapter(adapter); @@ -196,13 +188,8 @@ public class MediaDetailPagerFragment extends Fragment implements ViewPager.OnPa if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !(ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)) { Snackbar.make(getView(), R.string.storage_permission_rationale, Snackbar.LENGTH_INDEFINITE) - .setAction(R.string.ok, new View.OnClickListener() { - @Override - public void onClick(View view) { - ActivityCompat.requestPermissions(getActivity(), - new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1); - } - }).show(); + .setAction(R.string.ok, view -> ActivityCompat.requestPermissions(getActivity(), + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1)).show(); } else { final DownloadManager manager = (DownloadManager)getActivity().getSystemService(Context.DOWNLOAD_SERVICE); manager.enqueue(req); diff --git a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java index bb2356dd6..9dd0f9939 100644 --- a/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java +++ b/app/src/main/java/fr/free/nrw/commons/mwapi/ApacheHttpClientMediaWikiApi.java @@ -351,12 +351,7 @@ public class ApacheHttpClientMediaWikiApi implements MediaWikiApi { @Override @NonNull public UploadResult uploadFile(String filename, InputStream file, long dataLength, String pageContents, String editSummary, final ProgressListener progressListener) throws IOException { - ApiResult result = api.upload(filename, file, dataLength, pageContents, editSummary, new in.yuvi.http.fluent.ProgressListener() { - @Override - public void onProgress(long transferred, long total) { - progressListener.onProgress(transferred, total); - } - }); + ApiResult result = api.upload(filename, file, dataLength, pageContents, editSummary, progressListener::onProgress); Log.e("WTF", "Result: "+result.toString()); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java index 3d26b22f1..d58eb3566 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyActivity.java @@ -2,7 +2,6 @@ package fr.free.nrw.commons.nearby; import android.Manifest; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.location.LocationManager; @@ -41,7 +40,8 @@ import timber.log.Timber; public class NearbyActivity extends NavigationBaseActivity { - @BindView(R.id.progressBar) ProgressBar progressBar; + @BindView(R.id.progressBar) + ProgressBar progressBar; private boolean isMapViewActive = false; private static final int LOCATION_REQUEST = 1; @@ -115,15 +115,11 @@ public class NearbyActivity extends NavigationBaseActivity { new AlertDialog.Builder(this) .setMessage(getString(R.string.location_permission_rationale)) - .setPositiveButton("OK", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - - ActivityCompat.requestPermissions(NearbyActivity.this, - new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, - LOCATION_REQUEST); - dialog.dismiss(); - } + .setPositiveButton("OK", (dialog, which) -> { + ActivityCompat.requestPermissions(NearbyActivity.this, + new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, + LOCATION_REQUEST); + dialog.dismiss(); }) .setNegativeButton("Cancel", null) .create() @@ -175,26 +171,19 @@ public class NearbyActivity extends NavigationBaseActivity { LocationManager manager = (LocationManager) getSystemService(LOCATION_SERVICE); if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { Timber.d("GPS is not enabled"); - AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); - alertDialogBuilder.setMessage(R.string.gps_disabled) + new AlertDialog.Builder(this) + .setMessage(R.string.gps_disabled) .setCancelable(false) .setPositiveButton(R.string.enable_gps, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - Intent callGPSSettingIntent = new Intent( - android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); - Timber.d("Loaded settings page"); - startActivityForResult(callGPSSettingIntent, 1); - } - }); - alertDialogBuilder.setNegativeButton(R.string.menu_cancel_upload, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - dialog.cancel(); - } - }); - AlertDialog alert = alertDialogBuilder.create(); - alert.show(); + (dialog, id) -> { + Intent callGPSSettingIntent = new Intent( + android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS); + Timber.d("Loaded settings page"); + startActivityForResult(callGPSSettingIntent, 1); + }) + .setNegativeButton(R.string.menu_cancel_upload, (dialog, id) -> dialog.cancel()) + .create() + .show(); } else { Timber.d("GPS is enabled"); } @@ -257,7 +246,7 @@ public class NearbyActivity extends NavigationBaseActivity { private final Context mContext; - private NearbyAsyncTask (Context context) { + private NearbyAsyncTask(Context context) { mContext = context; } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java index c5103117d..b08b99d72 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java @@ -52,13 +52,10 @@ public class NearbyController { distances.put(place, computeDistanceBetween(place.location, curLatLng)); } Collections.sort(places, - new Comparator() { - @Override - public int compare(Place lhs, Place rhs) { - double lhsDistance = distances.get(lhs); - double rhsDistance = distances.get(rhs); - return (int) (lhsDistance - rhsDistance); - } + (lhs, rhs) -> { + double lhsDistance = distances.get(lhs); + double rhsDistance = distances.get(rhs); + return (int) (lhsDistance - rhsDistance); } ); } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java index bb2d2fed9..1203d5a0d 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyInfoDialog.java @@ -63,15 +63,10 @@ public class NearbyInfoDialog extends OverlayDialog { overflowButton.setVisibility(showMenu() ? View.VISIBLE : View.GONE); - overflowButton.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - popupMenuListener(); - } - }); + overflowButton.setOnClickListener(this::popupMenuListener); } - private void popupMenuListener() { + private void popupMenuListener(View v) { PopupMenu popupMenu = new PopupMenu(getActivity(), overflowButton); popupMenu.inflate(R.menu.nearby_info_dialog_options); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java index ea7ce3478..00b8a2840 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyListFragment.java @@ -48,12 +48,7 @@ public class NearbyListFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_nearby, container, false); recyclerView = (RecyclerView) view.findViewById(R.id.listView); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - adapterFactory = new NearbyAdapterFactory(new PlaceRenderer.PlaceClickedListener() { - @Override - public void placeClicked(Place place) { - NearbyInfoDialog.showYourself(getActivity(), place); - } - }); + adapterFactory = new NearbyAdapterFactory(place -> NearbyInfoDialog.showYourself(getActivity(), place)); return view; } diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java index 54c1a565e..bc5830809 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyMapFragment.java @@ -88,25 +88,19 @@ public class NearbyMapFragment extends android.support.v4.app.Fragment { // create map mapView = new MapView(getActivity(), options); mapView.onCreate(savedInstanceState); - mapView.getMapAsync(new OnMapReadyCallback() { - @Override - public void onMapReady(MapboxMap mapboxMap) { - mapboxMap.addMarkers(baseMarkerOptions); + mapView.getMapAsync(mapboxMap -> { + mapboxMap.addMarkers(baseMarkerOptions); - mapboxMap.setOnMarkerClickListener(new MapboxMap.OnMarkerClickListener() { - @Override - public boolean onMarkerClick(@NonNull Marker marker) { - if (marker instanceof NearbyMarker) { - NearbyMarker nearbyMarker = (NearbyMarker) marker; - Place place = nearbyMarker.getNearbyBaseMarker().getPlace(); - NearbyInfoDialog.showYourself(getActivity(), place); - } - return false; - } - }); + mapboxMap.setOnMarkerClickListener(marker -> { + if (marker instanceof NearbyMarker) { + NearbyMarker nearbyMarker = (NearbyMarker) marker; + Place place = nearbyMarker.getNearbyBaseMarker().getPlace(); + NearbyInfoDialog.showYourself(getActivity(), place); + } + return false; + }); - addCurrentLocationMarker(mapboxMap); - } + addCurrentLocationMarker(mapboxMap); }); if (PreferenceManager.getDefaultSharedPreferences(getActivity()).getBoolean("theme",true)) { mapView.setStyleUrl(getResources().getString(R.string.map_theme_dark)); diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java index 12e24f1ae..f4c8a5d61 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/PlaceRenderer.java @@ -1,5 +1,6 @@ package fr.free.nrw.commons.nearby; +import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -19,7 +20,7 @@ class PlaceRenderer extends Renderer { @BindView(R.id.icon) ImageView icon; private final PlaceClickedListener listener; - PlaceRenderer(PlaceClickedListener listener) { + PlaceRenderer(@NonNull PlaceClickedListener listener) { this.listener = listener; } @@ -35,14 +36,7 @@ class PlaceRenderer extends Renderer { @Override protected void hookListeners(View view) { - view.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (listener != null) { - listener.placeClicked(getContent()); - } - } - }); + view.setOnClickListener(v -> listener.placeClicked(getContent())); } @Override diff --git a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java index bdac4a0f5..cfeda91d1 100644 --- a/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/settings/SettingsFragment.java @@ -28,21 +28,15 @@ public class SettingsFragment extends PreferenceFragment { licensePreference.setSummary(getString(Utils.licenseNameFor(licensePreference.getValue()))); // Keep summary updated when changing value - licensePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - preference.setSummary(getString(Utils.licenseNameFor((String) newValue))); - return true; - } + licensePreference.setOnPreferenceChangeListener((preference, newValue) -> { + preference.setSummary(getString(Utils.licenseNameFor((String) newValue))); + return true; }); CheckBoxPreference themePreference = (CheckBoxPreference) findPreference("theme"); - themePreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - getActivity().recreate(); - return true; - } + themePreference.setOnPreferenceChangeListener((preference, newValue) -> { + getActivity().recreate(); + return true; }); final EditTextPreference uploadLimit = (EditTextPreference) findPreference("uploads"); @@ -51,36 +45,27 @@ public class SettingsFragment extends PreferenceFragment { int uploads = sharedPref.getInt(Prefs.UPLOADS_SHOWING, 100); uploadLimit.setText(uploads + ""); uploadLimit.setSummary(uploads + ""); - uploadLimit.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() { - - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - int value = Integer.parseInt(newValue.toString()); - final SharedPreferences.Editor editor = sharedPref.edit(); - if (value > 500) { - new AlertDialog.Builder(getActivity()) - .setTitle(R.string.maximum_limit) - .setMessage(R.string.maximum_limit_alert) - .setPositiveButton(android.R.string.yes, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - } - }) - .setIcon(android.R.drawable.ic_dialog_alert) - .show(); - editor.putInt(Prefs.UPLOADS_SHOWING, 500); - editor.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED,true); - uploadLimit.setSummary(500 + ""); - uploadLimit.setText(500 + ""); - } else { - editor.putInt(Prefs.UPLOADS_SHOWING, Integer.parseInt(newValue.toString())); - editor.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED,true); - uploadLimit.setSummary(newValue.toString()); - } - editor.apply(); - return true; + uploadLimit.setOnPreferenceChangeListener((preference, newValue) -> { + int value = Integer.parseInt(newValue.toString()); + final SharedPreferences.Editor editor = sharedPref.edit(); + if (value > 500) { + new AlertDialog.Builder(getActivity()) + .setTitle(R.string.maximum_limit) + .setMessage(R.string.maximum_limit_alert) + .setPositiveButton(android.R.string.yes, (dialog, which) -> {}) + .setIcon(android.R.drawable.ic_dialog_alert) + .show(); + editor.putInt(Prefs.UPLOADS_SHOWING, 500); + editor.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED,true); + uploadLimit.setSummary(500 + ""); + uploadLimit.setText(500 + ""); + } else { + editor.putInt(Prefs.UPLOADS_SHOWING, Integer.parseInt(newValue.toString())); + editor.putBoolean(Prefs.IS_CONTRIBUTION_COUNT_CHANGED,true); + uploadLimit.setSummary(newValue.toString()); } - + editor.apply(); + return true; }); diff --git a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java index a9c27e5e3..f689f04dd 100644 --- a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java @@ -55,12 +55,7 @@ public class NavigationBaseActivity extends BaseActivity public void initBackButton() { int backStackEntryCount = getSupportFragmentManager().getBackStackEntryCount(); toggle.setDrawerIndicatorEnabled(backStackEntryCount == 0); - toggle.setToolbarNavigationClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - onBackPressed(); - } - }); + toggle.setToolbarNavigationClickListener(v -> onBackPressed()); } public void initBack() { @@ -118,25 +113,17 @@ public class NavigationBaseActivity extends BaseActivity new AlertDialog.Builder(this) .setMessage(R.string.logout_verification) .setCancelable(false) - .setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - ((CommonsApplication) getApplicationContext()) - .clearApplicationData(NavigationBaseActivity.this); - Intent nearbyIntent = new Intent( - NavigationBaseActivity.this, LoginActivity.class); - nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); - nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(nearbyIntent); - finish(); - } - }) - .setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.cancel(); - } + .setPositiveButton(R.string.yes, (dialog, which) -> { + ((CommonsApplication) getApplicationContext()) + .clearApplicationData(NavigationBaseActivity.this); + Intent nearbyIntent = new Intent( + NavigationBaseActivity.this, LoginActivity.class); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK); + nearbyIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startActivity(nearbyIntent); + finish(); }) + .setNegativeButton(R.string.no, (dialog, which) -> dialog.cancel()) .show(); return true; default: diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java b/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java index cacc75596..09fed56ea 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ExistingFileAsync.java @@ -72,21 +72,13 @@ public class ExistingFileAsync extends AsyncTask { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(R.string.file_exists) .setTitle(R.string.warning); - builder.setPositiveButton(R.string.no, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - //Go back to ContributionsActivity - Intent intent = new Intent(context, ContributionsActivity.class); - context.startActivity(intent); - callback.onResult(Result.DUPLICATE_CANCELLED); - } - }); - builder.setNegativeButton(R.string.yes, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int id) { - callback.onResult(Result.DUPLICATE_PROCEED); - } + builder.setPositiveButton(R.string.no, (dialog, id) -> { + //Go back to ContributionsActivity + Intent intent = new Intent(context, ContributionsActivity.class); + context.startActivity(intent); + callback.onResult(Result.DUPLICATE_CANCELLED); }); + builder.setNegativeButton(R.string.yes, (dialog, id) -> callback.onResult(Result.DUPLICATE_PROCEED)); AlertDialog dialog = builder.create(); dialog.show(); diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index d7c807777..a3a1f8604 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -125,19 +125,16 @@ public class MultipleShareActivity Contribution up = photosList.get(i); final int uploadCount = i + 1; // Goddamn Java - uploadController.startUpload(up, new UploadController.ContributionUploadProgress() { - @Override - public void onUploadStarted(Contribution contribution) { - dialog.setProgress(uploadCount); - if(uploadCount == photosList.size()) { - dialog.dismiss(); - Toast startingToast = Toast.makeText( - CommonsApplication.getInstance(), - R.string.uploading_started, - Toast.LENGTH_LONG - ); - startingToast.show(); - } + uploadController.startUpload(up, contribution -> { + dialog.setProgress(uploadCount); + if (uploadCount == photosList.size()) { + dialog.dismiss(); + Toast startingToast = Toast.makeText( + CommonsApplication.getInstance(), + R.string.uploading_started, + Toast.LENGTH_LONG + ); + startingToast.show(); } }); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java index 666b8cb31..f515f2d0c 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MwVolleyApi.java @@ -57,7 +57,7 @@ public class MwVolleyApi { Timber.d("URL: %s", apiUrl); JsonRequest request = new QueryRequest(apiUrl, - new LogResponseListener(), new LogResponseErrorListener()); + new LogResponseListener<>(), new LogResponseErrorListener()); getQueue().add(request); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 7b9111841..8b09403f7 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -44,6 +44,9 @@ import fr.free.nrw.commons.modifications.TemplateRemoveModifier; import fr.free.nrw.commons.mwapi.EventLog; import timber.log.Timber; +import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.DUPLICATE_PROCEED; +import static fr.free.nrw.commons.upload.ExistingFileAsync.Result.NO_DUPLICATE; + /** * Activity for the title/desc screen after image is selected. Also starts processing image * GPS coordinates or user location (if enabled in Settings) for category suggestions. @@ -133,12 +136,9 @@ public class ShareActivity Timber.d("Cache the categories found"); } - uploadController.startUpload(title, mediaUri, description, mimeType, source, decimalCoords, new UploadController.ContributionUploadProgress() { - @Override - public void onUploadStarted(Contribution contribution) { - ShareActivity.this.contribution = contribution; - showPostUpload(); - } + uploadController.startUpload(title, mediaUri, description, mimeType, source, decimalCoords, c -> { + ShareActivity.this.contribution = c; + showPostUpload(); }); } @@ -379,14 +379,10 @@ public class ShareActivity Timber.d("File SHA1 is: %s", fileSHA1); ExistingFileAsync fileAsyncTask = - new ExistingFileAsync(fileSHA1, this, new ExistingFileAsync.Callback() { - @Override - public void onResult(ExistingFileAsync.Result result) { - Timber.d("%s duplicate check: %s", mediaUri.toString(), result); - duplicateCheckPassed = - result == ExistingFileAsync.Result.DUPLICATE_PROCEED - || result == ExistingFileAsync.Result.NO_DUPLICATE; - } + new ExistingFileAsync(fileSHA1, this, result -> { + Timber.d("%s duplicate check: %s", mediaUri.toString(), result); + duplicateCheckPassed = (result == DUPLICATE_PROCEED + || result == NO_DUPLICATE); }); fileAsyncTask.execute(); } catch (IOException e) { @@ -401,17 +397,12 @@ public class ShareActivity } } - private Snackbar requestPermissionUsingSnackBar( - String rationale, final String[] perms, final int code) { + private Snackbar requestPermissionUsingSnackBar(String rationale, + final String[] perms, + final int code) { Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), rationale, - Snackbar.LENGTH_INDEFINITE) - .setAction(R.string.ok, new View.OnClickListener() { - @Override - public void onClick(View view) { - ActivityCompat.requestPermissions(ShareActivity.this, - perms, code); - } - }); + Snackbar.LENGTH_INDEFINITE).setAction(R.string.ok, + view -> ActivityCompat.requestPermissions(ShareActivity.this, perms, code)); snackbar.show(); return snackbar; } diff --git a/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java index 2cb93a058..df67cfea7 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/ExecutorUtils.java @@ -7,14 +7,11 @@ import java.util.concurrent.Executor; public class ExecutorUtils { - private static final Executor uiExecutor = new Executor() { - @Override - public void execute(Runnable command) { - if (Looper.myLooper() == Looper.getMainLooper()) { - command.run(); - } else { - new Handler(Looper.getMainLooper()).post(command); - } + private static final Executor uiExecutor = command -> { + if (Looper.myLooper() == Looper.getMainLooper()) { + command.run(); + } else { + new Handler(Looper.getMainLooper()).post(command); } }; diff --git a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java index 0596327e3..4d50f32aa 100644 --- a/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java +++ b/app/src/main/java/fr/free/nrw/commons/utils/FileUtils.java @@ -42,8 +42,8 @@ public class FileUtils { if (file != null) { if (file.isDirectory()) { String[] children = file.list(); - for (int i = 0; i < children.length; i++) { - deletedAll = deleteFile(new File(file, children[i])) && deletedAll; + for (String child : children) { + deletedAll = deleteFile(new File(file, child)) && deletedAll; } } else { deletedAll = file.delete(); From 02315c2ae7cd24cdd515ad7884a850d7522261dc Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Sat, 22 Jul 2017 18:08:56 -0500 Subject: [PATCH 21/42] Propagated the @NonNull annotation for place click listener and removed a test that made no sense. --- .../fr/free/nrw/commons/nearby/NearbyAdapterFactory.java | 4 +++- .../free/nrw/commons/nearby/NearbyAdapterFactoryTest.java | 8 -------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapterFactory.java b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapterFactory.java index 5fffcab2a..d5eb05851 100644 --- a/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapterFactory.java +++ b/app/src/main/java/fr/free/nrw/commons/nearby/NearbyAdapterFactory.java @@ -1,5 +1,7 @@ package fr.free.nrw.commons.nearby; +import android.support.annotation.NonNull; + import com.pedrogomez.renderers.ListAdapteeCollection; import com.pedrogomez.renderers.RVRendererAdapter; import com.pedrogomez.renderers.RendererBuilder; @@ -10,7 +12,7 @@ import java.util.List; class NearbyAdapterFactory { private PlaceRenderer.PlaceClickedListener listener; - NearbyAdapterFactory(PlaceRenderer.PlaceClickedListener listener) { + NearbyAdapterFactory(@NonNull PlaceRenderer.PlaceClickedListener listener) { this.listener = listener; } diff --git a/app/src/test/java/fr/free/nrw/commons/nearby/NearbyAdapterFactoryTest.java b/app/src/test/java/fr/free/nrw/commons/nearby/NearbyAdapterFactoryTest.java index e54e4d7f2..76125aa43 100644 --- a/app/src/test/java/fr/free/nrw/commons/nearby/NearbyAdapterFactoryTest.java +++ b/app/src/test/java/fr/free/nrw/commons/nearby/NearbyAdapterFactoryTest.java @@ -113,14 +113,6 @@ public class NearbyAdapterFactoryTest { assertEquals(PLACE, clickedPlace); } - @Test - public void clickViewHandlesMisconfiguredListener() { - NearbyAdapterFactory testObject = new NearbyAdapterFactory(null); - RVRendererAdapter result = testObject.create(Collections.singletonList(PLACE)); - RendererViewHolder viewHolder = renderComponent(result); - viewHolder.itemView.performClick(); - } - @NonNull private RendererViewHolder renderComponent(RVRendererAdapter result) { FrameLayout viewGroup = new FrameLayout(RuntimeEnvironment.application); From d88fb3b0de8670913882a22bb4a9d0fc0c2d1411 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sun, 23 Jul 2017 15:39:08 +0300 Subject: [PATCH 22/42] Prepare alert window and strings --- .../contributions/ContributionsActivity.java | 43 +++++++++++++++++++ app/src/main/res/values/strings.xml | 8 +++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index f1a4adfe2..74cff702b 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -3,11 +3,13 @@ package fr.free.nrw.commons.contributions; import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.ServiceConnection; import android.content.SharedPreferences; import android.database.Cursor; import android.database.DataSetObserver; +import android.net.Uri; import android.os.Bundle; import android.os.IBinder; import android.preference.PreferenceManager; @@ -17,6 +19,7 @@ import android.support.v4.app.LoaderManager; import android.support.v4.content.CursorLoader; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; +import android.support.v7.app.AlertDialog; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -110,6 +113,46 @@ public class ContributionsActivity super.onPause(); } + @Override + protected void onStart() { + super.onStart(); + if (true) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(getResources().getString(R.string.feedback_popup_title)); + builder.setMessage(getResources().getString(R.string.feedback_popup_description)); + builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept) + , new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + // Go to the page + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getResources() + .getString(R.string.feedback_page_url))); + startActivity(browserIntent); + dialog.dismiss(); + } + }); + builder.setNeutralButton(getResources().getString(R.string.feedback_popup_remind) + ,new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Dismiss the dialog to show it later + dialog.dismiss(); + } + }); + builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline) + , new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Dismiss the dialog and not to show it later + dialog.dismiss(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } else { + + } + } + @Override protected void onAuthCookieAcquired(String authCookie) { // Do a sync everytime we get here! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f981902b3..f88df2ca4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,6 +202,12 @@ Tap this message (or hit back) to skip this step. no description found Commons file page Wikidata item - Error while caching pictures + Error while caching pictures + We need your feedbacks + We are planning several new features and improvements for the app! Have your say. + Decline + Remind me later + Join to discussion + https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal/User_feedback From 19784f0e82871fb8a7b136a0271f41db0132e012 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sun, 23 Jul 2017 18:10:42 +0300 Subject: [PATCH 23/42] Add shared preferences --- .../free/nrw/commons/CommonsApplication.java | 3 + .../contributions/ContributionsActivity.java | 103 ++++++++++++------ 2 files changed, 71 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index b78bfdc6f..3de167b82 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -11,6 +11,7 @@ import android.content.pm.PackageManager; import android.database.sqlite.SQLiteDatabase; import android.preference.PreferenceManager; import android.support.v4.util.LruCache; +import android.util.Log; import com.facebook.drawee.backends.pipeline.Fresco; import com.facebook.stetho.Stetho; @@ -139,6 +140,8 @@ public class CommonsApplication extends Application { System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0"); Fresco.initialize(this); + PreferenceManager.getDefaultSharedPreferences(CommonsApplication.getInstance()).edit() + .putBoolean("is_app_started", true).commit(); //For caching area -> categories cacheData = new CacheController(); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 74cff702b..0793db8be 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -30,7 +30,10 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import butterknife.ButterKnife; import fr.free.nrw.commons.CommonsApplication; @@ -116,41 +119,7 @@ public class ContributionsActivity @Override protected void onStart() { super.onStart(); - if (true) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(getResources().getString(R.string.feedback_popup_title)); - builder.setMessage(getResources().getString(R.string.feedback_popup_description)); - builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept) - , new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int which) { - // Go to the page - Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getResources() - .getString(R.string.feedback_page_url))); - startActivity(browserIntent); - dialog.dismiss(); - } - }); - builder.setNeutralButton(getResources().getString(R.string.feedback_popup_remind) - ,new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Dismiss the dialog to show it later - dialog.dismiss(); - } - }); - builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline) - , new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Dismiss the dialog and not to show it later - dialog.dismiss(); - } - }); - AlertDialog alert = builder.create(); - alert.show(); - } else { - - } + displayFeedbackPopup(); } @Override @@ -385,4 +354,68 @@ public class ContributionsActivity Intent contributionsIntent = new Intent(context, ContributionsActivity.class); context.startActivity(contributionsIntent); } + + private void displayFeedbackPopup(){ + + Date strDate = null; + try { + String valid_until = "23/08/2017"; + SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); + strDate = sdf.parse(valid_until); + } catch (ParseException e) { + e.printStackTrace(); + } + + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences + (CommonsApplication.getInstance()); + + // boolean to save users request about displaying popup + boolean displayFeedbackPopup = prefs.getBoolean("display_feedbak_popup", true); + + // boolean to recognize is application re-started. Will be used for "remind me later" option + boolean isApplicationStarted = prefs.getBoolean("is_app_started" , true); + + // if time is valid and shared pref says display + if (new Date().before(strDate) && displayFeedbackPopup && isApplicationStarted) { + // The window will be displayed once per application start + prefs.edit().putBoolean("is_app_started" , false).commit(); + + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(getResources().getString(R.string.feedback_popup_title)); + builder.setMessage(getResources().getString(R.string.feedback_popup_description)); + builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept) + , new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + // Go to the page + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri + .parse(getResources() + .getString(R.string.feedback_page_url))); + startActivity(browserIntent); + // No need to dislay this window to the user again. + prefs.edit().putBoolean("display_feedbak_popup" , false).commit(); + dialog.dismiss(); + } + }); + builder.setNeutralButton(getResources().getString(R.string.feedback_popup_remind) + ,new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Dismiss the dialog to show it later, + // don't set "display_feedbak_popup" to false, user wants to see it latr + dialog.dismiss(); + } + }); + builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline) + , new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Dismiss the dialog and not to show it later + prefs.edit().putBoolean("display_feedbak_popup", false).commit(); + dialog.dismiss(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } + } } From 457148269508d79087c7d18d12293e2d6ac6bac7 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Sun, 23 Jul 2017 18:44:38 +0300 Subject: [PATCH 24/42] Fix codacy issues --- .../contributions/ContributionsActivity.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 0793db8be..2848055e8 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -355,19 +355,19 @@ public class ContributionsActivity context.startActivity(contributionsIntent); } - private void displayFeedbackPopup(){ + private void displayFeedbackPopup() { Date strDate = null; try { - String valid_until = "23/08/2017"; + String validUntil = "23/08/2017"; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - strDate = sdf.parse(valid_until); + strDate = sdf.parse(validUntil); } catch (ParseException e) { e.printStackTrace(); } - final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences - (CommonsApplication.getInstance()); + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( + CommonsApplication.getInstance()); // boolean to save users request about displaying popup boolean displayFeedbackPopup = prefs.getBoolean("display_feedbak_popup", true); @@ -383,8 +383,8 @@ public class ContributionsActivity AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getString(R.string.feedback_popup_title)); builder.setMessage(getResources().getString(R.string.feedback_popup_description)); - builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept) - , new DialogInterface.OnClickListener() { + builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept), + new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Go to the page Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri From 815465bbd3fe3bcdead622ac1fd448e1e576a67b Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Mon, 24 Jul 2017 06:40:38 +0200 Subject: [PATCH 25/42] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-ast/strings.xml | 1 - app/src/main/res/values-b+tg+Cyrl/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-eu/strings.xml | 1 - app/src/main/res/values-fi/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-gl/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-ji/strings.xml | 2 ++ app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-lb/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-pms/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-th/error.xml | 7 +++++++ app/src/main/res/values-uk/strings.xml | 3 +++ app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values-zh/strings.xml | 1 - 19 files changed, 12 insertions(+), 16 deletions(-) create mode 100644 app/src/main/res/values-th/error.xml diff --git a/app/src/main/res/values-ast/strings.xml b/app/src/main/res/values-ast/strings.xml index c25bfc778..dcee85e89 100644 --- a/app/src/main/res/values-ast/strings.xml +++ b/app/src/main/res/values-ast/strings.xml @@ -76,7 +76,6 @@ Date d\'alta Tocante a Software de códigu abiertu lliberáu baxo la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Llicencia Apache v2</a>. %1$s ya\'l so logotipu son marques rexistraes de la Fundación Wikimedia y utilícense col so permisu. Nun tamos acreditaos pola Fundación Wikimedia nin tamos afiliaos con ella. - Wikimedia Commons El <a href=\"https://github.com/commons-app/apps-android-commons\">códigu fonte</a> ya\'l <a href=\"https://commons-app.github.io/\">sitiu web</a> tán en GitHub. Crea una nueva <a href=\"https://github.com/commons-app/apps-android-commons/issues\">incidencia en GitHub</a> pa informar de problemes y suxerencies. Wikimedia:Commons-android-strings-about privacy policy/ast <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a> diff --git a/app/src/main/res/values-b+tg+Cyrl/strings.xml b/app/src/main/res/values-b+tg+Cyrl/strings.xml index d9af68e06..0785618e9 100644 --- a/app/src/main/res/values-b+tg+Cyrl/strings.xml +++ b/app/src/main/res/values-b+tg+Cyrl/strings.xml @@ -32,7 +32,6 @@ Ҳисоботи истифода Танзимот Дар бораи - Викианбор Дар бораи Ирсоли Пешниҳод (тавассути Email) Дубора саъй кунед diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7fec6dd65..b849c81e3 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -76,7 +76,6 @@ Registrieren Über Die Open-Source-Software wurde veröffentlicht unter der <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache-Lizenz v2</a>. %1$s und das entsprechende Logo sind Markenzeichen der Wikimedia Foundation und wurden mit Genehmigung der Wikimedia Foundation verwendet. Wir wurden nicht von der Wikimedia Foundation bestätigt oder sind nicht mit ihr verbunden. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Quellcode</a> und <a href=\"https://commons-app.github.io/\">Website</a> auf GitHub. Einen neuen <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-Eintrag</a> für Fehlerberichte und Vorschläge erstellen. <a href=\"//de.wikipedia.org/wiki/Wikipedia:Datenschutz\">Datenschutzrichtlinie</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Danksagungen</a> diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 452693303..136b6f218 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -76,7 +76,6 @@ Regístrate Acerca de Programa de código abierto publicado bajo la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Licencia Apache ver. 2</a>. %1$s y su logotipo son marcas registradas de la Fundación Wikimedia y se utilizan con su permiso. No hemos sido acreditados por la Fundación Wikimedia ni estamos afiliados con ella. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Código fuente</a> y <a href=\"https://commons-app.github.io/\">sitio web</a> en GitHub. Crea <a href=\"https://github.com/commons-app/apps-android-commons/issues\">incidencias</a> para informar de problemas y sugerencias. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Normativa de privacidad</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a> diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 713f4e2c7..543f630c1 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -62,7 +62,6 @@ Eman izena Honi buruz Open Source softwarea <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache v2 Lizentziaren</a> pean egina. Wikimedia Commons eta bere logoa Wikimedia Fundazioaren marka erregistratuak dira eta Wikimedia Fundazioaren baimenarekin erabiltzen dira. Ez gaude Wikimedia Fundaziora afiliatuta. - Wikimedia Commons GitHub-eko <a href=\"https://github.com/commons-app/apps-android-commons\">Iturria</a> eta <a href=\"https://commons-app.github.io/\">webgunea</a>. <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-eko gai</a> berria sortu erroreen berri emateko. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Pribatutasun politika</a> Honi buruz diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 213fb6699..5925d548d 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -76,7 +76,6 @@ Rekisteröidy Tietoja Tämä on vapaan lähdekoodin ohjelmisto, joka on julkaistu <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a> -lisenssin alaisena. Wikimedia Commons ja sen logo ovat Wikimedia Foundationin tavaramerkkejä ja niitä käytetään Wikimedia Foundationin luvalla. Emme ole hyväksyttyjä tai sidoksissa Wikimedia Foundationioniin. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Lähde</a> ja <a href=\"https://commons-app.github.io/\">nettisivusto</a> GitHubissa. Luo uusi <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-issue</a> bugiraporteille ja ehdotuksille. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Yksityisyydensuoja</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Tekijät</a> diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9e6ea1e79..118ce4b97 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -76,7 +76,6 @@ S’inscrire À propos Les logiciels Open Source sont publiés sous la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">licence Apache v2</a>. %1$s et son logo sont des marques déposées de la Fondation Wikimédia qui sont utilisées avec l’autorisation de la Fondation Wikimédia. Nous ne sommes pas approuvés par ou affiliés à la Fondation Wikimédia. - Wikimédia Communs <a href=\"https://github.com/commons-app/apps-android-commons\">Sources</a> et <a href=\"https://commons-app.github.io/\">site web</a> sur GitHub. Créer un nouveau <a href=\"https://github.com/commons-app/apps-android-commons/issues\">signalement GitHub</a> pour signales des bogues ou des suggestions. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Politique de confidentialité</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Remerciements</a> diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 7a76c3c6c..836bcfa01 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -76,7 +76,6 @@ Rexistrarse Acerca de Software de código aberto liberado baixo a <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">licenza Apache v2</a>. %1$s e o seu logo son marcas rexistradas da Fundación Wikimedia e úsanse coa súa autorización. Non fomos acreditados pola Fundación Wikimedia nin estamos afiliados con ela. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Código fonte</a> e <a href=\"https://commons-app.github.io/\">sitio web</a> en GitHub. Crear unha nova <a href=\"https://github.com/commons-app/apps-android-commons/issues\">incidencia</a> para informar de problemas e suxestións. <a href=\"https://wikimediafoundation.org/wiki/Política_de_protección_de_datos_(gl)\">Política de protección de datos</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a> diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 7b58f94c4..6d837dda5 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -76,7 +76,6 @@ Registrati Informazioni Software open source rilasciato con <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">licenza Apache v2</a>. %1$s ed il suo logo sono marchi registrati della Wikimedia Foundation e sono utilizzati con il permesso della Wikimedia Foundation. Non siamo approvati o affiliati con la Wikimedia Foundation. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Codice sorgente</a> e <a href=\"https://commons-app.github.io/\">sito web</a> su GitHub. Crea una nuova <a href=\"https://github.com/commons-app/apps-android-commons/issues\">segnalazione GitHub</a> per riportare errori e suggerimenti. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Politica sulla privacy</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Crediti</a> diff --git a/app/src/main/res/values-ji/strings.xml b/app/src/main/res/values-ji/strings.xml index d7fbf831f..4f8aed92b 100644 --- a/app/src/main/res/values-ji/strings.xml +++ b/app/src/main/res/values-ji/strings.xml @@ -93,6 +93,8 @@ ווארענונג יא ניין + ליצענץ + קאארדינאטן טולפאן אַנולירן אפֿן diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 50b3c9db6..938d53c38 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -75,7 +75,6 @@ 가입하기 정보 오픈 소스 소프트웨어는 <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">아파치 라이선스 v2</a>에 따라 공개됩니다 - 위키미디어 공용 소스 코드는 <a href=\"https://github.com/commons-app/apps-android-commons\">GitHub</a>에 있으며, 버그는<a href=\" https://github.com/commons-app/apps-android-commons/issues\">버그질라</a>에 보고하세요. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy/ko\">개인정보 정책</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">제작진</a> diff --git a/app/src/main/res/values-lb/strings.xml b/app/src/main/res/values-lb/strings.xml index 41b1ce975..2aaaeaf67 100644 --- a/app/src/main/res/values-lb/strings.xml +++ b/app/src/main/res/values-lb/strings.xml @@ -75,7 +75,6 @@ Mellt Iech un Iwwer \'Open-Source-Software\' verëffentlecht ënner der <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache Lizenz v2</a>. %1$s a säi Logo si Markenzeeche vun der Wikimedia Foundation a gi mat der Autorisatioun vun der Wikimedia Foundation benotzt. Mir sinn net confirméiert vun oder liéiert mat der Wikimedia Foundation. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Quell</a> an <a href=\"https://commons-app.github.io/\">Internetsite</a> vu GitHub.\nLeet w.e.g. <a href=\"https://github.com/commons-app/apps-android-commons/issues\"> e GitHub Problem</a> fir Problemer ze mellen a Proposen ze maachen. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Dateschutzerklärung</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Merci</a> diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index aa7172d91..a830cc6bc 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -76,7 +76,6 @@ Регистрација За извршникот Програм со отворен код, издаден под лиценцата <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Апачи вер. 2</a>. %1$s и нејзиното лого се заштитни знаци на Фондацијата Викимедија и се користат со нејзина дозвола. Ние не сме поддржани и поврзани со Фондацијата Викимедија. - Ризницата <a href=\"https://github.com/commons-app/apps-android-commons\">Извор</a> и <a href=\"https://commons-app.github.io/\">мреж. место</a> на GitHub</a>. Создајте нов <a href=\"https://github.com/commons-app/apps-android-commons/issues\">случај на GitHub</a> за пријавување грешки и давање предлози. <a href=\"https://wikimediafoundation.org/wiki/Заштита на личните податоци\">Заштита_на_личните_податоци</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Заслуги</a> diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index 6b031275f..ad1aaf210 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -76,7 +76,6 @@ Marchesse A propòsit Ij programa Open Source a son publicà sota la <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">licensa Apache v2</a>. %1$s e sò sìmbol a son dle marche argistrà dla Fondassion Wikimedia e a son dovrà con ël përmess ëd la Fondassion Wikimedia. Nojàutri i soma nen aprovà da o afilià a la Fondassion Wikimedia. - Wikimedia Comun <a href=\"https://github.com/commons-app/apps-android-commons\">Sorgiss</a> e <a href=\"https://commons-app.github.io/\">sit an sl\'aragnà</a> su GitHub. Creé na neuva <a href=\"https://github.com/commons-app/apps-android-commons/issues\">signalassion GitHub</a> për signalé dij givo e dij sugeriment. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Régole ëd confidensialità</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Ringrassiament</a> diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 23c051f2e..2bfa69c7f 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -76,7 +76,6 @@ Registrera Om Programvara med öppen källkod släppt under <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">licensen Apache v2</a>. %1$s och dess logotyp är varumärken av Wikimedia Foundation och används med tillstånd från Wikimedia Foundation. Vi varken stöds eller är kopplade med Wikimedia Foundation. - Wikimedia Commons <a href=\"https://github.com/commons-app/apps-android-commons\">Källkoden</a> och <a href=\"https://commons-app.github.io/\">webbplatsen</a> på GitHub. Skapa ett nytt <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub-ärende</a> för att rapportera buggar och förslag. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Integritetspolicy</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Erkännande</a> diff --git a/app/src/main/res/values-th/error.xml b/app/src/main/res/values-th/error.xml new file mode 100644 index 000000000..bdacb80a8 --- /dev/null +++ b/app/src/main/res/values-th/error.xml @@ -0,0 +1,7 @@ + + + คอมมอนส์หยุดทำงาน + อ๊ะ มีบางอย่างผิดพลาดไป! + บอกให้เราทราบว่าคุณกำลังทำอะไรอยู่ แล้วแบ่งปันให้เราผ่านทางอีเมล จะได้ช่วยเราแก้ไขได้! + ขอบคุณ! + diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 49b201474..b6d7d46f3 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -157,6 +157,9 @@ Опис Сюди потрапляє опис медіафайлу. Він потенційно може бути досить довгим і розтягнутися на декілька рядків. Однак ми сподіваємось, що він виглядатиме гарно. Дата завантаження + Ліцензія + Координати + Не передбачено Станьте бета-тестером Увійдіть на наш бета-канал на Google Play і отримайте ранній доступ до нових функцій та виправлень багів Використати Вікідані diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 9ec84098c..0961ebe06 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -76,7 +76,6 @@ 註冊 關於 以<a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache許可證 v2</a>釋放的開放源碼軟體。%1$s和其標誌圖像是維基媒體基金會的標記;並在維基媒體基金會的許可下使用。我們並非由維基媒體基金會所認可、也不隸屬於維基媒體基金會。 - 維基共享資源 <a href=\"https://github.com/commons-app/apps-android-commons\">原始碼</a>和<a href=\"https://commons-app.github.io/\">網站</a>位於GitHub上。建立一個新的<a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub問題</a>來回報問題和提出建議。 <a href=\"https://meta.wikimedia.org/wiki/Privacy_policy/zh\">隱私政策</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">製作群</a> diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4fdc17ebd..d2c740f89 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -76,7 +76,6 @@ 注册 关于 本开源软件采用<a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache许可证第二版</a>授权。%1$s及其标志是维基媒体基金会的商标,并在维基媒体基金会的许可下使用。我们并不被维基媒体基金会认可,也不与基金会有任何联系。 - 维基共享资源 <a href=\"https://github.com/commons-app/apps-android-commons\">源代码</a>和<a href=\"https://commons-app.github.io/\">网站</a>位于GitHub。创建新的<a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub问题</a>以发送错误报告和建议。 <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">隐私政策</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">制作人员</a> From 3b797751a3f2184592999e088f422412c575e3ce Mon Sep 17 00:00:00 2001 From: Paul Hawke Date: Tue, 25 Jul 2017 21:19:56 -0500 Subject: [PATCH 26/42] Cleanup - got rid of unused imports --- .../category/CategorizationFragment.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java index 70700512a..bda7eecc9 100644 --- a/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/category/CategorizationFragment.java @@ -1,7 +1,6 @@ package fr.free.nrw.commons.category; import android.content.ContentProviderClient; -import android.content.DialogInterface; import android.content.SharedPreferences; import android.database.Cursor; import android.os.AsyncTask; @@ -15,7 +14,6 @@ import android.support.v7.widget.RecyclerView; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; -import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -56,11 +54,16 @@ import static fr.free.nrw.commons.category.CategoryContentProvider.AUTHORITY; public class CategorizationFragment extends Fragment implements CategoryClickedListener { public static final int SEARCH_CATS_LIMIT = 25; - @BindView(R.id.categoriesListBox) RecyclerView categoriesList; - @BindView(R.id.categoriesSearchBox) EditText categoriesFilter; - @BindView(R.id.categoriesSearchInProgress) ProgressBar categoriesSearchInProgress; - @BindView(R.id.categoriesNotFound) TextView categoriesNotFoundView; - @BindView(R.id.categoriesExplanation) TextView categoriesSkip; + @BindView(R.id.categoriesListBox) + RecyclerView categoriesList; + @BindView(R.id.categoriesSearchBox) + EditText categoriesFilter; + @BindView(R.id.categoriesSearchInProgress) + ProgressBar categoriesSearchInProgress; + @BindView(R.id.categoriesNotFound) + TextView categoriesNotFoundView; + @BindView(R.id.categoriesExplanation) + TextView categoriesSkip; private RVRendererAdapter categoriesAdapter; private OnCategoriesSaveHandler onCategoriesSaveHandler; @@ -450,7 +453,7 @@ public class CategorizationFragment extends Fragment implements CategoryClickedL public void backButtonDialog() { new AlertDialog.Builder(getActivity()) - .setMessage("Are you sure you want to go back? The image will not " + .setMessage("Are you sure you want to go back? The image will not " + "have any categories saved.") .setTitle("Warning") .setPositiveButton("No", (dialog, id) -> { From 452dcaec7296f1d4e8f16c016727be7273d9c181 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 14:06:49 +0300 Subject: [PATCH 27/42] Display pop up once, on 4th app start --- .../fr/free/nrw/commons/CommonsApplication.java | 6 ++++-- .../contributions/ContributionsActivity.java | 15 ++------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java index 3de167b82..42dd55ac5 100644 --- a/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java +++ b/app/src/main/java/fr/free/nrw/commons/CommonsApplication.java @@ -140,8 +140,10 @@ public class CommonsApplication extends Application { System.setProperty("in.yuvi.http.fluent.PROGRESS_TRIGGER_THRESHOLD", "3.0"); Fresco.initialize(this); - PreferenceManager.getDefaultSharedPreferences(CommonsApplication.getInstance()).edit() - .putBoolean("is_app_started", true).commit(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( + CommonsApplication.getInstance()); + // Increase counter by one, starts from 1 + prefs.edit().putInt("app_start_counter", prefs.getInt("app_start_counter" ,0) + 1).commit(); //For caching area -> categories cacheData = new CacheController(); diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 2848055e8..688c6fce1 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -373,12 +373,10 @@ public class ContributionsActivity boolean displayFeedbackPopup = prefs.getBoolean("display_feedbak_popup", true); // boolean to recognize is application re-started. Will be used for "remind me later" option - boolean isApplicationStarted = prefs.getBoolean("is_app_started" , true); + int appStartCounter = prefs.getInt("app_start_counter" ,0); // if time is valid and shared pref says display - if (new Date().before(strDate) && displayFeedbackPopup && isApplicationStarted) { - // The window will be displayed once per application start - prefs.edit().putBoolean("is_app_started" , false).commit(); + if (new Date().before(strDate) && displayFeedbackPopup && (appStartCounter == 4)) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle(getResources().getString(R.string.feedback_popup_title)); @@ -396,15 +394,6 @@ public class ContributionsActivity dialog.dismiss(); } }); - builder.setNeutralButton(getResources().getString(R.string.feedback_popup_remind) - ,new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Dismiss the dialog to show it later, - // don't set "display_feedbak_popup" to false, user wants to see it latr - dialog.dismiss(); - } - }); builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline) , new DialogInterface.OnClickListener() { @Override From 1c9989d6585fa14f55f5c92c7d8658307867a67e Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 14:13:25 +0300 Subject: [PATCH 28/42] Update strings --- app/src/main/res/values/strings.xml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f88df2ca4..1b45c70e8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,11 +203,10 @@ Tap this message (or hit back) to skip this step. Commons file page Wikidata item Error while caching pictures - We need your feedbacks - We are planning several new features and improvements for the app! Have your say. - Decline - Remind me later - Join to discussion + Feedback wanted + We are planning several new features and improvements for the app! Would you like to review them and provide feedback? (You can always access this by selecting "Developer plans" in the navigation drawer) + No thanks + Sure, take me there! https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal/User_feedback From 07102c04e9b5eba5a5c8b0b8f7517944c6945859 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 14:29:56 +0300 Subject: [PATCH 29/42] Add developer plans to nav drawer --- .../free/nrw/commons/theme/NavigationBaseActivity.java | 9 +++++++++ app/src/main/res/drawable/ic_help_outline_black_24dp.xml | 9 +++++++++ app/src/main/res/menu/drawer.xml | 5 +++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 24 insertions(+) create mode 100644 app/src/main/res/drawable/ic_help_outline_black_24dp.xml diff --git a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java index a9c27e5e3..24dd2f2b6 100644 --- a/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/theme/NavigationBaseActivity.java @@ -3,6 +3,7 @@ package fr.free.nrw.commons.theme; import android.content.ActivityNotFoundException; import android.content.DialogInterface; import android.content.Intent; +import android.net.Uri; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.v4.widget.DrawerLayout; @@ -114,6 +115,14 @@ public class NavigationBaseActivity extends BaseActivity Toast.makeText(this, R.string.no_email_client, Toast.LENGTH_SHORT).show(); } return true; + case R.id.action_developer_plans: + drawerLayout.closeDrawer(navigationView); + // Go to the page + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri + .parse(getResources() + .getString(R.string.feedback_page_url))); + startActivity(browserIntent); + return true; case R.id.action_logout: new AlertDialog.Builder(this) .setMessage(R.string.logout_verification) diff --git a/app/src/main/res/drawable/ic_help_outline_black_24dp.xml b/app/src/main/res/drawable/ic_help_outline_black_24dp.xml new file mode 100644 index 000000000..e7cf8ea21 --- /dev/null +++ b/app/src/main/res/drawable/ic_help_outline_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/menu/drawer.xml b/app/src/main/res/menu/drawer.xml index f0a0a5e29..cb6b63ffc 100644 --- a/app/src/main/res/menu/drawer.xml +++ b/app/src/main/res/menu/drawer.xml @@ -30,6 +30,11 @@ android:icon="@drawable/ic_feedback_black_24dp" android:title="@string/navigation_item_feedback"/> + + Feedback Logout Tutorial + Developer plans Nearby places cannot be displayed without location permissions no description found From fc8a3c1c9eace05cb99866756656bebfbc36ecfd Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 14:56:10 +0300 Subject: [PATCH 30/42] Ups, fix the link:) --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 41e73aeee..4f6d8e61d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -208,6 +208,6 @@ Tap this message (or hit back) to skip this step. We are planning several new features and improvements for the app! Would you like to review them and provide feedback? (You can always access this by selecting "Developer plans" in the navigation drawer) No thanks Sure, take me there! - https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal/User_feedback + https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal#Endorsements From d72b239e20b4fbe67f1aedf8dd67cbaceb2ce3a5 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 14:57:51 +0300 Subject: [PATCH 31/42] Fix codacy --- .../free/nrw/commons/contributions/ContributionsActivity.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 688c6fce1..783c3b6c3 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -394,8 +394,8 @@ public class ContributionsActivity dialog.dismiss(); } }); - builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline) - , new DialogInterface.OnClickListener() { + builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline), + new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // Dismiss the dialog and not to show it later From 006d8d192661f511b98cbb2f15b84d6c8d68b982 Mon Sep 17 00:00:00 2001 From: Mikel Date: Wed, 26 Jul 2017 16:07:47 +0100 Subject: [PATCH 32/42] Remove dead translations --- app/src/main/res/values-ar/strings.xml | 3 +-- app/src/main/res/values-he/strings.xml | 3 +-- app/src/main/res/values-ms/strings.xml | 4 +--- app/src/main/res/values-qq/strings.xml | 4 +--- app/src/main/res/values-vi/strings.xml | 3 --- 5 files changed, 4 insertions(+), 13 deletions(-) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7eb1c1916..83a72957d 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -20,8 +20,7 @@ اكتمال رفع %1$s فشل رفع %1$s انقر لتشاهد - متبقى %d - مرفوعاتي الأخيرة + مرفوعاتي الأخيرة في قائمة الانتظار فشل انتهاء %1$d%% diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index eaef5a9c5..feb3cf436 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -18,8 +18,7 @@ העלאת %1$s מסתיימת העלאת %1$s נכשלה נא ללחוץ כדי להציג - נשארו %d - ההעלאות שלי + ההעלאות שלי בתור נכשלה %1$d%% הושלמו diff --git a/app/src/main/res/values-ms/strings.xml b/app/src/main/res/values-ms/strings.xml index ff342f3bf..fa5e00766 100644 --- a/app/src/main/res/values-ms/strings.xml +++ b/app/src/main/res/values-ms/strings.xml @@ -18,7 +18,6 @@ %1$s akan siap dimuat naik %1$s gagal dimuat naik Ketik untuk lihat - %d fail sedang dimuat naik Muat Naik Terbaru Saya Dibaris gilir Gagal @@ -48,8 +47,7 @@ %d muatnaik %d muatnaik - Memulakan %d kerja muat naik - + %d muatnaik %d muatnaik diff --git a/app/src/main/res/values-qq/strings.xml b/app/src/main/res/values-qq/strings.xml index eb0684112..4d891fe3f 100644 --- a/app/src/main/res/values-qq/strings.xml +++ b/app/src/main/res/values-qq/strings.xml @@ -49,8 +49,7 @@ This message is followed by a list of the categories.\n{{Identical|Search category}} Hint text on menu item to save selected categories.\n{{Identical|Save}} {{Identical|Refresh}} - {{Identical|Upload}} - Message shown to the user when no category matching what they searched for was found. %1$s represents the category name + Message shown to the user when no category matching what they searched for was found. %1$s represents the category name Text explaining to users why and how to add categories to images. Users can also tap this message to skip adding categories. Title for the activity where Categories are being selected to add to the Image.\n{{Identical|Category}} Text for preference that enables the user to enable or disable collection of data about the user\'s usage patterns. @@ -59,7 +58,6 @@ {{Identical|Sign up}} {{Identical|About}} License and legal notice. %1$s is {{msg-wm|Commons-android-strings-trademarked name}} - {{Ignored}}\n\nUsed in {{msg-wm|Commons-android-strings-about license}}\n\n{{Identical|Wikimedia Commons}} {{doc-important|Please make sure that your translation of \"source\" means \"source code\", not \"reference source\".}}\nSource and Bugs HTML fragment linking to Wikimedia\'s privacy policy. Note: avoid percent-encoding in the URL, as this causes problems with Android\'s resource compiler. Use accented/non-ASCII characters \"as is\" if possible. (We can fix it manually, so don\'t worry too much about it.)\n{{Identical|Privacy policy}} {{Identical|Credit}} diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 714ef04a3..197f88c26 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -20,7 +20,6 @@ Đang hoàn thành việc tải lên tập tin %1$s Tải lên tập tin %1$s thất bại Chạm để xem - %d tập tin đang được tải lên Tập tin do tôi tải lên Đang chờ Thất bại @@ -51,8 +50,6 @@ Chưa tải lên tập tin %d tập tin tải lên - Đang bắt đầu tải lên %d tập tin - %d tập tin tải lên Không tìm thấy thể loại khớp với %1$s Xếp các hình ảnh vào thể loại để cho chúng dễ tìm kiếm hơn trên Wikimedia Commons.\n\nHãy bắt đầu nhập tên thể loại để tìm kiếm.\nChạm vào thông điệp này (hoặc bấm Quay lại) để bỏ qua bước này. Thể loại From bfc74a610b20739fe493ebf89c3efce61d4af38a Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 18:20:57 +0300 Subject: [PATCH 33/42] Minor fixes --- app/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4f6d8e61d..524ef6a66 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -205,9 +205,9 @@ Tap this message (or hit back) to skip this step. Wikidata item Error while caching pictures Feedback wanted - We are planning several new features and improvements for the app! Would you like to review them and provide feedback? (You can always access this by selecting "Developer plans" in the navigation drawer) + We are planning several new features and improvements for the app! Would you like to review them and provide feedback? \n(You can always access this by selecting "Developer plans" in the navigation drawer) No thanks Sure, take me there! - https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal#Endorsements + https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal From 5e0e34cf10c6078125056184259737c009b36c12 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 18:24:09 +0300 Subject: [PATCH 34/42] Add one more line break --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 524ef6a66..30ea71515 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -205,7 +205,7 @@ Tap this message (or hit back) to skip this step. Wikidata item Error while caching pictures Feedback wanted - We are planning several new features and improvements for the app! Would you like to review them and provide feedback? \n(You can always access this by selecting "Developer plans" in the navigation drawer) + We are planning several new features and improvements for the app! Would you like to review them and provide feedback? \n\n(You can always access this by selecting "Developer plans" in the navigation drawer) No thanks Sure, take me there! https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal From 79a22c1aca637b6458378b76df8e1caaa377ea6f Mon Sep 17 00:00:00 2001 From: Mikel Date: Wed, 26 Jul 2017 16:24:24 +0100 Subject: [PATCH 35/42] Add missing annotations --- app/src/main/java/fr/free/nrw/commons/Media.java | 4 ++-- .../concurrency/ThreadPoolExecutorService.java | 2 +- .../contributions/ContributionsContentProvider.java | 13 +++++++------ .../contributions/ContributionsListFragment.java | 3 ++- .../modifications/ModificationsContentProvider.java | 13 +++++++------ .../nrw/commons/upload/MultipleShareActivity.java | 3 ++- .../fr/free/nrw/commons/upload/ShareActivity.java | 3 ++- 7 files changed, 23 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/Media.java b/app/src/main/java/fr/free/nrw/commons/Media.java index a1ae1cc84..1d07e9c16 100644 --- a/app/src/main/java/fr/free/nrw/commons/Media.java +++ b/app/src/main/java/fr/free/nrw/commons/Media.java @@ -142,7 +142,7 @@ public class Media implements Parcelable { return coordinates; } - public void setCoordinates(LatLng coordinates) { + public void setCoordinates(@Nullable LatLng coordinates) { this.coordinates = coordinates; } @@ -201,7 +201,7 @@ public class Media implements Parcelable { this.filename = filename; } - public Media(Uri localUri, String imageUrl, String filename, String description, long dataLength, Date dateCreated, Date dateUploaded, String creator) { + public Media(Uri localUri, String imageUrl, String filename, String description, long dataLength, Date dateCreated, @Nullable Date dateUploaded, String creator) { this(); this.localUri = localUri; this.imageUrl = imageUrl; diff --git a/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadPoolExecutorService.java b/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadPoolExecutorService.java index 1516d85d8..85f8cbfeb 100644 --- a/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadPoolExecutorService.java +++ b/app/src/main/java/fr/free/nrw/commons/concurrency/ThreadPoolExecutorService.java @@ -39,7 +39,7 @@ public class ThreadPoolExecutorService implements Executor { } @Override - public void execute(Runnable command) { + public void execute(@NonNull Runnable command) { backgroundPool.execute(command); } diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java index 9dc933358..6e84065f2 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java @@ -7,6 +7,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.support.annotation.NonNull; import android.text.TextUtils; import fr.free.nrw.commons.CommonsApplication; @@ -38,7 +39,7 @@ public class ContributionsContentProvider extends ContentProvider{ } @Override - public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(Contribution.Table.TABLE_NAME); @@ -71,12 +72,12 @@ public class ContributionsContentProvider extends ContentProvider{ } @Override - public String getType(Uri uri) { + public String getType(@NonNull Uri uri) { return null; } @Override - public Uri insert(Uri uri, ContentValues contentValues) { + public Uri insert(@NonNull Uri uri, ContentValues contentValues) { int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); long id = 0; @@ -92,7 +93,7 @@ public class ContributionsContentProvider extends ContentProvider{ } @Override - public int delete(Uri uri, String s, String[] strings) { + public int delete(@NonNull Uri uri, String s, String[] strings) { int rows = 0; int uriType = uriMatcher.match(uri); @@ -114,7 +115,7 @@ public class ContributionsContentProvider extends ContentProvider{ } @Override - public int bulkInsert(Uri uri, ContentValues[] values) { + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) { Timber.d("Hello, bulk insert! (ContributionsContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); @@ -136,7 +137,7 @@ public class ContributionsContentProvider extends ContentProvider{ } @Override - public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { + public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { /* SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false") Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java index c009243b9..bcbb5a739 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsListFragment.java @@ -8,6 +8,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; @@ -162,7 +163,7 @@ public class ContributionsListFragment extends Fragment { } @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Timber.d("onRequestPermissionsResult: req code = " + " perm = " + permissions + " grant =" + grantResults); diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java index 9c9421864..11caa94fa 100644 --- a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java @@ -7,6 +7,7 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; +import android.support.annotation.NonNull; import android.text.TextUtils; import fr.free.nrw.commons.CommonsApplication; @@ -39,7 +40,7 @@ public class ModificationsContentProvider extends ContentProvider{ } @Override - public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { + public Cursor query(@NonNull Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); queryBuilder.setTables(ModifierSequence.Table.TABLE_NAME); @@ -61,12 +62,12 @@ public class ModificationsContentProvider extends ContentProvider{ } @Override - public String getType(Uri uri) { + public String getType(@NonNull Uri uri) { return null; } @Override - public Uri insert(Uri uri, ContentValues contentValues) { + public Uri insert(@NonNull Uri uri, ContentValues contentValues) { int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); long id = 0; @@ -82,7 +83,7 @@ public class ModificationsContentProvider extends ContentProvider{ } @Override - public int delete(Uri uri, String s, String[] strings) { + public int delete(@NonNull Uri uri, String s, String[] strings) { int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); switch (uriType) { @@ -99,7 +100,7 @@ public class ModificationsContentProvider extends ContentProvider{ } @Override - public int bulkInsert(Uri uri, ContentValues[] values) { + public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) { Timber.d("Hello, bulk insert! (ModificationsContentProvider)"); int uriType = uriMatcher.match(uri); SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); @@ -121,7 +122,7 @@ public class ModificationsContentProvider extends ContentProvider{ } @Override - public int update(Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { + public int update(@NonNull Uri uri, ContentValues contentValues, String selection, String[] selectionArgs) { /* SQL Injection warnings: First, note that we're not exposing this to the outside world (exported="false") Even then, we should make sure to sanitize all user input appropriately. Input that passes through ContentValues diff --git a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java index 6955caef2..1ab00c88f 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/MultipleShareActivity.java @@ -11,6 +11,7 @@ import android.database.DataSetObserver; import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; import android.support.v4.content.ContextCompat; @@ -105,7 +106,7 @@ public class MultipleShareActivity } @Override - public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == 1 && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { multipleUploadBegins(); } diff --git a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java index 19e2d6925..1ce86a86a 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/upload/ShareActivity.java @@ -9,6 +9,7 @@ import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.ParcelFileDescriptor; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.RequiresApi; import android.support.design.widget.Snackbar; @@ -318,7 +319,7 @@ public class ShareActivity @Override public void onRequestPermissionsResult(int requestCode, - String[] permissions, int[] grantResults) { + @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case REQUEST_PERM_ON_CREATE_STORAGE: { if (grantResults.length >= 1 From 1c3332f6b517d41ad947c7567ed7741a81c4bbd6 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 20:29:57 +0300 Subject: [PATCH 36/42] Change url to a new page --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 30ea71515..9b984d339 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -208,6 +208,6 @@ Tap this message (or hit back) to skip this step. We are planning several new features and improvements for the app! Would you like to review them and provide feedback? \n\n(You can always access this by selecting "Developer plans" in the navigation drawer) No thanks Sure, take me there! - https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal + https://meta.wikimedia.org/wiki/Grants:Project/Improve_\'Upload_to_Commons\'_Android_App/Renewal/User_feedback From 8b460b6f3a5e5e9e1939d04b7dafc50a236d7f02 Mon Sep 17 00:00:00 2001 From: Neslihan Date: Wed, 26 Jul 2017 22:20:46 +0300 Subject: [PATCH 37/42] Fix ugly codes --- .../contributions/ContributionsActivity.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java index 783c3b6c3..4509818a4 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsActivity.java @@ -357,11 +357,11 @@ public class ContributionsActivity private void displayFeedbackPopup() { - Date strDate = null; + Date popupMessageEndDate = null; try { String validUntil = "23/08/2017"; SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); - strDate = sdf.parse(validUntil); + popupMessageEndDate = sdf.parse(validUntil); } catch (ParseException e) { e.printStackTrace(); } @@ -376,12 +376,12 @@ public class ContributionsActivity int appStartCounter = prefs.getInt("app_start_counter" ,0); // if time is valid and shared pref says display - if (new Date().before(strDate) && displayFeedbackPopup && (appStartCounter == 4)) { + if (new Date().before(popupMessageEndDate) && displayFeedbackPopup && (appStartCounter == 4)) { - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(getResources().getString(R.string.feedback_popup_title)); - builder.setMessage(getResources().getString(R.string.feedback_popup_description)); - builder.setPositiveButton(getResources().getString(R.string.feedback_popup_accept), + new AlertDialog.Builder(this) + .setTitle(getResources().getString(R.string.feedback_popup_title)) + .setMessage(getResources().getString(R.string.feedback_popup_description)) + .setPositiveButton(getResources().getString(R.string.feedback_popup_accept), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // Go to the page @@ -393,8 +393,8 @@ public class ContributionsActivity prefs.edit().putBoolean("display_feedbak_popup" , false).commit(); dialog.dismiss(); } - }); - builder.setNegativeButton(getResources().getString(R.string.feedback_popup_decline), + }) + .setNegativeButton(getResources().getString(R.string.feedback_popup_decline), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { @@ -402,9 +402,8 @@ public class ContributionsActivity prefs.edit().putBoolean("display_feedbak_popup", false).commit(); dialog.dismiss(); } - }); - AlertDialog alert = builder.create(); - alert.show(); + }) + .create().show(); } } } From 99d74bc3fd069462a3b7ed64f01f7c8288319097 Mon Sep 17 00:00:00 2001 From: "translatewiki.net" Date: Thu, 27 Jul 2017 10:08:13 +0200 Subject: [PATCH 38/42] Localisation updates from https://translatewiki.net. --- app/src/main/res/values-bn/strings.xml | 4 +++- app/src/main/res/values-ca/strings.xml | 6 +++--- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-es/strings.xml | 6 +++--- app/src/main/res/values-eu/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values-iw/strings.xml | 1 + app/src/main/res/values-lv/strings.xml | 2 ++ app/src/main/res/values-mk/strings.xml | 1 + app/src/main/res/values-pms/strings.xml | 1 + app/src/main/res/values-pt-rBR/strings.xml | 8 ++++++-- app/src/main/res/values-ru/strings.xml | 6 ++++-- app/src/main/res/values-sv/strings.xml | 1 + app/src/main/res/values-tcy/strings.xml | 17 ++++++++++++++++- app/src/main/res/values-tr/strings.xml | 2 ++ app/src/main/res/values-zh-rTW/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + 17 files changed, 48 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index 37516ce67..4c59ee7ce 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -148,6 +148,8 @@ বিবরণ মিডিয়ার বিবরণ এখানে যাবে। এই মোটামুটি দীর্ঘ হতে পারে এবং একাধিক লাইনে লিখতে হতে পারে। আমরা আশা করি এটি দেখতে সুন্দর হবে। আপলোডের তারিখ + লাইসেন্স + স্থানাঙ্কসমূহ বিটা টেস্টার হোন উইকিউপাত্ত ব্যবহার করুন (সতর্কতা: এটি নিষ্ক্রিয় করা অধিক পরিমাণে মোবাইল ডেটা খরচ হওয়ার কারণ হতে পারে) @@ -182,6 +184,6 @@ ভূমিকা অবস্থানের অনুমতি ছাড়া কাছাকাছি জায়গাগুলি প্রদর্শন করা যাবে না কোন বিবরণ পাওয়া যায়নি - কমন্স নিবন্ধ + কমন্সে ফাইলের পাতা উইকিউপাত্ত পদ diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 39c90dd15..5bfc72e43 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -8,7 +8,7 @@ Registre S’està iniciant la sessió Espereu… - S\'ha iniciat sessió correctament ! + S\'ha iniciat sessió correctament! Error en iniciar la sessió! No s\'ha trobat el fitxer. Proveu-ho amb un altre fitxer. L\'autenticació ha fallat! @@ -38,9 +38,9 @@ Títol Descripció No s\'ha pogut iniciar la sessió – error de xarxa - No s\'ha pogut iniciar la sessió – siusplau comprova el teu nom d\'usuari + No s\'ha pogut iniciar la sessió – si et plau comprova el teu nom d\'usuari No s’ha pogut iniciar la sessió. Comproveu la vostra contrasenya - Masses intents erronis – Proveu-ho de nou d\'aquí uns minuts. + Massa intents erronis – Proveu-ho de nou d\'aquí uns minuts. Ho sentim, aquest usuari ha estat blocat a Commons Ha fallat l\'inici de sessió Carrega diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b849c81e3..5c429f66a 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -88,6 +88,7 @@ Erneut versuchen Abbrechen Dieses Bild wird lizenziert unter %1$s + Durch das Hochladen dieses Bildes erkläre ich, dass dies mein eigenes Werk ist, das kein urheberrechtlich geschütztes Material oder Selfies enthält und das auch sonst die <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/de\">Wikimedia-Commons-Richtlinien</a> einhält. Herunterladen Lizenz Vorherige(n) Titel/Beschreibung verwenden diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 136b6f218..ca4611489 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -16,9 +16,9 @@ ¡Se subieron %1$s! Pulsa para ver tu subida Empezando la subida de %1$s - Cargando «%1$s» + Cargando %1$s Finalizando la subida de %1$s - Falló la carga de «%1$s» + Falló la carga de %1$s Toca para ver Subiendo %d archivo @@ -27,7 +27,7 @@ Mis subidas recientes En la cola Fallido - %1$d %% completado + %1$d%% completado Subiendo De la galería Tomar una foto diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 543f630c1..1c3ba42da 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -73,6 +73,7 @@ Berriz saiatu Utzi Irudi hau %1$s lizentziapean egongo da + Irudi hau bidaltzen, nire lan propioa dela aitortzen dut, copyrighta duten materiala edo selfiak ez duela, eta beste motatakoak <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Ohikoaren arauak</a> Jaitsi Lizentzia Aurreko izenburu/deskribapena erabili diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 118ce4b97..43bb62f0d 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -88,6 +88,7 @@ Réessayer Annuler Cette image sera sous licence %1$s + En soumettant cette image, je déclare qu\'elle est l\'oeuvre de mon travail, qu\'elle ne contient pas d\'élément protégé par les droits d\'auteurs ni de portraits, et qu\'elle est par ailleur conforme à <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">la politique de Wikimedia Commons</a>. Télécharger Licence Utiliser le titre ou la description précédent diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 749b35ab7..d2fc2330c 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -87,6 +87,7 @@ לנסות שוב ביטול התמונה הזאת היא תחת רשיון %1$s + שליחת התמונה הזאת מהווה את הצהרתי על כך שזאת יצירה שלי, שהיא לא מכילה חומר מוגבל בזכויות יוצרים או תמונות עצמיות (סלפי) ומתאימה בכל אופן ל<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">מדיניות של אתר ויקישיתוף של ויקימדיה</a>. הורדה רישיון להשתמש בכותרת ובתיאור קודמים diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index b3f080ac0..a71473023 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -54,6 +54,7 @@ Atcelt Lejupielādēt Licence + Nakts režīms CC0 Jums šķiet, ka sapratāt? Jā! @@ -66,6 +67,7 @@ Brīdinājums + Augšupielādēt attēlu Lama Tulpe Atcelt diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index a830cc6bc..2323d701d 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -88,6 +88,7 @@ Пробај пак Откажи Сликава ќе се води под лиценцата %1$s + Поднесувајќи ја сликава, изјавувам дека истата е мое сопствено дело, дека не содржи никаков материјал заштитен со авторски права, не содржи самослици, и дека на секој друг начин е во склад со <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines/mk?uselang=mk\">правилата на Ризницата</a>. Преземи Лиценца Користи претходен наслов/опис diff --git a/app/src/main/res/values-pms/strings.xml b/app/src/main/res/values-pms/strings.xml index ad1aaf210..ef2cc33e1 100644 --- a/app/src/main/res/values-pms/strings.xml +++ b/app/src/main/res/values-pms/strings.xml @@ -88,6 +88,7 @@ Prové torna Anulé Costa plancia a sarà sota la licensa %1$s + An mandand costa plancia, i diciaro ch\'a l\'é euvra ëd mè travaj, ch\'a conten nen d\'element sota drit d\'autor o d\'àutoscat, e che comsëssìa a l\'é conforma a <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">le régole ëd Wikimedia Commons</a>. Dëscarié Licensa Dovré ël tìtol o la descrission precedent diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 3b38b8a3f..91d226aff 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -75,7 +75,7 @@ Configurações Criar conta Sobre - Software livre distribuído sob a <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. Wikimedia Commons e seu logotipo são marcas registradas da Wikimedia Foundation e são usadas com a permissão da Wikimedia Foundation. Não somos endossados nem afiliados à Wikimedia Foundation. + Software livre distribuído sob a <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s e seu logotipo são marcas registradas da Wikimedia Foundation e são usadas com a permissão da Wikimedia Foundation. Não somos endossados nem afiliados à Wikimedia Foundation. <a href=\"https://github.com/commons-app/apps-android-commons\">Fonte</a> e <a href=\"https://commons-app.github.io/\">site</a> em GitHub. Crie um novo <a href=\"https://github.com/commons-app/apps-android-commons/issues\">GitHub issue</a> para relatórios de bugs e sugestões. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy\">Política de privacidade</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Créditos</a> @@ -88,6 +88,7 @@ Repetir Cancelar Essa imagem será licenciada sob %1$s + Ao enviar esta imagem, declaro que este é o meu próprio trabalho, que não contém material protegido ou selfies, e, de outra forma, adere a <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Políticas do Wikimedia Commons</a>. Download Licença Usar o título/descrição anterior @@ -149,6 +150,9 @@ Descrição Descrição da mídia aqui. Isso pode ser potencialmente longo e precisará envolver múltiplas linhas. Esperamos que seja agradável. Data de envio. + Licença + Coordenadas + Nenhum fornecido Seja um Testador Beta Entre no nosso canal beta no Google Play e receba acesso prévio a novos recursos e correções de erros Usa Wikidata @@ -187,7 +191,7 @@ Tutorial Os locais próximos não podem ser exibidos sem permissões de localização Nenhuma descrição encontrada - Artigo de Commons + Página de arquivo do Commons Item do Wikidata Erro durante o cache de imagens diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e47aea906..a4fd3f49f 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -79,7 +79,7 @@ Настройки Зарегистрироваться О приложении - Приложение с открытым исходным кодом, выпущено по лицензии <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. Викисклад и его логотип являются товарными знаками Фонда Викимедиа и используются с разрешения Фонда Викимедиа. Мы не поддерживаемся и не связаны с Фондом Викимедиа. + Приложение с открытым исходным кодом, выпущено по лицензии <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/COPYING\">Apache License v2</a>. %1$s и его логотип являются товарными знаками Фонда Викимедиа и используются с разрешения Фонда Викимедиа. Мы не поддерживаемся и не связаны с Фондом Викимедиа. <a href=\"https://github.com/commons-app/apps-android-commons\">Исходный код</a> и <a href=\"https://commons-app.github.io/\">сайт</a> на GitHub. Создайте новый <a href=\"https://github.com/commons-app/apps-android-commons/issues\">запрос на GitHub</a>, чтоб сообщить об ошибке или внести предложение. <a href=\"https://wikimediafoundation.org/wiki/Privacy_policy/ru\">Политика конфиденциальности</a> <a href=\"https://github.com/commons-app/apps-android-commons/blob/master/CREDITS\">Благодарности</a> @@ -153,6 +153,8 @@ Описание Здесь располагается описание носителя информации. Оно потенциально может быть весьма длинным и даже располагаться в несколько строк. Однако мы надеемся, что это выглядит симпатично Дата загрузки + Лицензия + Координаты Стать бета-тестером Подпишитесь на наш канал бета-версии на Google Play и получите ранний доступ к новым функциям и исправлениям ошибок Использовать Викиданные @@ -191,7 +193,7 @@ Руководство Ближайшие места не могут быть отображены без разрешения на геолокацию описание не найдено - Статья на Викискладе + Страница файла на Викискладе Элемент Викиданных Ошибка при кэшировании картинок diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 2bfa69c7f..20716949d 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -88,6 +88,7 @@ Försök igen Avbryt Denna bild kommer att licensieras under %1$s + Genom att skicka in denna bild intygar jag att detta är mitt eget verk, som inte innehåller upphovsrättsskyddat material eller selfies samt annars följer <a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">Wikimedia Commons-policys</a>. Ladda ned Licens Använd föregående titel/beskrivning diff --git a/app/src/main/res/values-tcy/strings.xml b/app/src/main/res/values-tcy/strings.xml index 376ff1034..4ece0c348 100644 --- a/app/src/main/res/values-tcy/strings.xml +++ b/app/src/main/res/values-tcy/strings.xml @@ -1,5 +1,6 @@ + ಕಾಮನ್ಸ್ ಸಂಯೋಜನೆಲು ಸದಸ್ಯೆರ್ನ ಪುದರ್ ಪ್ರವೇಸೊ ಪದೊ @@ -23,7 +24,7 @@ %d ಕಡತ ಅಪ್ಲೊಡ್ ಆವೊಂದುಂಡು %d ಕಡತೊಲು ಅಪ್ಲೋಡ್ ಆವೊಂದುಂಡು - ಎನ್ನ ದಿಂಜಯೀನಾ ವಿಚಾರೊಳು + ಎನ್ನ ದಿಂಜಯೀನಾ ವಿಚಾರೊಳು ದಿಂಜೊಂತುಂಡು ದಿಂಜಿಜಿ %1$d%% ಮುಗಿಂಡ್ @@ -48,6 +49,7 @@ ಎಂಕ್ಲೆನ ಬಗ್ಗೆ ನನೊರ ಪ್ರಯತ್ನ ಮಾನ್ಪುಲೇ ವಜಾ ಮಲ್ಪುಲೆ + ಡೌನ್‍ಲೋಡ್ ಪರವಾನಗಿ ಕತ್ತಲೆದ ಕ್ರಮೊ CC0 @@ -63,6 +65,7 @@ CC BY 3.0 CC BY-SA 4.0 CC BY 4.0 + CC Zero ಅಂದ್! ವರ್ಗೊಲು ದಿಂಜಾವೊಂದುಂಡು…… @@ -73,4 +76,16 @@ ಅಂದ್ ಅತ್ತ್ ತರೆಬರವು + ವಿವರಣೆ + ಪರವಾನಿಗೆ + ವಜಾ ಮಲ್ಪುಲೆ + ತೋಜಾಲೇ + ಮುಚ್ಚಿಲೆ + ಮುಖ್ಯಪುಟೊ + ದಿಂಜಾಲೆ + ಕೈತಲ್‍ದ + ಎಂಕ್ಲೆನ ಬಗ್ಗೆ + ಸಂಯೋಜನೆಲು + ಅಬಿಪ್ರಾಯೊ + ನಿರ್ಗಮಿಸಾಲೆ diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5c92238f7..d7229008e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -107,4 +107,6 @@ Açıklama yok Bilinmeyen lisans Yenile + Lisans + Koordinatlar diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 0961ebe06..55c983886 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -88,6 +88,7 @@ 重試 取消 此圖片會按 %1$s 協議授權上載 + 透過提交此圖片,我宣佈這是我個人創作的成品,且不包含受版權保護或自拍內容,並除此之外遵守<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">維基媒體共享資源方針</a>。 下載 協議授權 使用先前標題/描述 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index d2c740f89..0d03da14f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -88,6 +88,7 @@ 重试 取消 该图像会采用%1$s授权 + 通过提交该图片,我声明这是我自己的作品,其不包含受版权保护的材料或自拍像,并遵循<a href=\"https://commons.wikimedia.org/wiki/Commons:Policies_and_guidelines\">维基共享资源</a>方针。 下载 许可协议 使用之前的标题/描述 From 6f19446011d3a81cc212556aa7174e830099a481 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Fri, 28 Jul 2017 20:30:14 +1000 Subject: [PATCH 39/42] Add akaita and janpio to CREDITS.md --- CREDITS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CREDITS b/CREDITS index a0e1fcec4..7f2ab0893 100644 --- a/CREDITS +++ b/CREDITS @@ -24,6 +24,8 @@ their contribution to the product. * Dmitry Brant * Adam Shorland * John Lubbock +* Mikel Pascual +* Jan Piotrowski 3rd party open source libraries used: * Butterknife From 69cca7eb31c3765a980a228527076e36baff4522 Mon Sep 17 00:00:00 2001 From: Josephine Lim Date: Fri, 28 Jul 2017 21:44:22 +1000 Subject: [PATCH 40/42] Update changelog.md --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b41ff0e2..1de06a4e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Wikimedia Commons for Android +## v2.5.0 beta +- Added one-time popup for beta users to provide feedback on IEG renewal proposal +- Added link to Commons policies in ShareActivity +- Various string fixes +- Switched to using vector icons for map markers +- Added filter for irrelevant categories +- Fixed various crashes +- Incremented target SDK to 25 +- Improved appearance of navigation drawer +- Replaced proprietary app image in tutorial with one that isn't Telegram +- Fixed camera issue with FileProvider +- Added RxJava library, migrated to Java 8 +- Various code and continuous integration optimizations + ## v2.4.2 beta - Added option to launch tutorial again from nav drawer - Added marker for current location in Nearby map From ac5b876b1aba9fb35dc463ea59233b4fbd0234ba Mon Sep 17 00:00:00 2001 From: misaochan Date: Fri, 28 Jul 2017 21:36:49 +1000 Subject: [PATCH 41/42] Versioning --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index f400c035a..3177b672c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -52,8 +52,8 @@ android { defaultConfig { applicationId 'fr.free.nrw.commons' - versionCode 73 - versionName '2.4.2' + versionCode 74 + versionName '2.5.0' minSdkVersion project.minSdkVersion targetSdkVersion project.targetSdkVersion testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" From 437ebe3813288fdc9096d6456ac06d172eb7bdce Mon Sep 17 00:00:00 2001 From: Amire80 Date: Sat, 29 Jul 2017 17:26:46 +0300 Subject: [PATCH 42/42] Remove the preference_tracking and preference_tracking_summary messages These strings don't seem to be used anywhere. --- app/src/main/res/values/strings.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 811d59e65..34c24f534 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -74,8 +74,6 @@ Start typing to add categories. Tap this message (or hit back) to skip this step. Categories - Usage reports - Send usage reports to Wikimedia to help us improve the app Settings Sign Up About