blob: e6f4bf3232857015437c518b44cc0a799a3181c8 [file] [log] [blame]
package org.wordpress.android.util.helpers;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.v4.widget.SwipeRefreshLayout.OnRefreshListener;
import android.util.TypedValue;
import org.wordpress.android.util.R;
import org.wordpress.android.util.widgets.CustomSwipeRefreshLayout;
public class SwipeToRefreshHelper implements OnRefreshListener {
private CustomSwipeRefreshLayout mSwipeRefreshLayout;
private RefreshListener mRefreshListener;
private boolean mRefreshing;
public interface RefreshListener {
public void onRefreshStarted();
}
public SwipeToRefreshHelper(Context context, CustomSwipeRefreshLayout swipeRefreshLayout, RefreshListener listener) {
init(context, swipeRefreshLayout, listener);
}
public void init(Context context, CustomSwipeRefreshLayout swipeRefreshLayout, RefreshListener listener) {
mRefreshListener = listener;
mSwipeRefreshLayout = swipeRefreshLayout;
mSwipeRefreshLayout.setOnRefreshListener(this);
final TypedArray styleAttrs = obtainStyledAttrsFromThemeAttr(context, R.attr.swipeToRefreshStyle,
R.styleable.RefreshIndicator);
int color = styleAttrs.getColor(R.styleable.RefreshIndicator_refreshIndicatorColor, context.getResources()
.getColor(android.R.color.holo_blue_dark));
mSwipeRefreshLayout.setColorSchemeColors(color, color, color, color);
}
public void setRefreshing(boolean refreshing) {
mRefreshing = refreshing;
// Delayed refresh, it fixes https://code.google.com/p/android/issues/detail?id=77712
// 50ms seems a good compromise (always worked during tests) and fast enough so user can't notice the delay
if (refreshing) {
mSwipeRefreshLayout.postDelayed(new Runnable() {
@Override
public void run() {
// use mRefreshing so if the refresh takes less than 50ms, loading indicator won't show up.
mSwipeRefreshLayout.setRefreshing(mRefreshing);
}
}, 50);
} else {
mSwipeRefreshLayout.setRefreshing(false);
}
}
public boolean isRefreshing() {
return mSwipeRefreshLayout.isRefreshing();
}
@Override
public void onRefresh() {
mRefreshListener.onRefreshStarted();
}
public void setEnabled(boolean enabled) {
mSwipeRefreshLayout.setEnabled(enabled);
}
public static TypedArray obtainStyledAttrsFromThemeAttr(Context context, int themeAttr, int[] styleAttrs) {
TypedValue outValue = new TypedValue();
context.getTheme().resolveAttribute(themeAttr, outValue, true);
int styleResId = outValue.resourceId;
return context.obtainStyledAttributes(styleResId, styleAttrs);
}
}