package net.osmand.plus; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Handler; import android.view.View; import android.view.animation.Animation; import android.view.animation.Interpolator; import android.view.animation.RotateAnimation; public class BusyIndicator { private View bar; private Handler uiHandler; private int status; private final Context ctx; public static final int STATUS_INVISIBLE = 0; public static final int STATUS_GREEN = 1; public static final int STATUS_BLUE = 2; public static final int STATUS_BLACK = 3; public BusyIndicator(Context ctx, View bar){ this.ctx = ctx; this.bar = bar; bar.setVisibility(View.INVISIBLE); uiHandler = new Handler(); } public boolean isVisible(){ return status != 0; } public int getStatus(){ return status; } /** * @param status - 0 invisible * 1 */ public void updateStatus(int status){ if(this.status != status){ this.status = status; final Drawable drawable; if(this.status == STATUS_BLACK){ drawable = ctx.getResources().getDrawable(R.drawable.spinner_black_76); } else if(this.status == STATUS_BLUE){ drawable = ctx.getResources().getDrawable(R.drawable.spinner_blue_76); } else if(this.status == STATUS_GREEN){ drawable = ctx.getResources().getDrawable(R.drawable.spinner_green_76); } else { drawable = null; } final RotateAnimation animation; if(drawable != null){ animation = new RotateAnimation(0, 360, RotateAnimation.RELATIVE_TO_SELF, 0.5f, RotateAnimation.RELATIVE_TO_SELF, 0.5f); animation.setRepeatCount(Animation.INFINITE); final int cycles = 12; animation.setInterpolator(new Interpolator(){ @Override public float getInterpolation(float input) { return ((int)(input * cycles)) / (float) cycles; } }); animation.setDuration(1200); animation.setStartTime(RotateAnimation.START_ON_FIRST_FRAME); animation.setStartOffset(0); } else { animation = null; } uiHandler.post(new Runnable(){ @Override public void run() { bar.setVisibility(drawable != null ? View.VISIBLE : View.INVISIBLE); if(bar.getAnimation() != null){ bar.clearAnimation(); } if(drawable != null){ bar.setBackgroundDrawable(drawable); bar.startAnimation(animation); } } }); } } }