package pt.codebits.park.alert;
import pt.codebits.park.alert.comm.Authentication;
import pt.codebits.park.alert.comm.REST;
import com.google.gson.Gson;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageButton;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class LeaderboardActivity extends Activity{
public class Rank {
private String username;
private Long rank;
private Long score;
private boolean requester;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Long getRank() {
return rank;
}
public void setRank(Long rank) {
this.rank = rank;
}
public Long getScore() {
return score;
}
public void setScore(Long score) {
this.score = score;
}
public boolean isRequester() {
return requester;
}
public void setRequester(boolean requester) {
this.requester = requester;
}
}
private static final int RANK_AMOUNT = 10;
private ImageButton parkBtn;
private ImageButton locateBtn;
private ImageButton mapBtn;
private TextView yourScore;
private TableLayout scoreHeading;
private TableLayout scores;
private String token;
private boolean isParked;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.leaderboard);
token = getIntent().getStringExtra("token");
isParked = getIntent().getBooleanExtra("isparked", false);
parkBtn = (ImageButton) findViewById(R.id.parkbtn);
locateBtn = (ImageButton) findViewById(R.id.locatebtn);
mapBtn = (ImageButton) findViewById(R.id.mapbtn);
yourScore = (TextView) findViewById(R.id.yourscore);
scores = (TableLayout) findViewById(R.id.tableLayout1);
scoreHeading = (TableLayout) findViewById(R.id.scores_heading);
if(isParked){
parkBtn.setBackgroundResource(R.drawable.removerbtnstate);
parkBtn.clearFocus();
parkBtn.setSelected(false);
}
parkBtn.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Intent intent = new Intent(LeaderboardActivity.this, MainMapActivity.class);
intent.putExtra("parkBtn", true);
intent.putExtra("isparked", isParked);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(0, 0);
finish();
return false;
}
});
locateBtn.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Intent intent = new Intent(LeaderboardActivity.this, MainMapActivity.class);
intent.putExtra("locateBtn", true);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(0, 0);
finish();
return false;
}
});
mapBtn.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Intent intent = new Intent(LeaderboardActivity.this, MainMapActivity.class);
intent.putExtra("mapBtn", true);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
overridePendingTransition(0, 0);
finish();
return false;
}
});
fillTableScores();
}
private Rank[] convertRanks(String result) {
Gson gson = new Gson();
return gson.fromJson(result, Rank[].class);
}
private void fillTableScores(){
new Thread() {
public void run() {
final String result = REST.rankingRequest(LeaderboardActivity.this, Authentication.getTokenId(token), Authentication.getTokenValue(token), RANK_AMOUNT);
LeaderboardActivity.this. runOnUiThread(new Runnable() {
public void run() {
TableRow row;
TextView numberCol, userCol, scoreCol, headerLeft, headerMiddle, headerRight;
boolean rowColorSwitch = true;
Rank[] ranks;
Rank user = null;
if(result == null || result.length() == 0){
return;
}
ranks = convertRanks(result);
for(Rank rank : ranks){
if(rank.isRequester()){
yourScore.setText(rank.getScore().toString());
user = rank;
}
}
//Converting to dip unit
int dip = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
(float) 1, getResources().getDisplayMetrics());
headerLeft = new TextView(LeaderboardActivity.this);
headerLeft.setTextColor(getResources().getColor(R.color.white));
headerMiddle = new TextView(LeaderboardActivity.this);
headerMiddle.setTextColor(getResources().getColor(R.color.white));
headerRight = new TextView(LeaderboardActivity.this);
headerRight.setTextColor(getResources().getColor(R.color.white));
headerLeft.setText("#");
headerMiddle.setText(R.string.user);
headerRight.setText(R.string.points);
headerLeft.setTypeface(null, 1);
headerMiddle.setTypeface(null, 1);
headerRight.setTypeface(null, 1);
headerLeft.setTextSize(18);
headerMiddle.setTextSize(18);
headerRight.setTextSize(18);
headerLeft.setWidth(4 * dip);
headerMiddle.setWidth(180 * dip);
headerRight.setWidth(250 * dip);
headerLeft.setPadding(10*dip, 0, 0, 0);
headerMiddle.setPadding(55*dip, 0, 0, 0);
headerRight.setPadding(50*dip, 0, 0, 0);
TableRow rowS = new TableRow(LeaderboardActivity.this);
rowS.addView(headerLeft);
rowS.addView(headerMiddle);
rowS.addView(headerRight);
scoreHeading.addView(rowS, new TableLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
for (Rank rank : ranks) {
row = new TableRow(LeaderboardActivity.this);
if(rank.equals(user)){
row.setBackgroundResource(R.color.blue_light);
}
else if(rank.getRank() == user.rank - 1 || rank.getRank() == user.rank + 1){
row.setBackgroundResource(R.color.blue_green_grey);
}
else if(rowColorSwitch){
row.setBackgroundResource(R.color.yellow2);
rowColorSwitch = false;
}
else{
row.setBackgroundResource(R.color.yellow1);
rowColorSwitch = true;
}
numberCol = new TextView(LeaderboardActivity.this);
numberCol.setTextColor(getResources().getColor(R.color.black));
userCol = new TextView(LeaderboardActivity.this);
userCol.setTextColor(getResources().getColor(R.color.black));
scoreCol = new TextView(LeaderboardActivity.this);
scoreCol.setTextColor(getResources().getColor(R.color.black));
numberCol.setText(String.valueOf(rank.getRank()));
userCol.setText(rank.getUsername());
scoreCol.setText(rank.getScore().toString());
numberCol.setTypeface(null, 1);
userCol.setTypeface(null, 1);
scoreCol.setTypeface(null, 1);
numberCol.setTextSize(18);
userCol.setTextSize(18);
scoreCol.setTextSize(18);
numberCol.setWidth(35 * dip);
userCol.setWidth(180 * dip);
scoreCol.setWidth(250 * dip);
numberCol.setPadding(10*dip, 0, 0, 0);
userCol.setPadding(40*dip, 0, 0, 0);
scoreCol.setPadding(50*dip, 0, 0, 0);
row.addView(numberCol);
row.addView(userCol);
row.addView(scoreCol);
scores.addView(row, new TableLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
}
});
}
}.start();
}
}