抽象 AbstractGalleryActivity

This commit is contained in:
seven332 committed 2014-06-11 20:12:32 +08:00
1 parent bfe9044fda
commit 5ea2fdb651
18 files changed
+510 -403

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 885 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

-1
View File
@@ -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" />
<ImageView
+1 -1
View File
@@ -353,5 +353,5 @@
<string name="update">更新</string>
<string name="thanks">感谢</string>
<string name="develop">开发</string>
<string name="advance_search_left">左划更精彩</string>
<string name="advance_search_left">左划更多</string>
</resources>
+2 -35
View File
@@ -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;
}
@@ -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();
}
@@ -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();
@@ -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<GalleryInfo> 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<GalleryInfo>();
@@ -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<GalleryInfo> 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);
}
}
}
@@ -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<GalleryInfo> 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);
}
}
+48 -340
View File
@@ -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<GalleryInfo> 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();
}
}
@@ -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;
}
+33 -3
View File
@@ -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));
}