package me.barrasso.android.volume.popup;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.widget.ProgressBar;
import static me.barrasso.android.volume.LogUtils.LOGD;
import static me.barrasso.android.volume.LogUtils.LOGE;
import me.barrasso.android.volume.R;
import me.barrasso.android.volume.ui.DotProgressDrawable;
/**
* Simple {@link android.widget.ProgressBar} that uses a {@link me.barrasso.android.volume.ui.DotProgressDrawable}
* to display the style of the progress. This effect cannot otherwise be accomplished in code.
*/
public final class iOSProgressBar extends ProgressBar {
private final DotProgressDrawable progressDrawable = new DotProgressDrawable();
public iOSProgressBar(Context context) {
this(context, null);
}
public iOSProgressBar(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public iOSProgressBar(Context context, AttributeSet attrs, int theme) {
super(context, attrs, theme);
setAttrs(attrs);
}
private void setAttrs(AttributeSet attrs) {
int mCompleteColor = Color.WHITE;
int mIncompleteColor = Color.BLACK;
if (null != attrs) {
TypedArray a = getContext().getTheme().obtainStyledAttributes(attrs,
R.styleable.iOSProgressBar, 0, 0);
try {
mCompleteColor = a.getColor(R.styleable.iOSProgressBar_completeColor, mCompleteColor);
mIncompleteColor = a.getColor(R.styleable.iOSProgressBar_incompleteColor, mIncompleteColor);
final int displayMode = a.getInt(R.styleable.iOSProgressBar_displayMode, DotProgressDrawable.DisplayMode.SQUARES.ordinal());
DotProgressDrawable.DisplayMode[] modes = DotProgressDrawable.DisplayMode.values();
if (displayMode >= 0 && displayMode < modes.length)
setDisplayMode(modes[displayMode]);
} finally {
a.recycle();
}
}
progressDrawable.setCompleteColor(mCompleteColor);
progressDrawable.setIncompleteColor(mIncompleteColor);
setProgressDrawable(progressDrawable);
}
protected void setIncompleteColor(int color) {
progressDrawable.setIncompleteColor(color);
progressDrawable.invalidateSelf();
invalidate();
}
protected void setCompleteColor(int color) {
progressDrawable.setCompleteColor(color);
progressDrawable.invalidateSelf();
invalidate();
}
public void setProgress(final int index, final int max) {
progressDrawable.setProgress(index, max);
setProgress((100 * index) / max);
invalidate();
}
public void setDisplayMode(DotProgressDrawable.DisplayMode mode) {
progressDrawable.setDisplayMode(mode);
}
@Override
public Parcelable onSaveInstanceState() {
final Bundle state = new Bundle();
state.putParcelable("superstate", super.onSaveInstanceState());
progressDrawable.save(state);
return state;
}
@Override
public void onRestoreInstanceState(Parcelable ss) {
final Bundle state = (Bundle) ss;
super.onRestoreInstanceState(state.getParcelable("superstate"));
progressDrawable.restore(state);
}
}