package com.infonuascape.osrshelper;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.TextView;
import com.infonuascape.osrshelper.hiscore.HiscoreHelper;
import com.infonuascape.osrshelper.utils.Skill;
import com.infonuascape.osrshelper.utils.SkillsEnum.SkillType;
import com.infonuascape.osrshelper.utils.Utils;
import com.infonuascape.osrshelper.utils.exceptions.PlayerNotFoundException;
import com.infonuascape.osrshelper.utils.players.PlayerSkills;
public class CombatCalcActivity extends Activity implements TextWatcher, OnClickListener {
private TextView combatText;
private TextView lvlNeededText;
private TextView attStrText;
private TextView hpDefText;
private TextView rangeText;
private TextView mageText;
private TextView prayerText;
private EditText hitpointEdit;
private EditText attackEdit;
private EditText strengthEdit;
private EditText defenceEdit;
private EditText magicEdit;
private EditText rangingEdit;
private EditText prayerEdit;
private EditText usernameEdit;
private String username;
public static void show(final Context context) {
Intent intent = new Intent(context, CombatCalcActivity.class);
context.startActivity(intent);
}
public static void showWithPrefillUSername(final Context context, final String username) {
Intent intent = new Intent(context, CombatCalcActivity.class);
intent.putExtra("username", username);
context.startActivity(intent);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
setContentView(R.layout.combat_lvl_calc);
combatText = (TextView) findViewById(R.id.combat_lvl);
lvlNeededText = (TextView) findViewById(R.id.number_lvl_needed);
attStrText = (TextView) findViewById(R.id.attack_strength_needed);
hpDefText = (TextView) findViewById(R.id.hitpoint_defence_needed);
rangeText = (TextView) findViewById(R.id.ranging_needed);
mageText = (TextView) findViewById(R.id.magic_needed);
prayerText = (TextView) findViewById(R.id.prayer_needed);
hitpointEdit = ((EditText) findViewById(R.id.edit_hitpoints));
hitpointEdit.addTextChangedListener(this);
attackEdit = ((EditText) findViewById(R.id.edit_attack));
attackEdit.addTextChangedListener(this);
strengthEdit = ((EditText) findViewById(R.id.edit_strength));
strengthEdit.addTextChangedListener(this);
defenceEdit = ((EditText) findViewById(R.id.edit_defence));
defenceEdit.addTextChangedListener(this);
rangingEdit = ((EditText) findViewById(R.id.edit_ranging));
rangingEdit.addTextChangedListener(this);
prayerEdit = ((EditText) findViewById(R.id.edit_prayer));
prayerEdit.addTextChangedListener(this);
magicEdit = ((EditText) findViewById(R.id.edit_magic));
magicEdit.addTextChangedListener(this);
usernameEdit = ((EditText) findViewById(R.id.edit_username));
findViewById(R.id.load_btn).setOnClickListener(this);
changeCombatText();
username = getIntent().getStringExtra("username");
if(username != null){
usernameEdit.setText(username);
new PopulateTable().execute();
}
}
private void changeCombatText(){
runOnUiThread(new Runnable() {
@Override
public void run() {
PlayerSkills playerSkills = new PlayerSkills();
String hitpoint = hitpointEdit.getText().toString();
String attack = attackEdit.getText().toString();
String strength = strengthEdit.getText().toString();
String defence = defenceEdit.getText().toString();
String ranging = rangingEdit.getText().toString();
String prayer = prayerEdit.getText().toString();
String magic = magicEdit.getText().toString();
playerSkills.hitpoints = hitpoint.isEmpty() ? new Skill(SkillType.Hitpoints, 0, (short)0) : new Skill(SkillType.Hitpoints, 0, Short.valueOf(hitpoint));
playerSkills.attack = attack.isEmpty() ? new Skill(SkillType.Attack, 0, (short)0) : new Skill(SkillType.Attack, 0, Short.valueOf(attack));
playerSkills.defence = defence.isEmpty() ? new Skill(SkillType.Defence, 0, (short)0) : new Skill(SkillType.Defence, 0, Short.valueOf(defence));
playerSkills.strength = strength.isEmpty() ? new Skill(SkillType.Strength, 0, (short)0) : new Skill(SkillType.Strength, 0, Short.valueOf(strength));
playerSkills.ranged = ranging.isEmpty() ? new Skill(SkillType.Ranged, 0, (short)0) : new Skill(SkillType.Ranged, 0, Short.valueOf(ranging));
playerSkills.prayer = prayer.isEmpty() ? new Skill(SkillType.Prayer, 0, (short)0) : new Skill(SkillType.Prayer, 0, Short.valueOf(prayer));
playerSkills.magic = magic.isEmpty() ? new Skill(SkillType.Magic, 0, (short)0) : new Skill(SkillType.Magic, 0, Short.valueOf(magic));
boolean isOneShown = false;
combatText.setText(getString(R.string.combat_lvl, Utils.getCombatLvl(playerSkills)));
int missingAttStr = Utils.getMissingAttackStrengthUntilNextCombatLvl(playerSkills);
if(playerSkills.attack.getLevel() + playerSkills.strength.getLevel() + missingAttStr < 199) {
attStrText.setText(getString(R.string.attack_strength_lvl_needed, missingAttStr));
attStrText.setVisibility(View.VISIBLE);
isOneShown = true;
} else {
attStrText.setVisibility(View.GONE);
}
int missingHpDef = Utils.getMissingHPDefenceUntilNextCombatLvl(playerSkills);
if(playerSkills.hitpoints.getLevel() + playerSkills.defence.getLevel() + missingHpDef < 199) {
hpDefText.setText(getString(R.string.hitpoint_defence_lvl_needed, missingHpDef));
hpDefText.setVisibility(View.VISIBLE);
isOneShown = true;
} else {
hpDefText.setVisibility(View.GONE);
}
int missingMage = Utils.getMissingMagicUntilNextCombatLvl(playerSkills);
if(playerSkills.magic.getLevel() + missingMage <= 99) {
mageText.setText(getString(R.string.magic_lvl_needed, missingMage));
mageText.setVisibility(View.VISIBLE);
isOneShown = true;
} else {
mageText.setVisibility(View.GONE);
}
int missingRanged = Utils.getMissingRangingUntilNextCombatLvl(playerSkills);
if(playerSkills.ranged.getLevel() + missingRanged <= 99) {
rangeText.setText(getString(R.string.ranging_lvl_needed, missingRanged));
rangeText.setVisibility(View.VISIBLE);
isOneShown = true;
} else {
rangeText.setVisibility(View.GONE);
}
int missingPrayer = Utils.getMissingPrayerUntilNextCombatLvl(playerSkills);
if(playerSkills.prayer.getLevel() + missingPrayer <= 99) {
prayerText.setText(getString(R.string.prayer_lvl_needed, missingPrayer));
prayerText.setVisibility(View.VISIBLE);
isOneShown = true;
} else {
prayerText.setVisibility(View.GONE);
}
if(!isOneShown) {
lvlNeededText.setText(R.string.maxed_out);
} else {
lvlNeededText.setText(R.string.lvl_need);
}
}
});
}
private class PopulateTable extends AsyncTask<String, Void, PlayerSkills> {
@Override
protected PlayerSkills doInBackground(String... urls) {
HiscoreHelper hiscoreHelper = new HiscoreHelper();
hiscoreHelper.setUserName(username);
PlayerSkills playerSkills = null;
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
findViewById(R.id.load_btn).setEnabled(false);
}});
playerSkills = hiscoreHelper.getPlayerStats();
} catch (PlayerNotFoundException e) {
e.printStackTrace();
eraseAndChangeHint(getString(R.string.not_existing_player, username));
} catch (Exception uhe) {
uhe.printStackTrace();
eraseAndChangeHint(getString(R.string.network_error));
}
return playerSkills;
}
@Override
protected void onPostExecute(final PlayerSkills playerSkillsCallback) {
if (playerSkillsCallback != null) {
runOnUiThread(new Runnable(){
@Override
public void run() {
findViewById(R.id.load_btn).setEnabled(true);
usernameEdit.setHint(R.string.prompt_username);
hitpointEdit.setText(playerSkillsCallback.hitpoints.getLevel()+"");
attackEdit.setText(playerSkillsCallback.attack.getLevel()+"");
strengthEdit.setText(playerSkillsCallback.strength.getLevel()+"");
defenceEdit.setText(playerSkillsCallback.defence.getLevel()+"");
magicEdit.setText(playerSkillsCallback.magic.getLevel()+"");
rangingEdit.setText(playerSkillsCallback.ranged.getLevel()+"");
prayerEdit.setText(playerSkillsCallback.prayer.getLevel()+"");
changeCombatText();
}});
}
}
}
public void eraseAndChangeHint(final String text){
runOnUiThread(new Runnable(){
@Override
public void run() {
usernameEdit.setText("");
usernameEdit.setHint(text);
findViewById(R.id.load_btn).setEnabled(true);
}});
}
@Override
public void afterTextChanged(Editable arg0) {
changeCombatText();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void onClick(View v) {
if(v.getId() == R.id.load_btn) {
String text = usernameEdit.getText().toString();
if(text != null && !text.isEmpty()){
username = text;
new PopulateTable().execute();
}
}
}
}