package semtex.archery; import java.text.MessageFormat; import java.util.ArrayList; import java.util.Date; import java.util.Map; import semtex.archery.data.DatabaseHelper; import semtex.archery.data.ReportGenerator; import semtex.archery.data.entities.UserVisit; import semtex.archery.data.entities.Visit; import semtex.archery.data.reports.ParcourReportData; import semtex.archery.util.ArcheryBackupManager; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.os.ParcelUuid; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.*; import com.j256.ormlite.android.apptools.OrmLiteBaseActivity; public class Scoreboard extends OrmLiteBaseActivity<DatabaseHelper> { public static final int COLOR_1 = 0xFF696969; public static final int COLOR_2 = 0xFF808080; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.scoreboard); final Intent intent = getIntent(); if (intent == null) { return; } // if final ParcelUuid visitUuid = intent.getParcelableExtra("visit_id"); if (visitUuid == null) { return; } // if final Visit v = getHelper().getVisitDao().queryForId(visitUuid.getUuid()); final ReportGenerator generator = new ReportGenerator(getHelper()); final ParcourReportData reportData = generator.generateReportForVisit(v); final TextView name = (TextView)findViewById(R.id.lblParcourName); final TextView date = (TextView)findViewById(R.id.lblParcourRevisionDate); name.setText(reportData.getParcourName()); date.setText(reportData.getParcourRevisionDate().toLocaleString()); final TableLayout tl = (TableLayout)findViewById(R.id.tblScoring); final TableRow tr = new TableRow(this); TextView tv = new TextView(this); tv.setText(""); tv.setTypeface(null, Typeface.BOLD); tv.setBackgroundColor(COLOR_1); tr.addView(tv, new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.2f)); for (final UserVisit uv : v.getUserVisit()) { tv = new TextView(this); tv.setText(uv.getUser().getUserName()); tv.setTypeface(null, Typeface.BOLD); tv.setBackgroundColor(COLOR_1); tr.addView(tv, new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.2f)); } tl.addView(tr); final Map<Integer, Map<String, Integer>> scoringData = reportData.getScoringData(); ArrayList<Double> values = new ArrayList<Double>(); for (final UserVisit uv : v.getUserVisit()) { values.add(reportData.getAvgPoints().get(uv.getUser().getUserName())); } addLineToTable(tl, "average", values, true); values = new ArrayList<Double>(); for (final UserVisit uv : v.getUserVisit()) { values.add(reportData.getTotalPoints().get(uv.getUser().getUserName()) * 1.0); } addLineToTable(tl, "total", values, true); for (final Map.Entry<Integer, Map<String, Integer>> entry : scoringData.entrySet()) { values = new ArrayList<Double>(); for (final UserVisit uv : v.getUserVisit()) { // Sanitation checking - has the user really scores or might we run into a nullpointer along the way? if (entry.getValue() != null) { final Integer score = entry.getValue().get(uv.getUser().getUserName()); if (score != null) { values.add(entry.getValue().get(uv.getUser().getUserName()) * 1.0); } else { values.add(null);// if } // if - score not null } // if } // for - each userVisit addLineToTable(tl, entry.getKey().toString(), values, entry.getKey() % 2 == 0); } // for - all entries final Button btnVisitClose = (Button)findViewById(R.id.btnVisitClose); // don't show button if visit is closed if (v.getEndTime() != null) { btnVisitClose.setVisibility(View.GONE); } btnVisitClose.setOnClickListener(new View.OnClickListener() { public void onClick(final View view) { v.setEndTime(new Date()); getHelper().getVisitDao().update(v); Toast.makeText(view.getContext(), "Visit successfully ended!", Toast.LENGTH_SHORT).show(); // triggering new backup on google services final ArcheryBackupManager bm = new ArcheryBackupManager(Scoreboard.this); bm.dataChanged(); final Intent intent = new Intent(getApplicationContext(), Sharing.class); intent.putExtra("visit_id", new ParcelUuid(v.getId())); startActivity(intent); setResult(RESULT_OK); finish(); } // onClick }); } // onCreate private void addLineToTable(final TableLayout tl, final String key, final ArrayList<Double> values, final boolean isOdd) { final TableRow tr = new TableRow(this); final int col = isOdd ? COLOR_2 : COLOR_1; TextView tv = new TextView(this); tv.setText(key); tv.setTypeface(null, Typeface.BOLD); tv.setBackgroundColor(col); tr.addView(tv, new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.2f)); for (final Double value : values) { tv = new TextView(this); tv.setText(value != null ? MessageFormat.format("{0,number,#.##}", value) : "-"); tv.setBackgroundColor(col); tr.addView(tv, new TableRow.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.2f)); } tl.addView(tr); } }