From 13cbb7507e4843f91e4fa80528e448db06009241 Mon Sep 17 00:00:00 2001 From: seven332 Date: Thu, 5 Jun 2014 19:18:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E5=AE=8C=E6=88=90=E6=94=B6?= =?UTF-8?q?=E8=97=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/drawable-hdpi/ic_action_delete.png | Bin 0 -> 898 bytes res/drawable-hdpi/ic_action_delete_dark.png | Bin 0 -> 1090 bytes res/drawable-hdpi/ic_action_list.png | Bin 0 -> 818 bytes res/drawable-hdpi/ic_action_list_dark.png | Bin 0 -> 941 bytes res/drawable-hdpi/ic_action_move.png | Bin 0 -> 1005 bytes res/drawable-hdpi/ic_action_move_dark.png | Bin 0 -> 1138 bytes res/drawable-mdpi/ic_action_delete.png | Bin 0 -> 576 bytes res/drawable-mdpi/ic_action_delete_dark.png | Bin 0 -> 689 bytes res/drawable-mdpi/ic_action_list.png | Bin 0 -> 493 bytes res/drawable-mdpi/ic_action_list_dark.png | Bin 0 -> 562 bytes res/drawable-mdpi/ic_action_move.png | Bin 0 -> 602 bytes res/drawable-mdpi/ic_action_move_dark.png | Bin 0 -> 723 bytes res/drawable-xhdpi/ic_action_delete.png | Bin 0 -> 1146 bytes res/drawable-xhdpi/ic_action_delete_dark.png | Bin 0 -> 1394 bytes res/drawable-xhdpi/ic_action_list.png | Bin 0 -> 1114 bytes res/drawable-xhdpi/ic_action_list_dark.png | Bin 0 -> 1302 bytes res/drawable-xhdpi/ic_action_move.png | Bin 0 -> 1354 bytes res/drawable-xhdpi/ic_action_move_dark.png | Bin 0 -> 1559 bytes res/drawable-xxhdpi/card_bg_activated.9.png | Bin 0 -> 17525 bytes res/drawable-xxhdpi/ic_action_delete.png | Bin 0 -> 1843 bytes res/drawable-xxhdpi/ic_action_delete_dark.png | Bin 0 -> 2161 bytes res/drawable-xxhdpi/ic_action_list.png | Bin 0 -> 1754 bytes res/drawable-xxhdpi/ic_action_list_dark.png | Bin 0 -> 1994 bytes res/drawable-xxhdpi/ic_action_move.png | Bin 0 -> 2161 bytes res/drawable-xxhdpi/ic_action_move_dark.png | Bin 0 -> 2484 bytes res/drawable/list_item_bg.xml | 3 + res/layout/favorite_menu.xml | 24 ++ res/layout/favourite.xml | 17 +- res/{xml/settings.xml => menu/favorite.xml} | 16 +- res/menu/favorite_choice.xml | 27 ++ res/values-zh-rCN/strings.xml | 4 + res/values/colors.xml | 11 + res/values/strings.xml | 4 + src/com/hippo/ehviewer/ehclient/EhClient.java | 36 +- .../hippo/ehviewer/ehclient/ListParser.java | 5 +- .../hippo/ehviewer/network/HttpHelper.java | 1 + .../hippo/ehviewer/ui/FavouriteActivity.java | 340 ++++++++++++++---- 37 files changed, 397 insertions(+), 91 deletions(-) create mode 100644 res/drawable-hdpi/ic_action_delete.png create mode 100644 res/drawable-hdpi/ic_action_delete_dark.png create mode 100644 res/drawable-hdpi/ic_action_list.png create mode 100644 res/drawable-hdpi/ic_action_list_dark.png create mode 100644 res/drawable-hdpi/ic_action_move.png create mode 100644 res/drawable-hdpi/ic_action_move_dark.png create mode 100644 res/drawable-mdpi/ic_action_delete.png create mode 100644 res/drawable-mdpi/ic_action_delete_dark.png create mode 100644 res/drawable-mdpi/ic_action_list.png create mode 100644 res/drawable-mdpi/ic_action_list_dark.png create mode 100644 res/drawable-mdpi/ic_action_move.png create mode 100644 res/drawable-mdpi/ic_action_move_dark.png create mode 100644 res/drawable-xhdpi/ic_action_delete.png create mode 100644 res/drawable-xhdpi/ic_action_delete_dark.png create mode 100644 res/drawable-xhdpi/ic_action_list.png create mode 100644 res/drawable-xhdpi/ic_action_list_dark.png create mode 100644 res/drawable-xhdpi/ic_action_move.png create mode 100644 res/drawable-xhdpi/ic_action_move_dark.png create mode 100644 res/drawable-xxhdpi/card_bg_activated.9.png create mode 100644 res/drawable-xxhdpi/ic_action_delete.png create mode 100644 res/drawable-xxhdpi/ic_action_delete_dark.png create mode 100644 res/drawable-xxhdpi/ic_action_list.png create mode 100644 res/drawable-xxhdpi/ic_action_list_dark.png create mode 100644 res/drawable-xxhdpi/ic_action_move.png create mode 100644 res/drawable-xxhdpi/ic_action_move_dark.png create mode 100644 res/layout/favorite_menu.xml rename res/{xml/settings.xml => menu/favorite.xml} (66%) create mode 100644 res/menu/favorite_choice.xml diff --git a/res/drawable-hdpi/ic_action_delete.png b/res/drawable-hdpi/ic_action_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..878b378aae88ff48e5dc8c6150488d1bc62ca5d3 GIT binary patch literal 898 zcmV-|1AY97P)dtLfn_*Td_tsRI1# z5v-2De>DQdVzCcE{X2mw=5o1DSwd$vg(!X!g&jg8I|Jaqi$Ltk3L;B@6%@5SL1AqG z)Fy~a6p|%CJ&xN@0d0zLpU!XlP`3xT%^6@@O2=W5mFKyPkz! zqtYt$fX`ZbUnZ`)EYJ-QX9kp(&cP8xKaS=1fvB{SE!>0N0D}x;txRG|h&gu}Dj@Zi1Ts zC#)yL3$PTUomR6z{2l<#S#x>;7Gkv9Y8HrZ0HDd5(+g0C(SEC0Abu+V&DNY=fH@c) zwweXvHv(|On$ruQi|)A9ED*mM04)lp<^|CH_ms&g99$2;qi|UJ2rq!{x)-cwf%wG$ z=80OZ;l_fIqrYn zJiu&ca6SY7TLv6uWo7PkP)?^aJ~T8GvJ%>|67uCd$pB4F zO)JO7#!k)!fB^um0^qEwsI@g<;cu zOje43Tad{CWX)da2j>@L&4PW;ntIvO(-V+5o{+UFf(d2JTsyirw zx9IptbiWbpUyOe@p5$-pW(}#%apvIshJv0D_c{`KBa3)Bv>7 zOITYhwwQXtcUtICjV?6+88|ob60fm4WsdolL+o{l~w?dfyB2Yu{t#X8Q70CpV(sR34StgQ=>}_z?Qm|$Te$>CeI<09c-oBG`eyD z*aX0CjnNbUcL8{!(WM5McouBucWbs6`E-t%FLK;_L}|xac2{gdB_y@T8y^ zG&y)vZ@DRY(hxMnx3K;`nKk32r*~&}Iy1XW!^h0_c30I`)m`0N>owGP^J?7whMYj! z5zHfyN1#d%L@uF1p)d>ChrkK27L0?tV8HXd?^WteY`TrWZnRtgivrqy@_q{feL)K# zJBQD!z}&58iB8U0vmbW04+(o-j`S4IgGyUxCAue zq`|X8^qmcEWR}rp`r5!e2P8ft^D+9gbf-1j5?adWPOuLw2H)ffpiTVFfuR+Nw60q` zI~%DRz&fBzFpBZYM44$WH{Ohp%n8hhn=MM}KLTvz1vo&b?F1WmB5jX{_1n^DBZH5C zgJ304J{|)75Yc-knvK9QEYx8Zyx-_lybZ2F;&+jOe;?Y)XBP*VqW&r>ecK4!XJV_t z&6D(u+^fK3tz~?@JU5ZH3R)^$`qi=6q0&ya6 z3E{eWyNG~JensGNTmr|L&}G;IgY;bu?SWxA+MBh$_2icRT>YRy3f&c&j literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_action_list_dark.png b/res/drawable-hdpi/ic_action_list_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f8688d898848a0ad8f9d8cceed4aaa5180f1dc56 GIT binary patch literal 941 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 Xyualk29@S200000NkvXXu0mjf75y{1 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_action_list.png b/res/drawable-mdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..f9f8a2f9ca5be28d8df73c6300322e35f51ae7d2 GIT binary patch literal 493 zcmVgw4Nejp`4toYyW-s^}vkBOT z&?`s>7;R|*qm1Ka0$ufdLA=7(iA_Kcgk{jCYaox&n`@M)JYyHI*J{3*z#mZ^M&+lk z4Wq6gF5lDzs>S+s4P3Jg4{?M1Wp5HNgTW$bRBZz`5mD4#(4vLOHg(k(LVU#6yR8e( zAhZh7IYw(*z&hhJ@U5L&e9b2*;0^(EHUYB`7Jy3gE7&O8f)3{DUGpw@r7igJPpMRd z0~lt(4Z-g{f;pS`?xk}88!?>%^sl&y^ncn`5cj*O2D)*oj^B200k;43Fk$Fn>%21aS($Y_)0J_(NPz5BGG?g92orr8b=+RWiv({+%&pENr;uIy90?X zDuD{E=OthWRND6lv;$q*m)`sCd8g-|UJ~&5A|BTdOaSpcLFeL zn&uX$54SaN0S$b)EyNo4Ul)*AEGD6_!MY)9y#Lye^#sGl+c7}k1@odPh9I05h~{nB zB7^end|(ZQHz2?uZ5!NA(FGN{33LIElEdf(ULUBI%jIvUE;vNdsZJ1{Rj_bE*Qr!$ z8y&LB%Loqi3LiM&1^^$}0iczU0*J@s>+k^j2}HY3AW2dL`d~I9!!RtcSMBu_TM@$Z zqbMFi!t>Zg$V)G8o^OqaKyX1Q_J{XmZu9yWNT<^?=<`j8Faj|?*6a1lvHpzE1vv=N z_IC^)SZp?%835xkA`7hOFtrCKAMkb{=^e?y#vQb9Mp1*ErC~-gL4e-Q>?I2dxWo+5<%n zC`viVfua!B=T~pH=ULnA?pwRb)TcKyZ|3*=&Ua?VquF9yv>4~N{R{ZwfY<9yU`sp} zY|Fc*X=N&L;#Pq23XH2XIH)}TCkK=R#JvDqsX$~6T*4}6*j%o9nJPv0OI_f%FVqKaV;MoD^ao*R(^0ff}j*AKZc1(lEv z9f4MCnFGE+I3ZRKLkY;CtA|XI_XS(I?_DHYkg6wa;hCrhl!GSwEN(2pwE5z(!~y++ z5!3{=7>O zSB_wuvDe12$^!I@Xo1PEunwESPB`P`T*&SB2=gG<@*8vH=j$)Z0s`3=tPcShymx_z zqyw}YsE<$=_o5@f{5?Rsl}tUb1(Ns@0o}hQKoaR9s;OSVjCtEE-GV>$MHK3pGmlsP oq>Hbw;z*Yr&iwy>&0_ArCruVJFh1j>=ob*e*d(T|3mJQ$%zLiXiIL$Dw0g zBIsZd8w57$7(!6QLM=rQv`~~Y&e-n_jagZj*-2Akg@<|P^?je`|NlSF^ZF`{4EQ4r zIR3~AfKCOZTrPK`2WhcNrP2u}eufr+V+I{8+X_0~-%SC>4u&3pq9{q9&!+(NqpGUU zc$#+5eN`Zv%}z*?bR3&)Hk%s=tWun}`U&8V?_@IR4+H||2|QOWm#+e5(&O|9N+nvIGJ?upw*)~6KS=P-;rSir#0I@Nj&&xR4i=2A^;A2YXy(r6ap;#=w zkHuoaXf%3;`Eg7DD*#r5`3J^Ur(&*)Fr7}Xqq>jaaEr~UU?*6|Fs)v%->%ha-@2tq z%)18Ac1l|Ej1OX?FujKwTTy2fj4v(5xMvEq9nt6GC^1bsHX4R;neldjtfok>EycY3 zoofZ+@pvE{4o}e;y9n-WIh=2?9%b$^?RTH|1qV-06rd%yA@c#8MSkZ|lHSn`1x?e` zL?RIhg+gbUUW3g6V-{C>YEyv>+_y(H&PXsubhbJDU2Wlq~_ z%mU0D&B3}7t07Re`2!#}UB5e;k z)8@Da9H!v^xe+-e+;y4bE8WoDivO1RviGn2H5<4BzW~k6iZBi+f7<{6002ovPDHLk FV1ilHN?rf} literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_delete.png b/res/drawable-xhdpi/ic_action_delete.png new file mode 100644 index 0000000000000000000000000000000000000000..09ce75e296fc2584e5d5ef904a640da50ff676ca GIT binary patch literal 1146 zcmV-=1cm#FP)KfklT=ce+Sc}g|&`sXD8k{-~^ z2_!?HnRkF>5=@3bHikfLZEZf~OvhR{mRF5mNh+24#Xla`e+tgVVe)0Sb8(wF=$V~uLt}T@qj19s1W5cj9L971= zJ{wvQ3`BaVe97}&%$CHb*dsG~(AP+_T!^z|5~R}YC}#?0lh`P%vr=T8SnqhggWbd~ z1LKQtIo<%M{6s`-#Jc*5iJ1Q_{yTwC7BSyn?g{{%ZN!Xxh!0L=Et?|&Gg2b@Dd zKOYeuc`E@>=#f7Gpcn$hw7?{vR`AGMMi0oevkVQb0AMRX5jF?w9a^Hs;W=UKfOX1u zCGZB2t`Bp8#j>^EmcgOHv+V;6kWaFu?ipt1hzD4OJyY>opP=cyG64073HAql`K<@m z9kcyG#{f!wJ3*`LN9;ZJ8heFR`L=Q=# zSCpd!a2-LdG26e}c(rkBUAQLb)}Q&b1CN~t(r1Ey>tJVu^g*e8FkHF>L&)Y6n`1^` z-vKb;e*DY0JbYaDFLiS(0qj`hZrXTu-m~e)I|wk8Ko@=Em7le1OO$9P)Yy`5wubv$|1&H z0337h3w2Qfm`iD1FDF9P{&6S~dPhS`)Ho~#z&%AMB>+3CpHhf&h*1Op zd*|StlmP5<#4bs)kqQA&sVGPZpc{g&C`38Lm<)h74t}97N&xoy+h%6F9*;BG^>~5m zO|cAs)tDES<$TyXyf{-0mA4ydNm2u_H?@5v${G$*4FG!sElFwsCs1X#LUAV9>o60k z2C#^jE8?s@v1JFLH~<(>I}y&q?2bU0z7y;uwoi30CbitL{o<1o7$^hs4@ zzJ--iar>i`G)ad*eae8*lkW#%cC%xbq_#?Qz--xU8RYrNr(KNNpQG(2$^Ic`8=c2g z+MZ)eu>*)rxhQY~Km;;p!z4W*XPZtWJm~=a+0bRyxu0sfmPPz(3HzyJUM M07*qoM6N<$g0ax`VgLXD literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_delete_dark.png b/res/drawable-xhdpi/ic_action_delete_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..94f7c8c1c6fe3f5f84d1fe3fe0ebd34759489c56 GIT binary patch literal 1394 zcmV-&1&#WNP)N5xVH2exTq&q$1J9Fq03PLSY1jMAVEQlcr4OGyd){10n6?-Z%HWp_9A^;XZQD zJ?Gs2`=4{~xp#b9Hu>Y*GTK90Eoq6`v75l!va8D zr-|#P3|Jj58g#Yjs`20%5EkSWx_j& z={_d&keaB^=c}l8ofTn4iPb~oKiUj`S#2?pxAkWcsxihxW~pB)3Mn42V0j5g~E5XD}i+gta93y zNF<`H*ZcTiA5KQ=xuM&1Vol`KQn$c_=V*Upt9&h)OsaRaXRv-G0l3K-#SWebV1xl? zJI>$9dx*(&vpEW|!Kv*8d9U(Xrmsj}9@!hnF7lqEc*@#-<@Hc<6#(nc(*^}%01OWg zAIN62lXG)(c{lxzMx&ufBogPW;718NVgRrsJO^b1IF+f#>tDR*p!O0B&j*9S0yRRJ z0;rP9q7r z`)aV^L_8jU0ct)b;gn7Xq4ooZtDoxRO!~zbKnNVc;8P|>1!TS@1TG5bkz)WM@GK$l zjD%A<9fZKwguoX%Ig@@#20V?yLncNAWG=ygZv^y+GTf}uN#Q=Z-dvHvoLen`8&}U%4FFHAselY;J+KzIJWpznm;;@q8$n4b2 z%#1o0w0^_@AOv>sWz;2!>kmvjK?p2J7!m_uY;0^B7nULwnr>oT#Ewr)OkCH=ne>YR zP`@8Ii_xHoVGEfO_W`d-ofL}!pe95;@E(mi!*lalVi)+jlmSrySP9-CKJS%s?pAup zGk>!J9Fwvk3IGgHH?@6I&Na~^b{wYkO9Rl3f=H|o5(hv5%5r#!qUg!`9f24b)Lj5N z)j7atC>6OEbOV6eg!#4CZZ<`aQ?(7^c*F(;Car!Xb%o8(_tVqU^ESF}nNy?{uGPmu z$z6bOzxu@(ePJfEmG@rSVB;c0U6cS;iFTQGiB|nWOx+0oPT8y8U3)}xfNNg5sMrI* zMQ}Spwa0*t_)IQ3=`p}Xa63Y^$AFIbOfEY4Kdr$AUsfC)ga7~l07*qoM6N<$g0Rbh A$^ZZW literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_list.png b/res/drawable-xhdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..c912b39aa5bd0fe7ea0b72bf06cc68b68cee8cd3 GIT binary patch literal 1114 zcmV-g1f~0lP)cu@wqg@%}sP~VoIPju-sh}U|K{x3Ykimh{?`3VwJY(GDslhYIRab+lsE&f z3zT>OxIxf$0oMgA7-(*8?n$+|U?~^~et`#|I+aS*S%`>j6=N6hoL`3ri$Q0fCyhLx zfP|~D_0V9L4FSuLu_=r5Y0>Zbu>=yn`gK9x1pYS#bZujT6roSR9qiKYoW+KKv$P&- za9}HnZf4fO`B6Mqfd0U!rvL{=0)fFlT)79ivg@7AK|k&l1@JnskU3LOjJ zT#!iF^cqxQ*Y&UjXdv4KhG!9^0j3s|XB%w18DuE$yRnS_7;Gb3l4y^p@Y3z-37I z5tRdB^%@Dl`9UZt2igz#>+1|ar$R@w8A4mtSL8&o7x-oqoi+sQ!GVQYoKO3#ufGaq zFEUB+y39uYHxBqulEQvCQ+sWOo`Vb6r4?(=Vne_+TC3j&l>;cM@eweOXYB@~EVbCR zB`g8=5zxWlh0X;}`UqIhv&M}mOA~f22unb|5ilRc`=az7-M1lNb65iQB0wzW>Mps) zfbO)>7Fy?tQJe>8Ogaw%^GfwFjHI2>AxO1H!1stlJ#Y2KSs*PL5){%}3HAXx5P1r;68xFB_82s@CLjj37Q_Tc zKtX6tkWd!^3Hn$CG1WzY4XsRpx)&G*W`KU)G^iEUL#DxxHZtN`$0`CKU=|K&St}CK zMK?pbcRN(nH$yl-9w&DLoeKGjNKjtD&K!4xS_bPnEsFDiH`t`)jlg1z00=mYgy{iN zbofw)vd5WqXs6p@?FOT`9d1VNE1=t9-CyP`HUuO&KcF50R)!_u9s*3ex#K9R^hH1% zGDOr37KJ51IW}VqU1_^N)aU}EX`>t=%^Jo?GxgOx-hZaeY3%wZbHy*mXc&$t)n!A# zKo*oGHi>qVL0e~uX}78@F`Wnn?pAFG=!GEV2`ZGbBkO1jtIFKqTml zPnn_`-8KCwL-ZofD`PaV#fpH$dS_v{Bfx^BqORg1pr}8ug>xi g=OVy@q@u3!7j=9tP$Pu59smFU07*qoM6N<$f>BNHl>h($ literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_list_dark.png b/res/drawable-xhdpi/ic_action_list_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..fd8fb3192479fb1c4244cb07b82b6de5823c9f84 GIT binary patch literal 1302 zcmV+x1?l>UP)6mE3vbrY7zW z*v-u1CW&qfaznO+(9$Xayl~)Hbihar%MeOiKPREdyV~}gzVA!(zH;8=B=m6J=g0T? zah~VA$EexnkFm}5uh9T#57_1i=n&ZE4xp2u4gnnk3JCP{^fa=pk8vcI%e5MYk>T&D zbUHnpOeSX(NVs;1Gz2!4KY`+h(ZW}t$s)ghip65TyH-PqU{V00(dbcV3=~m5Pdc@* zu<+IV{QPPmukP;d*K2EQ-vGRZY666ZX5slD9*^IHukhBAj|u=^@OHQy5tv}Aja0LbH%Mvk+8{^~SL*_M+NaO>Ac;9Ko zDx|kac%HWlz$F0iOBi2=(d_~N-UWaUD-_u2<#Wh&!4?4IfU^*Iy9|*Wu68kzNZdEC z>FDSPG&D4P1_ps`2G#uAv`l?7l79wb_$|<3JGm)he?=RE0%1;4zj+! zzMFN0yNA;{|BoL0a*PGyKP6+Nl$^S{x+3-U_5FbGa-N`2p5O7cwYBdjCnuL>jNJNv zB>+Sg2ZRt?S|@)uqj)Bp%|7(`eA8I}iCdLZkxLZ-6EQ>hE!}0!Wpn8`dd#0F6zEz5l(sy1Hn-F`^Lq2Ox%- z8=)3RyFnQ%GDrbH`8JgO2;y&vg2>E-`Beb|CFhM2%#HT;c7Ib-Q&oEbdXOw9RZmsC zQwjjh(8mxuRH(d3;WQu&5)OZvK@cI++S)40=P>gxS+S1Qcf^4RkC5kA&MD@~(UAf` zLvs-&c9tb#7~c^Fcg$-#J3IU6A5L3U!lCz)w8P)n1>hL3ubE+7=+EZ`OP`(wmZ zx2XMAjMCp(1Zd6<`Xm=-xe!7L!nS3{Xh`l zs(Kzk)hc>{B}cvu+W9){_xnEun7y+51zQjsu*^LMgdq-U;u0+F2v_chNU1}OlDEWYqs4awagI>cBq$C=QT`81oC=NoLA*T2&yB5&#v@ z^W0Jmfagr+u)x{_90t^LPXGV_ literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_move.png b/res/drawable-xhdpi/ic_action_move.png new file mode 100644 index 0000000000000000000000000000000000000000..8cfdeb62e2257f88cffa912513a6e884cb2f3bcb GIT binary patch literal 1354 zcmV-Q1-1H#P)QRE?Ghr<0ziHw1U~@}0RzBg(10Po1{qRF8U24s{Sj81jr9Ma-YL_R_!@KvXUQL13IWFR z(Hh@}CBS#!2aLL22w}S}1c&ne8L-zctpVG>aUhrPW!lv7t!1$bU`ApvzwZI<&vueW z)PuDccdQU0ApfY^fhR(=J4&7DeB(+<1TZ3WEN^(0=UE_dpQc=EgB|J~S2L0?^YCd=avjO;owgpIhm_;8>& zLa7k}=2nCN=Du$NWZnTf!G%q$sHm;a890UMuq0~$I-#}CW8f+BHvIjs8E7_U)0 z5@a>~C~8~*`Uccfd~g7KPk)*w&Qvr3%+=HsEO-MvgZa`OFA5F_g<_!L+9TTi{b$;0#TGhay9*Ual}#t&{f%;M45u6e&9O! zx|&O-2bgHl{vV~gBTAWe1H}QF@0$O*3fHBmLh6Zz@lOcgj~`lyQPv(1B!C&|YKyFY zlodtP5Z-mDY6eY^5A`SViV(mx z$`!c?wuZFbHuZoYC0(ms0S3Av#Wn+WasL@U!Dq3;1noS;Hc}T9>D${ z-@nU8J$&WZU*H;0js{0Vo}?hdO*~QCau5!0d66WUkTzay#N3J M07*qoM6N<$g2lptZ~y=R literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_move_dark.png b/res/drawable-xhdpi/ic_action_move_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a72feb36b0c307aa4a994c84a66bf2d1746b46 GIT binary patch literal 1559 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 NfjPknUv2Cb^DosATM7UG literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_action_delete_dark.png b/res/drawable-xxhdpi/ic_action_delete_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..0390e57822d03a9445e9181f681ddd54618db9c7 GIT binary patch literal 2161 zcmV-%2#)uOP)9LK%e?%fN{_q;NfjTmgPwO84~NKJ}_BB3a-H$?w2f+B*fP%0EeA)+YqkKU7n z?46<)gT%-hxHsEy#VBWMIGatIy6xWWuFoU)$~N3~&bjCLJ;!(s9L~9C&+qm7{C>~d zInP3~>|xXcA*0f*@L3iB!R%XlNLKe#|Qm-E@HjprD{2FB*-m&&bHA z9UB|V^6G?8C^QOfC+F*pjg4o$^3h2bNC0YTY97Gom3|ox5KREE$1i?<@(C&c&tPPc zUxos}X#jZIFMfXV2_yj3)zw>Z+A<#v?Qd#o+TtTW-&kEK0CdIU@qJFM&dkhQL;F!T zuDk`nsq<91$q_(9{6lkd^LtKtK);Fzy59oe)MJy%T?T+}0pLTY>?$fM>a()4Hdz3i zdTa&&`14of@K2nwvj8~t)D-0|(+FDt()6h-@@W7Fm6er+`}_N|=Fgv>F`g;U5#zif^-cHZ~izIvE+T2>r6ejF&f|m^y8;6Vmvzx z?O9~>A){|-Xs8#k&bd%iOVOE((IOOwFTn|=Fu#WG;!>^!oDnU;re>-@?E$E6u3fQM z>{kFeDXhbcwaGVq>g((0VC0QByb7kvCe={i2@zvf2)Ya839336q00<>I4e^^d&hI#X{`@-~9UZ6r<~^RDb^wyX zGAk=9Ygs5+&F^bDC(PsMG|(mQ1m%CH!W?XEZEfUUE$VAMqyV^Ngqru^brBT}7pEdP zO-w_i^tm`4!P&*xF+4o1rXxh>hr|JxT%8mkOivUtd%2jfR}*pSoX0tb-*ZS^Iq6hE zcnrZqO)IGL3}+v|`$k4aPBHD!E$#5hwipLsI_DM^7UrsVgm73M^GLZ&;6=EP;JhrZ zA%MF$!4YUC;c_yDn)x7Z(M9LD>t*m9BH-?PJ_`(KS6eI5_zC zz`(#6sa&nvmi+wudA#_06Uq z;2dRC13C;y>RBA;;HS~JYG{)SCsUfK7J5_z4X|P8RU;jSKAUIR(B|?ipQ~E#%)T5G z>DL%V0bp(5IgD2Q{vaPctN|!JMGjE_NI_3g6V*sKum=(F2PtT$l!BrFEMLC-aZ-TF zwShfISI3SVIr5^Ef}#MBf*!%JN-5(!%4sD9z3P$HHJK;?bVD~0;`Oez6eJ);HqZ@y zLrSD50Dgb@qQgmU-^5N=2WbHAMd4f0Ra!Iscch>XG|RZeUKD_;s;YG~a<@wv=S2>k zgfAJXf98eO3ymlMq@cAZd6ySO1!+De0=|}#Ckg=LfSbv&>!pnIB8N`GKE?sxd!hA0 zBMJa1Xay-~gBL}mXh=bClY-Qn)FOu{07O6y5wKarGLJ%tfIUP&lSgvbWTF5t5-z8P zJ?dIZK>{N5Wk$knQX)kGpb;*{uqUOA^C)LGjj-C@K;#ewfE1*@3)m`RnMWa{pdF;3 z6CTN3lZgUQUS1w$v3$F0Ed>c!{NL8r*48T}QWO9pU@j4`3*!R&VipmwMRI2qQ2^9Z zAluOFO7~qKUA0raL)6>byG3egRM{a4fU5a4#3};j>T+V5e9tB~^-!-UiX74a%pwhK zCjz1(*0~fy1oV=Awz(urtGEdOwgJG^X=$yA7y$kR0MSl@H~^#|H4aeYfgm28q@dlB ziirb23VMtPD3dhOsVpL(od|fzX?Z`&nE+rj0Mz)Qyx%+kKzwgGaR68s-iV<$`0YHO z`29o*ddnwXj@XC;Knl8#2w3e%JK;i9jDw`0_a()O13(1ajiI+m8tGIP72_M;i1^59 zc|XdD13)k64ivxB59KxR_?#5G~uH@iL?F(V#zigNUAmxNiqM;H;Q~*TDG#~M~aqN_3)iwpl`Hk}^(+;f^)V?9d zbczQ7fC>6BP@9L7mhzQjl=Rh zZK?i$%o%>4;w#Huu78ng)P50xIRXd344w%U7Z*p^ZG~+k!V~_t4EsZj(2I$8c6O>A zP>iG#FQ{H=0C=%6&@>hR!|+%DEC7Z*U|77301JR&4;U72BftV+*aL>e+X%1#81{f+ n@iqc10ERtaSiFq@!vOpThqv~BXR{$S00000NkvXXu0mjfrij`H literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_action_list.png b/res/drawable-xxhdpi/ic_action_list.png new file mode 100644 index 0000000000000000000000000000000000000000..a0cc3d0f5dca23739d1fcbc5c568f2ed7e3b6b4e GIT binary patch literal 1754 zcmaKtYc$&l8pe~qKh31I2~`#9n$kh3`-rxY5QMH)#l1^#T+76zDC&~2sg`gilvEc* zG$aTU*U~|lD!M_9rW%)V$(~`VJ!$I_RN3q~d-mJxhxdIyJfEKP{+{y`cwKcD-Aq5m0}l6!It+{c27E_lL8 z{4}A#8-9xTySAkK=wA(xA&9eZO`icx4{;z!8AAOxe0L5el^ zbOQf=UMiL5j$#I0R9>5e2pk`+|8DSwN!U9#`cNN%dp=d{HatFb7JwWD9Av}94f#uL zENg`7VQby|Et4n!lI!S|sVc5F3IYzzVd;I<*zD#hYexV4A9m|9v)#|wcBaNLUJe_X zXy{6@(A)>Vy4!QYxRDA6q`fe|5k`~^rs-Ybl}9<}EDyu^RZi5_!+JBx+;cIWY z91tH<8+q@; z-}l76yHb!;H^Nl|qC%IG=_)CMxEGRzw#YU7@Tr3|?e>1Yw1Ja*AN}1)iNE?iZfq+UrywFIk+E`@VfSw8e#~B1!NY6oO+AT(D60vK7Vmm*vcq z)`FguH$=9o-tq<0{32}+;;ZsDOkE)LC{>x2>1|j*)qgTZlkCdU{{=?KR(GWbi?sEU zO?Fx5dqbmk*siV$kef@m<-DX%1`f#mV8qQ9ZGAmade!V{(e!Vp@ex#O1^oY>ttUW1 zqc=;Sc&arp`TNCE=wIDq;DL0TrsKc*JZGk#Y#ohPhe8HVN42_45^OH>4s8_qDj7)C z&P;V4@IwRuA#XgLDarQOpS`rVF$Ubjv>ZCX~t8J8ZCYn298lgHT`5!kw_99UmG2J z+4OSIN-6|7Xn{ke<7SD&h42K{cNgIuK_mtNhtF%G+9G_?x^6Czi-pjv?5C%BioiIi zc6ME%zmhS-s4GpqjMx~7QxU|Oe;cF-1j;22ViA$%l%gQo*o_j*zSZC<17Z*y&VYf? zjNQl@Z7{;QViu2N+#~OZ@i;qLhW4KdDKv=DS|_gUt4_B|4sKw@)4scrJLD+`q0RGR z=LEHZ(e=2Q3(GF*hh{)Clns1rkv#B+vp`|*9iC*8@Dls>&6BF`^CV9%VSZW#_0}H= z5H87ym2kK5#y@Q{4I_mpfhZTY%%MG@g!z3)R^G?v=S<-{?c#SP3T!6!b7(C@6lDSr z{JO1C8GphrZun$#J2hu}NLEbr7^hEHt6a~07}E7w#$(IW0PmjW=^Pc^&g8#*^gUJA z@~*+tA?U7^iLVNpANIiRsN(zHWX+~$CG>dKNKe@bqM1-r(EIR;RcMRP3*I@`nGg>- zOA7bhf&yIqk8k-){u}w7M*(>$Gil{Kr`{S3U4G~TCu(84PgP`W4J#{FVMd-n#X7f8# zhwHTlsql`J$b}$ZW{f+V-w>yh2M1CfV@ZAN@G-BTCe3|{;3%mDI?GKjg=tuY{CtW$ zd}NDi)Z#W6f!#L^$*-SQlrpQ~ty=rz2DMs1eBY1q_&WbtsL=}lzXA?*-%fK95k(ZV Qyt5$gE>{VyPN8}K2FsBnz5oCK literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_action_list_dark.png b/res/drawable-xxhdpi/ic_action_list_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b6a366f10c732cba494e2105c5bad62f7773a918 GIT binary patch literal 1994 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 literal 0 HcmV?d00001 diff --git a/res/drawable/list_item_bg.xml b/res/drawable/list_item_bg.xml index cb2bdb9b4..3e38b8a35 100644 --- a/res/drawable/list_item_bg.xml +++ b/res/drawable/list_item_bg.xml @@ -24,6 +24,9 @@ + \ No newline at end of file diff --git a/res/layout/favorite_menu.xml b/res/layout/favorite_menu.xml new file mode 100644 index 000000000..95cc51bc8 --- /dev/null +++ b/res/layout/favorite_menu.xml @@ -0,0 +1,24 @@ + + + \ No newline at end of file diff --git a/res/layout/favourite.xml b/res/layout/favourite.xml index 75dad9766..72c895da6 100644 --- a/res/layout/favourite.xml +++ b/res/layout/favourite.xml @@ -13,10 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. --> - + android:layout_height="fill_parent" > + + + android:cacheColorHint="@color/list_main_bg" > - \ No newline at end of file + \ No newline at end of file diff --git a/res/xml/settings.xml b/res/menu/favorite.xml similarity index 66% rename from res/xml/settings.xml rename to res/menu/favorite.xml index e8b8e49f3..c66efbf70 100644 --- a/res/xml/settings.xml +++ b/res/menu/favorite.xml @@ -13,12 +13,10 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - - - - - \ No newline at end of file + + + \ No newline at end of file diff --git a/res/menu/favorite_choice.xml b/res/menu/favorite_choice.xml new file mode 100644 index 000000000..efd2a371b --- /dev/null +++ b/res/menu/favorite_choice.xml @@ -0,0 +1,27 @@ + + + + + + diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index e91a7e570..a5dbf93f5 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -292,6 +292,7 @@ 感觉快要窒息了 + 本地 标签 已复制 发送 @@ -318,6 +319,9 @@ 跳页 第 %d 页 默认 + 删除 + 移动 + 列表 首页 模式 diff --git a/res/values/colors.xml b/res/values/colors.xml index 9c81fe5af..f01a377ea 100644 --- a/res/values/colors.xml +++ b/res/values/colors.xml @@ -47,6 +47,17 @@ #ffeaccf3 @android:color/black + #ff616161 + #ffff3e3e + #ffff923e + #fffff43e + #ff3eff6b + #ffb1ff3e + #ff3efeff + #ff4b3eff + #ffa23eff + #ffff3ec4 + #ff333333 #ffaaaaaa diff --git a/res/values/strings.xml b/res/values/strings.xml index 163e02471..2f7c87194 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -296,6 +296,7 @@ DISASTER + Local Tag Copyed Send @@ -323,6 +324,9 @@ Jump Page %d Default + Delete + Move + List Homepage Mode diff --git a/src/com/hippo/ehviewer/ehclient/EhClient.java b/src/com/hippo/ehviewer/ehclient/EhClient.java index 7544484b2..232f27f03 100644 --- a/src/com/hippo/ehviewer/ehclient/EhClient.java +++ b/src/com/hippo/ehviewer/ehclient/EhClient.java @@ -75,6 +75,8 @@ public class EhClient { private static final String TAG = "EhClient"; + public static final int FAVORITE_SLOT_NUM = 10; + public static final int G = 0x0; public static final int EX = 0x1; public static final int LOFI_460x = 0x2; @@ -169,6 +171,19 @@ public class EhClient { } } + public static String getFavoriteUrl(int index) { + return getFavoriteUrl(Config.getMode(), index); + } + + public static String getFavoriteUrl(int mode, int index) { + switch (mode) { + case EX: + return EX_HEADER + "favorites.php?favcat=" + index; + default: + return G_HEADER + "favorites.php?favcat=" + index; + } + } + public interface OnLogoutListener { public void onSuccess(); public void onFailure(String eMsg); @@ -1689,7 +1704,8 @@ public class EhClient { // modifyFavorite public interface OnModifyFavoriteListener { - void onSuccess(); + void onSuccess(ArrayList gis, + int indexPerPage, int maxPage); void onFailure(String eMsg); } @@ -1706,8 +1722,14 @@ public class EhClient { } } + /** + * + * @param gids + * @param cat -1 for delete + * @param listener + */ public void modifyFavorite(final int[] gids, final int cat, - final OnAddToFavoriteListener listener) { + final OnModifyFavoriteListener listener) { new Thread(new Runnable() { @Override public void run() { @@ -1717,7 +1739,15 @@ public class EhClient { hp.setOnRespondListener(new HttpHelper.OnRespondListener() { @Override public void onSuccess(String pageContext) { - listener.onSuccess(); + ListParser parser = new ListParser(); + int re = parser.parser(pageContext); + if (re == ListParser.ALL) { + listener.onSuccess(parser.giList, parser.indexPerPage, parser.maxPage); + } else if (re == ListParser.NOT_FOUND) { + listener.onSuccess(parser.giList, parser.indexPerPage, parser.maxPage); + } else if (re == ListParser.PARSER_ERROR) { + listener.onFailure("parser error"); // TODO + } } @Override public void onFailure(String eMsg) { diff --git a/src/com/hippo/ehviewer/ehclient/ListParser.java b/src/com/hippo/ehviewer/ehclient/ListParser.java index 8b0a140c5..456b4b964 100644 --- a/src/com/hippo/ehviewer/ehclient/ListParser.java +++ b/src/com/hippo/ehviewer/ehclient/ListParser.java @@ -28,7 +28,6 @@ public class ListParser { public static final int ALL = 0x1; public static final int NOT_FOUND = 0x2; - public static final int SAD_PANDA = 0x3; public static final int PARSER_ERROR = -1; public int indexPerPage = 25; @@ -45,7 +44,7 @@ public class ListParser { m = p.matcher(pageContext); if (m.find()) { maxPage = Integer.parseInt(m.group(1)); - } else if (pageContext.contains("No hits found

")) { + } else if (pageContext.contains("No hits found

")) { maxPage = 0; return NOT_FOUND; } else { @@ -53,7 +52,7 @@ public class ListParser { } giList = new ArrayList(indexPerPage); - p = Pattern.compile("" // category + p = Pattern.compile("(?:)?(?:)?" // category + "(.+?)" // posted + "" + "(?:" diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java index fddf74e97..e53c566d9 100644 --- a/src/com/hippo/ehviewer/network/HttpHelper.java +++ b/src/com/hippo/ehviewer/network/HttpHelper.java @@ -363,6 +363,7 @@ public class HttpHelper { sb.append(URLEncoder.encode(arg[1], "UTF-8")); i++; } + Log.d(TAG, sb.toString()); out.writeBytes(sb.toString()); out.flush(); out.close(); diff --git a/src/com/hippo/ehviewer/ui/FavouriteActivity.java b/src/com/hippo/ehviewer/ui/FavouriteActivity.java index a304079b1..d07b3f73b 100644 --- a/src/com/hippo/ehviewer/ui/FavouriteActivity.java +++ b/src/com/hippo/ehviewer/ui/FavouriteActivity.java @@ -16,15 +16,25 @@ package com.hippo.ehviewer.ui; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; -import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.Bitmap; +import android.graphics.Path; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.ShapeDrawable; +import android.graphics.drawable.shapes.PathShape; import android.os.Bundle; +import android.view.ActionMode; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; @@ -33,9 +43,8 @@ import android.widget.BaseAdapter; import android.widget.ListView; import android.widget.RatingBar; import android.widget.TextView; -import android.widget.AdapterView.OnItemClickListener; -import android.widget.AdapterView.OnItemLongClickListener; import android.widget.Toast; +import android.widget.AdapterView.OnItemClickListener; import com.hippo.ehviewer.AppContext; import com.hippo.ehviewer.ImageGeterManager; @@ -46,64 +55,40 @@ import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.service.DownloadService; import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Cache; -import com.hippo.ehviewer.util.Config; +import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.Ui; -import com.hippo.ehviewer.widget.AlertButton; import com.hippo.ehviewer.widget.DialogBuilder; +import com.hippo.ehviewer.widget.FswView; import com.hippo.ehviewer.widget.LoadImageView; +import com.hippo.ehviewer.widget.OnFitSystemWindowsListener; +import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; -public class FavouriteActivity extends AbstractActivity { +public class FavouriteActivity extends AbstractSlidingActivity + implements ListView.MultiChoiceModeListener { @SuppressWarnings("unused") private static final String TAG = "FavouriteActivity"; private AppContext mAppContext; private Data mData; + private Resources mResources; + private EhClient mClient; - private FlAdapter flAdapter; - private List mFavouriteLmd; - private int longClickItemIndex; + private SlidingMenu mSlidingMenu; + private ListView mMenuList; + + private ListView mListView; + private FlAdapter mAdapter; + private List mGis; + private Set mChoiceGids; // Store gid + private int mMenuIndex; + private String[] mFavoriteTitles; + + private AlertDialog mMoveDialog; private ImageGeterManager mImageGeterManager; private DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); - // List item long click dialog - private AlertDialog longClickDialog; - - private AlertDialog setLongClickDialog() { - return new DialogBuilder(this).setTitle(R.string.what_to_do) - .setItems(R.array.favourite_item_long_click, new OnItemClickListener() { - @Override - public void onItemClick(AdapterView arg0, View arg1, - int position, long arg3) { - switch (position) { - case 0: // Remove favourite item - mData.deleteLocalFavourite(mFavouriteLmd.get(longClickItemIndex).gid); - flAdapter.notifyDataSetChanged(); - break; - case 1: - GalleryInfo lmd = mFavouriteLmd.get(longClickItemIndex); - Intent it = new Intent(FavouriteActivity.this, DownloadService.class); - startService(it); - mServiceConn.getService().add(String.valueOf(lmd.gid), lmd.thumb, - EhClient.getDetailUrl(lmd.gid, lmd.token), lmd.title); - Toast.makeText(FavouriteActivity.this, - getString(R.string.toast_add_download), - Toast.LENGTH_SHORT).show(); - break; - default: - break; - } - longClickDialog.cancel(); - } - }).setNegativeButton(android.R.string.cancel, new View.OnClickListener() { - @Override - public void onClick(View v) { - ((AlertButton)v).dialog.dismiss(); - } - }).create(); - } - private class FlAdapter extends BaseAdapter { private LayoutInflater mInflater; @@ -113,12 +98,12 @@ public class FavouriteActivity extends AbstractActivity { @Override public int getCount() { - return mFavouriteLmd.size(); + return mGis.size(); } @Override public Object getItem(int arg0) { - return mFavouriteLmd.get(arg0); + return mGis.get(arg0); } @Override @@ -128,7 +113,7 @@ public class FavouriteActivity extends AbstractActivity { @Override public View getView(int position, View convertView, ViewGroup parent) { - GalleryInfo lmd= mFavouriteLmd.get(position); + GalleryInfo lmd= mGis.get(position); if (convertView == null) convertView = mInflater.inflate(R.layout.list_item, null); @@ -188,8 +173,8 @@ public class FavouriteActivity extends AbstractActivity { protected void onResume() { super.onResume(); - if (flAdapter != null) - flAdapter.notifyDataSetChanged(); + if (mAdapter != null) + mAdapter.notifyDataSetChanged(); } @Override @@ -199,44 +184,157 @@ public class FavouriteActivity extends AbstractActivity { mAppContext = (AppContext)getApplication(); mData = mAppContext.getData(); + mResources =getResources(); mImageGeterManager = mAppContext.getImageGeterManager(); + mClient = mAppContext.getEhClient(); Ui.translucent(this); + getActionBar().setDisplayHomeAsUpEnabled(true); // Download service Intent it = new Intent(FavouriteActivity.this, DownloadService.class); bindService(it, mServiceConn, BIND_AUTO_CREATE); - longClickDialog = setLongClickDialog(); + setBehindContentView(R.layout.favorite_menu); + setSlidingActionBarEnabled(false); + mSlidingMenu = getSlidingMenu(); + mSlidingMenu.setMode(SlidingMenu.RIGHT); + mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); + mSlidingMenu.setBehindWidth( + mResources.getDimensionPixelOffset(R.dimen.menu_offset)); + mSlidingMenu.setShadowDrawable(R.drawable.shadow_right); + mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); - getActionBar().setDisplayHomeAsUpEnabled(true); - - mFavouriteLmd = mData.getAllLocalFavourites(); - - ListView listView = (ListView)findViewById(R.id.favourite); - flAdapter = new FlAdapter(); - listView.setAdapter(flAdapter); - listView.setOnItemClickListener(new OnItemClickListener() { + mFavoriteTitles = new String[EhClient.FAVORITE_SLOT_NUM]; + for (int i = 0; i < EhClient.FAVORITE_SLOT_NUM; i++) { + mFavoriteTitles[i] = "收藏 " + i; + } + mMenuIndex = 0; + setTitle("本地收藏"); // TODO + mGis = mData.getAllLocalFavourites(); + mChoiceGids = new HashSet(); + mListView = (ListView)findViewById(R.id.favourite); + mListView.setClipToPadding(false); + mAdapter = new FlAdapter(); + mListView.setAdapter(mAdapter); + mListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { Intent intent = new Intent(FavouriteActivity.this, MangaDetailActivity.class); - GalleryInfo gi = mFavouriteLmd.get(position); + GalleryInfo gi = mGis.get(position); intent.putExtra("url", EhClient.getDetailUrl(gi.gid, gi.token)); intent.putExtra(MangaDetailActivity.KEY_G_INFO, gi); startActivity(intent); } }); - listView.setOnItemLongClickListener(new OnItemLongClickListener() { + mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + mListView.setMultiChoiceModeListener(this); + + mMenuList = (ListView)findViewById(R.id.favorite_menu_list); + mMenuList.setClipToPadding(false); + mMenuList.setAdapter(new BaseAdapter() { + private ShapeDrawable d; + private ShapeDrawable createDrawable() { + Path path = new Path(); + path.moveTo(50, 10); + path.lineTo(10, 50); + path.lineTo(50, 90); + path.lineTo(90, 50); + path.close(); + ShapeDrawable d = new ShapeDrawable(new PathShape(path, 100, 100)); + d.getPaint().setColor(0xcdffffff); + d.setBounds(0, 0, Ui.dp2pix(36), Ui.dp2pix(36)); + return d; + } @Override - public boolean onItemLongClick(AdapterView arg0, View arg1, - int position, long arg3) { - longClickItemIndex = position; - longClickDialog.show(); - return true; + public int getCount() { + return EhClient.FAVORITE_SLOT_NUM + 1; + } + @Override + public Object getItem(int position) { + return null; + } + @Override + public long getItemId(int position) { + return position; + } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + LayoutInflater li= LayoutInflater.from(FavouriteActivity.this); + TextView tv = (TextView)li.inflate(R.layout.menu_item, null); + + if (position == 0) { + Drawable dr = mResources.getDrawable(R.drawable.ic_action_panda); + dr.setBounds(0, 0, Ui.dp2pix(36), Ui.dp2pix(36)); + tv.setCompoundDrawables(dr, null, null, null); + tv.setCompoundDrawablePadding(Ui.dp2pix(8)); + tv.setText("本地收藏"); // TODO + } else { + if (d == null) + d = createDrawable(); + tv.setCompoundDrawables(d, null, null, null); + tv.setCompoundDrawablePadding(Ui.dp2pix(8)); + tv.setText(mFavoriteTitles[position - 1]); // TODO + } + return tv; } }); + mMenuList.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + // If same index, do nothing + if (mMenuIndex == position) + return; + + showContent(); + mMenuIndex = position; + if (mMenuIndex == 0) { + setTitle("本地收藏"); // TODO + mGis = mData.getAllLocalFavourites(); + mAdapter.notifyDataSetChanged(); + } else { + setTitle(mFavoriteTitles[mMenuIndex - 1]); // TODO + mClient.getMangaList(EhClient.getFavoriteUrl(mMenuIndex - 1), + null, new EhClient.OnGetMangaListListener() { + @Override + public void onSuccess(Object checkFlag, ArrayList lmdArray, + int indexPerPage, int maxPage) { + + mGis = lmdArray; + mAdapter.notifyDataSetChanged(); + } + + @Override + public void onFailure(Object checkFlag, String eMsg) { + Toast.makeText(FavouriteActivity.this, eMsg, Toast.LENGTH_SHORT).show(); + } + }); + // TODO + } + } + }); + + + FswView alignment = (FswView)findViewById(R.id.alignment); + alignment.addOnFitSystemWindowsListener(new OnFitSystemWindowsListener() { + @Override + public void onfitSystemWindows(int paddingLeft, int paddingTop, + int paddingRight, int paddingBottom) { + mListView.setPadding(mListView.getPaddingLeft(), paddingTop, + mListView.getPaddingRight(), paddingBottom); + mMenuList.setPadding(mMenuList.getPaddingLeft(), paddingTop, + mMenuList.getPaddingRight(), paddingBottom); + } + }); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.favorite, menu); + return true; } @Override @@ -246,6 +344,9 @@ public class FavouriteActivity extends AbstractActivity { case android.R.id.home: finish(); return true; + case R.id.action_list: + toggle(); + return true; default: return super.onOptionsItemSelected(item); } @@ -257,7 +358,108 @@ public class FavouriteActivity extends AbstractActivity { unbindService(mServiceConn); } - public void buttonListItemCancel(View v) { - longClickDialog.cancel(); + + // ListView.MultiChoiceModeListener + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.favorite_choice, menu); + mode.setTitle("Select Items"); // TODO + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return true; + } + + private AlertDialog createMoveDialog(final ActionMode mode) { + return new DialogBuilder(this).setTitle("移动至何处?") // + .setItems(mFavoriteTitles, new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, + int position, long id) { + int[] gids = new int[mChoiceGids.size()]; + int i = 0; + for (Integer gid : mChoiceGids) + gids[i++] = gid; + mClient.modifyFavorite(gids, position, new EhClient.OnModifyFavoriteListener() { + @Override + public void onSuccess(ArrayList gis, + int indexPerPage, int maxPage) { + Toast.makeText(FavouriteActivity.this, + "移动成功", Toast.LENGTH_SHORT).show(); // TODO + mGis = gis; + mAdapter.notifyDataSetChanged(); + } + + @Override + public void onFailure(String eMsg) { + Toast.makeText(FavouriteActivity.this, + "移动失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO + } + }); + + mMoveDialog.dismiss(); + mMoveDialog = null; + mode.finish(); + } + }).create(); + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + + switch (item.getItemId()) { + case R.id.action_delete: + if (mMenuIndex == 0) { + for (Integer gid : mChoiceGids) + mData.deleteLocalFavourite(gid); + mAdapter.notifyDataSetChanged(); + } else { + int[] gids = new int[mChoiceGids.size()]; + int i = 0; + for (Integer gid : mChoiceGids) + gids[i++] = gid; + mClient.modifyFavorite(gids, -1, new EhClient.OnModifyFavoriteListener() { + @Override + public void onSuccess(ArrayList gis, int indexPerPage, + int maxPage) { + Toast.makeText(FavouriteActivity.this, + "删除成功", Toast.LENGTH_SHORT).show(); // TODO + mGis = gis; + mAdapter.notifyDataSetChanged(); + } + @Override + public void onFailure(String eMsg) { + Toast.makeText(FavouriteActivity.this, + "删除失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO + } + }); + } + mode.finish(); + return true; + case R.id.action_move: + mMoveDialog = createMoveDialog(mode); + mMoveDialog.show(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mChoiceGids.clear(); + } + + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, + long id, boolean checked) { + if (checked) + mChoiceGids.add(mGis.get(position).gid); + else + mChoiceGids.remove(mGis.get(position).gid); } }