package com.infonuascape.osrshelper; import java.text.NumberFormat; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import com.infonuascape.osrshelper.hiscore.HiscoreHelper; import com.infonuascape.osrshelper.utils.Skill; import com.infonuascape.osrshelper.utils.Utils; import com.infonuascape.osrshelper.utils.exceptions.PlayerNotFoundException; import com.infonuascape.osrshelper.utils.players.PlayerSkills; import com.infonuascape.osrshelper.views.RSViewPopulate; public class HighScoreActivity extends Activity { private final static String EXTRA_USERNAME = "extra_username"; private static final int NUM_PAGES = 2; private String username; private TextView header; private TextView combatText; private PlayerSkills playerSkills; private TableLayout rsView; private TableLayout table; private ArrayList<ImageView> dots; private ViewPager mViewPager; public static void show(final Context context, final String username) { Intent intent = new Intent(context, HighScoreActivity.class); intent.putExtra(EXTRA_USERNAME, username); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.hiscores); username = getIntent().getStringExtra(EXTRA_USERNAME); header = (TextView) findViewById(R.id.header); header.setText(getString(R.string.loading_highscores, username)); combatText = (TextView) findViewById(R.id.combat); rsView = (TableLayout) findViewById(R.id.rs_view); table = (TableLayout) findViewById(R.id.table_hiscores); WizardPagerAdapter adapter = new WizardPagerAdapter(); mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setAdapter(adapter); addDots(); new PopulateTable().execute(); } private void changeHeaderText(final String text) { runOnUiThread(new Runnable() { @Override public void run() { findViewById(R.id.progressbar).setVisibility(View.GONE); header.setText(text); } }); } private void changeCombatText(){ runOnUiThread(new Runnable() { @Override public void run() { combatText.setVisibility(View.VISIBLE); combatText.setText(getString(R.string.combat_lvl, Utils.getCombatLvl(playerSkills))); } }); } 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 { playerSkills = hiscoreHelper.getPlayerStats(); } catch (PlayerNotFoundException e) { changeHeaderText(getString(R.string.not_existing_player, username)); } catch (Exception uhe) { uhe.printStackTrace(); changeHeaderText(getString(R.string.network_error)); } return playerSkills; } @Override protected void onPostExecute(PlayerSkills playerSkillsCallback) { if (playerSkillsCallback != null) { playerSkills = playerSkillsCallback; populateTable(playerSkills); } } } private void populateTable(PlayerSkills playerSkills) { changeHeaderText(getString(R.string.showing_results, username)); changeCombatText(); ArrayList<Skill> skills = PlayerSkills.getSkillsInOrder(playerSkills); for (Skill skill : skills) { table.addView(createRow(skill)); } RSViewPopulate rsViewPopulate = new RSViewPopulate(this, PlayerSkills.getSkillsInOrderForRSView(playerSkills)); rsView = rsViewPopulate.populate(rsView); } private TableRow createRow(Skill skill) { TableRow tableRow = new TableRow(this); TableRow.LayoutParams params = new TableRow.LayoutParams(); params.weight = 1; params.width = 0; params.topMargin = 10; params.bottomMargin = 10; params.gravity = Gravity.CENTER; // Skill image ImageView image = new ImageView(this); image.setImageResource(skill.getDrawableInt()); image.setLayoutParams(params); tableRow.addView(image); // Lvl TextView text = new TextView(this); if (skill.getRank() != -1) { text.setText(skill.getLevel() + ""); } text.setLayoutParams(params); text.setGravity(Gravity.CENTER); text.setTextColor(getResources().getColor(R.color.text_normal)); tableRow.addView(text); // XP text = new TextView(this); if (skill.getRank() != -1) { text.setText(NumberFormat.getInstance().format(skill.getExperience())); } text.setLayoutParams(params); text.setGravity(Gravity.CENTER); text.setTextColor(getResources().getColor(R.color.text_normal)); tableRow.addView(text); // Ranking text = new TextView(this); if (skill.getRank() != -1) { text.setText(NumberFormat.getInstance().format(skill.getRank())); text.setTextColor(getResources().getColor(R.color.text_normal)); } else { text.setText(getString(R.string.not_ranked)); text.setTextColor(getResources().getColor(R.color.Red)); } text.setLayoutParams(params); text.setGravity(Gravity.CENTER); tableRow.addView(text); return tableRow; } public void addDots() { dots = new ArrayList<ImageView>(); LinearLayout dotsLayout = (LinearLayout)findViewById(R.id.dots); for(int i = 0; i < NUM_PAGES; i++) { ImageView dot = new ImageView(this); dot.setImageDrawable(getResources().getDrawable(R.drawable.pager_dot_not_selected)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT ); dotsLayout.addView(dot, params); dots.add(dot); } mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { selectDot(position); } @Override public void onPageScrollStateChanged(int state) { } }); selectDot(0); } public void selectDot(int idx) { Resources res = getResources(); for(int i = 0; i < NUM_PAGES; i++) { int drawableId = (i==idx)?(R.drawable.pager_dot_selected):(R.drawable.pager_dot_not_selected); Drawable drawable = res.getDrawable(drawableId); dots.get(i).setImageDrawable(drawable); } } class WizardPagerAdapter extends PagerAdapter { public Object instantiateItem(ViewGroup collection, int position) { int resId = 0; switch (position) { case 0: resId = R.id.scroll_table; break; case 1: resId = R.id.scroll_table_rs_view; break; } return findViewById(resId); } @Override public int getCount() { return 2; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == ((View) arg1); } } }