diff --git a/app/src/main/assets/input_data/Accuracy.csv b/app/src/main/assets/input_data/Accuracy.csv new file mode 100644 index 0000000..be0de93 --- /dev/null +++ b/app/src/main/assets/input_data/Accuracy.csv @@ -0,0 +1,10 @@ +Id,Description +100,100% +90,90% +80,80% +70,70% +60,60% +50,50% +25,25% +10,10% +0,0% \ No newline at end of file diff --git a/app/src/main/assets/input_data/ClimbLevels.csv b/app/src/main/assets/input_data/ClimbLevels.csv new file mode 100644 index 0000000..320a7e3 --- /dev/null +++ b/app/src/main/assets/input_data/ClimbLevels.csv @@ -0,0 +1,4 @@ +Id,Description +1,L3 +2,L2 +3,L1 \ No newline at end of file diff --git a/app/src/main/assets/input_data/ClimbPositions.csv b/app/src/main/assets/input_data/ClimbPositions.csv new file mode 100644 index 0000000..1451ac8 --- /dev/null +++ b/app/src/main/assets/input_data/ClimbPositions.csv @@ -0,0 +1,7 @@ +Id,Description +1,Left End +2,Left Upright +3,Center +4,Right End +5,Right Upright +6,Back \ No newline at end of file diff --git a/app/src/main/java/com/team3663/scouting_app/activities/AppLaunch.java b/app/src/main/java/com/team3663/scouting_app/activities/AppLaunch.java index dfca5d3..09b83ea 100644 --- a/app/src/main/java/com/team3663/scouting_app/activities/AppLaunch.java +++ b/app/src/main/java/com/team3663/scouting_app/activities/AppLaunch.java @@ -31,7 +31,7 @@ import com.team3663.scouting_app.config.Globals; import com.team3663.scouting_app.databinding.AppLaunchBinding; import com.team3663.scouting_app.utility.CPR_Network; -import com.team3663.scouting_app.utility.dataFile.*; +import com.team3663.scouting_app.dataFile.*; import java.util.List; import java.util.Objects; @@ -148,7 +148,7 @@ protected void onCreate(Bundle in_savedInstanceState) { // Output: void // ============================================================================================= private void initSettings() { - // Define a Image Button to open up the Settings + // Define an Image Button to open up the Settings appLaunchBinding.imgButSettings.setImageResource(R.drawable.settings_icon); appLaunchBinding.imgButSettings.setVisibility(View.INVISIBLE); appLaunchBinding.imgButSettings.setClickable(false); @@ -231,7 +231,7 @@ private void initDataFiles() { Globals.output_df = Globals.base_df.createDirectory(Constants.Data.PUBLIC_OUTPUT_DIR); } } else { - // The base dir is there but we should check the two sub directories are there. + // The base dir is there, but we should check the two subdirectories are there. Globals.input_df = Globals.base_df.findFile(Constants.Data.PUBLIC_INPUT_DIR); if (Globals.input_df == null) Globals.input_df = Globals.base_df.createDirectory(Constants.Data.PUBLIC_INPUT_DIR); @@ -241,6 +241,9 @@ private void initDataFiles() { } // Instantiate the Global variables or reset their context + if (Globals.AccuracyList == null) Globals.AccuracyList = new AccuracyFile(this); else Globals.AccuracyList.setContext(this); + if (Globals.ClimbLevelList == null) Globals.ClimbLevelList = new ClimbLevelFile(this); else Globals.ClimbLevelList.setContext(this); + if (Globals.ClimbPositionList == null) Globals.ClimbPositionList = new ClimbPositionFile(this); else Globals.ClimbPositionList.setContext(this); if (Globals.ColorList == null) Globals.ColorList = new ColorsFile(this); else Globals.ColorList.setContext(this); if (Globals.CommentList == null) Globals.CommentList = new CommentsFile(this); else Globals.CommentList.setContext(this); if (Globals.CompetitionList == null) Globals.CompetitionList = new CompetitionsFile(this); else Globals.CompetitionList.setContext(this); @@ -269,21 +272,21 @@ private void loadDataFiles() { public void run() { appLaunchBinding.progressBarOverall.setMax(Globals.CompetitionList.getNumberOfFiles()); appLaunchBinding.progressBarOverall.setProgress(0); - appLaunchBinding.textStatusOverall.setText(getString(R.string.applaunch_loading)); + appLaunchBinding.textStatusOverall.setText(getString(R.string.applaunch_loading_prefix)); appLaunchBinding.textPercentOverall.setText(getString(R.string.applaunch_percent, 0)); - // Load all of the data with a BRIEF delay between. :) + // Load all the data with a BRIEF delay between. :) _DataFile.LoadAllDataFiles(appLaunchBinding.textStatusFile, appLaunchBinding.progressBarFile, appLaunchBinding.textPercentFile, appLaunchBinding.progressBarOverall, appLaunchBinding.textPercentOverall); - // After loading all of the data, we need to build the set of "next events" + // After loading all the data, we need to build the set of "next events" Globals.EventList.buildNextEvents(); // Setting the Visibility attribute can't be set from a non-UI thread (like withing a TimerTask - // that runs on a separate thread. So we need to make a Runner that will execute on the UI thread + // that runs on a separate thread). So we need to make a Runner that will execute on the UI thread // to set these. AppLaunch.this.runOnUiThread(() -> { - // Sleep a tiny bit to help the UI not glitch (otherwise this block of code doesn't - // do what it's trying to do (things don't become visible, etc). + // Sleep a tiny bit to help the UI not glitch. Otherwise, this block of code doesn't + // do what it's trying to do (things don't become visible, etc.). try { Thread.sleep(Constants.AppLaunch.SPLASH_SCREEN_DELAY); } diff --git a/app/src/main/java/com/team3663/scouting_app/activities/PostMatch.java b/app/src/main/java/com/team3663/scouting_app/activities/PostMatch.java index 7725474..606fed6 100644 --- a/app/src/main/java/com/team3663/scouting_app/activities/PostMatch.java +++ b/app/src/main/java/com/team3663/scouting_app/activities/PostMatch.java @@ -36,7 +36,7 @@ public class PostMatch extends AppCompatActivity { //Creating an array list for the Comments ArrayList CommentList = new ArrayList<>(); ArrayList CommentArray = Globals.CommentList.getDescriptionList(); - ArrayList Accuracy = Globals.AccuracyTypeList.getDescriptionList(); + ArrayList Accuracy = Globals.AccuracyList.getDescriptionList(); ArrayList ClimbLevel = Globals.ClimbLevelList.getDescriptionList(); ArrayList ClimbPosition = Globals.ClimbPositionList.getDescriptionList(); @@ -160,7 +160,7 @@ private void initAccuracy() { // 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))) { + if (Accuracy.get(i).equals(Globals.AccuracyList.getAccuracyDescription(Globals.CurrentAccuracy))) { start_Pos = i; break; } @@ -173,7 +173,7 @@ private void initAccuracy() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - int newAccuracy = Globals.AccuracyTypeList.getAccuracyValue(postMatchBinding.spinnerAccuracy.getSelectedItem().toString()); + int newAccuracy = Globals.AccuracyList.getAccuracyId(postMatchBinding.spinnerAccuracy.getSelectedItem().toString()); if (!Objects.equals(newAccuracy, Globals.CurrentAccuracy)) { Globals.CurrentAccuracy = newAccuracy; @@ -215,22 +215,22 @@ private void initClimbLevel() { new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - String newClimbLevel = Globals.ClimbLevelList.getClimbLevelValue(postMatchBinding.spinnerClimbLevel.getSelectedItem().toString()); + int newClimbLevel = Globals.ClimbLevelList.getClimbLevelId(postMatchBinding.spinnerClimbLevel.getSelectedItem().toString()); - if (!newClimbLevel.equals(Globals.CurrentClimbLevel)) { + if (newClimbLevel != Globals.CurrentClimbLevel) { Globals.CurrentClimbLevel = newClimbLevel; } - Achievements.data_match_ClimbSuccessTele = Globals.CurrentClimbLevel; + Achievements.data_match_ClimbSuccessTele = Globals.ClimbLevelList.getClimbLevelDescription(Globals.CurrentClimbLevel); } @Override public void onNothingSelected(AdapterView adapterView) { - Globals.CurrentClimbLevel = "-1"; + Globals.CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED; } }); } else { - Globals.CurrentClimbLevel = "None"; + Globals.CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED; ArrayAdapter adp_ClimbLevel = new ArrayAdapter<>(this, R.layout.cpr_spinner_empty, Constants.PostMatch.NO_CLIMB); postMatchBinding.spinnerClimbLevel.setAdapter(adp_ClimbLevel); postMatchBinding.spinnerClimbLevel.setBackgroundColor(getColor(R.color.light_grey)); @@ -265,20 +265,20 @@ private void initClimbPosition() { @Override public void onItemSelected(AdapterView adapterView, View view, int i, long l) { - String newClimbPosition = Globals.ClimbPositionList.getClimbPositionValue(postMatchBinding.spinnerClimbPosition.getSelectedItem().toString()); + int newClimbPosition = Globals.ClimbPositionList.getClimbPositionId(postMatchBinding.spinnerClimbPosition.getSelectedItem().toString()); - if (!Objects.equals(newClimbPosition, Globals.CurrentClimbPosition)) { + if (newClimbPosition != Globals.CurrentClimbPosition) { Globals.CurrentClimbPosition = newClimbPosition; } } @Override public void onNothingSelected(AdapterView adapterView) { - Globals.CurrentClimbPosition = "-1"; + Globals.CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED; } }); } else { - Globals.CurrentClimbPosition = "None"; + Globals.CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED; ArrayAdapter adp_ClimbPosition = new ArrayAdapter<>(this, R.layout.cpr_spinner_empty, Constants.PostMatch.NO_CLIMB); postMatchBinding.spinnerClimbPosition.setAdapter(adp_ClimbPosition); postMatchBinding.spinnerClimbPosition.setBackgroundColor(getColor(R.color.light_grey)); @@ -374,7 +374,18 @@ private void initSubmit() { Intent GoToPreMatch = new Intent(PostMatch.this, PreMatch.class); startActivity(GoToPreMatch); } else { - // Log all of the data from this page + // If any spinner data is left blank -> abort + if (Constants.PostMatch.ACCURACY_NOT_SELECTED == Globals.CurrentAccuracy || + (postMatchBinding.spinnerClimbLevel.isEnabled() && Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED == Globals.CurrentClimbLevel) || + (postMatchBinding.spinnerClimbPosition.isEnabled() && Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED == Globals.CurrentClimbPosition) || + Objects.equals(Globals.stealFuelValue, "-1") || + Objects.equals(Globals.affectedByDefenseValue, "-1")) { + + Toast.makeText(this, R.string.post_missing_data, Toast.LENGTH_SHORT).show(); + return; + } + + // Log all the data from this page StringBuilder comment_sep_ID = new StringBuilder(); for (Integer comment_dropID : CommentList) { String comment = CommentArray.get(comment_dropID); @@ -383,29 +394,14 @@ 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_NOT_SELECTED == Globals.CurrentAccuracy) || - Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED.equals(Globals.CurrentClimbLevel) || - Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED.equals(Globals.CurrentClimbPosition)) { + // 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)); - 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_STEAL_FUEL,String.valueOf(Globals.stealFuelValue)); - Globals.EventLogger.LogData(Constants.Logger.LOGKEY_AFFECTED_BY_DEFENSE, String.valueOf(Globals.affectedByDefenseValue)); - } + // Log all the spinner data + Globals.EventLogger.LogData(Constants.Logger.LOGKEY_STEAL_FUEL,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); @@ -421,7 +417,6 @@ private void initSubmit() { .startsWith(Constants.Achievements.EVENT_TYPE_FINAL)) Achievements.data_FinalType++; finish(); - }); } diff --git a/app/src/main/java/com/team3663/scouting_app/config/Constants.java b/app/src/main/java/com/team3663/scouting_app/config/Constants.java index 00b4a83..bdb56b6 100644 --- a/app/src/main/java/com/team3663/scouting_app/config/Constants.java +++ b/app/src/main/java/com/team3663/scouting_app/config/Constants.java @@ -4,9 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; import java.util.List; -import java.util.Set; public class Constants { public static class Logger { @@ -82,10 +80,10 @@ public static class Match { } public static class PostMatch { - public static final String[] NO_CLIMB = new String[]{"No Climb"}; public static final int ACCURACY_NOT_SELECTED = -1; - public static final String CLIMB_LEVEL_NOT_SELECTED = "-1"; - public static final String CLIMB_POSITION_NOT_SELECTED = "-1"; + public static final int CLIMB_POSITION_NOT_SELECTED = -1; + public static final int CLIMB_LEVEL_NOT_SELECTED = -1; + public static final String[] NO_CLIMB = new String[]{"No Climb"}; public static final String STEAL_FUEL_NOT_SELECTED = "-1"; public static final String AFFECTED_BY_DEFENSE_NOT_SELECTED = "-1"; } @@ -105,7 +103,6 @@ public static class Events { public static final int ID_NOT_MOVING_START = 64; public static final int ID_NOT_MOVING_END = 65; public static final int ID_AUTO_START_GAME_PIECE = 0; - public static final int ID_AUTO_CLIMB = 6; public static final int ID_TELE_CLIMB = 40; public static final int ID_NO_EVENT = 999; // use to check if the eventID you're looking for doesn't exist } diff --git a/app/src/main/java/com/team3663/scouting_app/config/Globals.java b/app/src/main/java/com/team3663/scouting_app/config/Globals.java index d2ca9be..c9541af 100644 --- a/app/src/main/java/com/team3663/scouting_app/config/Globals.java +++ b/app/src/main/java/com/team3663/scouting_app/config/Globals.java @@ -6,13 +6,10 @@ 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.utility.CPR_Network; import com.team3663.scouting_app.utility.Logger; import com.team3663.scouting_app.utility.achievements.Achievements; -import com.team3663.scouting_app.utility.dataFile.*; +import com.team3663.scouting_app.dataFile.*; import java.util.HashMap; @@ -26,10 +23,9 @@ public class Globals { @SuppressLint("StaticFieldLeak") public static MatchesFile MatchList; @SuppressLint("StaticFieldLeak") public static EventGroupsFile EventGroupList; @SuppressLint("StaticFieldLeak") public static EventsFile EventList; - - public static Accuracy AccuracyTypeList = new Accuracy(); - public static ClimbLevel ClimbLevelList = new ClimbLevel(); - public static ClimbPosition ClimbPositionList = new ClimbPosition(); + @SuppressLint("StaticFieldLeak") public static ClimbPositionFile ClimbPositionList; + @SuppressLint("StaticFieldLeak") public static ClimbLevelFile ClimbLevelList; + @SuppressLint("StaticFieldLeak") public static AccuracyFile AccuracyList; public static int CurrentAccuracy = Constants.PostMatch.ACCURACY_NOT_SELECTED; public static int CurrentCompetitionId = 0; @@ -38,14 +34,14 @@ public class Globals { public static int CurrentColorId; public static int CurrentPrefTeamPos; public static int CurrentFieldOrientationPos; + public static int CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED; + public static int CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED; public static String CurrentMatchPhase = Constants.Phases.NONE; public static String CurrentScoutingTeam; public static String CurrentOverrideTeamNum; public static String CurrentOverrideAlliance; public static String CurrentTeamToScout; public static String CurrentMatchType = Constants.PreMatch.DEFAULT_MATCH_TYPE; - public static String CurrentClimbLevel = Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED; - public static String CurrentClimbPosition = Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED; public static String CheckBoxTextPadding = " "; diff --git a/app/src/main/java/com/team3663/scouting_app/data/Accuracy.java b/app/src/main/java/com/team3663/scouting_app/data/Accuracy.java deleted file mode 100644 index 27f924f..0000000 --- a/app/src/main/java/com/team3663/scouting_app/data/Accuracy.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.team3663.scouting_app.data; - -import com.team3663.scouting_app.config.Constants; - -import java.util.ArrayList; -import java.util.Objects; - -// ============================================================================================= -// Class: Accuracy -// Description: Defines a structure/class to hold the information for all Accuracy values -// ============================================================================================= - -public class Accuracy { - - private final ArrayList Accuracy_list; - - public Accuracy() { - Accuracy_list = new ArrayList<>(); - - // Add accuracy values into the list - addAccuracyRow(-1,""); - addClimbLevelRow("L3", "L3"); - addClimbLevelRow("L2", "L2"); - addClimbLevelRow("L1", "L1"); - } - - // Add a row - public void addClimbLevelRow(String in_value, String in_description) { - climbLevel_list.add(new ClimbLevelRow(in_value, in_description)); - } - - // Return the size - public int size() { - return climbLevel_list.size(); - } - - public ArrayList getDescriptionList() { - ArrayList descriptions = new ArrayList<>(); - for (ClimbLevel.ClimbLevelRow clr : climbLevel_list) { - descriptions.add(clr.description); - } - return descriptions; - } - - public String getClimbLevelValue(String in_description) { - for (ClimbLevel.ClimbLevelRow clr : climbLevel_list) { - if (Objects.equals(clr.description, in_description)) { - return clr.value; - } - } - return ""; - } - - public String getClimbLevelDescription(String in_value) { - for (ClimbLevel.ClimbLevelRow clr : climbLevel_list) { - if (Objects.equals(clr.value, in_value)) { - return clr.description; - } - } - return ""; - } - - // Member Function: Empties out the list - public void clear() {climbLevel_list.clear();} - - // ============================================================================================= - // Class: ClimbPositionRow - // Description: Defines a structure/class to hold the information for each climb position - // ============================================================================================= - private static class ClimbLevelRow { - private final String value; - private final String description; - - public ClimbLevelRow(String in_value, String in_description) { - value = in_value; - description = in_description; - } - } -} diff --git a/app/src/main/java/com/team3663/scouting_app/data/ClimbPosition.java b/app/src/main/java/com/team3663/scouting_app/data/ClimbPosition.java deleted file mode 100644 index 6a6fa37..0000000 --- a/app/src/main/java/com/team3663/scouting_app/data/ClimbPosition.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.team3663.scouting_app.data; - -import java.util.ArrayList; -import java.util.Objects; - -// ============================================================================================= -// Class: ClimbPosition -// Description: Defines a structure/class to hold the information for all robot Climb Position values -// ============================================================================================= - -public class ClimbPosition { - - private final ArrayList climbPosition_list; - - public ClimbPosition() { - climbPosition_list = new ArrayList<>(); - - // Add climb position values into the list - addClimbPositionRow("-1",""); + } + + @Override + protected void processLine(String[] in_line, String in_orig_line) { + addAccuracyRow(in_line[0], in_line[1]); + } + + @Override + public void clearList() { + Accuracy_list.clear(); + addAccuracyRow(String.valueOf(Constants.PostMatch.ACCURACY_NOT_SELECTED), ""); + } + + @Override + protected void processLine(String[] in_line, String in_orig_line) { + addClimbLevelRow(in_line[0], in_line[1]); + } + + @Override + public void clearList() { + ClimbLevel_list.clear(); + addClimbLevelRow(String.valueOf(Constants.PostMatch.CLIMB_LEVEL_NOT_SELECTED), ""); + } + + @Override + protected void processLine(String[] in_line, String in_orig_line) { + addClimbPositionRow(in_line[0], in_line[1]); + } + + @Override + public void clearList() { + climbPosition_list.clear(); + addClimbPositionRow(String.valueOf(Constants.PostMatch.CLIMB_POSITION_NOT_SELECTED), "