mirror of
https://github.com/Team4388/RidgeScout.git
synced 2026-06-09 08:38:03 -06:00
Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e045bfcb7 | |||
| c78fa58754 | |||
| 18748301cd | |||
| a15deda539 | |||
| 0846f5a3b3 | |||
| 554cad2abd | |||
| 7d41a5e5a9 | |||
| 4cb20f4769 | |||
| 6b4b919e5f |
@@ -25,7 +25,6 @@
|
||||
- A page that lets scouters more easily make reports to the drive team before a match starts (Report)
|
||||
|
||||
#### Things that may or may not be implemented:
|
||||
- Practice mode
|
||||
- Statbotics intgration
|
||||
- Scout error estimation using OPR-like calculation
|
||||
- - Would most likely require Statbotics
|
||||
|
||||
@@ -25,8 +25,8 @@ android {
|
||||
applicationId = "com.ridgebotics.ridgescout"
|
||||
minSdk = 24
|
||||
targetSdk = 34
|
||||
versionCode = 7 // **IMPORTANT** Increment this before releasing on github
|
||||
versionName = "1.0"// **IMPORTANT** Change this before releasing on github (<Year num since 2024>.<Update Version>)
|
||||
versionCode = 9 // **IMPORTANT** Increment this before releasing on github
|
||||
versionName = "1.2"// **IMPORTANT** Change this before releasing on github (<Year num since 2024>.<Update Version>)
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
@@ -89,18 +89,16 @@ public class MainActivity extends AppCompatActivity {
|
||||
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
|
||||
NavigationUI.setupWithNavController(navView, navController);
|
||||
|
||||
navView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
|
||||
@Override
|
||||
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
||||
clearBackStack();
|
||||
navController.navigate(item.getItemId(), savedInstanceState, new NavOptions.Builder()
|
||||
.setEnterAnim(R.anim.enter_anim)
|
||||
.setExitAnim(R.anim.exit_anim)
|
||||
.setPopEnterAnim(R.anim.pop_enter_anim)
|
||||
.setPopExitAnim(R.anim.pop_exit_anim).build()
|
||||
);
|
||||
return true;
|
||||
}
|
||||
navView.setOnItemSelectedListener(item -> {
|
||||
backPressed = null;
|
||||
clearBackStack();
|
||||
navController.navigate(item.getItemId(), savedInstanceState, new NavOptions.Builder()
|
||||
.setEnterAnim(R.anim.enter_anim)
|
||||
.setExitAnim(R.anim.exit_anim)
|
||||
.setPopEnterAnim(R.anim.pop_enter_anim)
|
||||
.setPopExitAnim(R.anim.pop_exit_anim).build()
|
||||
);
|
||||
return true;
|
||||
});
|
||||
|
||||
}
|
||||
@@ -116,11 +114,9 @@ public class MainActivity extends AppCompatActivity {
|
||||
|
||||
|
||||
|
||||
|
||||
public interface activityResultRelay {
|
||||
void onActivityResult(int requestCode, int resultCode, Intent data);
|
||||
}
|
||||
|
||||
public static activityResultRelay resultRelay = null;
|
||||
public static void setResultRelay(activityResultRelay tmpresultRelay){
|
||||
resultRelay = tmpresultRelay;
|
||||
@@ -135,4 +131,25 @@ public class MainActivity extends AppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public interface onBackPressed {
|
||||
boolean onBackPressed();
|
||||
}
|
||||
|
||||
public onBackPressed backPressed = null;
|
||||
public void setOnBackPressed(onBackPressed onBackPressed){
|
||||
this.backPressed = onBackPressed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if(backPressed != null) {
|
||||
if (backPressed.onBackPressed()) {
|
||||
super.onBackPressed();
|
||||
}
|
||||
} else {super.onBackPressed();}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -24,23 +24,34 @@ public class fields {
|
||||
public static final inputType[][] default_match_fields = new inputType[][] {
|
||||
{
|
||||
new fieldposType("Auto start pos", "Where does the robot start its auto?", new int[]{0,0}),
|
||||
new tallyType("Auto Coral", "How many coral did this robot score in auto?", 0),
|
||||
new tallyType("Auto Algae", "How many algae did this robot score in auto?", 0),
|
||||
new sliderType("Auto Performance", "How well did you think this robot did in auto?", 5, 0, 10),
|
||||
|
||||
new tallyType("Auto L4 Coral", "How many coral did this robot score in L4 during auto?", 0),
|
||||
new tallyType("Auto L3 Coral", "How many coral did this robot score in L3 during auto?", 0),
|
||||
new tallyType("Auto L2 Coral", "How many coral did this robot score in L2 during auto?", 0),
|
||||
new tallyType("Auto L1/Trough Coral", "How many coral did this robot score in L1 during auto?", 0),
|
||||
new tallyType("Auto Processor Algae", "How many algae did this robot score in the Barge during auto?", 0),
|
||||
new tallyType("Auto Barge Algae", "How many algae did this robot score in the Barge during auto?", 0),
|
||||
|
||||
new dropdownType("Auto Quality", "How did the robot drive during auto?", new String[]{"Smooth", "Jittery"}, 0),
|
||||
new textType("Auto Comments", "Anything interesting about auto", ""),
|
||||
new tallyType("Teleop Coral", "How many coral did this robot score in teleop?", 0),
|
||||
new tallyType("Teleop Algae", "How many algae did this robot score in teleop?", 0),
|
||||
new checkboxType("Coral Removal", "Did the robot remove coral?", 0),
|
||||
new checkboxType("L4 Scoring", "Did the robot score in Layer 4?", 0),
|
||||
new checkboxType("L3 Scoring", "Did the robot score in Layer 3?", 0),
|
||||
new checkboxType("L2 Scoring", "Did the robot score in Layer 3?", 0),
|
||||
new checkboxType("L1 Scoring", "Did the robot score in Layer 1?", 0),
|
||||
new checkboxType("Processor Scoring", "Did the robot score in the processor?", 0),
|
||||
new checkboxType("Net Scoring", "Did the robot score in the net?", 0),
|
||||
new sliderType("Teleop Performance", "How well did the robot drive around?", 5, 0, 10),
|
||||
new textType("Teleop Notes", "Anything intresting about Teleop", ""),
|
||||
new dropdownType("End Condition", "What was the final condition of the robot?", new String[]{"Nothing", "Park", "Attempted Shallow", "Shallow", "Attempted Deep", "Deep"}, 0),
|
||||
new dropdownType("Robot Condition", "Was anything broken?", new String[]{"Everything was working", "Something was maybe broken", "Something was broken", "Robot was disabled for part of the match", "Missing robot (Joe Johnson)"}, 0),
|
||||
|
||||
new tallyType("Teleop L4 Coral", "How many coral did this robot score in L4 during auto?", 0),
|
||||
new tallyType("Teleop L3 Coral", "How many coral did this robot score in L3 during auto?", 0),
|
||||
new tallyType("Teleop L2 Coral", "How many coral did this robot score in L2 during auto?", 0),
|
||||
new tallyType("Teleop L1 Coral", "How many coral did this robot score in L1 during auto?", 0),
|
||||
new tallyType("Teleop Processor Algae", "How many algae did this robot score in the Barge during auto?", 0),
|
||||
new tallyType("Teleop Barge Algae", "How many algae did this robot score in the Barge during auto?", 0),
|
||||
|
||||
new checkboxType("Upper Algae Removal", "Did the robot remove upper Algae?", 0),
|
||||
new checkboxType("Lower Algae Removal", "Did the robot remove lower Algae?", 0),
|
||||
|
||||
new dropdownType("Teleop Quality", "How did the robot drive during Teleop?", new String[]{"Smooth", "Jittery"}, 0),
|
||||
new textType("Teleop Comments", "Anything interesting about Teleop", ""),
|
||||
|
||||
new dropdownType("Climb State", "What was the final condition of the robot?", new String[]{"Nothing", "Continued Cycling", "Park", "Attempted Shallow", "Shallow", "Attempted Deep", "Deep"}, 0),
|
||||
|
||||
new dropdownType("Robot Condition", "Was anything broken?", new String[]{"Everything was working", "Something was maybe broken", "Something was broken", "Robot was disabled for part of the match", "Missing robot"}, 0),
|
||||
|
||||
new textType("Other Comments", "Any other comments you have", "")
|
||||
}
|
||||
};
|
||||
@@ -48,16 +59,27 @@ public class fields {
|
||||
public static final inputType[][] default_pit_fields = new inputType[][] {
|
||||
{
|
||||
new dropdownType("Drivetrain type", "What type of drivetrain does this team have?", new String[]{"Swerve Drive", "Tank Drive (Differential)", "Other, Info in comments"}, 0),
|
||||
new dropdownType("Intake type", "What type of intake does this team have?", new String[]{"Ground only", "Player Station only", "Both", "Other, Info in comments"}, 0),
|
||||
new dropdownType("Intake Consistency", "How consistent is the robot at intakeing?", new String[]{"Does not work", "Worked a few times during testing", "Works most of the time", "Fails sometimes", "Never fails"}, 0),
|
||||
|
||||
new dropdownType("Score Area", "What does this robot score?", new String[]{"Only Algae", "Mostly Algae", "Both", "Mostly Coral", "Only Coral"}, 0),
|
||||
|
||||
new checkboxType("L4 Scoring", "Will the robot score in Layer 4?", 0),
|
||||
new checkboxType("L3 Scoring", "Will the robot score in Layer 3?", 0),
|
||||
new checkboxType("L2 Scoring", "Will the robot score in Layer 3?", 0),
|
||||
new checkboxType("L1/Trough Scoring", "Will the robot score in Layer 1?", 0),
|
||||
new checkboxType("Processor Scoring", "Will the robot score in the processor?", 0),
|
||||
new checkboxType("Net Scoring", "Will the robot score algae in the net?", 0),
|
||||
new sliderType("Specialization", "How specified is the robot to it's scoring area?", 5, 0, 10),
|
||||
new sliderType("Scoring Consistency", "How consistent is the robot at scoring?", 5, 0, 10),
|
||||
new dropdownType("Auto type", "What autos does this team have?", new String[]{"No auto", "Simple Coral", "Simple Algae", "Complex Coral", "Complex Algae", "Other, Info in comments"}, 0),
|
||||
new sliderType("Auto Consistency", "How reliable is this auto;?", 5, 0, 10),
|
||||
new checkboxType("Processor Scoring", "Will the robot score in the Processor?", 0),
|
||||
new checkboxType("Barge Scoring", "Will the robot score algae in the Barge?", 0),
|
||||
new dropdownType("Scoring Consistency", "How consistent is the robot at Scoring?", new String[]{"Does not work", "Worked a few times during testing", "Works most of the time", "Fails sometimes", "Never fails"}, 0),
|
||||
|
||||
new textType("Auto Capability", "What autos does this team have?", ""),
|
||||
new dropdownType("Auto Consistency", "How consistent is the robot at Auto?", new String[]{"Does not work", "Worked a few times during testing", "Works most of the time", "Fails sometimes", "Never fails"}, 0),
|
||||
|
||||
new dropdownType("Climb type", "What does the robot do to climb?", new String[]{"No Climb", "Only Shallow", "Only Deep", "Both Shallow and Deep"}, 0),
|
||||
new dropdownType("Climb Consistency", "How consistent is the robot at climbing?", new String[]{"Does not work", "Worked a few times during testing", "Works most of the time", "Fails sometimes", "Never fails"}, 0),
|
||||
|
||||
new textType("Cool Comments", "Is there anything cool about the robot?", ""),
|
||||
|
||||
new textType("Comments", "Things go here", "Day 1:\n\nDay 2:\n\nDay 3:\n")
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
package com.ridgebotics.ridgescout.types.data;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class dataType {
|
||||
public enum valueTypes {
|
||||
NUM,
|
||||
|
||||
@@ -219,5 +219,9 @@ public class checkboxType extends inputType {
|
||||
chart.invalidate();
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return (int) data.get() == 1 ? "true" : "false";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -245,5 +245,9 @@ public class dropdownType extends inputType {
|
||||
chart.invalidate();
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return text_options[(int) data.get()];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -232,5 +232,10 @@ public class fieldposType extends inputType {
|
||||
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
int[] intarr = (int[]) data.get();
|
||||
return "[" + intarr[0] + "," + intarr[1] + "]";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -107,4 +107,7 @@ public abstract class inputType {
|
||||
|
||||
|
||||
public abstract void add_history_view(LinearLayout parent, dataType[] data);
|
||||
|
||||
|
||||
public abstract String toString(dataType data);
|
||||
}
|
||||
@@ -318,5 +318,9 @@ public class numberType extends inputType {
|
||||
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return String.valueOf((int) data.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -305,4 +305,8 @@ public class sliderType extends inputType {
|
||||
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return String.valueOf((int) data.get());
|
||||
}
|
||||
}
|
||||
@@ -298,5 +298,9 @@ public class tallyType extends inputType {
|
||||
|
||||
parent.addView(chart);
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return String.valueOf((int) data.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -230,5 +230,9 @@ public class textType extends inputType {
|
||||
parent.addView(chart);
|
||||
|
||||
}
|
||||
|
||||
public String toString(dataType data){
|
||||
return String.valueOf(data.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,7 +75,7 @@ public class CustomSpinnerView extends LinearLayout {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
|
||||
|
||||
ScrollView sv = new ScrollView(getContext());
|
||||
sv.setLayoutDirection(ScrollView.SCROLL_AXIS_VERTICAL);
|
||||
// sv.setLayoutDirection(ScrollView.SCROLL_AXIS_VERTICAL);
|
||||
|
||||
LinearLayout ll = new LinearLayout(getContext());
|
||||
ll.setOrientation(LinearLayout.VERTICAL);
|
||||
@@ -94,7 +94,7 @@ public class CustomSpinnerView extends LinearLayout {
|
||||
|
||||
ll.addView(popup);
|
||||
|
||||
popup.setLayoutDirection(0);
|
||||
// popup.setLayoutDirection(0);
|
||||
builder.setView(sv);
|
||||
AlertDialog dialog = builder.create();
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.ridgebotics.ridgescout.ui.data;
|
||||
|
||||
|
||||
import static android.view.View.VISIBLE;
|
||||
import static androidx.navigation.fragment.FragmentKt.findNavController;
|
||||
|
||||
import android.os.Bundle;
|
||||
@@ -14,6 +15,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ridgebotics.ridgescout.R;
|
||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||
import com.ridgebotics.ridgescout.utility.settingsManager;
|
||||
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
|
||||
import com.ridgebotics.ridgescout.types.frcTeam;
|
||||
@@ -36,15 +38,26 @@ public class DataFragment extends Fragment {
|
||||
String evcode = settingsManager.getEVCode();
|
||||
|
||||
binding.fieldsButton.setOnClickListener(v -> {
|
||||
findNavController(this).navigate(R.id.action_navigation_data_to_navigation_data_fields_chooser);
|
||||
binding.fieldsButton.setEnabled(false);
|
||||
binding.fieldsButtons.setVisibility(VISIBLE);
|
||||
});
|
||||
|
||||
binding.fieldsMatchesButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.matchFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
binding.fieldsPitsButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.pitsFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
if(evcode.equals("unset")){
|
||||
binding.noEventError.setVisibility(View.VISIBLE);
|
||||
binding.noEventError.setVisibility(VISIBLE);
|
||||
|
||||
binding.buttons.setVisibility(View.VISIBLE);
|
||||
binding.buttons.setVisibility(VISIBLE);
|
||||
binding.teamsButton.setEnabled(false);
|
||||
binding.fieldsButton.setVisibility(View.VISIBLE);
|
||||
binding.fieldsButton.setVisibility(VISIBLE);
|
||||
|
||||
|
||||
return root;
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.ridgebotics.ridgescout.ui.data;
|
||||
|
||||
import static androidx.navigation.fragment.FragmentKt.findNavController;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import com.ridgebotics.ridgescout.R;
|
||||
import com.ridgebotics.ridgescout.databinding.FragmentDataFieldsChooserBinding;
|
||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||
|
||||
public class FieldsChooserFragment extends Fragment {
|
||||
|
||||
FragmentDataFieldsChooserBinding binding;
|
||||
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
|
||||
@Nullable Bundle savedInstanceState) {
|
||||
|
||||
binding = FragmentDataFieldsChooserBinding.inflate(inflater, container, false);
|
||||
|
||||
binding.matchScoutingButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.matchFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_fields_chooser_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
binding.pitScoutingButton.setOnClickListener(v -> {
|
||||
FieldsFragment.set_filename(fields.pitsFieldsFilename);
|
||||
findNavController(this).navigate(R.id.action_navigation_data_fields_chooser_to_navigation_data_fields);
|
||||
});
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.ridgebotics.ridgescout.MainActivity;
|
||||
import com.ridgebotics.ridgescout.R;
|
||||
import com.ridgebotics.ridgescout.databinding.FragmentDataFieldsBinding;
|
||||
import com.ridgebotics.ridgescout.scoutingData.fields;
|
||||
@@ -66,6 +67,25 @@ public class FieldsFragment extends Fragment {
|
||||
|
||||
load_field_menu();
|
||||
|
||||
((MainActivity) getActivity()).setOnBackPressed(() -> {
|
||||
if(binding.saveButton.getVisibility() == View.GONE) return true;
|
||||
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
|
||||
alert.setTitle("Warning!");
|
||||
alert.setMessage("You have not saved your progress!");
|
||||
alert.setPositiveButton("Return", null);
|
||||
alert.setNeutralButton("Quit without saving", (dialogInterface, i) -> {
|
||||
binding.saveButton.setVisibility(View.GONE);
|
||||
if(getActivity() != null)
|
||||
getActivity().onBackPressed();
|
||||
});
|
||||
alert.setCancelable(true);
|
||||
|
||||
alert.create().show();
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
@@ -223,7 +243,7 @@ public class FieldsFragment extends Fragment {
|
||||
if(fields.save(filename, newValues))
|
||||
AlertManager.toast("Saved");
|
||||
|
||||
Navigation.findNavController((Activity) getContext(), R.id.nav_host_fragment_activity_main).navigate(R.id.action_navigation_data_fields_to_navigation_data_fields_chooser);
|
||||
Navigation.findNavController((Activity) getContext(), R.id.nav_host_fragment_activity_main).navigate(R.id.action_navigation_data_fields_to_navigation_data);
|
||||
});
|
||||
alert.setNegativeButton("Cancel", null);
|
||||
alert.setCancelable(true);
|
||||
|
||||
@@ -270,7 +270,7 @@ public class EventFragment extends Fragment {
|
||||
teamNums.add(String.valueOf(event.teams.get(i).teamNumber));
|
||||
|
||||
ScrollView sv = new ScrollView(getContext());
|
||||
sv.setLayoutDirection(ScrollView.SCROLL_AXIS_VERTICAL);
|
||||
// sv.setLayoutDirection(ScrollView.SCROLL_AXIS_VERTICAL);
|
||||
|
||||
LinearLayout ll = new LinearLayout(getContext());
|
||||
ll.setOrientation(LinearLayout.VERTICAL);
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
|
||||
import com.ridgebotics.ridgescout.types.data.dataType;
|
||||
import com.ridgebotics.ridgescout.types.frcMatch;
|
||||
import com.ridgebotics.ridgescout.types.frcTeam;
|
||||
import com.ridgebotics.ridgescout.types.input.inputType;
|
||||
import com.ridgebotics.ridgescout.utility.DataManager;
|
||||
import com.ridgebotics.ridgescout.utility.fileEditor;
|
||||
|
||||
@@ -59,11 +60,14 @@ public class CSVExport {
|
||||
data += ("null,".repeat(match_latest_values.length));
|
||||
}else{
|
||||
try {
|
||||
String tempData = "";
|
||||
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues);
|
||||
dataType[] types = psdr.data.array;
|
||||
dataType[] matchData = psdr.data.array;
|
||||
inputType[] types = psdr.data.values[psdr.data.values.length-1];
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
data += (safeCSV(types[i].get().toString()) + ",");
|
||||
tempData += (safeCSV(types[i].toString(matchData[i])) + ",");
|
||||
}
|
||||
data += tempData;
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
data += ("null,".repeat(pit_latest_values.length));
|
||||
@@ -108,11 +112,14 @@ public class CSVExport {
|
||||
data += ("null,".repeat(pit_latest_values.length));
|
||||
}else{
|
||||
try {
|
||||
String tempData = "";
|
||||
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.pit_values, DataManager.pit_transferValues);
|
||||
dataType[] types = psdr.data.array;
|
||||
dataType[] teamData = psdr.data.array;
|
||||
inputType[] types = psdr.data.values[psdr.data.values.length-1];
|
||||
for (int i = 0; i < types.length; i++) {
|
||||
data += (safeCSV(types[i].get().toString()) + ",");
|
||||
tempData += (safeCSV(types[i].toString(teamData[i])) + ",");
|
||||
}
|
||||
data += tempData;
|
||||
} catch (Exception e){
|
||||
e.printStackTrace();
|
||||
data += ("null,".repeat(pit_latest_values.length));
|
||||
|
||||
@@ -57,18 +57,7 @@ public class TransferFragment extends Fragment {
|
||||
});
|
||||
|
||||
binding.TBAButton.setOnClickListener(v -> {
|
||||
binding.noEventError.setVisibility(View.GONE);
|
||||
AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
|
||||
alert.setTitle("Warning");
|
||||
alert.setMessage("This action requires internet.");
|
||||
alert.setCancelable(true);
|
||||
|
||||
alert.setPositiveButton("Ok", (dialog, which) -> {
|
||||
findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_tba);
|
||||
});
|
||||
|
||||
alert.setNegativeButton("Cancel", null);
|
||||
alert.create().show();
|
||||
findNavController(this).navigate(R.id.action_navigation_transfer_to_navigation_tba);
|
||||
});
|
||||
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 162 KiB |
@@ -49,5 +49,35 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/fieldsButton" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/fieldsButtons"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="1dp"
|
||||
android:gravity="center"
|
||||
android:orientation="horizontal"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/fieldsButton"
|
||||
tools:visibility="visible">
|
||||
|
||||
<Button
|
||||
android:id="@+id/fieldsPitsButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:text="Pits"
|
||||
android:textSize="34sp" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/fieldsMatchesButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="5dp"
|
||||
android:text="Matches"
|
||||
android:textSize="34sp" />
|
||||
</LinearLayout>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -8,6 +8,7 @@
|
||||
android:id="@+id/minus_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
|
||||
android:text="-" />
|
||||
|
||||
<TextView
|
||||
@@ -22,6 +23,7 @@
|
||||
android:id="@+id/plus_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
|
||||
android:text="+" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
||||
@@ -2,4 +2,5 @@
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_robologo" />
|
||||
</adaptive-icon>
|
||||
@@ -15,21 +15,21 @@
|
||||
app:destination="@id/navigation_match_scouting"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim"/>
|
||||
<action
|
||||
android:id="@+id/action_navigation_scouting_to_navigation_team_selector"
|
||||
app:destination="@id/navigation_team_selector"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_scouting_to_navigation_scouting_event"
|
||||
app:destination="@id/navigation_scouting_status"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim"/>
|
||||
</fragment>
|
||||
|
||||
@@ -48,14 +48,14 @@
|
||||
app:destination="@id/navigation_pit_scouting"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_team_selector_to_navigation_data_teams"
|
||||
app:destination="@id/navigation_data_teams"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
@@ -79,14 +79,14 @@
|
||||
app:destination="@id/navigation_team_selector"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_data_to_navigation_data_fields_chooser"
|
||||
app:destination="@id/navigation_data_fields_chooser"
|
||||
android:id="@+id/action_navigation_data_to_navigation_data_fields"
|
||||
app:destination="@id/navigation_data_fields"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
@@ -102,29 +102,16 @@
|
||||
tools:layout="@layout/fragment_data_teams">
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_data_fields_chooser"
|
||||
android:name="com.ridgebotics.ridgescout.ui.data.FieldsChooserFragment"
|
||||
tools:layout="@layout/fragment_data_fields_chooser">
|
||||
<action
|
||||
android:id="@+id/action_navigation_data_fields_chooser_to_navigation_data_fields"
|
||||
app:destination="@id/navigation_data_fields"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/navigation_data_fields"
|
||||
android:name="com.ridgebotics.ridgescout.ui.data.FieldsFragment"
|
||||
tools:layout="@layout/fragment_data_fields">
|
||||
<action
|
||||
android:id="@+id/action_navigation_data_fields_to_navigation_data_fields_chooser"
|
||||
app:destination="@id/navigation_data_fields_chooser"
|
||||
android:id="@+id/action_navigation_data_fields_to_navigation_data"
|
||||
app:destination="@id/navigation_data"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
@@ -142,21 +129,21 @@
|
||||
app:destination="@id/navigation_tba"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_transfer_to_navigation_file_selector"
|
||||
app:destination="@id/navigation_file_selector"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_transfer_to_navigation_transfer_selector"
|
||||
app:destination="@id/navigation_transfer_selector"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
@@ -169,7 +156,7 @@
|
||||
app:destination="@id/navigation_transfer_selector"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
@@ -182,28 +169,28 @@
|
||||
app:destination="@id/navigation_code_generator"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_sender"
|
||||
app:destination="@id/navigation_bluetooth_sender"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_transfer_selector_to_navigation_code_scanner"
|
||||
app:destination="@id/navigation_code_scanner"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
<action
|
||||
android:id="@+id/action_navigation_transfer_selector_to_navigation_bluetooth_receiver"
|
||||
app:destination="@id/navigation_bluetooth_receiver"
|
||||
app:enterAnim="@anim/enter_anim"
|
||||
app:exitAnim="@anim/exit_anim"
|
||||
app:popEnterAnim="@anim/enter_anim"
|
||||
app:popEnterAnim="@anim/pop_enter_anim"
|
||||
app:popExitAnim="@anim/pop_exit_anim" />
|
||||
</fragment>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="main_200">#FFBBFC86</color>
|
||||
<color name="main_200">#FFA0E044</color>
|
||||
<color name="main_500">#FF62EE00</color>
|
||||
<color name="main_700">#FF37B300</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
|
||||
Reference in New Issue
Block a user