package kr.kdev.dg1s.biowiki.ui;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.view.View;
import kr.kdev.dg1s.biowiki.R;
import kr.kdev.dg1s.biowiki.util.DisplayUtils;
import uk.co.senab.actionbarpulltorefresh.extras.actionbarsherlock.PullToRefreshLayout;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh;
import uk.co.senab.actionbarpulltorefresh.library.ActionBarPullToRefresh.SetupWizard;
import uk.co.senab.actionbarpulltorefresh.library.Options;
import uk.co.senab.actionbarpulltorefresh.library.listeners.OnRefreshListener;
import uk.co.senab.actionbarpulltorefresh.library.viewdelegates.ViewDelegate;
public class PullToRefreshHelper implements OnRefreshListener {
private static final String NEED_PTR_TIP = "NEED_PTR_TIP";
private PullToRefreshHeaderTransformer mHeaderTransformer;
private PullToRefreshLayout mPullToRefreshLayout;
private RefreshListener mRefreshListener;
private OnTopMessage mOnTopMessage;
private boolean mShowTip;
private boolean mTipShouldBeVisible;
private boolean mIsScrolledOnTop = true;
private Context mContext;
public PullToRefreshHelper(Activity activity, PullToRefreshLayout pullToRefreshLayout, RefreshListener listener) {
init(activity, pullToRefreshLayout, listener, null);
}
public PullToRefreshHelper(Activity activity, PullToRefreshLayout pullToRefreshLayout, RefreshListener listener,
java.lang.Class<?> viewClass) {
init(activity, pullToRefreshLayout, listener, viewClass);
}
public void init(Activity activity, PullToRefreshLayout pullToRefreshLayout, RefreshListener listener,
java.lang.Class<?> viewClass) {
mContext = activity;
mRefreshListener = listener;
mPullToRefreshLayout = pullToRefreshLayout;
mHeaderTransformer = new PullToRefreshHeaderTransformer();
SetupWizard setupWizard = ActionBarPullToRefresh.from(activity).options(Options.create().headerTransformer(
mHeaderTransformer).build()).allChildrenArePullable().listener(this);
if (viewClass != null) {
setupWizard.useViewDelegate(viewClass, new ViewDelegate() {
@Override
public boolean isReadyForPull(View view, float v, float v2) {
return true;
}
}
);
}
setupWizard.setup(mPullToRefreshLayout);
mHeaderTransformer.setOnTopScrollChangedListener(new PullToRefreshHeaderTransformer.OnTopScrollChangedListener() {
@Override
public void onTopScrollChanged(boolean scrolledOnTop) {
mIsScrolledOnTop = scrolledOnTop;
if (scrolledOnTop) {
showTip(true);
} else {
hideTipTemporarily(true);
}
}
});
createTipView(activity);
}
public boolean isRefreshing() {
return mPullToRefreshLayout.isRefreshing();
}
public void setRefreshing(boolean refreshing) {
mHeaderTransformer.setShowProgressBarOnly(refreshing);
mPullToRefreshLayout.setRefreshing(refreshing);
if (refreshing) {
hideTipTemporarily(false);
} else {
showTip(true);
}
}
@Override
public void onRefreshStarted(View view) {
mRefreshListener.onRefreshStarted(view);
hideTip();
}
public void hideTipTemporarily(boolean animated) {
if (mShowTip && mOnTopMessage != null && mOnTopMessage.isVisible() && mPullToRefreshLayout.isEnabled()) {
mOnTopMessage.hide(animated);
}
mTipShouldBeVisible = false;
}
public void showTip(boolean animated) {
if (!mIsScrolledOnTop) {
return;
}
if (!isRefreshing() && mShowTip && mOnTopMessage != null && mPullToRefreshLayout.isEnabled()) {
mOnTopMessage.show(animated);
}
mTipShouldBeVisible = true;
}
public void setEnabled(boolean enabled) {
if (mTipShouldBeVisible && !enabled) {
hideTipTemporarily(true);
}
mPullToRefreshLayout.setEnabled(enabled);
if (mTipShouldBeVisible && enabled) {
showTip(true);
}
}
private void hideTip() {
if (mShowTip && mOnTopMessage != null) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
Editor editor = preferences.edit();
editor.putBoolean(NEED_PTR_TIP, false);
editor.commit();
mOnTopMessage.hide(true);
mShowTip = false;
mTipShouldBeVisible = false;
}
}
private void createTipView(Activity activity) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
mShowTip = preferences.getBoolean(NEED_PTR_TIP, true);
if (mShowTip) {
mOnTopMessage = new OnTopMessage(activity, mPullToRefreshLayout);
if (DisplayUtils.hasActionBarOverlay(activity.getWindow())) {
mOnTopMessage.setTopMargin(DisplayUtils.getActionBarHeight(mContext) +
activity.getResources().getDimensionPixelOffset(R.dimen.ptr_tip_margin_top));
}
mOnTopMessage.setMessage(activity.getString(R.string.ptr_tip_message));
mTipShouldBeVisible = true;
}
}
public interface RefreshListener {
public void onRefreshStarted(View view);
}
}