package com.aspsine.swipetoloadlayout.demo.view.drawable.yalantis;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Looper;
import android.support.annotation.NonNull;
/**
* Copy from https://github.com/Yalantis/Phoenix
* Aspsine makes some changes
*/
public abstract class BaseRefreshDrawable extends Drawable implements Drawable.Callback, Animatable {
private boolean mEndOfRefreshing;
private Context mContext;
private Handler mHandler;
public BaseRefreshDrawable(Context context) {
mContext = context;
}
public Context getContext() {
return mContext;
}
public abstract void setPercent(float percent, boolean invalidate);
public abstract void offsetTopAndBottom(int offset);
@Override
public void invalidateDrawable(@NonNull Drawable who) {
final Callback callback = getCallback();
if (callback != null) {
callback.invalidateDrawable(this);
}
}
@Override
public void scheduleDrawable(Drawable who, Runnable what, long when) {
final Callback callback = getCallback();
if (callback != null) {
callback.scheduleDrawable(this, what, when);
}
}
@Override
public void unscheduleDrawable(Drawable who, Runnable what) {
final Callback callback = getCallback();
if (callback != null) {
callback.unscheduleDrawable(this, what);
}
}
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
/**
* Our animation depend on type of current work of refreshing.
* We should to do different things when it's end of refreshing
*
* @param endOfRefreshing - we will check current state of refresh with this
*/
public void setEndOfRefreshing(boolean endOfRefreshing) {
mEndOfRefreshing = endOfRefreshing;
}
protected void post(Runnable runnable) {
postDelayed(runnable, 0);
}
protected void postDelayed(Runnable runnable, int delayMillis) {
if (mHandler == null) {
synchronized (BaseRefreshDrawable.class) {
mHandler = new Handler(Looper.getMainLooper());
}
}
mHandler.postDelayed(runnable, delayMillis);
}
}