package com.lateensoft.pathfinder.toolkit.views.character; import android.os.Bundle; import android.os.Parcelable; import android.view.View; import android.view.View.OnClickListener; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; import com.lateensoft.pathfinder.toolkit.R; import com.lateensoft.pathfinder.toolkit.model.character.stats.AbilityType; import com.lateensoft.pathfinder.toolkit.model.character.stats.Skill; import com.lateensoft.pathfinder.toolkit.views.ParcelableEditorActivity; import com.lateensoft.pathfinder.toolkit.views.character.AbilitySelectionDialog.OnAbilitySelectedListener; public class SkillEditActivity extends ParcelableEditorActivity { @SuppressWarnings("unused") private static final String TAG = SkillEditActivity.class.getSimpleName(); public static final String INTENT_EXTRAS_KEY_SKILL_DELETABLE_BOOLEAN = "skill_is_deletable"; private static final int MOD_SPINNER_OFFSET = 10; private TextView m_skillNameText; private EditText m_subtypeET; private TextView m_abilityTV; private Spinner m_rankSpinner; private Spinner m_miscModSpinner; private CheckBox m_classSkillCheckBox; private Skill skill; private boolean m_deletable; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); m_deletable = getIntent().getExtras().getBoolean(INTENT_EXTRAS_KEY_SKILL_DELETABLE_BOOLEAN); } @Override protected void setupContentView() { setContentView(R.layout.skill_editor); m_skillNameText = (TextView) findViewById(R.id.tvSkillName); m_subtypeET = (EditText) findViewById(R.id.etSkillSubType); m_abilityTV = (TextView) findViewById(R.id.tvSkillAbility); m_rankSpinner = (Spinner) findViewById(R.id.spinnerSkillRank); m_miscModSpinner = (Spinner) findViewById(R.id.spinnerSkillMisc); m_classSkillCheckBox = (CheckBox) findViewById(R.id.checkboxClassSkill); m_subtypeET.setVisibility( skill.canBeSubTyped() ? View.VISIBLE : View.GONE); m_skillNameText.setText(skill.getType().getNameResId()); m_subtypeET.setText(skill.getSubType()); updateAbilityTextView(); m_abilityTV.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { AbilitySelectionDialog dialog = new AbilitySelectionDialog( SkillEditActivity.this, skill.getAbility(), skill.getType().getDefaultAbility()); dialog.setOnAbilitySelectedListener(new AbilityDialogListener()); dialog.show(); } }); setupSpinner(m_rankSpinner, R.array.skills_selectable_values_string, skill.getRank() + MOD_SPINNER_OFFSET, null); setupSpinner(m_miscModSpinner, R.array.skills_selectable_values_string, skill.getMiscMod() + MOD_SPINNER_OFFSET, null); m_classSkillCheckBox.setChecked(skill.isClassSkill()); } private void updateAbilityTextView() { m_abilityTV.setText(skill.getAbility().getNameResId()); } private class AbilityDialogListener implements OnAbilitySelectedListener { @Override public void onAbilitySelected(AbilityType ability) { skill.setAbility(ability); updateAbilityTextView(); } } @Override protected void updateEditedParcelableValues() throws InvalidValueException { if (skill.canBeSubTyped()) { skill.setSubType(m_subtypeET.getText().toString()); } skill.setRank(m_rankSpinner .getSelectedItemPosition() - MOD_SPINNER_OFFSET); skill.setMiscMod(m_miscModSpinner .getSelectedItemPosition() - MOD_SPINNER_OFFSET); skill.setClassSkill(m_classSkillCheckBox .isChecked()); } @Override protected Parcelable getEditedParcelable() { return skill; } @Override protected void setParcelableToEdit(Parcelable p) { if (p == null) { // Should not happen usually, but could possibly due to lifecycle, in which case just leave finish(); } else { skill = (Skill) p; } } @Override protected boolean isParcelableDeletable() { return m_deletable; } }