
package com.github.andlyticsproject.chart;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ViewSwitcher;

public class ChartTextSwitcher extends ViewSwitcher {

	/**
	 * Creates a new empty TextSwitcher.
	 *
	 * @param context the application's environment
	 */
	public ChartTextSwitcher(Context context) {
		super(context);
	}

	/**
	 * Creates a new empty TextSwitcher for the given context and with the
	 * specified set attributes.
	 *
	 * @param context the application environment
	 * @param attrs a collection of attributes
	 */
	public ChartTextSwitcher(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	/**
	 * {@inheritDoc}
	 *
	 * @throws IllegalArgumentException if child is not an instance of
	 *         {@link android.widget.TextView}
	 */
	@Override
	public void addView(View child, int index, ViewGroup.LayoutParams params) {
		if (!(child instanceof RelativeLayout)) {
			throw new IllegalArgumentException(
					"ChartRatingSwitcher children must be instances of RelativeLayout");
		}

		super.addView(child, index, params);
	}

	/**
	 * Sets the text of the next view and switches to the next view. This can
	 * be used to animate the old text out and animate the next text in.
	 *
	 * @param text the new text to display
	 */
	public void setText(CharSequence text, Drawable image) {
		RelativeLayout r = (RelativeLayout) getNextView();
		r = (RelativeLayout) r.getChildAt(0);
		ImageView i = (ImageView) r.getChildAt(0);
		if (image == null) {
			i.setVisibility(View.GONE);
		} else {
			i.setVisibility(View.VISIBLE);
			i.setImageDrawable(image);
		}
		TextView t = (TextView) r.getChildAt(1);
		t.setText(text);
		showNext();
	}

	/**
	 * Sets the text of the text view that is currently showing.  This does
	 * not perform the animations.
	 *
	 * @param text the new text to display
	 */
	public void setCurrentText(CharSequence text, Drawable image) {
		RelativeLayout r = (RelativeLayout) getCurrentView();
		r = (RelativeLayout) r.getChildAt(0);
		ImageView i = (ImageView) r.getChildAt(0);
		if (image == null) {
			i.setVisibility(View.GONE);
		} else {
			i.setVisibility(View.VISIBLE);
			i.setImageDrawable(image);
		}

		TextView t = (TextView) r.getChildAt(1);
		t.setText(text);
	}
}
