package v2.simpleUi;
import v2.simpleUi.uiDecoration.UiDecoratable;
import v2.simpleUi.uiDecoration.UiDecorator;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
public abstract class M_ProgressBar implements ModifierInterface, UiDecoratable {
private ProgressBar progressBar;
private UiDecorator myDecorator;
private TextView nameText;
private LinearLayout container;
public void hide() {
if (container != null) {
container.setVisibility(View.GONE);
}
}
public void showAgain() {
if (container != null) {
container.setVisibility(View.VISIBLE);
}
}
@Override
public View getView(Context context) {
container = new LinearLayout(context);
container.setOrientation(LinearLayout.VERTICAL);
container.setGravity(Gravity.CENTER_VERTICAL);
LayoutParams p = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 2);
LayoutParams p2 = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1);
nameText = new TextView(context);
nameText.setText(getVarName());
nameText.setLayoutParams(p);
container.addView(nameText);
progressBar = new ProgressBar(context, null,
android.R.attr.progressBarStyleHorizontal);
progressBar.setLayoutParams(p2);
progressBar.setProgress(loadInitValue());
progressBar.setMax(loadMaxValue());
container.addView(progressBar);
container.setPadding(DEFAULT_PADDING, DEFAULT_PADDING, DEFAULT_PADDING,
DEFAULT_PADDING);
if (myDecorator != null) {
int currentLevel = myDecorator.getCurrentLevel();
myDecorator.decorate(context, nameText, currentLevel + 1,
UiDecorator.TYPE_INFO_TEXT);
myDecorator.decorate(context, progressBar, currentLevel + 1,
UiDecorator.TYPE_EDIT_TEXT);
}
return container;
}
@Override
public boolean assignNewDecorator(UiDecorator decorator) {
myDecorator = decorator;
return true;
}
@Override
public boolean save() {
return true;
}
public abstract int loadInitValue();
public abstract int loadMaxValue();
public abstract String getVarName();
private Handler mHandler = new Handler(Looper.getMainLooper());
public void updateValue(final int newProgressValue, final String updatedText) {
// do it from the UI thread:
mHandler.post(new Runnable() {
@Override
public void run() {
progressBar.setProgress(newProgressValue);
if (updatedText != null)
nameText.setText(updatedText);
}
});
}
}