Created
March 10, 2017 00:56
-
-
Save moagrius/07c9661dd8adc480c45715bb1c6e4642 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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