From 0dfe114437ffd072fe85e274851eb5d3e386b59c Mon Sep 17 00:00:00 2001 From: str4d Date: Wed, 16 Apr 2014 13:09:11 +0000 Subject: [PATCH] Mark emails read/unread, move to folder --- .../ic_collections_collection.png | Bin 0 -> 1449 bytes res/drawable-hdpi/ic_content_read.png | Bin 0 -> 1636 bytes res/drawable-hdpi/ic_content_unread.png | Bin 0 -> 1599 bytes .../ic_collections_collection.png | Bin 0 -> 1312 bytes res/drawable-mdpi/ic_content_read.png | Bin 0 -> 1415 bytes res/drawable-mdpi/ic_content_unread.png | Bin 0 -> 1383 bytes .../ic_collections_collection.png | Bin 0 -> 1617 bytes res/drawable-xhdpi/ic_content_read.png | Bin 0 -> 1923 bytes res/drawable-xhdpi/ic_content_unread.png | Bin 0 -> 1809 bytes res/menu/email_list_context.xml | 19 +++- res/values/strings.xml | 5 +- src/i2p/bote/EmailListActivity.java | 12 ++- src/i2p/bote/EmailListFragment.java | 72 +++++++++++++-- src/i2p/bote/FolderListAdapter.java | 5 ++ src/i2p/bote/ViewEmailActivity.java | 5 ++ src/i2p/bote/util/BoteHelper.java | 1 - src/i2p/bote/util/MoveToDialogFragment.java | 84 ++++++++++++++++++ 17 files changed, 190 insertions(+), 13 deletions(-) create mode 100644 res/drawable-hdpi/ic_collections_collection.png create mode 100644 res/drawable-hdpi/ic_content_read.png create mode 100644 res/drawable-hdpi/ic_content_unread.png create mode 100644 res/drawable-mdpi/ic_collections_collection.png create mode 100644 res/drawable-mdpi/ic_content_read.png create mode 100644 res/drawable-mdpi/ic_content_unread.png create mode 100644 res/drawable-xhdpi/ic_collections_collection.png create mode 100644 res/drawable-xhdpi/ic_content_read.png create mode 100644 res/drawable-xhdpi/ic_content_unread.png create mode 100644 src/i2p/bote/util/MoveToDialogFragment.java diff --git a/res/drawable-hdpi/ic_collections_collection.png b/res/drawable-hdpi/ic_collections_collection.png new file mode 100644 index 0000000000000000000000000000000000000000..6f441b41da840fd8bff666f47f3beb5925976e0c GIT binary patch literal 1449 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi))Y-tz$kfu*$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1O?oUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnv1@ zG!Lpb1-Dx)aO%|uIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1z{wZbfoq>T#+SA1` zq~g|_8P?v+jv}p_Dp@~=$xgtPq#)P z%r4Ndv#``w+)uE{NA0AVHFxpDW>=w2_s{J7eBq;wzRp!wes$hs@66N9ng*QPnuI#0+5R`O+qGj##Dba! zOkYC;c^Y4C;HsF@TRDMe7yGNV`WLvv4ou{44%&B0Haz<2BPru28GmMcIV|&Wwbj8a zWu{M$?wh{hcAbCuVPVKXBEp6XG=T%rpOPOhc2>jX*QkOaQNc6CcX>&ayM5vPIvh&nzP~? zH)eMwkEtC#j{N=#~#y;ro0 zNp+qJcN@ov+=At|LbpwBe!6MBhq@Ia~A@BM6^rfve8KA<`)78&q Iol`;+00R>g-v9sr literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_content_read.png b/res/drawable-hdpi/ic_content_read.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef52959943404b2ca537170005784dded4e4651 GIT binary patch literal 1636 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy*u>4q+`z@u$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1P3sUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn$kL zn3!4`IN~%9sy79$ z1JgB67srr_TW@BZ_ZCT%I9^`5d5N#^}mfUnesXN^lRALTFYn8ti5+La*nv&hBt5C z)a-w6^Zv8l`PpSM>Y*nWYlS{kHk=@F<1L#J+yCDT5)YnRZpeG2n8}=J!mZcnc;V#x zX$OiwNaY;4+7MpBexg}7?)K^Jdv$VM4mlV;Y<0flp~=?7VV3^n$HDhoV;|&YH!v^kS6( z+pmM#>pJBHx#XFqTmIgEXvswz?ZZ|Er|h|tmT-Uh^jUqwi^ublA81+d^A+>oS}^T` zZJ~s+`GFnktm}${s}}wI8(1*+khIOAyG2e*R$iB!`Oxio-{gcQ{p*y0a3ORZ22jX84v zfayNgiE_@HJWg-C`JYFwv9h4;`aQ#M`AwVu(eCF$vl&XwQjT6WWS=P@(iD>7=*qRS&V6L!s6_oGh1P~hs1 z_~3Z$jnP~(d7>1e@?tQ!~CVBJzRZzL_>FVdQ I&MBb@0NT4~jsO4v literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_content_unread.png b/res/drawable-hdpi/ic_content_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..d516f7708c3e9b6d1c6b47e179c9e34e9afa7465 GIT binary patch literal 1599 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy)Xl=p)xgEn$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1P3sUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dZnrq$ zG!Lpb1-DzAaq86vIz}H9wMbD769T3m5EGtofgE_!Pt60S_ab1zjz4qRi-Cb@qo<2w zNX4x;GtPR41WFt`FPm<%c~R^-tuB_0F)U77IGYq+%ofx1iaxr3frq)`tN4Ug?t_;~ zE*|4((hyK-Qn|EK<@=Zae}~}t4G)*3ukQKe^5Wpnq`%ROqF8m>AkBT*je!I zI!)oknLSa1TQTNd<+Q+~X<51jJ;d$pgx9$-y4(!nhu3e}rH;|br&8-~#xCo<6m;ULt>i|&59J4sH!TZWEV<0r*nPJ8 zp1LU-akHOggr;UKo)YqGmdiu28BG2M)pegQtx&K0&o@7`(D=bbzh#qrQvU8Km$7-U z&)EAf=aMSqhw2d9|^ zERpgkywY*{V3<~V8o$W~j$_GXTXsm42Iqs*3N*=dUH!*pz_35~!fd~~O}jxwx~Hq3 J%Q~loCIAR6TKfP1 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_collections_collection.png b/res/drawable-mdpi/ic_collections_collection.png new file mode 100644 index 0000000000000000000000000000000000000000..cc81e57f7ecc485edb05d35c1efda39a45bc3e85 GIT binary patch literal 1312 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsVi)%+$!x$j!ji$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OozuV4URX z;uunK>&^7tUd)anZRN!mAFx_S3%=1=v&SUNu5s!Oj;I?y8TK{XHO-BP;NB({7wE$3 zx|T&*siRBaii`0-`#A^FPWT9IcGoR?pzJF4?DqdNmXlkK&3K?6K7&JrNy&ht&Ee$7 z7_m1^vv;r>eX`^db2#`hhCPDWyO4W{QvQvXioDAXG)!Z7{o!fj(wA(Xqf|3eHrfa$ z2;DK=$uGQz$^R=$&y>Y?C*LsAFxR}mnszYFmNBn}H|!w$?ju)i?LDgYPZZkH$Xmen z%tfj1XiB^C@23Z>qOFtnh6>6wXBs@tJRQbw*BbVQr6SJ^xCc3+DXuwCe8_>Voac)5e+g=n8|A-8U8F8KBM zc;A0>)*a`$Eeh_kEAM{!F bu}Uy#vJ`o5dtB`eDziLY{an^LB{Ts5!e_@2 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_content_read.png b/res/drawable-mdpi/ic_content_read.png new file mode 100644 index 0000000000000000000000000000000000000000..0f59a037c3b2c02ffffc3d52e766b2456457f510 GIT binary patch literal 1415 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy*u>4q+|ba}$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OnfUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dPPZ7i z;WQ7bHwCv_3~=hz2RcR{6tzfE4HE*U9}p9saDg0n(of9;ruQOX!j|XUx`}~-@u#PY zV@SoVH`AiET>?dpKkpGVPMqR>s=G(%X|P1Alb-3ir-7f2bo)Q#t_W}zQJr{O`zOPv zl(-KMCY@*&Hr6Zt6aII(-*U_9XJ@8vdVPJ)vp1Ws*RS7u?UuJO&*9KB56eU=|8Rdu z`Iu`vr1nt3hHO%ijfNt%=r(-xJt#8gG}d&fvX%;X}EYqn^{e19}mgxi)gWVEnv*^N6RO zTjvd?>j|7Px0WuH4`~$Nz%%b>p_#MUL*~sf_t&ptUbKm)Bl_FH*ghMD*|Q$sn&s6n z=RBu+?UM};JU`59ycA*>@MX6GhnS-R|2C!=>lIc_RtBdIZDv38z-!}*{{8t~mS^`E z|H^pprs{Cci+!rj?!6BVxSe2`k#?YM=Hq7C(gY7TGF$?C4J`>cyd@Wy?!86 za$&9%>xs{nI}9Y>F^PWZ%bR}gok@{}q6&*yrAtxB(>0R}mrbAYy6~LjlUr4*lAe_X z_>@%TNVr5?UFF%*V&U$;y~`@sBjxzp1;S@$Bqg*uUOQx2`L<(G0^^p(lcBID(nN99JcYciGvAomr1l*z);Vz2;^*D% h5BE1T^~*D|G3*MQ7~a9WBLY-3db;|#taD0e0stm13dH~b literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_content_unread.png b/res/drawable-mdpi/ic_content_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..eff1ba33d083e972a00a63af89a1253f536b7013 GIT binary patch literal 1383 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%qp275hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8hm3bwJ6}oxF$}kgLQj3#|G7CyF^YauyCMG83 zmzLNn0bL65LT&-v*t}wBFaZNhzap_f-%!s00+w{G(#^lGsViy%-qP*+`!q?$-vFf(ACh=#L&{!#L3yw z&D7A`#K{n**Cju>G&eP`1g19yq1OecUQlAlEdbi=l3J8mmYU*Ll%J~r_Ow+dHn*6% zS-80xxZyMpsy79jTflk^4RGq!2RcR{6tzfE4HE*U9}p9saDg0n(of9;ruQOX!rsX( zugt)}c+=CxF{I+wn`!nQhaDu2&NjRHi`~&tCdXCAMW(c%pit1ARWNfdx0MA)Q?$Bx zsi+8xAj{E%2Ym|)3k%*XXm0LSIO^!?8ob!{{z2^{o5L@eZS>}=`!Xr!{odd2PL~_D z2rR7HROWk;wl~ zijM-bGKv+r&)t|FXka5?Y7yR1oL+BxWy&MR32ezcGw)ajwr)71$~~u9w%~92gro$K zFU`pxf{t|@e4WI?Eh3cKa{GYE4n}b+X3Y&uat9eLSn|6js(m==WB2sG+5wRa2KlZ6 zZI7aNd>fAK^j2HQ8|SDV!M6E9hugG_6v3Dvm7}8Xo1zVv%npjSUY?_TaOeD=t82OE zxassxWWB)q&5{4G9pAG9a);lGY}>J-W42SssgAb>O5uA>?VbL}Uq+mrc>#aQk2M-^ zJT>+5dSia_?06n`yyMODj1AM1bM4PD&79z@qaoS#?8bCOxw6f#qIg7hJSzQg;Ems= z{Rh)qqxh7~b@_K45Zm#1FUw@Z_{^^+t990z)j#f&5xhDjZ*!ZJ{vEX_RklNW(yK}Y zR;sUE`D||1fk(UNe*f5fq^MYmO@3)({2Z>qGzm literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_collections_collection.png b/res/drawable-xhdpi/ic_collections_collection.png new file mode 100644 index 0000000000000000000000000000000000000000..78500a93c12e3ee5b69b68e4a9a9fa74a5e0daac GIT binary patch literal 1617 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 bS_da!>C<=yCo&Nv|B8S(LMl2GmSXt_EZgG| literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_content_unread.png b/res/drawable-xhdpi/ic_content_unread.png new file mode 100644 index 0000000000000000000000000000000000000000..606c902c2142445efbca833b8b0b30f980ba8e17 GIT binary patch literal 1809 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{l@EB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%uvD1M9IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5 zFD$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;NpiyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|esh**NZ(?$0 z9!LbN!`Ii!Gq1QLF)umQ)5TT^Xog;9W{Q=YshfqHtAVAdlYyI|p{t>#iJ_&diIcOV zo2j9>iIX8ruSMv>2~2MaLa!rEy`aR9TL84#CABECEH%ZgC_h&L>}jh^+-@<) zX&zK>3U0Sp;MA)Rbc{YIYLTKECIn1BASOKF0y*%cpPC0u??u3bz1sg^5iq|rd%8G= zRNQ(q%QNFjfW-01naj4l+aa^6gO&ePN6;My!E(nhkB+k5S=YpF+wq`j5l2(ShlKvB z0!DGIjtHBM2d+n-F3Rxl5`XD>CoBC}-{c?lANXw^ol%+Wr^fl&_Q%D{$!GR_|GjU| z_q`=P#|wMH@|JN3Fe*8)bT9}iFu629ISv1BR~2xjG|t_$G1Y-{4y*sFxhX&QcuGrf z-wM`BXh}9W#8qHXVBN~Z^X=xx%~vk@varlx*4c03l~H`-`?iZ5KR7=n)STL+df4u{ zW!r_*3yfwk-#(aT&}aPmehc57M_r~oa*ewmIIsP8Etumhdv&C=4^u14S{|)Ob9=T$ zeO}+(xI*h-Yl6Fz(IM%N)(>KpwGZZ9V7*tc!1H8>f?#;kvoooYq{MplQMU>oC_1j&seNe=aFYDW&CA4EqnR zd)dZYtm+wOoO?Y-K=6Fgf!znW*pfM9nETz8AIPk=ep4f8!)*TQM2C>|3YI&M8SE<8 z&1Nq96y>~IE#t`dhN)5VzIESDx^ZsUno(j9m6b z)`NUzHyin*pBua+12Wydo#qJM-Ky7o)#vr5^xJ=#WFAz{oOk=Q{-dkg4)dOGFpzx6 zm!jRzU&*%I< zW+fjn-?&YGf=hmTuCA4q@;ZY}c~ZYUOU_50(YfW8c{orcD)8NhJ3SfCm!uW^{hodQ z=jQIoDR!s0HcLjwl2rRyH`d323&A=;JZE=2e?2-B|`*v>XdA3C<{gdzmp&k5k z8NzX$&7t4_BRgw_7$5qis)?N7p{YOP;5YvUMuz)h*}0{6AN>K=Q4F50elF{r G5}E+IvAu%; literal 0 HcmV?d00001 diff --git a/res/menu/email_list_context.xml b/res/menu/email_list_context.xml index 57bcfd0..2d1c013 100644 --- a/res/menu/email_list_context.xml +++ b/res/menu/email_list_context.xml @@ -3,9 +3,24 @@ xmlns:i2pandroid="http://schemas.android.com/apk/res-auto" > + + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml index 826ed6d..71a71e2 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7,7 +7,10 @@ Settings %s selected - Delete selected emails + Delete + Mark read + Mark unread + Move to Open nav Close nav diff --git a/src/i2p/bote/EmailListActivity.java b/src/i2p/bote/EmailListActivity.java index bdc3982..eed84e8 100644 --- a/src/i2p/bote/EmailListActivity.java +++ b/src/i2p/bote/EmailListActivity.java @@ -3,6 +3,7 @@ package i2p.bote; import net.i2p.client.I2PClient; import i2p.bote.config.SettingsActivity; import i2p.bote.folder.EmailFolder; +import i2p.bote.util.MoveToDialogFragment; import android.os.Bundle; import android.preference.PreferenceManager; import android.content.Context; @@ -20,7 +21,8 @@ import android.widget.AdapterView; import android.widget.ListView; public class EmailListActivity extends ActionBarActivity implements - EmailListFragment.OnEmailSelectedListener { + EmailListFragment.OnEmailSelectedListener, + MoveToDialogFragment.MoveToDialogListener { private CharSequence mDrawerTitle; private CharSequence mTitle; private SharedPreferences mSharedPrefs; @@ -224,4 +226,12 @@ public class EmailListActivity extends ActionBarActivity implements detailIntent.putExtra(ViewEmailActivity.MESSAGE_ID, messageId); startActivity(detailIntent); } + + // MoveToDialogFragment.MoveToDialogListener + + @Override + public void onFolderSelected(EmailFolder newFolder) { + EmailListFragment f = (EmailListFragment) getSupportFragmentManager().findFragmentById(R.id.list_fragment); + f.onFolderSelected(newFolder); + } } diff --git a/src/i2p/bote/EmailListFragment.java b/src/i2p/bote/EmailListFragment.java index 2ef65f3..11a7b30 100644 --- a/src/i2p/bote/EmailListFragment.java +++ b/src/i2p/bote/EmailListFragment.java @@ -13,6 +13,7 @@ import i2p.bote.folder.EmailFolder; import i2p.bote.folder.FolderListener; import i2p.bote.util.BetterAsyncTaskLoader; import i2p.bote.util.BoteHelper; +import i2p.bote.util.MoveToDialogFragment; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; @@ -21,6 +22,7 @@ import android.content.DialogInterface; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; +import android.support.v4.app.DialogFragment; import android.support.v4.app.ListFragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; @@ -39,7 +41,8 @@ import android.widget.ListView; import android.widget.TextView; public class EmailListFragment extends ListFragment implements - LoaderManager.LoaderCallbacks> { + LoaderManager.LoaderCallbacks>, + MoveToDialogFragment.MoveToDialogListener { public static final String FOLDER_NAME = "folder_name"; private static final int EMAIL_LIST_LOADER = 1; @@ -244,7 +247,8 @@ public class EmailListFragment extends ListFragment implements boolean hasCheckedElement = mAdapter.getSelectedCount() > 0; if (hasCheckedElement && mMode == null) { - mMode = ((ActionBarActivity) getActivity()).startSupportActionMode(new ModeCallback()); + boolean unread = mAdapter.getItem(position).isNew(); + mMode = ((ActionBarActivity) getActivity()).startSupportActionMode(new ModeCallback(unread)); } else if (!hasCheckedElement && mMode != null) { mMode.finish(); } @@ -255,21 +259,53 @@ public class EmailListFragment extends ListFragment implements } private final class ModeCallback implements ActionMode.Callback { + private boolean areUnread; + + public ModeCallback(boolean unread) { + super(); + this.areUnread = unread; + } + @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // Respond to clicks on the actions in the CAB switch (item.getItemId()) { - case R.id.action_delete_emails: - SparseBooleanArray selected = mAdapter.getSelectedIds(); - for (int i = (selected.size() - 1); i >= 0; i--) { - if (selected.valueAt(i)) { - Email email = mAdapter.getItem(selected.keyAt(i)); + case R.id.action_delete: + SparseBooleanArray toDelete = mAdapter.getSelectedIds(); + for (int i = (toDelete.size() - 1); i >= 0; i--) { + if (toDelete.valueAt(i)) { + Email email = mAdapter.getItem(toDelete.keyAt(i)); // The Loader will update mAdapter I2PBote.getInstance().deleteEmail(mFolder, email.getMessageID()); } } mode.finish(); return true; + case R.id.action_mark_read: + case R.id.action_mark_unread: + SparseBooleanArray selected = mAdapter.getSelectedIds(); + for (int i = (selected.size() - 1); i >= 0; i--) { + if (selected.valueAt(i)) { + Email email = mAdapter.getItem(selected.keyAt(i)); + try { + // The Loader will update mAdapter + mFolder.setNew(email, !areUnread); + } catch (PasswordException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (GeneralSecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + } + areUnread = !areUnread; + mMode.invalidate(); + return true; + case R.id.action_move_to: + DialogFragment f = MoveToDialogFragment.newInstance(mFolder); + f.show(getFragmentManager(), "moveTo"); + return true; default: return false; } @@ -297,10 +333,25 @@ public class EmailListFragment extends ListFragment implements public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // Here you can perform updates to the CAB due to // an invalidate() request - return false; + menu.findItem(R.id.action_mark_read).setVisible(areUnread); + menu.findItem(R.id.action_mark_unread).setVisible(!areUnread); + return true; } } + // Called by EmailListActivity.onFolderSelected() + + public void onFolderSelected(EmailFolder newFolder) { + SparseBooleanArray toMove = mAdapter.getSelectedIds(); + for (int i = (toMove.size() - 1); i >= 0; i--) { + if (toMove.valueAt(i)) { + Email email = mAdapter.getItem(toMove.keyAt(i)); + mFolder.move(email, newFolder); + } + } + mMode.finish(); + } + // LoaderManager.LoaderCallbacks> public Loader> onCreateLoader(int id, Bundle args) { @@ -345,6 +396,11 @@ public class EmailListFragment extends ListFragment implements onContentChanged(); } + @Override + public void elementUpdated() { + onContentChanged(); + } + @Override public void elementRemoved() { onContentChanged(); diff --git a/src/i2p/bote/FolderListAdapter.java b/src/i2p/bote/FolderListAdapter.java index 1f98e1b..b381d2a 100644 --- a/src/i2p/bote/FolderListAdapter.java +++ b/src/i2p/bote/FolderListAdapter.java @@ -57,6 +57,11 @@ public class FolderListAdapter extends ArrayAdapter implements Fold notifyDataSetChanged(); } + @Override + public void elementUpdated() { + notifyDataSetChanged(); + } + @Override public void elementRemoved() { notifyDataSetChanged(); diff --git a/src/i2p/bote/ViewEmailActivity.java b/src/i2p/bote/ViewEmailActivity.java index 1febbaa..328736f 100644 --- a/src/i2p/bote/ViewEmailActivity.java +++ b/src/i2p/bote/ViewEmailActivity.java @@ -154,6 +154,11 @@ public class ViewEmailActivity extends ActionBarActivity implements onContentChanged(); } + @Override + public void elementUpdated() { + onContentChanged(); + } + @Override public void elementRemoved() { onContentChanged(); diff --git a/src/i2p/bote/util/BoteHelper.java b/src/i2p/bote/util/BoteHelper.java index 42a04c1..c15ed2b 100644 --- a/src/i2p/bote/util/BoteHelper.java +++ b/src/i2p/bote/util/BoteHelper.java @@ -10,7 +10,6 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.util.Base64; -import i2p.bote.I2PBote; import i2p.bote.R; import i2p.bote.email.EmailDestination; import i2p.bote.email.EmailIdentity; diff --git a/src/i2p/bote/util/MoveToDialogFragment.java b/src/i2p/bote/util/MoveToDialogFragment.java new file mode 100644 index 0000000..ce32269 --- /dev/null +++ b/src/i2p/bote/util/MoveToDialogFragment.java @@ -0,0 +1,84 @@ +package i2p.bote.util; + +import i2p.bote.I2PBote; +import i2p.bote.R; +import i2p.bote.folder.EmailFolder; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.v4.app.DialogFragment; + +public class MoveToDialogFragment extends DialogFragment { + public static final String CURRENT_FOLDER = "current_folder"; + + public static MoveToDialogFragment newInstance(EmailFolder currentFolder) { + MoveToDialogFragment f = new MoveToDialogFragment(); + Bundle args = new Bundle(); + args.putString(CURRENT_FOLDER, currentFolder.getName()); + f.setArguments(args); + return f; + } + + public interface MoveToDialogListener { + public void onFolderSelected(EmailFolder newFolder); + } + + MoveToDialogListener mListener; + List mFolders; + List mFolderDisplayNames; + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + try { + mListener = (MoveToDialogListener) activity; + } catch (ClassCastException e) { + throw new ClassCastException(activity.toString() + + " must implement MoveToDialogListener"); + } + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + mFolders = I2PBote.getInstance().getEmailFolders(); + mFolderDisplayNames = new ArrayList(); + + String curFolder = getArguments().getString(CURRENT_FOLDER); + Iterator i = mFolders.iterator(); + while (i.hasNext()) { + EmailFolder folder = i.next(); + if (folder.getName().equals(curFolder)) + i.remove(); + else + mFolderDisplayNames.add( + BoteHelper.getFolderDisplayName(getActivity(), folder)); + } + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle(R.string.action_move_to) + .setItems(mFolderDisplayNames.toArray(new String[mFolderDisplayNames.size()]), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mListener.onFolderSelected(mFolders.get(which)); + } + }) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + return builder.create(); + } +}