package com.barcicki.trio.views;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.barcicki.trio.HomeActivity;
import com.barcicki.trio.R;
import com.barcicki.trio.core.TrioSettings;
import com.barcicki.trio.core.Utils;
import com.google.example.games.basegameutils.BaseGameActivity;
public class MenuDescription extends FrameLayout {
private TextView mDescription;
private ImageView mLogo;
private Button mLeftButton;
private Button mRightButton;
private MenuDescriptionType mCurrentType = MenuDescriptionType.CLASSIC;
private MenuDescriptionListener mListener = null;
public MenuDescription(Context context, AttributeSet attrs) {
super(context, attrs);
initWithAttrs(attrs);
}
public MenuDescription(Context context) {
super(context);
init();
}
private void initWithAttrs(AttributeSet attrs) {
TypedArray attrArray = getContext().obtainStyledAttributes(attrs, R.styleable.MenuDescription);
final int count = attrArray.getIndexCount();
for (int i = 0; i < count; ++i)
{
int attr = attrArray.getIndex(i);
switch (attr)
{
case R.styleable.MenuDescription_alpha:
Utils.setAlpha(this, attrArray.getFloat(attr, 1.0f));
break;
case R.styleable.MenuDescription_type:
mCurrentType = MenuDescriptionType.valueOf(attrArray.getString(attr));
break;
}
}
attrArray.recycle();
init();
}
private void init() {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.menu_description, null);
if (!isInEditMode()) {
mDescription = (TextView) view.findViewById(R.id.menuDescription);
if (!this.isInEditMode()) {
mDescription.setTypeface(Typeface.createFromAsset(getContext()
.getAssets(), "poetsen.otf"));
mLogo = (ImageView) view.findViewById(R.id.menuLogo);
mLeftButton = (Button) view.findViewById(R.id.menuButtonLeft);
mRightButton = (Button) view.findViewById(R.id.menuButtonRight);
setMenuDescription(mCurrentType);
}
addView(view);
}
}
private void updateViews(int logoResource, int descriptionResource, Integer... buttonLabels) {
mLogo.setImageResource(logoResource);
mDescription.setText(getContext().getString(descriptionResource));
mRightButton.setText(getContext().getString(buttonLabels[0]));
if (buttonLabels.length == 2) {
mLeftButton.setVisibility(View.VISIBLE);
mLeftButton.setText(getContext().getString(buttonLabels[1]));
} else {
mLeftButton.setVisibility(View.GONE);
}
}
private void renderClassicDescription() {
if (TrioSettings.isSavedGamePresent()) {
updateViews(R.drawable.menu_classic_label,
R.string.menu_description_classic,
R.string.menu_description_button_new_game, R.string.menu_description_button_continue);
} else {
updateViews(R.drawable.menu_classic_label,
R.string.menu_description_classic,
R.string.menu_description_button_play);
}
}
private void renderSpeedDescription() {
updateViews(R.drawable.menu_speed_label,
R.string.menu_description_speed, R.string.menu_description_button_play);
}
private void renderTripleDescription() {
updateViews(R.drawable.menu_triple_label,
R.string.menu_description_triple,
R.string.menu_description_button_play);
}
private void renderHelpDescription() {
updateViews(R.drawable.menu_help_label, R.string.menu_description_help,
R.string.menu_description_button_learn);
}
private void renderPlayGamesDescription() {
if (((HomeActivity) getContext()).isSignedIn()) {
updateViews(R.drawable.menu_play_games_label, R.string.menu_description_play_games, R.string.menu_description_button_achievements, R.string.menu_description_button_leaderbaords);
} else {
updateViews(R.drawable.menu_play_games_label, R.string.menu_description_play_games, R.string.menu_description_button_sign_in);
}
}
public MenuDescriptionType getMenuType() {
return mCurrentType;
}
public void setMenuDescriptionListener(MenuDescriptionListener listener) {
this.mListener = listener;
if (mListener != null) {
mLeftButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mListener.onLeftButtonPressed(mCurrentType, v);
}
});
mRightButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mListener.onRightButtonPressed(mCurrentType, v);
}
});
} else {
mLeftButton.setOnClickListener(null);
mRightButton.setOnClickListener(null);
}
}
public void setMenuDescription(MenuDescriptionType item) {
mCurrentType = item;
switch (item) {
case CLASSIC:
renderClassicDescription();
break;
case SPEED:
renderSpeedDescription();
break;
case TRIPLE:
renderTripleDescription();
break;
case HELP:
renderHelpDescription();
break;
case PLAY_GAMES:
renderPlayGamesDescription();
break;
}
}
public void update() {
setMenuDescription(getMenuType());
}
public interface MenuDescriptionListener {
void onLeftButtonPressed(MenuDescriptionType type, View v);
void onRightButtonPressed(MenuDescriptionType type, View v);
}
public enum MenuDescriptionType {
CLASSIC, SPEED, TRIPLE, HELP, PLAY_GAMES, SETTINGS
}
}