package net.krautchan.android.widget;
import net.krautchan.R;
import net.krautchan.android.Eisenheinrich;
import net.krautchan.android.activity.ProvidesBoards;
import net.krautchan.android.activity.ProvidesThreads;
import net.krautchan.android.dialog.ThreadHistoryDialog;
import net.krautchan.data.KCBoard;
import net.krautchan.data.KCThread;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.LinearGradient;
import android.graphics.Shader;
import android.graphics.Typeface;
import android.graphics.drawable.PaintDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RectShape;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
public class CommandBar extends ViewGroup implements ProvidesThreads, ProvidesBoards {
private static final int MAX_PROGRESS = 100;
private int progressState = 0;
private ProgressBar progress;
private Handler progressHandler;
public CommandBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
prepare(context, attrs);
}
public CommandBar(Context context, AttributeSet attrs) {
super(context, attrs);
prepare(context, attrs);
}
public CommandBar(Context context) {
super(context);
prepare(context, null);
}
protected void prepare(final Context context, AttributeSet attrs) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup parentView = (ViewGroup) inflater.inflate(R.layout.command_bar, this, true);
final View viewHeader = (View)parentView.findViewById(R.id.command_bar_widget);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CommandBar);
boolean showProgress = a.getBoolean (R.styleable.CommandBar_show_progress, false);
a.recycle();
ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0, 0, 0, viewHeader.getHeight(),
new int[] {
getResources().getColor(R.color.Greengradient3a),
getResources().getColor(R.color.Greengradient3b),
getResources().getColor(R.color.Greengradient3c),
getResources().getColor(R.color.Greengradient3d),
getResources().getColor(R.color.Greendarkborder) },
new float[] {
0, 0.45f, 0.55f, 0.98f, 1 },
Shader.TileMode.REPEAT);
return lg;
}
};
PaintDrawable p = new PaintDrawable();
p.setShape(new RectShape());
p.setShaderFactory(sf);
viewHeader.setBackgroundDrawable(p);
TextView history = (TextView) parentView.findViewById(R.id.history_button);
history.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/fontawesome-webfont.ttf"));
history.setClickable(true);
history.setTextColor(getResources().getColor(R.color.White));
history.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
ThreadHistoryDialog d = new ThreadHistoryDialog((Activity) context);
d.show();
}
});
TextView options = (TextView) parentView.findViewById(R.id.options_button);
options.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/AndroidIcons.ttf"));
options.setClickable(true);
options.setTextColor(getResources().getColor(R.color.White));
options.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Activity parent = (Activity) context;
parent.openOptionsMenu();
}
});
progressHandler = new Handler() {
public void handleMessage(Message msg) {
if (0 == msg.arg1) {
hideProgressBar();
} else if (1 == msg.arg1) {
incrementProgressBy(10);
}
}
};
progress = (ProgressBar) viewHeader.findViewById(R.id.progressbar);
progress.setMax(MAX_PROGRESS);
progressState = 0;
progress.setProgress(progressState);
if (!showProgress) {
progress.setVisibility(GONE);
}
}
public Handler getProgressHandler() {
return progressHandler;
}
public void showProgressBar() {
progress.setVisibility(View.VISIBLE);
}
public void hideProgressBar() {
progress.setVisibility(View.GONE);
progress.setMax(MAX_PROGRESS);
progressState = 0;
progress.setProgress(progressState);
progress.setProgress(0);
}
public void incrementProgressBy (int increment) {
progressState += increment;
progress.setProgress(progressState);
}
public void setTitle (int resourceId) {
setTitle (getResources().getString(resourceId));
}
public void setTitle (String title) {
if (null == title)
return;
TextView headline = (TextView)findViewById(R.id.headline);
String locTitle = (title.length() < 33) ? title : title.substring(0, 32);
headline.setText(locTitle);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
View container = findViewById(R.id.command_bar_widget);
container.layout(0, 0, r, this.getHeight());
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
this.measureChildren(widthMeasureSpec, heightMeasureSpec);
View container = findViewById(R.id.command_bar_widget);
LayoutParams p2 = container.getLayoutParams();
setMeasuredDimension(LayoutParams.MATCH_PARENT, p2.height);
}
@Override
public KCBoard getBoard(long dbId) {
return Eisenheinrich.GLOBALS.getBoardCache().get(dbId);
}
@Override
public KCThread getThread(long dbId) {
return Eisenheinrich.GLOBALS.getThreadCache().get(dbId);
}
}