package in.srain.cube.views.list;
import java.util.ArrayList;
import java.util.List;
public class ListPageInfo<T> {
private int mNumPerPage = 0;
private int mStart = 0;
private boolean mHasMore;
private boolean mIsBusy = false;
private List<T> mDataList;
public ListPageInfo(int numPerPage) {
mNumPerPage = numPerPage;
}
public void updateListInfo(List<T> dataList, int total) {
addMore(dataList);
mHasMore = mDataList.size() < total;
mIsBusy = false;
}
private void addMore(List<T> dataList) {
if (mStart == 0 || mDataList == null) {
mDataList = new ArrayList<T>();
}
mDataList.addAll(dataList);
}
public void updateListInfo(List<T> dataList, boolean hasMore) {
addMore(dataList);
mHasMore = hasMore;
mIsBusy = false;
}
public void unlock() {
mIsBusy = false;
}
public boolean tryEnterLock() {
if (mIsBusy) {
return false;
}
mIsBusy = true;
return true;
}
public int getStart() {
return mStart;
}
public int getNumPerPage() {
return mNumPerPage;
}
public void goToHead() {
mStart = 0;
}
public T getItem(int position) {
if (null == mDataList || position < 0 || position > mDataList.size()) {
return null;
}
return mDataList.get(position);
}
public boolean isEmpty() {
return mDataList == null || mDataList.size() == 0;
}
public boolean nextPage() {
if (hasMore()) {
mStart += mNumPerPage;
return true;
}
return false;
}
public List<T> getDataList() {
return mDataList;
}
public int getListLength() {
if (mDataList == null) {
return 0;
}
return mDataList.size();
}
public boolean hasMore() {
return mDataList == null || mHasMore;
}
public boolean isFirstPage() {
return 0 == mStart;
}
}