From 9b80be453c5f06924617cc366be401654fb2bbf7 Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 10 May 2014 00:08:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=84=E8=AE=BA=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E4=B8=8E=E5=8F=91=E9=80=81=E5=8A=9F=E8=83=BD=EF=BC=8C?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E6=8C=89=E5=8F=91=E5=B8=83=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/drawable-hdpi/ic_action_remove.png | Bin 480 -> 0 bytes res/drawable-hdpi/ic_action_reply.png | Bin 0 -> 735 bytes res/drawable-hdpi/ic_action_reply_dark.png | Bin 0 -> 817 bytes res/drawable-mdpi/ic_action_remove.png | Bin 298 -> 0 bytes res/drawable-mdpi/ic_action_reply.png | Bin 0 -> 471 bytes res/drawable-mdpi/ic_action_reply_dark.png | Bin 0 -> 532 bytes res/drawable-xhdpi/ic_action_remove.png | Bin 587 -> 0 bytes res/drawable-xhdpi/ic_action_reply.png | Bin 0 -> 970 bytes res/drawable-xhdpi/ic_action_reply_dark.png | Bin 0 -> 1080 bytes res/drawable-xxhdpi/ic_action_remove.png | Bin 1002 -> 0 bytes res/drawable-xxhdpi/ic_action_reply.png | Bin 0 -> 1569 bytes res/drawable-xxhdpi/ic_action_reply_dark.png | Bin 0 -> 1743 bytes res/layout/search_view.xml | 25 ------- res/menu/detail.xml | 6 ++ res/raw/change_log | 2 + src/com/hippo/ehviewer/ListUrls.java | 22 ------ .../activity/CommentsSectionFragment.java | 27 ++++++- .../activity/DetailSectionFragment.java | 4 - .../activity/MangaDetailActivity.java | 62 +++++++++++++++- .../ehviewer/activity/MangaListActivity.java | 2 +- src/com/hippo/ehviewer/data/Data.java | 2 +- .../hippo/ehviewer/ehclient/DetailParser.java | 70 ++++++++++++++++++ src/com/hippo/ehviewer/ehclient/EhClient.java | 39 ++++++++++ .../hippo/ehviewer/network/HttpHelper.java | 3 +- src/com/hippo/ehviewer/view/SearchView.java | 24 ------ src/com/hippo/ehviewer/view/TagListView.java | 4 +- .../hippo/ehviewer/widget/DialogBuilder.java | 25 ++++--- 27 files changed, 219 insertions(+), 98 deletions(-) delete mode 100644 res/drawable-hdpi/ic_action_remove.png create mode 100644 res/drawable-hdpi/ic_action_reply.png create mode 100644 res/drawable-hdpi/ic_action_reply_dark.png delete mode 100644 res/drawable-mdpi/ic_action_remove.png create mode 100644 res/drawable-mdpi/ic_action_reply.png create mode 100644 res/drawable-mdpi/ic_action_reply_dark.png delete mode 100644 res/drawable-xhdpi/ic_action_remove.png create mode 100644 res/drawable-xhdpi/ic_action_reply.png create mode 100644 res/drawable-xhdpi/ic_action_reply_dark.png delete mode 100644 res/drawable-xxhdpi/ic_action_remove.png create mode 100644 res/drawable-xxhdpi/ic_action_reply.png create mode 100644 res/drawable-xxhdpi/ic_action_reply_dark.png delete mode 100644 res/layout/search_view.xml delete mode 100644 src/com/hippo/ehviewer/view/SearchView.java diff --git a/res/drawable-hdpi/ic_action_remove.png b/res/drawable-hdpi/ic_action_remove.png deleted file mode 100644 index e4c4327f429c01690cae6355281b814235377531..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 480 zcmV<60U!Q}P)$sQbIH8^t|f# z=?{|@jek<(<6i`Uxg87#!U3ZK5h0_1=Ewh^16|jxAloUWbTP|U008#^KbOG$mEejT zK#?`TztBF=_9)g#iVgJzE{)@ewn2La?l%{gO&}}(1K`ID{)y|>N+J*b9at|J_l)Zk z*9i#$viN|uE7W=A~vNUVpl~33KEo8bzx5-!~`-4 zb(}n6Q%-Od0d1VTV&g(U8Yj=#xDnvS$vZZ#1jgc&ip~5`g=j3RB2$fX(K{SPvY7pb@$6CXOrUe;Y?Wf zRY-ESxx1r;W^| z`&uO{*6xd~-pZz5Eso`Jj{EF6Fvs9HHG=?0r78P_15>KY!43yFDoxoZ9GFsF4)zt) W+8#h<$JZkO0000xdh0Db^GuN3%ci=uay!+mrIrII@IcH|>OQ6vFJN7nl!*fX@i%qmv*LxL`~Zl*jnG%vwKIyf+yE+Ga=x>{N>g3{ z#1A0)wLyG&QwZ^QQ8$BKwyg2xivZ#WHRmrmY*01Ye8{w`bA8I*@YkWQa}(#C81X|o z^Dg2=fC$ZtJ?6ik*a5bKeZf8h^~+gtuAvhE;z#KB0&73-K!$z-wSg@HvRl-@6#((~ zaQYH!E9$&p`$O7)RFFTeeT@K!zppdjZ1GvWoBVh}G>%*#Yyizn9h1H-Za#J?c$X9! z))Z<+{+l4?0g#o<_^|>=Z><9<;trd`fcK@i9|5sv^63Pi5Uv|oI^J(C^2_Ljf`F?4 zOa%c@2-(PHG21RI&EKn~2T_e2i%{Q`aY4EMqlD1hd&KuAsWsB@VQ&-yL^hsE@(r={S-=kW7!K4AO{vUu)p(R^4Vev zAOK-O@VXftie5TGfSjNvZevBN;F7ls2him0wcG7Iee!a-92kv8D|mhjjJg40~HP&BS4OvYUYZ?VhW0EvXlV9 z1AH9Vag+c#E0s#uF*%)oZMD<+eEtEsTLO?;j<;wv-m_W_UJf#|#EAoqrUKQKUi>Er z%m-|s)mp9gi&ylv2#|BTN6KU}8A~J*&)^CHR}aVI@#}uS|D6Z?l(48F%g*kh9^=<% zv)Q{&r}M=s9@`4&6KW*raDP#I=DhK{b|uiLfVhJyfkzAy<j021ULHj0NHLHUwXhH&=m3yH zVhkom4Yp_?$^nENL9XQ>bBT5UE=NFpMN&FJ4hfPRfWr|WVNhx(nBXXi0%Xl-K@O54 z%W{&V0Op7RbpVzGN53e*mfGo-2=Qe#nrA~|EFeY=S-F4|gGo_KR8dThfu!mg^wsge wHb`(aBB&`&a$P`8%gHW^sp*K(5Eu;s0Q=LlA>FYoWB>pF07*qoM6N<$f=yX$B>(^b diff --git a/res/drawable-mdpi/ic_action_reply.png b/res/drawable-mdpi/ic_action_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..843714a30b8c7ec32bd68d9f6980d3b1b5a17a6d GIT binary patch literal 471 zcmV;|0Vw{7P)85o}FD(phlga#lnM{+aTFI9xS-(~RR2e9ofhdYLl~Ucm7I7f}#J3RM0AM^g z0OH$-u8VMR0K{A9uEw(t3V`?y!YgLVg8?AEhwx%@y@LQCet_`2t=Rq*0Acw;4zWf? zrC;m5i2En@ggs#Qz`gil4J{^G(|=)&b-(D@F*WHF+0P6BKtf11nn2uH>&Vuqm*9xLxdA~uODzHMmW=1ziam?)$_O~da~&IT zKz9K+^#+I?0omty!J59rS%B{-ezIpwS^Rqdq>9?>Fe30S0hdzrmcvMAu7mGn!oSD+ zG7#@(yBB~A$g>sWJHe0>E%eI$47)`9EB6wZ0|?yYeJyTt?S%LZ<8y;uVCS~t`;Fl! z7-zHZaV+(Ku*^R5@?L^OCd&IEi9t&JCF_^gJpF~1Adf&l-wL40zz>^feIW;6F2Mi* N002ovPDHLkV1g}I*I)nu literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_action_reply_dark.png b/res/drawable-mdpi/ic_action_reply_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8ad689774bf4e9ad4f3e47ac3537e0d30fcd4224 GIT binary patch literal 532 zcmV+v0_**WP)B-@FxgG2PbisBvT6AI@F;= zsAxe0G4WhUAjBlSi8WbL=x}qt?>pz7^L;lVnS_5NVf;)=AXOl;0);|hRhH%IUz<1* zfl{foW}4=TBuU4y6DSso>i}J*z_Ak$1YwioxJCQau@b<^w*frwlsq;9<#M@V7{;92 z?^p=nqU2Z0kH8@k#(O{@L)Ab7UqOkQ zS3O?~;Qv07CwoBxR=laIdfsd{KYrO206?vv6EGbR^JMLTD;WgP5Z3)Z@l{OCZ5RSS zv1rB}6rN=n!(1*mkj-W*h#hsuqs9wtI15dHCcusgPRM!@QRPmMHsS=M1lsNPMWfO9 zbUtT(8=~kI5*M7weiuH9+S(rHkFe8MRADn@ig_#R*B*x-MsT5UhpB?)TJjYMU^wQe?{M$*| zro-UBG zt%Q>K_Y(YU{*CP3OCZj3H2|^%mySS{u*m!zg9>~zfNUM%&{h^VGOq@%0#G2pm4F1T z27p!qD)Z_du#_soQDo-L0az;m0d%dun3O<$V++T7WFDe``KFoxEC5RO1Lg{-Ac$87 z4LC{A^;{SLX;0{#d1whpd%|C2z8ip3N+^zW-BNce0j3i2w0x>F+1pEd0kj9KY?kU{ z?3%CYz5Txiuyc0Ef2mG&(!jg+07fZ{0brxs*L?hzz|K1FzX|TG^X`{H&JNG*Mo1DE z2UKgP-@6XB4`>NU0?Y~q1b`-x7H}FE<^U`L&;XReFa==gxCKZK3^M=-hb@6_!7u@U zbQA&B^f-)m@YM4J?Yl^o0+5+sIZBJ4F+zJlkIXZlC#a6m%?cm@!@nNS@W%Z>qBN&* zKat@ym~)uZ+yl-bIF642fJ4dioKS%0>~dlY1#l>No)Zf2oLx?Ap#Tmg&vQZnp0mq| Z?H6@$fKXaewwnL|002ovPDHLkV1g)Q{Xzf$ diff --git a/res/drawable-xhdpi/ic_action_reply.png b/res/drawable-xhdpi/ic_action_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..34ba065463b1b1c26fa5d7c730622af8d1ec0db3 GIT binary patch literal 970 zcmV;*12z1KP)bNLif5p@=YR2q-4Xw!it5gNLEs^5i5#p zEJzmeo!9TFIW^t)<2*C(nfp3tX6osj_uiRj=Knj-JZH|FQ|pPm)FRj4lK`X$h@3#0 z0+9zmN`h$$q$v1-SCV5xpPV&}^<(Is#0>JB09c ztrA^j0U&+^qDB0gc3HlX08GL=hVWH+x46myK>SEVAH`PWiLcx`z$Cnr2wSERUnu~H zAB~_B*b=Sy$^bA4?<|5Axrna>0K|_$$Z2e$t9VoYNRxJd`P*;oEA|QdK(hSi>0i~% z>uJy=yz}%hU)76$r5`kXgT2C@V9x;Z)8AcVOJ@LxAB!6a`*}qUMCnT+<34s95bu?3 z+E#M{U=rR%JkBYi^A3DSWZb}R0Yc8biy8pp$J5I>Y_@lA#W#G5%RV5y^L4EPU=rRX zI+^9$QNVVREc=1*!lw@x022ED)77{2N^aN*gx9VRQ~<;&Q83O-fo{+LRvKj*>;S?S z7YJ$q27;{jFJRrc188(T0KfrF#jK7K00Tj8gJ-bNYXBD=S=~A(+g>K7gXnPan4 z+{f>R_kvQ#Cjv|qJm&ZryNW%+k3@iX2?oFd(a-s&!6WPdfUFIk(*BRPYOCQ;0Eqkb zxD^R;ejs51i2D;63q+hBN!bZ2>d)kg$lOKx2!0nRa*9)mdR&|fHGaJ5Mxad s5Q1u%e5ME})71(w))WCDsFum+KSOu+K{qa~w*UYD07*qoM6N<$g3CL*tN;K2 literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_action_reply_dark.png b/res/drawable-xhdpi/ic_action_reply_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..7933dd0b298c52de75bf8dbc2012310a5fa45084 GIT binary patch literal 1080 zcmV-81jqY{P)j;SlOU+HwA9*ai^Z$r$v>bXcvBR-crJnp z9s~~x;=wkwB%)H$Ly8qDSRyoOOyYM!HiVdV-|S}7GP8xSZS&^6`F`fjo0;8J9FqSi zlIwTa0PGBqoPa$ABu@al2-;J?o&u5+u&2OABtSSEKAT7+o^3?z`j{=xfJh{A4xKnN zGcz+T8vsQU&x8ZOm{b6e_U9EvIjxD72>=`Uix7UQcEqIt5R1k7i^bxJ`gE58fDRW02}#X2tTa1#EA$%#ZotfrS6cP zcoFvjPNe+^(*6KNyifq5(dd>^sdO2lVpQ=W0dN7pRRD3o|hK}_%vm+E=h`9n7@ALWm>tr(dlhQ`dh6?~IcyKs@ z^bG1bw)lIN885Th?5k8NwQ43789-N8*VfL?PL}q2%mi#^TR`{$2=@VD(WqY%fJ(u; zj*;JOG?0bumI2}cYQt9}F~|Ts9?!&P8vRRZO0bvo-VG`5f4-W(~fQnPL-@mpID*#c{2OP2<5^c+7yZ{_*8EkKFzk;?_?*Vvp zXtpH`&LmGg;092M#J0d}I)se$(#kdf@EHK^Qezke;4r%t#)jrmqfWY9t~P+(0U>*F z-9{BsW5<;Rh5=}qfGzPTe&;#~vbKa9BJAc$FF;%Xi0wQeVE-0Ro}N(Jm<8ad9EXPy zY(FKSWB<0?*uH!!lh zsQz=g+-=GZu~`6Ezg&QD$*Nmo$h4h^aSISs9SAwpmp4mGOE1#t^oky^W&&Wb6m)b5 zom}^hFmDEEA^>=Ftt`X;*?oj}xIV`!u&gIs`@Y!#v`iR4M~<%732F_f^?{-o#ozT$ zm7%+o!l+Np&dx4Sg>HgO#HFbZMtXXB{63$ry2bs58+Fb|1~5PHc@LKiK2MSA30zA?#h2%-nZ}g1n74fxsgw1#CIIw8_(%9FP~z*^ zSPp-Pl0000VBYBI;uum9_jZn9-c<*Iw&YGd z@dr#Ia};I87cg?ISkT<<1x8kiKxfccG)_Guq3Pu;fk(nTL@@67$i4CnjS zF4AClsq*dMw%^*E!7nl#tv_$se}iAny(E{TVand(gaBF5Eyhk9wgHD2d=zT5N|;>S z{oXE7{-5~7)mfu~r_s;-+&iAj=dR>GWVlgsWWn5L3=t(q7RhojZ0Vb^g_*hGlHlyJ z1q@NII|8i>7}k~?StZNGaM3F18Xs?ihU~`dcCG^(ORqGSycHf)PE_5JH_UjVa zD2C|LE3?a1FkX43!JqchGikll`<{|F$15KYwAEV;*V6nZGdp)^W@2o4=*MD0R8b2=uaW zUe(%K=Kd)6DGYON{jA+OnX%-f>511-Q~4T#t?TckST+W}>fmx{E&KOt*MiS!y?*W{ z40GH+zVZ!wH*Z~u3u8ie*)+Y{ISQF2EbJTHtywvi?o{TIb!4>Yzvf$Pz4rwN+k+Xm zUPihLFbLjy8R~wP(IqRLmFcd1XU|SE)(cM7dta`QY?yZIrKh_ugTj`}-F=4`6}Db( z?sH-^$Y_ssPh^;}FVdQ&MBb@0Hn#N4gdfE diff --git a/res/drawable-xxhdpi/ic_action_reply.png b/res/drawable-xxhdpi/ic_action_reply.png new file mode 100644 index 0000000000000000000000000000000000000000..6c45faebf15b85755a007afe397e26d1e7027bf4 GIT binary patch literal 1569 zcmb7^*;f*10L4ER0V$JQaI1q$29^sgCv8!1L8TeV6tgmo8nwn4HDOR^EYLAU%B6C* z+_Dq7Qq6Ho1r1xwvQ4ARBr-L{T?-XsoIjz5dw&o2?cQ^4nlH^u2W^T50O(M?J^WV5 z_+Kc*sw?tiodD1prFyv1<3c8`1qlNv#*YRf3bB5kA=5XL2o{vvNZd|?s4U+^!4gC6 z?i=lv47aMIW;;sHB&E6V4cxNzT%Ca)?(d^h*mZatN z>76bthk&VT=Qcyl&vU&O?U~x3#V_i}K+xMfU`uJhJ}BjW4*PE3xA)WpgfXPcOP)$o zIY*fC1c)5IcAq@VWtU7TKZIS@NA2h%mPTd<~yZYREBzWoh%e z=K{-?9N#w)fe9e1+l3r0<-*-D9ddzNvBqd7uv~V=o}$CMxIZI4w6du$AR!3pgdV@5 zqaXMXf+fgT3j=vTL6G-nfn zkwvCQ(;+B2O{y{O#3K*A^zR06A>RL4`W=NCk2sTBCc}%UkWL)oN9qsNsP| z{p|~rgIE5F(g#X}60NjU;$-nMoM;D+W#Ql7Qt7h}C`c(-W)Gn)5E&G@Su%J+EXjC4 zgL%ga1n0)R(W`Mff|=4f)Q|b1=C*4BMOFb`p4$P2Td{$&RH&kS%hQrVc#VfTOTD2$ z!73J;?Wz}e2FgF%CNN>iC9Guu0?c^bxLmZyTU|a(l0RCy_7bB76q&BD21#*`v!B5@ zNo%kQk~oq!WMd4ZT)mo4K6kI%p7)QY1?Ry!n%=-qf@wWi=CVUYB;9BHH~92JMlJrz zO$J~>${7YOP7})Pt5F3a{N)oS=Fy3HnEp%em8e)!VL=Uss#{?<8Eg9mMZA~`oC{F+?`Ge7?F=^OVu;J1lzJ36j*ifY8 zeQDM+?H{3kiGO$Upt72<8zf3>#t?@yT0wK;(Q?ZYyczWAD{<14GY~nZoUTW79SXHa z)#b7aR}|**{VNoifh^7#7rVcpQ7keK|BN>SY4AvDOjj=IS$@N-g}GkG0?Ye1_2MI#=+r+clPedn&$!49akNEEGdF%760r?ezx{ermq?lv#!aftd+LY+{ z8hhqdk^2l;aD zfuN_el@u}r>R>i4Rn8}e_6Vu!dIJv$OZaWtU8*pcW62!1RSj@3Zy=9RLpwTf9mCn_ z`M-iVn!=8t4sBkyY|6oO%)MgO)7Px-I1aBR^t)J>z<4SRw#14-YUhwuqZ%Gl78=3skgCR4bfGHfCs-mYX1{MNE!5DZq-I$gt~p8^f^+ zcq(ykJZ^C6@1R@?d2M9R-EUpn546XG8li%P%QfLE98^~sn|d9bsH>sBSSkJmh>RK{ zpoD6DWpC$u^F2?vHMh#HZ(>)q8H2Dcgai<_mMTA5{w&ER67K7Wv(cxJw}`9P52zHH JN39zp=|7iG$~*u7 literal 0 HcmV?d00001 diff --git a/res/drawable-xxhdpi/ic_action_reply_dark.png b/res/drawable-xxhdpi/ic_action_reply_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..f652e1785c43bc5cf14c71994adcafced06b9a89 GIT binary patch literal 1743 zcmb7_`#;nB1IORPkn3EhX)!04CY~ZGDJ0+HY?#K^x3-+GA$)!Rg!9Ae_5Atuc)cEvR{`m`m!=v@4FI6&<4ruV z&FKG2Re9S*w=X#Zpv?3kx(8)ME!_*JMI1GH#edp&?k%gJSW~L&=o_7b!640Ji4Aaf z#C1j}s->0b#N|Ae|5Zk=Uc>5VA>dc_>}tx*%AbW|^V=!j;W9){AZJffEN*;oZL3E~ z#QuuESS=6R^qS|b1uxU?xWD!yoh&@e#65uNgh|LxLF(IZx zsaPyVDyyi_hx-jgf>nK3X=`gMa#XUMwz08c>G6omOt`FAQ&%@v=eH zcmgMJ1oYH{_6pr-fST_zEcQIeyMq8)Ai9W>i_5lTWKT6@!2YT$5r5vZIXOAm@F~UQ zYgsUm2lmlXsCkoX@}+FPD(LdP%u1lq@-1}>#!LULQ)LE+Zje8+8XFq?%5U8=88e`q z=`j>|>ENbTZq|+_;r1Rk>n1u@)U(-aR!7I0svz0P#uFG}y+k3w!RRADeWZm7GM!-2 zHTO~R7vTmJaJ!&Oy=@oy1%1MFow-jJhQh{j!tx%7ap59ArB4MWcDAWyyP(m{JJ z5vnJ`;b=7aDH4f1%Q+jIwZF5a>&sy#Z)S?kE^_8@G!-d5L*A&0Rlb_!3#R-eA`x<#vIyO1Y5o-8Ru zw0P>vMTtT8UIGeU6xc0COWr#5kJ-Gyf=6@HI)#691pcOyju!fBoAR6KI|5T(#!F)~ z32|{V_cL7otVkA7p)RqiJ_7u@yFZ{OAo`P3#+7vWRwRLuO z);1-$c?HtF2XPahDxV^jJwA zEd~CJ1G+m9SeS5Dt8**)tO{p7cz`!_%-?@lX{g^owOd(fUu*izy5cEUH9F={XyMu< zv+~;Z%;Ik?2HhWmeT%>QvSi(Fijgg?#DwFmK`-I?n;$igKEt`WZCxu4FLeY#I^%^Y zd9f~ic~)}ez!V%!cnVfxzwo5*;Ibnp4KqYnM;z9|V|iMH^no8H@?C_nc2NH-+G&jO zu8CsNinDpThScjq?|jZgir92eFT%ZB25c@RUx|6E|GT7cKQviLbigO{%ww`tiv|~y z6Sb;#@T4;u5JL%{nV~z~nD{c;ipn$RiuVP?l_t5Fv4#!d-J84YXDP>Cr>Q~r9#)*F zv^3-R>j7g0M@L8VLIwjb9F1f@{9$%ob2IAYyTrIzr=QshOZ~J0oc%?%dp5fTyQt({25dlVEl`XUgeWj--!P3EnM95m_Io zrco%-P0VNbGE7f-b(}xD3ra2DeWY$QHObS0Te^}PK=GD0d>VajY-Ch3 zs(;Pa7POQnEng^FQY8fvEL~iyg9&%{YQ)*qjG_sLYmXl&Gc*RNxu((H8AcVELG?R7 z6ail0b-~pyLXx40_)EApIa^ym8IiuXwy_3t5lXeSwfD3ozi%FD-Wp+!6<{njFYdn5 zb1P@yBHvwA5!`)r-i_^h)4%G4jRjlq5dEv4bJS&>+DhZ7M(5to4?qo;lppS1KYmhX zy9VBC--APkq%aN5>at3AN?_WD2p l3WJ^bstfz48~~e&5r^>fmrj3{Z66izIeMJf - - - - - - - \ No newline at end of file diff --git a/res/menu/detail.xml b/res/menu/detail.xml index 6a883b6ae..60267c05f 100644 --- a/res/menu/detail.xml +++ b/res/menu/detail.xml @@ -11,4 +11,10 @@ android:showAsAction="ifRoom" android:icon="@drawable/ic_action_download" android:title="@string/download"/> + + diff --git a/res/raw/change_log b/res/raw/change_log index e098e4298..53003f49b 100644 --- a/res/raw/change_log +++ b/res/raw/change_log @@ -6,6 +6,8 @@ Version 0.4.5 (2014-??-??) * 更规范的界面 * 添加评分功能 * 添加标签投票功能 +* 添加评论查看与发送功能 +* 评论按发布时间排序 * 调整下拉刷新控件 * 调整部分数据的存储方式 * 支持语音搜索 diff --git a/src/com/hippo/ehviewer/ListUrls.java b/src/com/hippo/ehviewer/ListUrls.java index e6fb6f177..1730d330d 100644 --- a/src/com/hippo/ehviewer/ListUrls.java +++ b/src/com/hippo/ehviewer/ListUrls.java @@ -185,28 +185,6 @@ public class ListUrls { return numPerPage; } - public boolean pageUp() { - if (page < max - 1) { - page++; - return true; - } - else { - page = max -1; - return false; - } - } - - public boolean pageDown() { - if (page > 0) { - page--; - return true; - } - else { - page = 0; - return false; - } - } - public String getUrl() { StringBuilder url = new StringBuilder(EhClient.listHeader); url.append("?"); diff --git a/src/com/hippo/ehviewer/activity/CommentsSectionFragment.java b/src/com/hippo/ehviewer/activity/CommentsSectionFragment.java index 9433af1f8..2a8c6383f 100644 --- a/src/com/hippo/ehviewer/activity/CommentsSectionFragment.java +++ b/src/com/hippo/ehviewer/activity/CommentsSectionFragment.java @@ -19,6 +19,7 @@ import android.widget.TextView; public class CommentsSectionFragment extends Fragment { + @SuppressWarnings("unused") private static final String TAG = "CommentsSectionFragment"; private MangaDetailActivity mActivity; @@ -101,16 +102,34 @@ public class CommentsSectionFragment extends Fragment { public long getItemId(int position) { return position; } - + @Override public View getView(int position, View convertView, ViewGroup parent) { + boolean isUserSame = true; + boolean isTimeSame = true; + if (convertView == null) convertView = LayoutInflater.from(mActivity) .inflate(R.layout.comments_item, null); Comment c = mComments.get(position); - ((TextView)convertView.findViewById(R.id.user)).setText(c.user); - ((TextView)convertView.findViewById(R.id.time)).setText(c.time); - ((TextView)convertView.findViewById(R.id.comment)).setText(Html.fromHtml(c.comment)); + + TextView user = (TextView)convertView.findViewById(R.id.user); + if (!c.user.equals(user.getText())) { + isUserSame = false; + user.setText(c.user); + } + + TextView time = (TextView)convertView.findViewById(R.id.time); + if (!c.time.equals(time.getText())) { + isTimeSame = false; + time.setText(c.time); + } + + // No one can post one comment at same this time + if (!isUserSame || !isTimeSame) + ((TextView)convertView.findViewById(R.id.comment)) + .setText(Html.fromHtml(c.comment)); + return convertView; } }; diff --git a/src/com/hippo/ehviewer/activity/DetailSectionFragment.java b/src/com/hippo/ehviewer/activity/DetailSectionFragment.java index 6ec916b83..cb3836cb3 100644 --- a/src/com/hippo/ehviewer/activity/DetailSectionFragment.java +++ b/src/com/hippo/ehviewer/activity/DetailSectionFragment.java @@ -684,10 +684,6 @@ public class DetailSectionFragment extends Fragment public void onSuccess(GalleryDetail md) { Cache.mdCache.put(String.valueOf(mGalleryDetail.gid), md); layout(md); - - for (Comment c : mGalleryDetail.comments) { - Log.d(TAG, c.time); - } } @Override diff --git a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java index d6fc1219f..f8b0ca6ff 100644 --- a/src/com/hippo/ehviewer/activity/MangaDetailActivity.java +++ b/src/com/hippo/ehviewer/activity/MangaDetailActivity.java @@ -70,6 +70,7 @@ import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; +import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RatingBar; @@ -94,6 +95,8 @@ public class MangaDetailActivity extends FragmentActivity private DetailSectionFragment mDetailFragment; private CommentsSectionFragment mCommentsFragment; + private int mTabIndex; + private DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); @Override @@ -162,6 +165,8 @@ public class MangaDetailActivity extends FragmentActivity @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { mViewPager.setCurrentItem(tab.getPosition()); + mTabIndex = tab.getPosition(); + invalidateOptionsMenu(); } @Override @@ -192,8 +197,6 @@ public class MangaDetailActivity extends FragmentActivity mCommentsFragment.setComments(comments); } - /* - @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection @@ -202,12 +205,13 @@ public class MangaDetailActivity extends FragmentActivity finish(); return true; case R.id.action_favourite: - mData.addLocalFavourite(mangaDetail); + ((AppContext)getApplication()).getData().addLocalFavourite(mGalleryInfo); Toast.makeText(MangaDetailActivity.this, getString(R.string.toast_add_favourite), Toast.LENGTH_SHORT).show(); return true; case R.id.action_download: + /* Intent it = new Intent(MangaDetailActivity.this, DownloadService.class); startService(it); if (mangaDetail.firstPage == null) @@ -222,13 +226,63 @@ public class MangaDetailActivity extends FragmentActivity Toast.makeText(MangaDetailActivity.this, getString(R.string.toast_add_download), Toast.LENGTH_SHORT).show(); + */ + return true; + + case R.id.action_reply: + final EditText et = new EditText(this); + //et.setMinimumHeight(Ui.dp2pix(64)); + LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( + LinearLayout.LayoutParams.MATCH_PARENT, + LinearLayout.LayoutParams.WRAP_CONTENT); + int x = Ui.dp2pix(8); + lp.leftMargin = x; + lp.rightMargin = x; + lp.topMargin = x; + lp.bottomMargin = x; + new DialogBuilder(this).setView(et, lp) + .setTitle("评论") + .setPositiveButton("发送", new View.OnClickListener() { + @Override + public void onClick(View v) { + ((AlertButton)v).dialog.dismiss(); + String comment = et.getText().toString(); + ((AppContext)getApplication()).getEhClient() + .comment(EhClient.getDetailUrl(mGalleryInfo.gid, mGalleryInfo.token, EhClient.EX), + comment, new EhClient.OnCommentListener() { + @Override + public void onSuccess(List comments) { + setComments(comments); + } + @Override + public void onFailure(String eMsg) { + Toast.makeText(MangaDetailActivity.this, eMsg, Toast.LENGTH_SHORT).show(); + } + }); + } + }).setNegativeButton(android.R.string.cancel, + new View.OnClickListener() { + @Override + public void onClick(View v) { + ((AlertButton)v).dialog.dismiss(); + } + }).create().show(); + return true; default: return super.onOptionsItemSelected(item); } } - */ + @Override + public boolean onPrepareOptionsMenu (Menu menu) { + MenuItem reply = menu.findItem(R.id.action_reply); + if (mTabIndex == 1) + reply.setVisible(true); + else + reply.setVisible(false); + return true; + } private class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { diff --git a/src/com/hippo/ehviewer/activity/MangaListActivity.java b/src/com/hippo/ehviewer/activity/MangaListActivity.java index 01303161b..4c16ef639 100644 --- a/src/com/hippo/ehviewer/activity/MangaListActivity.java +++ b/src/com/hippo/ehviewer/activity/MangaListActivity.java @@ -1293,7 +1293,7 @@ public class MangaListActivity extends SlidingActivity { mHlv.setOnFooterRefreshListener(new HfListView.OnFooterRefreshListener() { @Override public boolean onFooterRefresh() { - if (lus.pageUp()) { + if (lus.setPage(lastPage+1)) { mGetMode = NEXT_PAGE; getList(); return true; diff --git a/src/com/hippo/ehviewer/data/Data.java b/src/com/hippo/ehviewer/data/Data.java index 7a703c89d..9c9780c8c 100644 --- a/src/com/hippo/ehviewer/data/Data.java +++ b/src/com/hippo/ehviewer/data/Data.java @@ -513,7 +513,7 @@ public class Data { public synchronized void addLocalFavourite(GalleryInfo galleryInfo) { int gid = galleryInfo.gid; - if (containsRead(gid)) { + if (containsLocalFavourite(gid)) { updateGallery(galleryInfo); } else { addGallery(galleryInfo); diff --git a/src/com/hippo/ehviewer/ehclient/DetailParser.java b/src/com/hippo/ehviewer/ehclient/DetailParser.java index 913083ea8..0335f0ce4 100644 --- a/src/com/hippo/ehviewer/ehclient/DetailParser.java +++ b/src/com/hippo/ehviewer/ehclient/DetailParser.java @@ -1,5 +1,7 @@ package com.hippo.ehviewer.ehclient; +import java.util.Collections; +import java.util.Comparator; import java.util.LinkedHashMap; import java.util.AbstractMap.SimpleEntry; import java.util.LinkedList; @@ -25,6 +27,8 @@ public class DetailParser { public static final int OFFENSIVE = 0x20; public static final int PINING = 0x40; + private static final CommentSort cs = new CommentSort(); + private int mMode; public int category; @@ -141,8 +145,10 @@ public class DetailParser { m = p.matcher(pageContent); comments = new LinkedList(); while (m.find()) { + re |= COMMENT; comments.add(new Comment(m.group(1), m.group(2), m.group(3))); } + Collections.sort(comments, cs); } return re; } @@ -188,4 +194,68 @@ public class DetailParser { type = ListUrls.UNKNOWN; return type; } + + static class CommentSort implements Comparator { + private int compareNum(String n1, String n2, int median) { + int re = 0; + for (int i = 0; i < median; i++) { + re *= 10; + re += n1.charAt(i) - n2.charAt(i); + } + return re; + } + private int getMonth(String m) { + if (m.equals("January")) + return 1; + else if (m.equals("February")) + return 2; + else if (m.equals("March")) + return 3; + else if (m.equals("April")) + return 4; + else if (m.equals("May")) + return 5; + else if (m.equals("June")) + return 6; + else if (m.equals("July")) + return 7; + else if (m.equals("August")) + return 8; + else if (m.equals("September")) + return 9; + else if (m.equals("October")) + return 10; + else if (m.equals("November")) + return 11; + else if (m.equals("December")) + return 12; + else + return 0; + } + + @Override + public int compare(Comment c1, Comment c2) { + int re = 0; + Pattern p = Pattern.compile("(\\d{2}) (\\w+) (\\d{4}), (\\d{2}):(\\d{2})"); + Matcher m1 = p.matcher(c1.time); + Matcher m2 = p.matcher(c2.time); + if (!m1.find() || !m2.find()) + return 0; + // year + re += compareNum(m1.group(3), m2.group(3), 4); + re <<= 4; + // Month + re += getMonth(m1.group(2)) - getMonth(m2.group(2)); + re <<= 5; + // Day + re += compareNum(m1.group(1), m2.group(1), 2); + re <<= 5; + // Hour + re += compareNum(m1.group(4), m2.group(4), 2); + re <<= 6; + // Minute + re += compareNum(m1.group(5), m2.group(5), 2); + return re; + } + } } diff --git a/src/com/hippo/ehviewer/ehclient/EhClient.java b/src/com/hippo/ehviewer/ehclient/EhClient.java index a20a7480d..d587eec8b 100644 --- a/src/com/hippo/ehviewer/ehclient/EhClient.java +++ b/src/com/hippo/ehviewer/ehclient/EhClient.java @@ -14,6 +14,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1516,6 +1517,44 @@ public class EhClient { } + // Post comment + public interface OnCommentListener { + void onSuccess(List comments); + void onFailure(String eMsg); + } + + public void comment(final String detailUrl, final String comment, + final OnCommentListener listener) { + new Thread(new Runnable() { + @Override + public void run() { + HttpHelper hp = new HttpHelper(mAppContext); + hp.setOnRespondListener(new HttpHelper.OnRespondListener() { + @Override + public void onSuccess(String pageContent) { + DetailParser parser = new DetailParser(); + parser.setMode(DetailParser.COMMENT); + if (parser.parser(pageContent) == DetailParser.COMMENT) { + listener.onSuccess(parser.comments); + } else { + listener.onFailure("parser error"); // TODO + } + } + + @Override + public void onFailure(String eMsg) { + listener.onFailure(eMsg); // TODO + } + }); + hp.post(detailUrl, new String[][]{ + new String[]{"commenttext", comment}, + new String[]{"postcomment", "Post New"}}); + } + }).start(); + } + + // TODO + /********** Use E-hentai API ************/ // rate for gallery diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java index aafcf796c..fbd53cc68 100644 --- a/src/com/hippo/ehviewer/network/HttpHelper.java +++ b/src/com/hippo/ehviewer/network/HttpHelper.java @@ -336,6 +336,7 @@ public class HttpHelper { return null; } + /* public String post(String urlStr, String str) { mException = null; @@ -420,7 +421,7 @@ public class HttpHelper { mException = new RedirectionException(); return null; } - + */ public String postJson(String urlStr, JSONObject json) { mException = null; diff --git a/src/com/hippo/ehviewer/view/SearchView.java b/src/com/hippo/ehviewer/view/SearchView.java deleted file mode 100644 index d77ac352f..000000000 --- a/src/com/hippo/ehviewer/view/SearchView.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.hippo.ehviewer.view; - -import com.hippo.ehviewer.R; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.widget.LinearLayout; - -public class SearchView extends LinearLayout { - public SearchView(Context context) { - super(context, null); - } - - public SearchView(Context context, AttributeSet attrs) { - super(context, attrs); - - LayoutInflater inflater = (LayoutInflater) context - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - inflater.inflate(R.layout.search_view, this, true); - } - - -} diff --git a/src/com/hippo/ehviewer/view/TagListView.java b/src/com/hippo/ehviewer/view/TagListView.java index b59179997..d5b15d2f5 100644 --- a/src/com/hippo/ehviewer/view/TagListView.java +++ b/src/com/hippo/ehviewer/view/TagListView.java @@ -366,12 +366,12 @@ public class TagListView extends ListView { int deltaY = mLastEventY - mDownY; if (mCellIsMobile) { - if (deltaX < -mHoverCellOriginalBounds.width() / SENSITY) + if (deltaX > mHoverCellOriginalBounds.width() / SENSITY) mIsDelete = true; else mIsDelete = false; - if (deltaX > mHoverCellOriginalBounds.width() / SENSITY) + if (deltaX < -mHoverCellOriginalBounds.width() / SENSITY) mIsModify = true; else mIsModify = false; diff --git a/src/com/hippo/ehviewer/widget/DialogBuilder.java b/src/com/hippo/ehviewer/widget/DialogBuilder.java index 3f47a7eed..b3ffbd6d2 100644 --- a/src/com/hippo/ehviewer/widget/DialogBuilder.java +++ b/src/com/hippo/ehviewer/widget/DialogBuilder.java @@ -103,20 +103,25 @@ public class DialogBuilder extends AlertDialog.Builder { * @return */ public DialogBuilder setView(View view, boolean center) { + LinearLayout.LayoutParams lp; + if (center) { + lp = new LinearLayout.LayoutParams( + LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + lp.gravity = Gravity.CENTER; + } else { + lp = new LinearLayout.LayoutParams( + LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); + } + setView(view, lp); + return this; + } + + public DialogBuilder setView(View view, LinearLayout.LayoutParams lp) { ScrollView scrollView = (ScrollView)mView.findViewById(R.id.scroll_view); scrollView.setVisibility(View.VISIBLE); LinearLayout customLayout = (LinearLayout)mView.findViewById(R.id.custom); customLayout.setVisibility(View.VISIBLE); - if (center) { - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); - lp.gravity = Gravity.CENTER; - customLayout.addView(view, lp); - } else { - LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( - LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); - customLayout.addView(view, lp); - } + customLayout.addView(view, lp); return this; }