package edu.mit.mitmobile2;
import java.util.Date;
import android.content.Context;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class LoaderBar extends LinearLayout {
Context ctx;
ImageView mLoadingImage;
TextView tv;
TextView mLoadingMessageTV;
private boolean mAnimationEnabled = false;
private boolean mHidden = false;
private static final int ANIMATION_OFFSET = 2000;
private Animation mOutAnimation;
private String mLoadingMessage = "Loading..";
private String mFailedMessage = "Update failed!";
private Date mDate;
public LoaderBar(Context context, AttributeSet attrs) {
super(context, attrs);
initLoaderBar(context);
}
public LoaderBar(Context context) {
super(context);
initLoaderBar(context);
}
public void enableAnimation() {
mAnimationEnabled = true;
}
private void initLoaderBar(Context context) {
ctx = context;
LayoutInflater vi = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
vi.inflate(R.layout.loader, this);
mLoadingImage = (ImageView) findViewById(R.id.loaderLoadingImage);
tv = (TextView) findViewById(R.id.loaderTV);
mLoadingMessageTV = (TextView) findViewById(R.id.loaderLoadingMessageTV);
mOutAnimation = AnimationUtils.loadAnimation(ctx, R.anim.loader_slide_down);
}
public void startLoading() {
setAnimation(null);
setVisibility(View.VISIBLE);
mHidden = false;
mLoadingMessageTV.setText(mLoadingMessage);
mLoadingMessageTV.setVisibility(VISIBLE);
tv.setVisibility(GONE);
mLoadingImage.setVisibility(VISIBLE);
LoadingUIHelper.startLoadingImage(new Handler(), mLoadingImage);
}
public void endLoading() {
setLastLoaded(null);
}
public void setLastLoaded(Date date) {
if(date != null) {
mDate = date;
}
mLoadingImage.setVisibility(GONE);
LoadingUIHelper.stopLoadingImage(new Handler(), mLoadingImage);
tv.setText("Last updated: " + mDate.toLocaleString());
mLoadingMessageTV.setVisibility(GONE);
tv.setVisibility(VISIBLE);
if(mAnimationEnabled) {
mHidden = true;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if(mHidden) {
setAnimation(mOutAnimation);
setVisibility(View.GONE);
}
}
}, ANIMATION_OFFSET);
}
}
public void errorLoading() {
mLoadingImage.setVisibility(GONE);
LoadingUIHelper.stopLoadingImage(new Handler(), mLoadingImage);
tv.setText(mFailedMessage);
mLoadingMessageTV.setVisibility(GONE);
tv.setVisibility(VISIBLE);
}
public void setLoadingMessage(String loadingMessage) {
mLoadingMessage = loadingMessage;
}
public void setFailedMessage(String failedMessage) {
mFailedMessage = failedMessage;
}
}