package br.com.while42.rpgcs.activity;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import br.com.while42.rpgcs.R;
import br.com.while42.rpgcs.activity.fragment.PlayAbilities;
import br.com.while42.rpgcs.activity.fragment.PlayAttacks;
import br.com.while42.rpgcs.activity.fragment.PlayCharacteristics;
import br.com.while42.rpgcs.activity.fragment.PlayDefences;
import br.com.while42.rpgcs.activity.fragment.PlayDefencesArmor;
import br.com.while42.rpgcs.activity.fragment.PlayDefencesOther;
import br.com.while42.rpgcs.activity.fragment.PlayHitPoints;
import br.com.while42.rpgcs.activity.fragment.PlayLanguages;
import br.com.while42.rpgcs.activity.fragment.PlaySavingThrows;
import br.com.while42.rpgcs.activity.fragment.PlaySkills;
import br.com.while42.rpgcs.activity.fragment.PlayVisionAndDeity;
import br.com.while42.rpgcs.activity.support.TypeRequestCode;
import br.com.while42.rpgcs.model.character.Abilities;
import br.com.while42.rpgcs.model.character.Characteristics;
import br.com.while42.rpgcs.model.character.Defences;
import br.com.while42.rpgcs.model.character.Languages;
import br.com.while42.rpgcs.model.character.RpgCharacter;
import br.com.while42.rpgcs.model.character.RpgClass;
import br.com.while42.rpgcs.model.character.SavingThrows;
import br.com.while42.rpgcs.model.character.Skills;
import br.com.while42.rpgcs.model.equip.Equipments;
import br.com.while42.rpgcs.persist.DataManager;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.ActionBar.TabListener;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
public class PlayRpgCharacter extends SherlockFragmentActivity {
private RpgCharacter rpgCharacter;
private PlayCharacteristics playCharacteristics;
private PlayAbilities playAbilities;
private PlayDefences playDefences;
private PlaySavingThrows playSavingThrows;
private PlayVisionAndDeity playVisionAndDeity;
private PlayDefencesOther playDefencesOther;
private PlayLanguages playLanguages;
private PlaySkills playSkills;
private PlayDefencesArmor playDefencesArmor;
private PlayHitPoints playHitPoints;
private PlayAttacks playAttacks;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_character);
Log.d("ACTIVITY", "PlayRpgCharacter - onCreate");
rpgCharacter = new RpgCharacterIntentUtils().getSerializeRpgCharacter(getIntent());
createFragments();
createButtons();
}
@Override
protected void onResume() {
super.onResume();
Log.d("ACTIVITY", "PlayRpgCharacter - onResume");
}
@Override
protected void onStart() {
super.onStart();
ActionBar actionBar = getSupportActionBar();
if (actionBar.getTabCount() > 0) {
actionBar.selectTab(actionBar.getTabAt(0));
}
Log.d("ACTIVITY", "PlayRpgCharacter - onStart");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.play_options, menu);
ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
BuilderTabs builder = new BuilderTabs(actionBar);
// TODO: Falta colocar no strings.xml
builder.addTab(PlayRpgCharacter.class, "play"); // R.string.play_title_activity);
builder.addTab(FeatsRpgCharacter.class, R.string.feats_title_activity);
builder.addTab(EquipmentRpgCharacter.class, R.string.equipment_title_activity);
builder.addTab(ItemsRpgCharacter.class, R.string.items_title_activity);
builder.addTab(TreasureRpgCharacter.class, R.string.treasure_title_activity);
// builder.addTab(MagicAndSpellsRpgCharacter.class,
// R.string.magic_spells_title_activity);
// builder.addTab(FamiliarRpgCharacter.class,
// R.string.familiar_title_activity);
// builder.addTab(NotesRpgCharacter.class,
// R.string.notes_title_activity);
MenuItem itemDel = menu.findItem(R.id_menu_play.del_character);
MenuItem itemEdit = menu.findItem(R.id_menu_play.edit_character);
itemDel.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
new AlertDialog.Builder(PlayRpgCharacter.this)
.setIcon(android.R.drawable.ic_dialog_alert).setTitle("Atenção")
.setMessage("Deseja realmente apagar esta ficha?")
.setPositiveButton("Sim", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DataManager dataManager = new DataManager(PlayRpgCharacter.this);
dataManager.deleteRpgCharacter(rpgCharacter);
finish();
}
})
.setNegativeButton("Não", null)
.show();
return false;
}
});
itemEdit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Intent intent = new Intent(PlayRpgCharacter.this, EditRpgCharacter.class);
new RpgCharacterIntentUtils().putSerializeRpgCharacter(intent, rpgCharacter);
startActivityForResult(intent, TypeRequestCode.EDIT_CHARACTER_REQUEST.getValue());
return false;
}
});
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == TypeRequestCode.NEW_CHARACTER_REQUEST.getValue() || requestCode == TypeRequestCode.EDIT_CHARACTER_REQUEST.getValue()) {
if (resultCode != RESULT_OK) {
// TODO: Falta tratar corretamente este caso
Log.d("onActivityResult", "resultCode != RESULT_OK (resultCode : " + resultCode + " requestCode: " + requestCode + ")");
return;
}
RpgCharacter character = new RpgCharacterIntentUtils().getSerializeRpgCharacter(data);
if (character != null && !character.equals(rpgCharacter)) {
Log.d("onActivityResult", "restart activity");
new RpgCharacterIntentUtils().putSerializeRpgCharacter(getIntent(), character);
finish();
startActivity(getIntent());
}
}
}
private class BuilderTabs {
private ActionBar actionBar;
public BuilderTabs(ActionBar actionBar) {
this.actionBar = actionBar;
}
private void addTab(final Class<? extends Activity> classActivity, final int title) {
Tab tab = actionBar.newTab();
tab.setText(title);
setListener(tab, classActivity);
actionBar.addTab(tab);
}
private void addTab(final Class<? extends Activity> classActivity, final String title) {
Tab tab = actionBar.newTab();
tab.setText(title);
setListener(tab, classActivity);
actionBar.addTab(tab);
}
private void setListener(Tab tab, final Class<? extends Activity> classActivity) {
tab.setTabListener(new TabListener() {
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
if (PlayRpgCharacter.class != classActivity) {
startActivity(classActivity);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
});
}
}
private void startActivity(Class<? extends Activity> clazz) {
Intent intent = new Intent(PlayRpgCharacter.this, clazz);
new RpgCharacterIntentUtils().putSerializeRpgCharacter(intent, rpgCharacter);
startActivity(intent);
}
private void createFragments() {
// TODO: Sera q aki eh necessario verificar se o rpgCharacter eh null ?!
// Na activity de Edit esta sendo feita a validacao ...
Abilities abilities = rpgCharacter.getAbilities();
Skills skills = rpgCharacter.getSkills();
Languages languages = rpgCharacter.getLanguages();
Characteristics attr = rpgCharacter.getCharacteristics();
RpgClass rpgClasses = rpgCharacter.getRpgClasses();
Equipments equipments = rpgCharacter.getEquipments();
Defences defences = rpgCharacter.getDefences();
SavingThrows savingThrows = rpgCharacter.getSavingThrows();
playCharacteristics = new PlayCharacteristics(attr, rpgClasses);
playAbilities = new PlayAbilities(abilities);
playDefences = new PlayDefences(defences);
playSavingThrows = new PlaySavingThrows(savingThrows);
playVisionAndDeity = new PlayVisionAndDeity(attr);
playDefencesOther = new PlayDefencesOther(defences);
playLanguages = new PlayLanguages(languages);
playSkills = new PlaySkills(skills);
playDefencesArmor = new PlayDefencesArmor(defences);
playHitPoints = new PlayHitPoints(defences);
playAttacks = new PlayAttacks(equipments);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id_play.fragment_header, playCharacteristics, PlayCharacteristics.class.getCanonicalName());
transaction.replace(R.id_play.fragment_abilities, playAbilities, PlayAbilities.class.getCanonicalName());
transaction.replace(R.id_play.fragment_defences, playDefences, PlayDefences.class.getCanonicalName());
transaction.replace(R.id_play.fragment_savingthrows, playSavingThrows, PlaySavingThrows.class.getCanonicalName());
transaction.replace(R.id_play.fragment_vision_deity, playVisionAndDeity, PlayVisionAndDeity.class.getCanonicalName());
transaction.replace(R.id_play.fragment_defences_other, playDefencesOther, PlayDefencesOther.class.getCanonicalName());
transaction.replace(R.id_play.fragment_language, playLanguages, PlayLanguages.class.getCanonicalName());
transaction.replace(R.id_play.fragment_skills, playSkills, PlaySkills.class.getCanonicalName());
transaction.replace(R.id_play.fragment_defences_armor, playDefencesArmor, PlayDefencesArmor.class.getCanonicalName());
transaction.replace(R.id_play.fragment_hitpoints, playHitPoints, PlayHitPoints.class.getCanonicalName());
transaction.replace(R.id_play.fragment_attacks, playAttacks, PlayAttacks.class.getCanonicalName());
transaction.commit();
}
private void createButtons() {
Button bFeats = (Button) findViewById(R.id_play.button_feats);
Button bEquipment = (Button) findViewById(R.id_play.button_equipment);
Button bItems = (Button) findViewById(R.id_play.button_items);
Button bTreasure = (Button) findViewById(R.id_play.button_treasure);
Button bMagicSpells = (Button) findViewById(R.id_play.button_magic_spells);
Button bFamiliar = (Button) findViewById(R.id_play.button_familiar);
Button bNotes = (Button) findViewById(R.id_play.button_notes);
// ---
bFeats.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(FeatsRpgCharacter.class);
}
});
bEquipment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(EquipmentRpgCharacter.class);
}
});
bItems.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(ItemsRpgCharacter.class);
}
});
bTreasure.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(TreasureRpgCharacter.class);
}
});
bMagicSpells.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(MagicAndSpellsRpgCharacter.class);
}
});
bFamiliar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(FamiliarRpgCharacter.class);
}
});
bNotes.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startActivity(NotesRpgCharacter.class);
}
});
}
}