Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion app/src/main/assets/input_data/Comments.csv
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ Id,isActive,Description
1,TRUE,Robot climbed noticeably faster than others
2,TRUE,Robot climbed noticeably slower than others
3,TRUE,Climb didn't count
4,TRUE,Evaded defense well
4,FALSE,Evaded defense well
5,TRUE,Ineffective defense
6,TRUE,Played really good defense
7,TRUE,Robot didn't contribute much (no auto - low scoring - no defense)
Expand Down
221 changes: 209 additions & 12 deletions app/src/main/java/com/team3663/scouting_app/activities/PostMatch.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,12 @@
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AlertDialog;
Expand All @@ -20,6 +26,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Objects;

public class PostMatch extends AppCompatActivity {
// =============================================================================================
Expand All @@ -30,6 +37,9 @@ public class PostMatch extends AppCompatActivity {
//Creating an array list for the Comments
ArrayList<Integer> CommentList = new ArrayList<>();
ArrayList<String> CommentArray = Globals.CommentList.getDescriptionList();
ArrayList<String> Accuracy = Globals.AccuracyTypeList.getDescriptionList();
ArrayList<String> ClimbLevel = Globals.ClimbLevelList.getDescriptionList();
ArrayList<String> ClimbPosition = Globals.ClimbPositionList.getDescriptionList();

@SuppressLint({"SetTextI18n", "MissingInflatedId"})
@Override
Expand All @@ -47,6 +57,11 @@ protected void onCreate(Bundle in_savedInstanceState) {
// Initialize activity components
initDidLeave();
initComments();
initAccuracy();
initClimbLevel();
initClimbPosition();
initStealFuel();
initAffectedByDefense();
initReset();
initSubmit();
initStats();
Expand Down Expand Up @@ -133,6 +148,173 @@ private void initComments() {
});
}

// =============================================================================================
// Function: initAccuracy
// Description: Initialize the Accuracy field
// Parameters: void
// Output: void
// =============================================================================================
private void initAccuracy() {
ArrayAdapter<String> adp_Accuracy = new ArrayAdapter<>(this, R.layout.cpr_spinner, Accuracy);
adp_Accuracy.setDropDownViewResource(R.layout.cpr_spinner_item);
postMatchBinding.spinnerAccuracy.setAdapter(adp_Accuracy);

// Set starting selection
int start_Pos = 0;
for (int i = 0; i < Accuracy.size(); i++) {
if (Accuracy.get(i).equals(Globals.AccuracyTypeList.getAccuracyDescription(Globals.CurrentAccuracy))) {
start_Pos = i;
break;
}
}
postMatchBinding.spinnerAccuracy.setSelection(start_Pos);

postMatchBinding.spinnerAccuracy.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

String newAccuracy = Globals.AccuracyTypeList.getAccuracyValue(postMatchBinding.spinnerAccuracy.getSelectedItem().toString());

if (!Objects.equals(newAccuracy, Globals.CurrentAccuracy)) {
Globals.CurrentAccuracy = newAccuracy;
}
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {
Globals.CurrentAccuracy = "-1";
}
});
}

// =============================================================================================
// Function: initClimbLevel
// Description: Initialize the Climb Level field
// Parameters: void
// Output: void
// =============================================================================================
private void initClimbLevel() {
ArrayAdapter<String> adp_ClimbLevel = new ArrayAdapter<>(this, R.layout.cpr_spinner, ClimbLevel);
adp_ClimbLevel.setDropDownViewResource(R.layout.cpr_spinner_item);
postMatchBinding.spinnerClimbLevel.setAdapter(adp_ClimbLevel);

// Set starting selection
int start_Pos = 0;
for (int i = 0; i < ClimbLevel.size(); i++) {
if (ClimbLevel.get(i).equals(Globals.ClimbLevelList.getClimbLevelDescription(Globals.CurrentClimbLevel))) {
start_Pos = i;
break;
}
}
postMatchBinding.spinnerClimbLevel.setSelection(start_Pos);

postMatchBinding.spinnerClimbLevel.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

String newClimbLevel = Globals.ClimbLevelList.getClimbLevelValue(postMatchBinding.spinnerClimbLevel.getSelectedItem().toString());

if (!Objects.equals(newClimbLevel, Globals.CurrentClimbLevel)) {
Globals.CurrentClimbLevel = newClimbLevel;
}
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {
Globals.CurrentClimbLevel = "-1";
}
});
}


// =============================================================================================
// Function: initClimbPosition
// Description: Initialize the field
// Parameters: void
// Output: void
// =============================================================================================
private void initClimbPosition() {
ArrayAdapter<String> adp_ClimbPosition = new ArrayAdapter<>(this, R.layout.cpr_spinner, ClimbPosition);
adp_ClimbPosition.setDropDownViewResource(R.layout.cpr_spinner_item);
postMatchBinding.spinnerClimbPosition.setAdapter(adp_ClimbPosition);

// Set starting selection
int start_Pos = 0;
for (int i = 0; i < ClimbPosition.size(); i++) {
if (ClimbPosition.get(i).equals(Globals.ClimbPositionList.getClimbPositionDescription(Globals.CurrentClimbPosition))) {
start_Pos = i;
break;
}
}
postMatchBinding.spinnerClimbPosition.setSelection(start_Pos);

// Set up a listener to handle any changes to the dropdown
postMatchBinding.spinnerClimbPosition.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

String newClimbPosition = Globals.ClimbPositionList.getClimbPositionValue(postMatchBinding.spinnerClimbPosition.getSelectedItem().toString());

if (!Objects.equals(newClimbPosition, Globals.CurrentClimbPosition)) {
Globals.CurrentClimbPosition = newClimbPosition;
}
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {
Globals.CurrentClimbPosition = "-1";
}
});
}

// =============================================================================================
// Function: initStealFuel
// Description: Initialize the Steal Fuel field
// Parameters: void
// Output: void
// =============================================================================================
private void initStealFuel() {
RadioGroup stealFuelGroup = findViewById(R.id.radiogroup_StealFuel);

stealFuelGroup.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == View.NO_ID) {
Globals.stealFuelValue = "-1";
} else if (checkedId == R.id.radiobutton_StealFuelYes) {
Globals.stealFuelValue = "yes";
} else if (checkedId == R.id.radiobutton_StealFuelNo) {
Globals.stealFuelValue = "no";
}
});
}

// =============================================================================================
// Function: initAffectedByDefense
// Description: Initialize the field
// Parameters: void
// Output: void
// =============================================================================================
private void initAffectedByDefense() {
RadioGroup affectByDefenseGroup = findViewById(R.id.radiogroup_AffectedByDefense);

affectByDefenseGroup.setOnCheckedChangeListener((group, checkedId) -> {
if (checkedId == View.NO_ID) {
Globals.affectedByDefenseValue = "-1";
} else if (checkedId == R.id.radiobutton_NoDefense) {
Globals.affectedByDefenseValue = "none";
} else if (checkedId == R.id.radiobutton_Low) {
Globals.affectedByDefenseValue = "low";
} else if (checkedId == R.id.radiobutton_Medium) {
Globals.affectedByDefenseValue = "medium";
} else if (checkedId == R.id.radiobutton_High) {
Globals.affectedByDefenseValue = "high";
}
});
}

// =============================================================================================
// Function: initDidLeave
// Description: Initialize the Did Leave field
Expand Down Expand Up @@ -197,6 +379,30 @@ private void initSubmit() {
if (comment_sep_ID.length() > 0) comment_sep_ID = new StringBuilder(comment_sep_ID.substring(1));
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_COMMENTS, comment_sep_ID.toString());

// If any spinner data is left blank
if (Constants.PostMatch.ACCURACY.equals(Globals.CurrentAccuracy) ||
Constants.PostMatch.CLIMB_LEVEL.equals(Globals.CurrentClimbLevel) ||
Constants.PostMatch.CLIMB_POSITION.equals(Globals.CurrentClimbPosition)) {

Toast.makeText(this, R.string.post_missing_data, Toast.LENGTH_SHORT).show();
return;
} else {
// Log all the spinner data
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_ACCURACY, String.valueOf(Globals.CurrentAccuracy));
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_CLIMB_LEVEL, String.valueOf(Globals.CurrentClimbLevel));
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_CLIMB_POSITION, String.valueOf(Globals.CurrentClimbPosition));
}

// If any radio button is left blank
if (Objects.equals(Globals.stealFuelValue, "-1") || Objects.equals(Globals.affectedByDefenseValue, "-1")) {
Toast.makeText(this, R.string.post_missing_data, Toast.LENGTH_SHORT).show();
return;
} else {
// Log all the spinner data
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_STEALFUEL,String.valueOf(Globals.stealFuelValue));
Globals.EventLogger.LogData(Constants.Logger.LOGKEY_AFFECTED_BY_DEFENSE, String.valueOf(Globals.affectedByDefenseValue));
}

Intent GoToSubmitData = new Intent(PostMatch.this, SubmitData.class);
startActivity(GoToSubmitData);
}
Expand All @@ -211,6 +417,7 @@ private void initSubmit() {
.startsWith(Constants.Achievements.EVENT_TYPE_FINAL)) Achievements.data_FinalType++;

finish();

});
}

Expand All @@ -221,19 +428,9 @@ private void initSubmit() {
// Output: void
// =============================================================================================
private void initStats() {
StringBuilder statsCoral = new StringBuilder();
StringBuilder statsAlgae = new StringBuilder();

for (int i = 4; i >0; --i) {
statsCoral.append("Placed L").append(i).append(": ").append(Achievements.data_match_CoralLevel[i]).append("\n");
}
statsCoral.append("Dropped: ").append(Achievements.data_match_CoralDropped);

statsAlgae.append("Net: ").append(Achievements.data_match_AlgaeInNet).append("\n")
.append("Processor: ").append(Achievements.data_match_AlgaeInProcessor);
String statsFuel = "Fuel: " + Achievements.data_match_FuelShot;

postMatchBinding.textStatsCoral.setText(statsCoral.toString());
postMatchBinding.textStatsAlgae.setText(statsAlgae.toString());
postMatchBinding.textStatsFuel.setText(statsFuel);
//use achievement data
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,11 @@ private void initNext() {
submitDataBinding.butNext.setOnClickListener(view -> {
// Reset pre-Match settings for next time
Globals.numStartingGamePiece = Constants.PreMatch.STARTING_GAME_PIECES;
Globals.CurrentAccuracy = Constants.PostMatch.ACCURACY;
Globals.CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL;
Globals.CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION;
Globals.stealFuelValue = Constants.PostMatch.STEAL_FUEL;
Globals.affectedByDefenseValue = Constants.PostMatch.AFFECTED_BY_DEFENSE;
Globals.isPractice = false;

// Increases the team number so that it auto fills for the next match correctly
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
public class Constants {
public static class Logger {
// Logger Keys - Data File is written in order of the FILE_HEADER array
public static final String[] LOGKEY_DATA_FILE_HEADER = new String[]{"Shadow", "Team", "TeamScouting", "Scouter", "DidPlay", "StartGamePiece", "DidLeaveStart", "Comments", "Achievements", "StartOffset", "Start"};
public static final String[] LOGKEY_DATA_FILE_HEADER = new String[]{"Shadow", "Team", "TeamScouting", "Scouter", "DidPlay", "StartGamePiece", "DidLeaveStart", "Accuracy", "ClimbLevel", "ClimbPosition", "Comments", "Achievements", "StartOffset", "Start"};
public static final String LOGKEY_SHADOW_MODE = "Shadow";
public static final String LOGKEY_ACHIEVEMENT = "Achievements";
public static final String LOGKEY_MATCH_TYPE = "MatchType";
Expand All @@ -19,6 +19,11 @@ public static class Logger {
public static final String LOGKEY_SCOUTER = "Scouter";
public static final String LOGKEY_DID_LEAVE_START = "DidLeaveStart";
public static final String LOGKEY_START_WITH_GAME_PIECE = "StartGamePiece";
public static final String LOGKEY_ACCURACY = "Accuracy";
public static final String LOGKEY_CLIMB_LEVEL = "ClimbLevel";
public static final String LOGKEY_CLIMB_POSITION = "ClimbPosition";
public static final String LOGKEY_STEALFUEL = "StealFuel";
public static final String LOGKEY_AFFECTED_BY_DEFENSE = "AffectedByDefense";
public static final String LOGKEY_COMMENTS = "Comments";
public static final String LOGKEY_START_TIME_OFFSET = "StartOffset";
public static final String LOGKEY_START_TIME = "Start";
Expand Down Expand Up @@ -62,6 +67,14 @@ public static class Match {
public static final int SEEKBAR_MAX = 60;
}

public static class PostMatch {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These should be more descriptive. Like ACCURACY_NOT_SELECTED or something like that.

public static final String ACCURACY = "-1";
public static final String CLIMB_LEVEL = "-1";
public static final String CLIMB_POSITION = "-1";
public static final String STEAL_FUEL = "-1";
public static final String AFFECTED_BY_DEFENSE = "-1";
}

public static class Data {
public static final String PRIVATE_BASE_DIR = "input_data";
public static final String PUBLIC_BASE_DIR = "CPR-Scouting";
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/com/team3663/scouting_app/config/Globals.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@

import androidx.documentfile.provider.DocumentFile;

import com.team3663.scouting_app.data.Accuracy;
import com.team3663.scouting_app.data.ClimbLevel;
import com.team3663.scouting_app.data.ClimbPosition;
import com.team3663.scouting_app.data.MatchTypes;
import com.team3663.scouting_app.utility.Logger;
import com.team3663.scouting_app.data.Colors;
Expand All @@ -22,6 +25,12 @@ public class Globals {
public static Competitions CompetitionList = new Competitions();
public static MatchTypes MatchTypeList = new MatchTypes();
public static Matches MatchList = new Matches();
public static Accuracy AccuracyTypeList = new Accuracy();
public static String CurrentAccuracy = Constants.PostMatch.ACCURACY;
public static ClimbLevel ClimbLevelList = new ClimbLevel();
public static String CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL;
public static ClimbPosition ClimbPositionList = new ClimbPosition();
public static String CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION;
public static Devices DeviceList = new Devices();
public static Events EventList = new Events();
public static Comments CommentList = new Comments();
Expand Down Expand Up @@ -55,6 +64,8 @@ public class Globals {

public static boolean isPractice = false;
public static int numStartingGamePiece = Constants.PreMatch.STARTING_GAME_PIECES;
public static String stealFuelValue = Constants.PostMatch.STEAL_FUEL;
public static String affectedByDefenseValue = Constants.PostMatch.AFFECTED_BY_DEFENSE;
public static boolean isShadowMode = false;

public static DocumentFile base_df = null;
Expand Down
Loading