Skip to content

Instantly share code, notes, and snippets.

@moagrius
Created March 10, 2017 00:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moagrius/07c9661dd8adc480c45715bb1c6e4642 to your computer and use it in GitHub Desktop.
Save moagrius/07c9661dd8adc480c45715bb1c6e4642 to your computer and use it in GitHub Desktop.
package edu.gatech.seclass.tourneymanager;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import edu.gatech.seclass.tourneymanager.persistence.Dialogs;
import edu.gatech.seclass.tourneymanager.persistence.Player;
import edu.gatech.seclass.tourneymanager.persistence.Tournament;
/**
* @author Mike Dunn, 2/26/17.
*/
public class StartTournamentActivity extends BackableActivity {
private EditText entranceFeeEditText;
private EditText housePercentageEditText;
List<Player> playerList;
Set<Integer> seletedPlayerIdxes = new HashSet<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start_tournament);
entranceFeeEditText = (EditText) findViewById(R.id.edittext_start_tournament_entrance_fee);
housePercentageEditText = (EditText) findViewById(R.id.edittext_start_tournament_house_percentage);
playerList = Player.list(this, "id");
}
public void addParticipantsClickHandler(View view) {
final Set<Integer> checkedIdxes = new HashSet<>(seletedPlayerIdxes);
final CharSequence[] names = new CharSequence[playerList.size()];
final boolean[] checkedNames = new boolean[playerList.size()];
for(int i = 0; i < playerList.size(); i++) {
names[i] = playerList.get(i).name;
if(checkedIdxes.contains(i)) {
checkedNames[i] = true;
}
}
new AlertDialog.Builder(this)
.setTitle("Add Participants")
.setMultiChoiceItems(names, checkedNames, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
if(isChecked) {
// If the user checked the item, add it to the selected items
checkedIdxes.add(indexSelected);
} else if(seletedPlayerIdxes.contains(indexSelected)) {
// Else, if the item is already in the array, remove it
checkedIdxes.remove(indexSelected);
}
}
})
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
seletedPlayerIdxes = new HashSet<>(checkedIdxes);
}
})
.setNegativeButton("Cancel", null).create().show();
}
public void verifyAndStartTournament() throws Exception {
final List<Player> players = new ArrayList<>();
for(Integer index : seletedPlayerIdxes) {
Player player = playerList.get(index);
players.add(player);
}
String entranceFeeString = entranceFeeEditText.getText().toString();
String housePercentageString = housePercentageEditText.getText().toString();
final Integer entranceFeeInteger;
final Integer housePercentageInteger;
try {
entranceFeeInteger = Integer.valueOf(entranceFeeString);
housePercentageInteger = Integer.valueOf(housePercentageString);
} catch(NumberFormatException | NullPointerException e) {
throw new IllegalStateException("Entrance fee and house cut must be valid integers");
}
int numberOfParticipants = seletedPlayerIdxes.size();
double houseCut = entranceFeeInteger * numberOfParticipants * housePercentageInteger / 100.0;
double totalPrizeAmount = entranceFeeInteger * numberOfParticipants - houseCut;
double firstPrize = totalPrizeAmount * 0.5;
double secondPrize = totalPrizeAmount * 0.3;
double thirdPrize = totalPrizeAmount * 0.2;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Number of Entrants: " + numberOfParticipants);
stringBuilder.append("\n");
stringBuilder.append("House Cut: " + houseCut);
stringBuilder.append("\n");
stringBuilder.append(String.format(Locale.US, "Prizes: 1st - %f, 2nd - %f, 3rd - %f", firstPrize, secondPrize, thirdPrize));
stringBuilder.append("\n");
stringBuilder.append("Paricipants: ");
boolean first = true;
for(Player player : players) {
if(!first) {
stringBuilder.append(", ");
}
stringBuilder.append(player.userName);
}
String message = stringBuilder.toString();
new AlertDialog.Builder(this)
.setTitle("Verify ")
.setMessage(message)
.setPositiveButton("START", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
try {
Tournament tournament = new Tournament();
tournament.entryPrice = entranceFeeInteger;
tournament.houseCut = housePercentageInteger;
tournament.players = players;
tournament.save(StartTournamentActivity.this);
tournament.start(StartTournamentActivity.this);
} catch(Exception e) {
showError(e);
}
}
})
.setNegativeButton("Cancel", null)
.create().show();
}
private void showError(Exception e) {
Dialogs.show(this, "There was a problem starting the tournament", e.getMessage());
}
public void startTournamentCheckClickHandler(View view) {
try {
verifyAndStartTournament();
} catch(Exception e) {
showError(e);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment