From 5ea2fdb6517787bd1f723b83c883dc44487c90bd Mon Sep 17 00:00:00 2001 From: seven332 Date: Wed, 11 Jun 2014 20:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=BD=E8=B1=A1=20AbstractGalleryActivity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/drawable-hdpi/ic_error.png | Bin 0 -> 1207 bytes res/drawable-hdpi/ic_error_dark.png | Bin 0 -> 1433 bytes res/drawable-mdpi/ic_error.png | Bin 0 -> 779 bytes res/drawable-mdpi/ic_error_dark.png | Bin 0 -> 885 bytes res/drawable-xhdpi/ic_error.png | Bin 0 -> 1736 bytes res/drawable-xhdpi/ic_error_dark.png | Bin 0 -> 1980 bytes res/drawable-xxhdpi/ic_error.png | Bin 0 -> 2706 bytes res/drawable-xxhdpi/ic_error_dark.png | Bin 0 -> 3071 bytes res/layout/list.xml | 1 - res/values-zh-rCN/strings.xml | 2 +- src/com/hippo/ehviewer/ListUrls.java | 37 +- src/com/hippo/ehviewer/ehclient/EhClient.java | 12 +- .../hippo/ehviewer/network/HttpHelper.java | 4 +- .../ehviewer/ui/AbstractGalleryActivity.java | 405 +++++++++++++++++- .../hippo/ehviewer/ui/FavouriteActivity.java | 20 +- .../hippo/ehviewer/ui/MangaListActivity.java | 388 +++-------------- src/com/hippo/ehviewer/widget/HfListView.java | 8 + src/com/hippo/ehviewer/widget/SuperToast.java | 36 +- 18 files changed, 510 insertions(+), 403 deletions(-) create mode 100644 res/drawable-hdpi/ic_error.png create mode 100644 res/drawable-hdpi/ic_error_dark.png create mode 100644 res/drawable-mdpi/ic_error.png create mode 100644 res/drawable-mdpi/ic_error_dark.png create mode 100644 res/drawable-xhdpi/ic_error.png create mode 100644 res/drawable-xhdpi/ic_error_dark.png create mode 100644 res/drawable-xxhdpi/ic_error.png create mode 100644 res/drawable-xxhdpi/ic_error_dark.png diff --git a/res/drawable-hdpi/ic_error.png b/res/drawable-hdpi/ic_error.png new file mode 100644 index 0000000000000000000000000000000000000000..2496c5b918baf0e63d8d83424bdb4d73a8d2aca7 GIT binary patch literal 1207 zcmV;o1W5adP)~lNrJ!cQ+yXe!m>)-vpyZ2gq{nuK1uXWDNRjJ@3SHbPCQc2)nN3b#i|3w7K z%F3!kqyy+?K3nnG7}PKXKk@kjJOp>aO>ifd%Y7-Y1Im>`7~TW}27$hyBdG0Z(0fDV z0-t9g^2}4NXjvu#7+w`ky}(@15@gb2ta;4m7H}CN-$IE5Z;bH`*<>;p72t7~U5dzY zupbgHU5n%MK?E?qIl@apk8*lF$;L9iya850;)yQ_Zvrvnd-^KRxbAug2`>T|-vFhn z!Jjrh;w%zNiNq_H6PyIhft`h-Nq-=1((F?@9R%B42iu20ZxpR7;emBIHJaDKUIKxO zHUTREysu)k3$(T<`Oe%q@Dz*%H60dyVE!m*0R{kF$!X&e6Ekde!bM;l3g%l= z+YV&dFl`8Q)g}$)^iFUZ)B>}?2nUHx5KuZLj#L7sJ=ltrQYdYlXJQ2#yp0whr}{7t z6h`7B->qlu$=KRD{Jj$Nv+Qw=xmn14OX?qfOF=yuShE>UDk&Lwq=YP6tsW zA4C|?gG zZ3Y2#vASkmIbSIL8J&r@p)G~75Kt{BI5tw`y>s@+JsVhf9% zZ7V%DF9;M|iQt#v{Qi{YG&oIzXI{py!FatSa1L(*CK4jC*pLX4 zbz1W4$?a;0@zNP=1d&iWO#phpDAmE%OMzoRFL&Q~kj*a%CSW2VIsKTS*XwPvIKo&U zuipoo!FAVxO(K?wK%|Ihs7|O5>2P-nh=@F{)<8dS=y^Bjm3o{=xd_CFsO?be-392U zrdB||-b78B+HDo1_)kptFg*ANjlw9Dgg{8nmU?X^fl_-kR9|HTLOoXM^%Xt>KLGIh Vi9i)Gxb*-4002ovPDHLkV1h<^8%6*C literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_error_dark.png b/res/drawable-hdpi/ic_error_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8f2a6cda2a5f621b20aa23e60f996cf56bd44464 GIT binary patch literal 1433 zcmV;K1!nq*P)aim4PWUjK8NjLr$mXyvt#T!Ell{hdJ-F{h#e! zaLShW<1BIe%a#HB*AZNf!2cxzk=EAM`nkEe_2uQ|^?+K#SjD)?1vtz5FGk97oL`_j zlSm}S`JG*;0~VA*jg5_~D=I2lFzOCQeLkPR+QcAeXP_I;<#MNIXJ-dSM@RoO;q#*j z3&3e>Yl~s+c6sE>CB2M2#M1z`-pWBjeA!o$!3V$24F z5rBqJp&DA;F8Rj@jbdZHk$_Ao_#TE(LT(A?a-3gZtVpiUtq&s+k4zZ0b`{9UOrGQ<2y zXm5Zgu8Jx&XJ=++I#uh05&(s}1tpIulrWwDYI1V&*u=y{2KsxTeTZ+>ejxaMo>tk_ z-{1drU0q#OO-;=%jBHndfaeHZ=|qrIQ~+dqupa@jKxW4oOr=t9V|=`Xa6=(smqPDhnFTb0Dbinf+JcpRi`OyRdAbslb)gDulm+BCIgI;=Z9q44 zQVa7B(Yx18zdRs6@Os`QasavmpbtV9QR!j6i!}Pw3IM{NhT%??V41^!X%u|IyQer3 z?3eBq8p(Md&u@k20h8_qT>{y!TLHj>FChFT9RL?ZU?hC_jXhuB1waY_FIoX00j|Lt~5=dpjKJLFKdf(vGesZjlw#GQ1m=Ttu+L2#UkbM z$vSgcdzJ5s#m-k9QJtWZy=0X_EMy%p-lYSeS){gd(wbvyd{VdAsq~;D!8%~qMgg!5 z0FP(@1m*mEs}z2>us<)3hDA*rXR-XuDgtby*8$);%~qlZ&m2YY{6596RjL*{Khx6(&=NV32GyX@q64eL6H5@06qjjPoNW3 zIZk-5Vg7(_OX1!ooC8RkZjq8ma9sR`_jSm=MWtW54}d#4TFR}S@1s3Za{IQSva<47 zRW0Z`RhW5+7C_&i#*!+2EdWU$`u0xV_p4GVjFAc+Iq7v{{PE(>Rm@`opp4G4k|^xO zD~%;KG)P=>YHI4Ov9YlWI(2rv_3= zuGeo2;|N!d^!W+K5qkaix`Oos78bxIS+Y*BAjPG)>Df1%MnpUg`%etHb(8b1)s?yz z$btZP1j)8zt-B>yhkXt^c7>9EDN=uu0pJ(k=ri nsXIdmTaG{orV zLaZp6G8z6p-|3#)b>?^Ox$a%eW^R4E_nhDBdw%ElJNG0_Bm5*I9KUIlKNN$gYq8!4F`(6^#AQ;7(oJa1Rn)A^RW!f-lGDT#ev)5=TRsFbNQR zI@Z@Kq&>7yZAZIR6T=9k)!vE0I?r2!@qO?X90KD!`5V+7hz*lpzU3dTK}Cy0u2 zM@m9d-Jr+yKJuN6_ZmKKqNA-X%z&ING>lczcfeJg{7Q+e6(7b*uZWH3rSoD77-RT& zfv(6E5_pJos$s0DArd&bXvra<+6V=g$v13Q#|S({VM2g_BhiT?)kO9Xd=rC?z{;K8 zAa+aY5>UaNbZK|aAfW9y1N`pD$16pkXbZAx4{U+o9lqLEh_8ud;06kdi~vKyLB85I zt1fV=^TF>9D-+MrRr_X-bq+|O-5}6~@!d2~zS=dV?ogYGq=;5gy;{8R0Wbr7{;|2jrMSvd{X8!J%1zXRH9zt2TNtD6H> z8Mdme6VanMP2n`&*T77}QI)BW80{hWXWzK!cf1tk^PuWoz{UE_#}R_-mNe{%T}X7S zZm&T?!F6(83Z<>gl}wp9TwyytD1)JuJ3>(cxtiF=_e$V*hrc*gyY7K%%P+BlDMcV9 zAzf9tyOz)5drBJMJMa9p{Ec7jmA4?ag1Yk38K@g*Gy|aw`~~=&_aPE-h(Q1V002ov JPDHLkV1l0ebR7Ty literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_error_dark.png b/res/drawable-mdpi/ic_error_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..502ba337dd1d43f28c2953b2bb4fa30dd00c41e7 GIT binary patch literal 885 zcmV-*1B(2KP)i7ExaJ0+InO#mbmZ`>gCX-3K*|`Gf?d`oxCMR&xhy}TdeUG<%$6;IXaXaEq8$M@mi=ZNU&(9Ml-goUdWKlpUugWu3M3>(k*-32zd*jL;ZmpV6>gm?_gSflNU9Amd5v z2d3sR#S~0=aX>brdnj#FtdseCel(ZM{nxO)J{{q3xTCA9>pHe^#lDErFhIY!0uZu7 zs2h~_sHV>{@87x4Y1nRJGihzbG1Zp!PwaxvSYLBc(f*9sPIt1M-Ujh*9og2g_N!1R zjAXOf-woVyat0R;0pJ$$^_~T4t}FO?OzAVaSgr>WSbhWBRJH-3dr50KAe}mwXGrrdMDU*^iPiV=KTZ00000 LNkvXXu0mjfyt1Vw literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi/ic_error.png b/res/drawable-xhdpi/ic_error.png new file mode 100644 index 0000000000000000000000000000000000000000..e14261d79ac5f9a50cb2890fb84ee7a1bf77cb2f GIT binary patch literal 1736 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

~r6nUE3+S+!Rpr+H-I{gcQ<|hSFsPq1 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 N002ovPDHLkV1kyZ(T)HB literal 0 HcmV?d00001 diff --git a/res/layout/list.xml b/res/layout/list.xml index a0b80fbf7..caa83940a 100644 --- a/res/layout/list.xml +++ b/res/layout/list.xml @@ -40,7 +40,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" - android:onClick="buttonRefresh" android:text="@string/refresh" /> 更新 感谢 开发 - 左划更精彩 + 左划更多 \ No newline at end of file diff --git a/src/com/hippo/ehviewer/ListUrls.java b/src/com/hippo/ehviewer/ListUrls.java index 0960ae623..b36cdb2d4 100644 --- a/src/com/hippo/ehviewer/ListUrls.java +++ b/src/com/hippo/ehviewer/ListUrls.java @@ -62,8 +62,6 @@ public class ListUrls { private int mMode = NORMAL; private int page = 0; - private int numPerPage = 25; - private int max = -1; private int type = ALL_TYPE; private int advsearchType = -1; @@ -140,45 +138,14 @@ public class ListUrls { return minRating; } - public boolean isSetMax() { - return max == -1 ? false : true; - } - - public void setMax(int m) { - if (m < 1) - return; - max = m; - if(page >= m) - page = m-1; - } - - public int getMax() { - return max; - } - - public boolean setPage(int p) { - if (p < max && p >= 0) { - page = p; - return true; - } - else - return false; + public void setPage(int p) { + page = p; } public int getPage() { return page; } - public void setNumPerPage(int n) { - if (n < 1) - return; - numPerPage = n; - } - - public int getNumPerPage() { - return numPerPage; - } - public int getMode() { return mMode; } diff --git a/src/com/hippo/ehviewer/ehclient/EhClient.java b/src/com/hippo/ehviewer/ehclient/EhClient.java index c860f458f..049a162af 100644 --- a/src/com/hippo/ehviewer/ehclient/EhClient.java +++ b/src/com/hippo/ehviewer/ehclient/EhClient.java @@ -171,16 +171,16 @@ public class EhClient { } } - public static String getFavoriteUrl(int index) { - return getFavoriteUrl(Config.getMode(), index); + public static String getFavoriteUrl(int index, int page) { + return getFavoriteUrl(Config.getMode(), index, page); } - public static String getFavoriteUrl(int mode, int index) { + public static String getFavoriteUrl(int mode, int index, int page) { switch (mode) { case EX: - return EX_HEADER + "favorites.php?favcat=" + index; + return EX_HEADER + "favorites.php?favcat=" + index + "&page=" + page; default: - return G_HEADER + "favorites.php?favcat=" + index; + return G_HEADER + "favorites.php?favcat=" + index + "&page=" + page; } } @@ -1770,7 +1770,7 @@ public class EhClient { args[i] = new String[]{"modifygids[]", String.valueOf(gids[i-1])}; args[i] = new String[]{"apply", "Apply"}; - hp.post(getFavoriteUrl(srcCat), args); + hp.post(getFavoriteUrl(srcCat, 0), args); } }).start(); } diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java index e53c566d9..837117fe0 100644 --- a/src/com/hippo/ehviewer/network/HttpHelper.java +++ b/src/com/hippo/ehviewer/network/HttpHelper.java @@ -64,6 +64,8 @@ import com.hippo.ehviewer.util.Log; */ public class HttpHelper { private static final String TAG = "HttpHelper"; + public static final String SAD_PANDA_ERROR = "Sad Panda"; + private static String DEFAULT_CHARSET = "utf-8"; private static String CHARSET_KEY = "charset="; @@ -145,7 +147,7 @@ public class HttpHelper { return "SocketException : " + e.getMessage(); else if (e instanceof SadPandaException) - return "Sad Panda"; + return SAD_PANDA_ERROR; else return e.getMessage(); diff --git a/src/com/hippo/ehviewer/ui/AbstractGalleryActivity.java b/src/com/hippo/ehviewer/ui/AbstractGalleryActivity.java index dd47e8450..7bf46de96 100644 --- a/src/com/hippo/ehviewer/ui/AbstractGalleryActivity.java +++ b/src/com/hippo/ehviewer/ui/AbstractGalleryActivity.java @@ -23,12 +23,14 @@ import com.hippo.ehviewer.AppContext; import com.hippo.ehviewer.ImageGeterManager; import com.hippo.ehviewer.R; import com.hippo.ehviewer.data.GalleryInfo; +import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.util.Cache; import com.hippo.ehviewer.util.Ui; import com.hippo.ehviewer.widget.FswView; import com.hippo.ehviewer.widget.HfListView; import com.hippo.ehviewer.widget.LoadImageView; import com.hippo.ehviewer.widget.OnFitSystemWindowsListener; +import com.hippo.ehviewer.widget.SuperToast; import android.graphics.Bitmap; import android.graphics.Color; @@ -37,6 +39,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.AbsListView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; @@ -46,23 +49,208 @@ import android.widget.RatingBar; import android.widget.RelativeLayout; import android.widget.TextView; -public class AbstractGalleryActivity extends AbstractSlidingActivity { +public abstract class AbstractGalleryActivity extends AbstractSlidingActivity + implements HfListView.OnFooterRefreshListener, + HfListView.OnRefreshListener { @SuppressWarnings("unused") private static final String TAG = AbstractGalleryActivity.class.getSimpleName(); + private static final int REFRESH = 0x0; + private static final int NEXT_PAGE = 0x1; + private static final int PRE_PAGE = 0x2; + private static final int SOMEWHERE = 0x3; + protected AppContext mAppContext; + protected EhClient mClient; protected ImageGeterManager mImageGeterManager; protected List mGiList; protected GalleryAdapter mGalleryAdapter; - protected RelativeLayout mMainView; - protected HfListView mHlv; - protected ListView mList; - protected ProgressBar mWaitProgressBar; - protected Button mFreshButton; - protected TextView mNoneTextView; - protected ImageView mSadPanda; + private RelativeLayout mMainView; + private HfListView mHlv; + private ListView mList; + private ProgressBar mWaitProgressBar; + private Button mFreshButton; + private TextView mNoneTextView; + private ImageView mSadPanda; + + private long taskStamp; + + private int mFirstIndex; + private int mLastIndex; + private int mCurPage; + private int mFirstPage = 0; + private int mLastPage = 0; + private int mMaxPage; + private int mItemPerPage; + private int mGetMode; + private boolean mIsKeepPosition; + private int mTargetPage; + private String mTargetUrl; + private int mPaddingTop; + private boolean isFootRefresh = false; + + public void setNoneText(CharSequence text) { + mNoneTextView.setText(text); + } + + /** + * Get url string for very page + * + * @param targetPage + * @return + */ + protected abstract String getTargetUrl(int targetPage); + + private void getGallerys() { + setGallerysLayout(); + + taskStamp = System.currentTimeMillis(); + mClient.getMangaList(mTargetUrl, taskStamp, new ListGetListener()); + } + + @Override + public void onRefresh() { + if (mFirstPage != 0) { + getPrePage(true, true); + } else { + refresh(true); + } + } + + @Override + public boolean onFooterRefresh() { + boolean re; + isFootRefresh = true; + re = getNextPage(true, true); + isFootRefresh = false; + return re; + } + + protected void onlyShowList() { + mHlv.setVisibility(View.VISIBLE); + mWaitProgressBar.setVisibility(View.GONE); + mFreshButton.setVisibility(View.GONE); + mNoneTextView.setVisibility(View.GONE); + mSadPanda.setVisibility(View.GONE); + } + + protected void firstTimeRefresh() { + // set mHlv gone, make wait view show + mHlv.setVisibility(View.GONE); + + refresh(true); + } + + private void setGallerysLayout() { + if (mHlv.getVisibility() == View.VISIBLE) { + if (!isFootRefresh) + mHlv.setRefreshing(true); + mWaitProgressBar.setVisibility(View.GONE); + mFreshButton.setVisibility(View.GONE); + mNoneTextView.setVisibility(View.GONE); + mSadPanda.setVisibility(View.GONE); + } else { + mHlv.setVisibility(View.GONE); + mWaitProgressBar.setVisibility(View.VISIBLE); + mFreshButton.setVisibility(View.GONE); + mNoneTextView.setVisibility(View.GONE); + mSadPanda.setVisibility(View.GONE); + } + } + + /** + * If can't refresh return false, + * if force is true, must return true + * + * @param force + * @return + */ + protected boolean refresh(boolean force) { + if (!force && isRefreshing()) + return false; + + mGetMode = REFRESH; + mTargetPage = 0; + mTargetUrl = getTargetUrl(mTargetPage); + mIsKeepPosition = false; + getGallerys(); + return true; + } + + /** + * If force is true, will get page when refrshing + * @param isKeepPosition + * @param force + * @return + */ + protected boolean getPrePage(boolean isKeepPosition, boolean force) { + if (!force && isRefreshing()) + return false; + if (mFirstPage == 0) + return false; + + mGetMode = PRE_PAGE; + mTargetPage = mFirstPage - 1; + mTargetUrl = getTargetUrl(mTargetPage); + mIsKeepPosition = isKeepPosition; + getGallerys(); + return true; + } + + /** + * If force is true, will get page when refrshing + * @param isKeepPosition + * @param force + * @return + */ + protected boolean getNextPage(boolean isKeepPosition, boolean force) { + if (!force && isRefreshing()) + return false; + if (mLastPage >= mMaxPage - 1) + return false; + + mGetMode = NEXT_PAGE; + mTargetPage = mLastPage + 1; + mTargetUrl = getTargetUrl(mTargetPage); + mIsKeepPosition = isKeepPosition; + getGallerys(); + return true; + } + + protected boolean getSomewhere(int page, boolean force) { + if (!force && isRefreshing()) + return false; + if (page >= mMaxPage || page < 0) + return false; + + mGetMode = SOMEWHERE; + mTargetPage = page; + mTargetUrl = getTargetUrl(mTargetPage); + mIsKeepPosition = false; + getGallerys(); + return true; + } + + public boolean jumpTo(int page, boolean force) { + if (!force && isRefreshing()) + return false; + if (page >= mMaxPage || page < 0) + return false; + + if (page >= mFirstPage && page <= mLastPage) { + int position = (page - mFirstPage) * mItemPerPage; + setListPosition(position); + return true; + } else if (page == mFirstPage - 1) { + return getPrePage(false, force); + } else if (page == mLastPage + 1) { + return getNextPage(false, force); + } else { + return getSomewhere(page, force); + } + } @Override public void onCreate(Bundle savedInstanceState) { @@ -70,6 +258,7 @@ public class AbstractGalleryActivity extends AbstractSlidingActivity { setContentView(R.layout.list); mAppContext = (AppContext)getApplication(); + mClient = mAppContext.getEhClient(); mImageGeterManager = mAppContext.getImageGeterManager(); mGiList = new ArrayList(); @@ -83,27 +272,73 @@ public class AbstractGalleryActivity extends AbstractSlidingActivity { mNoneTextView = (TextView)findViewById(R.id.none); mSadPanda = (ImageView)findViewById(R.id.sadpanda); - mWaitProgressBar.setVisibility(View.GONE); - mFreshButton.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.GONE); - FswView alignment = (FswView)findViewById(R.id.alignment); alignment.addOnFitSystemWindowsListener( new OnFitSystemWindowsListener() { @Override public void onfitSystemWindows(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) { + mPaddingTop = paddingTop; mList.setPadding(mList.getPaddingLeft(), paddingTop, mList.getPaddingRight(), paddingBottom); } }); + mHlv.setColorScheme(R.color.refresh_color_1, + R.color.refresh_color_2, + R.color.refresh_color_3, + R.color.refresh_color_4); + mHlv.setOnHeaderRefreshListener(this); + mHlv.setOnFooterRefreshListener(this); + mHlv.setFooterString(getString(R.string.footer_loading), + getString(R.string.footer_loaded), + getString(R.string.footer_fail)); + mGalleryAdapter = new GalleryAdapter(); mList.setAdapter(mGalleryAdapter); + mList.setOnScrollListener(new ScrollListener()); mList.setDivider(null); mList.setSelector(new ColorDrawable(Color.TRANSPARENT)); mList.setClipToPadding(false); + + mFreshButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mFreshButton.setVisibility(View.GONE); + mWaitProgressBar.setVisibility(View.VISIBLE); + refresh(true); + } + }); + } + + /** + * @return list view + */ + public ListView getListView() { + return mList; + } + + public RelativeLayout getMainView() { + return mMainView; + } + + public HfListView getHlv() { + return mHlv; + } + + /** + * @return True if actionbar or footer is refreshing + */ + public boolean isRefreshing() { + return mHlv.isRefreshing(); + } + + public boolean isGetGalleryOk() { + return mHlv.getVisibility() == View.VISIBLE; + } + + public int getMaxPage() { + return mMaxPage; } protected class GalleryAdapter extends BaseAdapter { @@ -172,4 +407,148 @@ public class AbstractGalleryActivity extends AbstractSlidingActivity { return convertView; } } + + private class ScrollListener implements ListView.OnScrollListener { + @Override + public void onScroll(AbsListView view, int firstVisibleItem, + int visibleItemCount, int totalItemCount) { + mHlv.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); + + if (visibleItemCount < 2) + return; + if (mLastIndex == 0) + mLastIndex = mItemPerPage - 1; + int pageChanged = (firstVisibleItem - mFirstIndex) + / mItemPerPage; + if (pageChanged == 0) + pageChanged = (firstVisibleItem + visibleItemCount - mLastIndex - 1) + / mItemPerPage; + + if (pageChanged != 0) { + mCurPage = mCurPage + pageChanged; + mFirstIndex += pageChanged * mItemPerPage; + mLastIndex += pageChanged * mItemPerPage; + } + } + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) {} + } + + private void setListPosition(int position) { + if (position == 0) + mList.setSelectionFromTop(position, mPaddingTop); + else + mList.setSelectionFromTop(position, 0); + } + + private class ListGetListener implements EhClient.OnGetMangaListListener { + @Override + public void onSuccess(Object checkFlag, + ArrayList gis, int itemPerPage, int maxPage) { + if (taskStamp != (Long)checkFlag) + return; + + mMaxPage = maxPage; + if (mItemPerPage < itemPerPage) + mItemPerPage = itemPerPage; + + mWaitProgressBar.setVisibility(View.GONE); + mFreshButton.setVisibility(View.GONE); + mSadPanda.setVisibility(View.GONE); + + if (mMaxPage == 0) { + mNoneTextView.setVisibility(View.VISIBLE); + mHlv.setVisibility(View.GONE); + + mFirstPage = 0; + mLastPage = 0; + mGiList.clear(); + mGalleryAdapter.notifyDataSetChanged(); + } else { + mNoneTextView.setVisibility(View.GONE); + mHlv.setVisibility(View.VISIBLE); + + switch (mGetMode) { + case REFRESH: + mFirstPage = 0; + mLastPage = 0; + mGiList = gis; + mGalleryAdapter.notifyDataSetChanged(); + // For current page + mFirstIndex = 0; + mLastIndex = gis.size() - 1; + mCurPage = 0; + + setListPosition(0); + break; + + case PRE_PAGE: + mFirstPage--; + mGiList.addAll(0, gis); + mGalleryAdapter.notifyDataSetChanged(); + + if (mIsKeepPosition) { + mFirstIndex += gis.size(); + mLastIndex += gis.size(); + int position = mList.getFirstVisiblePosition() + gis.size(); + setListPosition(position); + mList.smoothScrollToPosition(position -1); + } else { + mFirstIndex = 0; + mLastIndex = gis.size()-1; + mCurPage = mTargetPage; + setListPosition(0); + } + break; + + case NEXT_PAGE: + mLastPage++; + mGiList.addAll(gis); + mGalleryAdapter.notifyDataSetChanged(); + if (!mIsKeepPosition) { + mFirstIndex = mGiList.size() - gis.size(); + mLastIndex = mGiList.size() - 1; + mCurPage = mTargetPage; + setListPosition(mFirstIndex); + } + break; + + case SOMEWHERE: + mFirstPage = mTargetPage; + mLastPage = mTargetPage; + mGiList = gis; + mGalleryAdapter.notifyDataSetChanged(); + // For current page + mFirstIndex = 0; + mLastIndex = gis.size() - 1; + mCurPage = mTargetPage; + + setListPosition(0); + } + } + + mHlv.setAnyRefreshComplete(true); + } + @Override + public void onFailure(Object checkFlag, String eMsg) { + if (taskStamp != (Long)checkFlag) + return; + + mWaitProgressBar.setVisibility(View.GONE); + mNoneTextView.setVisibility(View.GONE); + mSadPanda.setVisibility(View.GONE); + + switch (mGetMode) { + case REFRESH: + mHlv.setVisibility(View.GONE); + mFreshButton.setVisibility(View.VISIBLE); + + default: + mFreshButton.setVisibility(View.GONE); + } + new SuperToast(AbstractGalleryActivity.this, + eMsg, SuperToast.WARNING).show(); + mHlv.setAnyRefreshComplete(false); + } + } } diff --git a/src/com/hippo/ehviewer/ui/FavouriteActivity.java b/src/com/hippo/ehviewer/ui/FavouriteActivity.java index df406d8dd..67eb65017 100644 --- a/src/com/hippo/ehviewer/ui/FavouriteActivity.java +++ b/src/com/hippo/ehviewer/ui/FavouriteActivity.java @@ -51,11 +51,11 @@ import com.hippo.ehviewer.data.GalleryInfo; import com.hippo.ehviewer.ehclient.EhClient; import com.hippo.ehviewer.service.DownloadService; import com.hippo.ehviewer.service.DownloadServiceConnection; -import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.Ui; import com.hippo.ehviewer.widget.ActionableToastBar; import com.hippo.ehviewer.widget.DialogBuilder; import com.hippo.ehviewer.widget.FswView; +import com.hippo.ehviewer.widget.HfListView; import com.hippo.ehviewer.widget.OnFitSystemWindowsListener; import com.hippo.ehviewer.widget.ActionableToastBar.ActionClickedListener; import com.hippo.ehviewer.widget.SuperToast; @@ -71,6 +71,10 @@ public class FavouriteActivity extends AbstractGalleryActivity private Resources mResources; private EhClient mClient; + private RelativeLayout mMainView; + private HfListView mHlv; + private ListView mList; + private SlidingMenu mSlidingMenu; private ListView mMenuList; private String[] mMenuTitles; @@ -123,6 +127,12 @@ public class FavouriteActivity extends AbstractGalleryActivity mSlidingMenu.setShadowDrawable(R.drawable.shadow_right); mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width); + // Get View + mMainView = getMainView(); + mHlv = getHlv(); + mList = getListView(); + mMenuList = (ListView)findViewById(R.id.favorite_menu_list); + mActionableToastBar = new ActionableToastBar(this); mActionableToastBar.setBackgroundColor(mResources.getColor(android.R.color.holo_purple)); mMainView.addView(mActionableToastBar); @@ -155,7 +165,6 @@ public class FavouriteActivity extends AbstractGalleryActivity mList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); mList.setMultiChoiceModeListener(this); - mMenuList = (ListView)findViewById(R.id.favorite_menu_list); mMenuList.setClipToPadding(false); mMenuList.setAdapter(new BaseAdapter() { private ShapeDrawable d; @@ -221,7 +230,7 @@ public class FavouriteActivity extends AbstractGalleryActivity } else { mHlv.setEnabledHeader(true); mHlv.setEnabledFooter(true); - mClient.getMangaList(EhClient.getFavoriteUrl(mMenuIndex - 1), + mClient.getMangaList(EhClient.getFavoriteUrl(mMenuIndex - 1, 0), null, new EhClient.OnGetMangaListListener() { @Override public void onSuccess(Object checkFlag, ArrayList lmdArray, @@ -422,4 +431,9 @@ public class FavouriteActivity extends AbstractGalleryActivity else mChoiceGiSet.remove(mGiList.get(position)); } + + @Override + protected String getTargetUrl(int targetPage) { + return EhClient.getFavoriteUrl(mMenuIndex-1, targetPage); + } } diff --git a/src/com/hippo/ehviewer/ui/MangaListActivity.java b/src/com/hippo/ehviewer/ui/MangaListActivity.java index 74dcd7a7c..eb0d73bb7 100644 --- a/src/com/hippo/ehviewer/ui/MangaListActivity.java +++ b/src/com/hippo/ehviewer/ui/MangaListActivity.java @@ -37,6 +37,7 @@ import com.hippo.ehviewer.network.Downloader; import com.hippo.ehviewer.service.DownloadService; import com.hippo.ehviewer.service.DownloadServiceConnection; import com.hippo.ehviewer.util.Config; +import com.hippo.ehviewer.util.Log; import com.hippo.ehviewer.util.Ui; import com.hippo.ehviewer.util.Util; import com.hippo.ehviewer.widget.AlertButton; @@ -132,12 +133,6 @@ public class MangaListActivity extends AbstractGalleryActivity public static final String KEY_TAG = "tag"; public static final String KEY_UPLOADER = "uploader"; - private static final int REFRESH = 0x0; - private static final int NEXT_PAGE = 0x1; - private static final int PRE_PAGE = 0x2; - private static final int SOMEWHERE = 0x3; - private static final int SET_POSITION = 0x8000; - private EhClient mEhClient; private Resources mResources; @@ -154,6 +149,8 @@ public class MangaListActivity extends AbstractGalleryActivity private Button logoutButton; private View waitloginoutView; + private ListView mList; + private TagsAdapter tagsAdapter; private ListUrls lus; @@ -174,23 +171,8 @@ public class MangaListActivity extends AbstractGalleryActivity private long curBackTime = 0; private static final int BACK_PRESSED_INTERVAL = 2000; - // - private int firstPage = 0; - private int lastPage = 0; - - private int firstIndex = 0; - private int lastIndex = 0; - private int visiblePage = 0; - private String mTitle; - private int mGetMode; - - private int mFswPaddingLeft; - private int mFswPaddingTop; - private int mFswPaddingRight; - private int mFswPaddingBottom; - private DownloadServiceConnection mServiceConn = new DownloadServiceConnection(); private void toRegister() { @@ -345,7 +327,7 @@ public class MangaListActivity extends AbstractGalleryActivity public void onClick(View v) { ListUrls backup = lus; lus = getLus(filterDialog); - if (refresh()) { + if (refresh(false)) { ((AlertButton)v).dialog.dismiss(); showContent(); @@ -356,7 +338,7 @@ public class MangaListActivity extends AbstractGalleryActivity if (search == null || search.isEmpty()) t = getString(android.R.string.search_go); else - t = getString(android.R.string.search_go) + " " + search; + t = search; break; case ListUrls.UPLOADER: t = search; @@ -550,7 +532,7 @@ public class MangaListActivity extends AbstractGalleryActivity LayoutInflater inflater = this.getLayoutInflater(); View view = inflater.inflate(R.layout.jump, null); TextView tv = (TextView)view.findViewById(R.id.list_jump_sum); - tv.setText(String.format(getString(R.string.jump_sum), lus.getMax())); + tv.setText(String.format(getString(R.string.jump_sum), getMaxPage())); // TODO tv = (TextView)view.findViewById(R.id.list_jump_to); tv.setText(R.string.jump_to); final EditText et = (EditText)view.findViewById(R.id.list_jump_edit); @@ -559,43 +541,25 @@ public class MangaListActivity extends AbstractGalleryActivity .setView(view, true) .setPositiveButton(android.R.string.ok, new View.OnClickListener() { - @Override public void onClick(View v) { + boolean error = false; + int targetPage = 0; try{ - int targetPage = Integer.parseInt(et.getText().toString()) - 1; - if (targetPage >= firstPage - && targetPage <= lastPage) { // If targetPage is in range - ((AlertButton)v).dialog.dismiss(); // Just jump there - int position = (targetPage - firstPage) * - lus.getNumPerPage(); - setMainListPosition(position); - } else{ - if (lus.setPage(targetPage)) { - ((AlertButton)v).dialog.dismiss(); - - mWaitProgressBar.setVisibility(View.GONE); - mFreshButton.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.GONE); - mHlv.setRefreshing(true); - - if (targetPage == firstPage - 1) - mGetMode = PRE_PAGE; - else if (targetPage == lastPage + 1) - mGetMode = NEXT_PAGE; - else - mGetMode = SOMEWHERE; - mGetMode |= SET_POSITION; - - getList(); - } else { - new SuperToast(MangaListActivity.this, R.string.toast_invalid_page).setIcon(R.drawable.ic_warning).show(); - } - } + targetPage = Integer.parseInt(et.getText().toString()) - 1; } catch(Exception e) { - new SuperToast(MangaListActivity.this, R.string.toast_invalid_page).setIcon(R.drawable.ic_warning).show(); + error = true; } + + if (!error) { + error = !jumpTo(targetPage, true); + } + + if (error) + new SuperToast(MangaListActivity.this, R.string.toast_invalid_page, + SuperToast.ERROR).show(); + else + ((AlertButton)v).dialog.dismiss(); } }).setNegativeButton(android.R.string.cancel, new View.OnClickListener() { @@ -879,187 +843,6 @@ public class MangaListActivity extends AbstractGalleryActivity } } - private void setMainListPosition(int position) { - if (position == 0) - mList.setSelectionFromTop(position, mFswPaddingTop); - else - mList.setSelectionFromTop(position, 0); - } - - private class MangaListGetListener implements - EhClient.OnGetMangaListListener { - @Override - public void onSuccess(Object checkFlag, ArrayList newLmdArray, - int indexPerPage, int maxPage) { - - // Check no Found view later - mWaitProgressBar.setVisibility(View.GONE); - mFreshButton.setVisibility(View.GONE); - - if (maxPage == 0) { // If No hits found - mHlv.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.VISIBLE); - mSadPanda.setVisibility(View.GONE); - - mTitle = mResources.getString(R.string.no_found); - setTitle(); - - mGiList.clear(); - mGalleryAdapter.notifyDataSetChanged(); - } else if (maxPage == -1) { //panda - mHlv.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.VISIBLE); - - mTitle = mResources.getString(R.string.sadpanda); - setTitle(); - - mGiList.clear(); - mGalleryAdapter.notifyDataSetChanged(); - } else { - mHlv.setVisibility(View.VISIBLE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.GONE); - - // Set indexPerPage and maxPage - lus.setNumPerPage(indexPerPage); - lus.setMax(maxPage); - - // Check refresh or get more - switch (mGetMode & (~SET_POSITION)) { - case REFRESH: - firstPage = 0; - lastPage = 0; - mGiList.clear(); - mGiList.addAll(newLmdArray); - mGalleryAdapter.notifyDataSetChanged(); - - // set visible page - firstIndex = 0; - lastIndex = newLmdArray.size() - 1; - visiblePage = 0; - - // set title - setTitle(); - - // set main list positon - setMainListPosition(0); - break; - case PRE_PAGE: - firstPage -= 1; - mGiList.addAll(0, newLmdArray); - mGalleryAdapter.notifyDataSetChanged(); - - // set position if necessary and set visible page - if ((mGetMode & SET_POSITION) != 0) { - firstIndex = 0; - lastIndex = newLmdArray.size()-1; - visiblePage = lus.getPage(); - - setMainListPosition(0); - setTitle(); - } else { - firstIndex += newLmdArray.size(); - lastIndex += newLmdArray.size(); - - setMainListPosition( - mList.getFirstVisiblePosition() + newLmdArray.size()); - } - break; - case NEXT_PAGE: - lastPage += 1; - mGiList.addAll(newLmdArray); - mGalleryAdapter.notifyDataSetChanged(); - - // set position if necessary and set visible page - if ((mGetMode & SET_POSITION) != 0) { - firstIndex = mGiList.size() - newLmdArray.size(); - lastIndex = mGiList.size() - 1; - visiblePage = lus.getPage(); - - setMainListPosition(firstIndex); - setTitle(); - } - break; - case SOMEWHERE: - firstPage = lus.getPage(); - lastPage = lus.getPage(); - mGiList.clear(); - mGiList.addAll(newLmdArray); - mGalleryAdapter.notifyDataSetChanged(); - - // Get visible page - firstIndex = 0; - lastIndex = newLmdArray.size(); - visiblePage = lus.getPage(); - - setMainListPosition(0); - setTitle(); - break; - default: - break; - } - } - - mHlv.setAnyRefreshComplete(true); - } - - @Override - public void onFailure(Object checkFlag, String eMsg) { - // Check pull list view later - // Check fresh view later - mWaitProgressBar.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.GONE); - - switch (mGetMode & (~SET_POSITION)) { - case REFRESH: - mHlv.setVisibility(View.GONE); - mFreshButton.setVisibility(View.VISIBLE); - - new SuperToast(MangaListActivity.this, eMsg).setIcon(R.drawable.ic_warning).show(); - mGiList.clear(); - mGalleryAdapter.notifyDataSetChanged(); - break; - default: - mFreshButton.setVisibility(View.GONE); - new SuperToast(MangaListActivity.this, eMsg).setIcon(R.drawable.ic_warning).show(); - break; - } - mHlv.setAnyRefreshComplete(false); - } - } - - private class MangaListListener implements ListView.OnScrollListener { - - @Override - public void onScroll(AbsListView view, int firstVisibleItem, - int visibleItemCount, int totalItemCount) { - mHlv.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); - - if (lus == null || visibleItemCount < 2) - return; - if (lastIndex == 0) - lastIndex = lus.getNumPerPage() - 1; - - int pageChanged = (firstVisibleItem - firstIndex) - / lus.getNumPerPage(); - if (pageChanged == 0) - pageChanged = (firstVisibleItem + visibleItemCount - lastIndex - 1) - / lus.getNumPerPage(); - - if (pageChanged != 0) { - visiblePage = visiblePage + pageChanged; - firstIndex += pageChanged * lus.getNumPerPage(); - lastIndex += pageChanged * lus.getNumPerPage(); - setTitle(); - } - } - - @Override - public void onScrollStateChanged(AbsListView view, int scrollState) {} - } - @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -1132,12 +915,13 @@ public class MangaListActivity extends AbstractGalleryActivity @Override public void onOpened() { setTitle(R.string.app_name); + invalidateOptionsMenu(); } }); mSlidingMenu.setOnClosedListener(new SlidingMenu.OnClosedListener() { @Override public void onClosed() { - setTitle(); + setTitle(mTitle); invalidateOptionsMenu(); } }); @@ -1160,7 +944,6 @@ public class MangaListActivity extends AbstractGalleryActivity String search = intent.getStringExtra("search"); int page = intent.getIntExtra("page", 0); lus = new ListUrls(type, search, page); - visiblePage = lus.getPage(); // Init dialog loginDialog = createLoginDialog(); @@ -1179,9 +962,12 @@ public class MangaListActivity extends AbstractGalleryActivity logoutButton = (Button)mUserPanel.findViewById(R.id.logout); waitloginoutView = mUserPanel.findViewById(R.id.wait); + mList = getListView(); + loginButton.setOnClickListener(this); registerButton.setOnClickListener(this); logoutButton.setOnClickListener(this); + setNoneText(mResources.getString(R.string.no_found)); // Drawer getActionBar().setDisplayHomeAsUpEnabled(true); @@ -1233,7 +1019,7 @@ public class MangaListActivity extends AbstractGalleryActivity case 0: // Home page ListUrls backup = lus; lus = new ListUrls(ListUrls.ALL_TYPE, null, 0); - if (refresh()) { + if (refresh(false)) { mTitle = mResources.getString(R.string.homepage); setTitle(mTitle); @@ -1285,7 +1071,7 @@ public class MangaListActivity extends AbstractGalleryActivity int position, long arg3) { ListUrls backup = lus; lus = mData.getTag(position); - if (lus != null && refresh()) { + if (lus != null && refresh(false)) { mTitle = listMenuTag.get(position); setTitle(mTitle); showContent(); @@ -1321,41 +1107,7 @@ public class MangaListActivity extends AbstractGalleryActivity } }); - // Pull list view - // Setup ActionBarPullToRefresh - mHlv.setColorScheme(R.color.refresh_color_1, R.color.refresh_color_2, R.color.refresh_color_3, R.color.refresh_color_4); - mHlv.setOnRefreshListener(new SuperSwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - if (firstPage != 0) { - lus.setPage(firstPage - 1); - mGetMode = PRE_PAGE; - getList(); - } else { - lus.setPage(0); - mGetMode = REFRESH; - getList(); - } - } - }); - mHlv.setOnFooterRefreshListener(new HfListView.OnFooterRefreshListener() { - @Override - public boolean onFooterRefresh() { - if (lus.setPage(lastPage+1)) { - mGetMode = NEXT_PAGE; - getList(); - return true; - } else { - return false; - } - } - }); - mHlv.setFooterString(getString(R.string.footer_loading), - getString(R.string.footer_loaded), - getString(R.string.footer_fail)); - // Listview - mList.setOnScrollListener(new MangaListListener()); mList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, View arg1, @@ -1384,17 +1136,12 @@ public class MangaListActivity extends AbstractGalleryActivity @Override public void onfitSystemWindows(int paddingLeft, int paddingTop, int paddingRight, int paddingBottom) { - mFswPaddingLeft = paddingLeft; - mFswPaddingTop = paddingTop; - mFswPaddingRight = paddingRight; - mFswPaddingBottom = paddingBottom; - - mUserPanel.setPadding(mUserPanel.getPaddingLeft(), mFswPaddingTop, + mUserPanel.setPadding(mUserPanel.getPaddingLeft(), paddingTop, mUserPanel.getPaddingRight(), mUserPanel.getPaddingBottom()); itemListMenu.setPadding(itemListMenu.getPaddingLeft(), itemListMenu.getPaddingTop(), - itemListMenu.getPaddingRight(), mFswPaddingBottom); - tagListMenu.setPadding(tagListMenu.getPaddingLeft(), mFswPaddingTop, - tagListMenu.getPaddingRight(), mFswPaddingBottom); + itemListMenu.getPaddingRight(), paddingBottom); + tagListMenu.setPadding(tagListMenu.getPaddingLeft(), paddingTop, + tagListMenu.getPaddingRight(), paddingBottom); } }); @@ -1408,19 +1155,15 @@ public class MangaListActivity extends AbstractGalleryActivity // get MangeList mTitle = mResources.getString(R.string.homepage); - setTitle(); - refresh(false); - - // set layout - mHlv.setVisibility(View.GONE); - mWaitProgressBar.setVisibility(View.VISIBLE); - mFreshButton.setVisibility(View.GONE); - mNoneTextView.setVisibility(View.GONE); - mSadPanda.setVisibility(View.GONE); + setTitle(mTitle); + firstTimeRefresh(); } @Override public boolean onCreateOptionsMenu(Menu menu) { + if (mSlidingMenu!= null && mSlidingMenu.isMenuShowing()) + return true; + getMenuInflater().inflate(R.menu.main, menu); SearchManager searchManager = @@ -1441,11 +1184,11 @@ public class MangaListActivity extends AbstractGalleryActivity if (query == null || query.isEmpty()) t = getString(android.R.string.search_go); else - t = getString(android.R.string.search_go) + " " + query; + t = query; ListUrls backup = lus; lus = new ListUrls(ListUrls.ALL_TYPE, query); - if (refresh()) { + if (refresh(false)) { mTitle = t; setTitle(mTitle); } else { @@ -1565,7 +1308,7 @@ public class MangaListActivity extends AbstractGalleryActivity lus.setTag(tag); mTitle = tag; setTitle(mTitle); - refresh(); + refresh(false); break; case MODE_UPLOADER: @@ -1574,7 +1317,7 @@ public class MangaListActivity extends AbstractGalleryActivity lus.setMode(ListUrls.UPLOADER); mTitle = uploader; setTitle(mTitle); - refresh(); + refresh(false); break; } } @@ -1591,11 +1334,11 @@ public class MangaListActivity extends AbstractGalleryActivity showMenu(); return true; case R.id.action_refresh: - if (!refresh()) + if (!refresh(false)) new SuperToast(MangaListActivity.this, R.string.wait).show(); return true; case R.id.action_jump: - if (!mHlv.isRefreshing() && isGetOk()) + if (!isRefreshing() && isGetGalleryOk()) jump(); return true; default: @@ -1603,17 +1346,6 @@ public class MangaListActivity extends AbstractGalleryActivity } } - public boolean isGetOk() { - return mHlv.getVisibility() == View.VISIBLE; - } - - public void setTitle() { - if (isGetOk()) - setTitle(String.format(getString(R.string.list_title), mTitle, visiblePage + 1)); - else - setTitle(mTitle); - } - @Override protected void onDestroy() { super.onDestroy(); @@ -1739,37 +1471,13 @@ public class MangaListActivity extends AbstractGalleryActivity } } - private void getList() { - mEhClient.getMangaList(lus.getUrl(), - null, - new MangaListGetListener()); - } - - public boolean refresh() { - return refresh(true); - } - - public boolean refresh(boolean isShowProgress) { - if (!mHlv.isRefreshing() - && mWaitProgressBar.getVisibility() != View.VISIBLE) { - lus.setPage(0); - if (isShowProgress) - mHlv.setRefreshing(true); - mGetMode = REFRESH; - getList(); - return true; - } else { - return false; - } - } - - public void buttonRefresh(View arg0) { - refresh(false); - mFreshButton.setVisibility(View.GONE); - mWaitProgressBar.setVisibility(View.VISIBLE); - } - public void buttonCheckLogin(View v) { checkLogin(false); } + + @Override + protected String getTargetUrl(int targetPage) { + lus.setPage(targetPage); + return lus.getUrl(); + } } diff --git a/src/com/hippo/ehviewer/widget/HfListView.java b/src/com/hippo/ehviewer/widget/HfListView.java index 1f3d12c6a..ab35c2feb 100644 --- a/src/com/hippo/ehviewer/widget/HfListView.java +++ b/src/com/hippo/ehviewer/widget/HfListView.java @@ -92,6 +92,14 @@ public class HfListView extends SuperSwipeRefreshLayout return mListView; } + /** + * Just a alias + * @param l + */ + public void setOnHeaderRefreshListener(HfListView.OnRefreshListener l) { + super.setOnRefreshListener(l); + } + public void setOnFooterRefreshListener(OnFooterRefreshListener l) { mFooterRefreshListener = l; } diff --git a/src/com/hippo/ehviewer/widget/SuperToast.java b/src/com/hippo/ehviewer/widget/SuperToast.java index 7844a0a47..307a44691 100644 --- a/src/com/hippo/ehviewer/widget/SuperToast.java +++ b/src/com/hippo/ehviewer/widget/SuperToast.java @@ -30,6 +30,10 @@ import android.widget.Toast; public class SuperToast extends Toast { + public static final int NONE = 0; + public static final int WARNING = 1; + public static final int ERROR = 2; + private Context mContext; private LinearLayout mMainView; @@ -43,14 +47,24 @@ public class SuperToast extends Toast { init(); } + public SuperToast(Context context, int strResId) { + this(context); + setMessage(strResId); + } + public SuperToast(Context context, String mesg) { this(context); setMessage(mesg); } - public SuperToast(Context context, int strResId) { - this(context); - setMessage(strResId); + public SuperToast(Context context, int strResId, int type) { + this(context, strResId); + setTypeIcon(type); + } + + public SuperToast(Context context, String mesg, int type) { + this(context, mesg); + setTypeIcon(type); } private void init() { @@ -67,6 +81,22 @@ public class SuperToast extends Toast { setView(view); } + public SuperToast setTypeIcon(int type) { + switch(type) { + case WARNING: + setIcon(R.drawable.ic_warning); + break; + case ERROR: + setIcon(R.drawable.ic_error); + break; + case NONE: + default: + // nop + break; + } + return this; + } + public SuperToast setIcon(int resId) { return setIcon(mContext.getResources().getDrawable(resId)); }