package com.shizhefei.mvc;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.view.View;
import android.widget.AbsListView;
import com.shizhefei.mvc.ILoadViewFactory.ILoadMoreView;
import com.shizhefei.mvc.ILoadViewFactory.ILoadView;
import in.srain.cube.views.ptr.PtrClassicFrameLayout;
import in.srain.cube.views.ptr.PtrFrameLayout;
import in.srain.cube.views.ptr.PtrHandler;
/**
* 注意 :<br>
* PtrClassicFrameLayout 必须有Parent
*
* @author zsy
*
* @param <DATA>
*/
public class MVCUltraHelper<DATA> extends MVCHelper<DATA> {
public MVCUltraHelper(PtrClassicFrameLayout ptrClassicFrameLayout) {
super(new RefreshView(ptrClassicFrameLayout));
}
public MVCUltraHelper(PtrClassicFrameLayout ptrClassicFrameLayout, ILoadView loadView, ILoadMoreView loadMoreView) {
super(new RefreshView(ptrClassicFrameLayout), loadView, loadMoreView);
}
private static class RefreshView implements IRefreshView {
private PtrFrameLayout mPtrFrame;
public RefreshView(PtrFrameLayout ptrClassicFrameLayout) {
super();
this.mPtrFrame = ptrClassicFrameLayout;
if (mPtrFrame.getParent() == null) {
throw new RuntimeException("PtrClassicFrameLayout 必须有Parent");
}
mPtrFrame.setPtrHandler(ptrHandler);
}
@Override
public View getContentView() {
return mPtrFrame.getContentView();
}
@Override
public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
this.onRefreshListener = onRefreshListener;
}
private OnRefreshListener onRefreshListener;
@Override
public void showRefreshComplete() {
mPtrFrame.refreshComplete();
}
@Override
public void showRefreshing() {
mPtrFrame.setPtrHandler(null);
mPtrFrame.autoRefresh(true,150);
mPtrFrame.setPtrHandler(ptrHandler);
}
@Override
public View getSwitchView() {
return mPtrFrame;
}
private PtrHandler ptrHandler = new PtrHandler() {
@Override
public void onRefreshBegin(PtrFrameLayout frame) {
if (onRefreshListener != null) {
onRefreshListener.onRefresh();
}
}
@Override
public boolean checkCanDoRefresh(PtrFrameLayout frame, View content, View header) {
return checkContentCanBePulledDown(frame, content, header);
}
};
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public static boolean canChildScrollUp(View mTarget) {
if (Build.VERSION.SDK_INT < 14) {
if (mTarget instanceof AbsListView) {
final AbsListView absListView = (AbsListView) mTarget;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0).getTop() < absListView.getPaddingTop());
} else {
return ViewCompat.canScrollVertically(mTarget, -1) || mTarget.getScrollY() > 0;
}
} else {
return ViewCompat.canScrollVertically(mTarget, -1);
}
}
/**
* Default implement for check can perform pull to refresh
*
* @param frame
* @param content
* @param header
* @return
*/
public static boolean checkContentCanBePulledDown(PtrFrameLayout frame, View content, View header) {
return !canChildScrollUp(content);
}
}