Add comments to classes and update TODO

This commit is contained in:
Michael Mikovsky
2025-04-21 12:06:37 -06:00
parent 50419e284c
commit 36801e2f9b
85 changed files with 281 additions and 365 deletions
@@ -24,6 +24,9 @@ import com.ridgebotics.ridgescout.utility.SettingsManager;
import java.util.Objects;
import java.util.TimeZone;
// Entrypoint for the scouting app.
// Configures stuff like the nav menu
// Also has some extra functions like a better back stack or a way to suppress the back button.
public class MainActivity extends AppCompatActivity {
@@ -37,19 +40,21 @@ public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Load shared prefrences
SettingsManager.prefs = this.getSharedPreferences(
"com.ridgebotics.ridgescout", Context.MODE_PRIVATE);
// Load default match fields
if(!FileEditor.fileExist(Fields.matchFieldsFilename)){
Fields.save(Fields.matchFieldsFilename, Fields.default_match_fields);
}
// Load default pit fields
if(!FileEditor.fileExist(Fields.pitsFieldsFilename)){
Fields.save(Fields.pitsFieldsFilename, Fields.default_pit_fields);
}
// get time zone for FTP file transfer
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
AlertManager.init(this);
@@ -16,6 +16,8 @@ import com.ridgebotics.ridgescout.utility.ByteBuilder;
import java.util.ArrayList;
import java.util.UUID;
// The mechanism to load, save, and create the fields based off of the raw types from ScoutingDataWriter.java
public class Fields {
// public static ScoutingVersion sv = new ScoutingVersion();
@@ -2,7 +2,7 @@ package com.ridgebotics.ridgescout.scoutingData;
import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
import com.ridgebotics.ridgescout.types.ScoutingArray;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntArrType;
import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.types.input.FieldType;
@@ -12,17 +12,17 @@ import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
// Mostly an extension of Fields.java. Saves the raw data from each Field Type.
public class ScoutingDataWriter {
// private static final int int_type_id = 255;
// private static final int string_type_id = 254;
public static boolean save(int version, String username, String filename, DataType[] data){
public static boolean save(int version, String username, String filename, RawDataType[] data){
ByteBuilder bb = new ByteBuilder();
try {
bb.addInt(version);
@@ -64,7 +64,7 @@ public class ScoutingDataWriter {
try {
ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse();
DataType[] dataTypes = new DataType[objects.size()-2];
RawDataType[] rawDataTypes = new RawDataType[objects.size()-2];
int version = ((int)objects.get(0).get());
@@ -80,24 +80,24 @@ public class ScoutingDataWriter {
for(int i = 0; i < values[version].length; i++){
switch (objects.get(i+2).getType()){
case 1: // Int
dataTypes[i] = IntType.newNull(values[version][i].UUID);
dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded INT: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ dataTypes[i].get() +")");
rawDataTypes[i] = IntType.newNull(values[version][i].UUID);
rawDataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded INT: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ rawDataTypes[i].get() +")");
break;
case 2: // String
dataTypes[i] = StringType.newNull(values[version][i].UUID);
dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded STR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ dataTypes[i].get() +")");
rawDataTypes[i] = StringType.newNull(values[version][i].UUID);
rawDataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded STR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ rawDataTypes[i].get() +")");
break;
case 3: // Int array
dataTypes[i] = IntArrType.newNull(values[version][i].UUID);
dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded intARR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ Arrays.toString((int[])dataTypes[i].get()) +")");
rawDataTypes[i] = IntArrType.newNull(values[version][i].UUID);
rawDataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded intARR: " + values[version][i].name + " (" + values[version][i].UUID + ") " + ", ("+ Arrays.toString((int[]) rawDataTypes[i].get()) +")");
break;
}
}
ScoutingArray msa = new ScoutingArray(version, dataTypes, values, transferValues);
ScoutingArray msa = new ScoutingArray(version, rawDataTypes, values, transferValues);
msa.update();
ParsedScoutingDataResult psda = new ParsedScoutingDataResult();
@@ -1,5 +1,6 @@
package com.ridgebotics.ridgescout.scoutingData.transfer;
// Transfer type if a field was created
public class CreateTransferType extends TransferType {
public transferValue getType() {return transferValue.CREATE;}
public CreateTransferType(String UUID){
@@ -1,5 +1,6 @@
package com.ridgebotics.ridgescout.scoutingData.transfer;
// Transfer type if a field directly transfers
public class DirectTransferType extends TransferType {
public transferValue getType() {return transferValue.DIRECT;}
public DirectTransferType(String UUID){
@@ -2,6 +2,10 @@ package com.ridgebotics.ridgescout.scoutingData.transfer;
import com.ridgebotics.ridgescout.types.input.FieldType;
// The "Transfer Types" system, a component in the loading of scouting data.
// Dictates how the
// For example, a field can be created in one version, and how the app updates it is by obtaining it's transfer value, in this case being "create".
public abstract class TransferType {
public enum transferValue {
DIRECT,
@@ -22,6 +26,7 @@ public abstract class TransferType {
return null;
}
//Inputs:
public static TransferType[][] get_transfer_values(FieldType[][] values) {
TransferType[][] output = new TransferType[values.length][];
for(int a = 1; a < values.length; a++){
@@ -3,19 +3,20 @@ package com.ridgebotics.ridgescout.types;
import com.ridgebotics.ridgescout.scoutingData.transfer.CreateTransferType;
import com.ridgebotics.ridgescout.scoutingData.transfer.DirectTransferType;
import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.types.input.FieldType;
// A wrapper class for the stuff going on in Fields.java and ScoutingDataWriter.java.
public class ScoutingArray {
public int version;
public DataType[] array;
public RawDataType[] array;
public FieldType[][] values;
public int latest_version_num;
public TransferType[][] transfer_values;
public ScoutingArray(int version, DataType[] array, FieldType[][] values, TransferType[][] transfer_values){
public ScoutingArray(int version, RawDataType[] array, FieldType[][] values, TransferType[][] transfer_values){
this.version = version;
this.array = array;
this.values = values;
@@ -23,13 +24,13 @@ public class ScoutingArray {
this.transfer_values = transfer_values;
}
public ScoutingArray(int version, DataType[] array, FieldType[][] values){
public ScoutingArray(int version, RawDataType[] array, FieldType[][] values){
this(version, array, values, TransferType.get_transfer_values(values));
}
public void update(){
while(version<latest_version_num){
DataType[] new_values = new DataType[transfer_values[version].length];
RawDataType[] new_values = new RawDataType[transfer_values[version].length];
for(int i = 0; i < transfer_values[version].length; i++){
TransferType tv = transfer_values[version][i];
switch (tv.getType()){
@@ -56,8 +57,8 @@ public class ScoutingArray {
return null;
}
private DataType get_data_type_by_UUID(String UUID){
for(DataType dt : array){
private RawDataType get_data_type_by_UUID(String UUID){
for(RawDataType dt : array){
if(dt.getUUID().equals(UUID)){
return dt;
}
@@ -65,7 +66,7 @@ public class ScoutingArray {
return null;
}
private DataType direct_transfer(DirectTransferType tv){
private RawDataType direct_transfer(DirectTransferType tv){
return get_data_type_by_UUID(tv.UUID);
}
@@ -75,7 +76,7 @@ public class ScoutingArray {
// return dt;
// }
private DataType create_transfer(CreateTransferType tv){
private RawDataType create_transfer(CreateTransferType tv){
FieldType it = get_input_type_by_UUID(version+1, tv.UUID);
switch (it.getValueType()){
case NUM:
@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
// Basically just holds a byte array and a filename, and then us just encoded.
public class ScoutingFile {
public static final int typecode = 255;
public String filename;
@@ -1,6 +1,8 @@
package com.ridgebotics.ridgescout.types.data;
public class IntArrType extends DataType {
// Int array raw data type
public class IntArrType extends RawDataType {
public static final int[] nullval = new int[]{255, 255};
// public static final int unselectedval = 1;
@@ -1,6 +1,7 @@
package com.ridgebotics.ridgescout.types.data;
public class IntType extends DataType {
// Number raw data type
public class IntType extends RawDataType {
public static final int nullval = 255;
// public static final int unselectedval = 1;
@@ -1,6 +1,7 @@
package com.ridgebotics.ridgescout.types.data;
public abstract class DataType {
// Abstract class for raw data types for use in fields.
public abstract class RawDataType {
public enum valueTypes {
NUM,
NUMARR,
@@ -26,7 +27,7 @@ public abstract class DataType {
public String getUUID() {return UUID;}
public DataType(String UUID){
public RawDataType(String UUID){
this.UUID = UUID;
}
}
@@ -1,6 +1,7 @@
package com.ridgebotics.ridgescout.types.data;
public class StringType extends DataType {
// String raw data type
public class StringType extends RawDataType {
public static final String nullval = "null";
// public static final String unselectedval = "■";
@@ -12,6 +12,8 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
// Class to contain data for an entire event.
// Easily encoded and decoded to binary format.
public class frcEvent {
public static final int typecode = 254;
@@ -9,6 +9,8 @@ import com.ridgebotics.ridgescout.utility.ByteBuilder;
import java.util.ArrayList;
import java.util.Arrays;
// Class to contain data for the six teams numbers in a single match
// Easily encoded and decoded to binary format.
public class frcMatch {
public static final int typecode = 253;
public frcMatch(){}
@@ -16,6 +16,8 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
// Class to contain data for a team, in an event.
// Easily encoded and decoded to binary format.
public class frcTeam {
public static final int typecode = 252;
private static final int[] DEFAULT_COLOR_ARR = new int[]{64,64,64};
@@ -23,7 +23,7 @@ import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -36,7 +36,7 @@ import java.util.function.Function;
public class CheckboxType extends FieldType {
public int get_byte_id() {return checkboxType;}
public inputTypes getInputType(){return inputTypes.CHECKBOX;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public CheckboxType(){};
public String get_type_name(){return "Checkbox";}
@@ -58,7 +58,7 @@ public class CheckboxType extends FieldType {
public CheckBox checkBox = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
checkBox = new CheckBox(context);
checkBox.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6);
checkBox.setText(name);
@@ -85,7 +85,7 @@ public class CheckboxType extends FieldType {
isBlank = true;
checkBox.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(checkBox == null) return null;
if(checkBox.getVisibility() == View.GONE) return new IntType(name, IntType.nullval);
return new IntType(name, checkBox.isChecked() ? 1 : 0);
@@ -96,7 +96,7 @@ public class CheckboxType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
CheckBox cb = new CheckBox(parent.getContext());
cb.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6);
@@ -107,7 +107,7 @@ public class CheckboxType extends FieldType {
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
PieChart chart = new PieChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -147,7 +147,7 @@ public class CheckboxType extends FieldType {
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -207,11 +207,11 @@ public class CheckboxType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
return (int) data.get() == 1 ? "true" : "false";
}
}
@@ -15,9 +15,9 @@ import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.views.CustomSpinnerView;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.github.mikephil.charting.charts.LineChart;
@@ -40,7 +40,7 @@ public class DropdownType extends FieldType {
public String[] text_options;
public int get_byte_id() {return dropdownType;}
public inputTypes getInputType(){return inputTypes.DROPDOWN;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public DropdownType(){};
public String get_type_name(){return "Dropdown";}
@@ -62,7 +62,7 @@ public class DropdownType extends FieldType {
public CustomSpinnerView dropdown = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
dropdown = new CustomSpinnerView(context);
ArrayList<String> iconSpinnerItems = new ArrayList<>(Arrays.asList(text_options));
@@ -92,7 +92,7 @@ public class DropdownType extends FieldType {
isBlank = true;
dropdown.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(dropdown == null) return null;
if(dropdown.getVisibility() == View.GONE) return new IntType(name, IntType.nullval);
return new IntType(name, dropdown.getIndex());
@@ -103,7 +103,7 @@ public class DropdownType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
TextView tv = new TextView(parent.getContext());
tv.setLayoutParams(new FrameLayout.LayoutParams(
@@ -139,7 +139,7 @@ public class DropdownType extends FieldType {
return colors;
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
PieChart chart = new PieChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -173,7 +173,7 @@ public class DropdownType extends FieldType {
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -239,11 +239,11 @@ public class DropdownType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
return text_options[(int) data.get()];
}
}
@@ -5,7 +5,7 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -14,7 +14,9 @@ import java.util.List;
import java.util.Map;
import java.util.function.Function;
// Abstract class for fields.
public abstract class FieldType {
// Define what the IDS are for each type
public static final int slider_type_id = 255;
public static final int dropdownType = 254;
public static final int notesType = 253;
@@ -37,7 +39,7 @@ public abstract class FieldType {
public String description;
public Object default_value;
public abstract inputTypes getInputType();
public abstract DataType.valueTypes getValueType();
public abstract RawDataType.valueTypes getValueType();
public abstract Object get_fallback_value();
public abstract int get_byte_id();
public FieldType(){}
@@ -80,24 +82,24 @@ public abstract class FieldType {
// public abstract dataType[] getConfig();
// public abstract void setConfig(dataType[] config);
public abstract View createView(Context context, Function<DataType, Integer> onUpdate);
public abstract View createView(Context context, Function<RawDataType, Integer> onUpdate);
public boolean isBlank = false;
public abstract void nullify();
public void setViewValue(DataType type){setViewValue(type.get());}
public void setViewValue(RawDataType type){setViewValue(type.get());}
public abstract void setViewValue(Object value);
public abstract DataType getViewValue();
public abstract RawDataType getViewValue();
public abstract void add_individual_view(LinearLayout parent, DataType data);
public abstract void add_compiled_view(LinearLayout parent, DataType[] data);
public abstract void add_history_view(LinearLayout parent, DataType[] data);
public abstract void add_individual_view(LinearLayout parent, RawDataType data);
public abstract void add_compiled_view(LinearLayout parent, RawDataType[] data);
public abstract void add_history_view(LinearLayout parent, RawDataType[] data);
public abstract void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data);
public abstract void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data);
public abstract String toString(DataType data);
public abstract String toString(RawDataType data);
}
@@ -1,6 +1,5 @@
package com.ridgebotics.ridgescout.types.input;
import static com.ridgebotics.ridgescout.utility.Colors.background_color;
import static com.ridgebotics.ridgescout.utility.Colors.chart_background;
import static com.ridgebotics.ridgescout.utility.Colors.chart_text;
import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_1;
@@ -8,7 +7,6 @@ import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_2;
import static com.ridgebotics.ridgescout.utility.Colors.fieldpos_data;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -20,10 +18,10 @@ import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntArrType;
import com.ridgebotics.ridgescout.ui.scouting.FieldPosView;
import com.ridgebotics.ridgescout.ui.scouting.MultiFieldPosView;
import com.ridgebotics.ridgescout.ui.views.FieldPosView;
import com.ridgebotics.ridgescout.ui.views.MultiFieldPosView;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -35,7 +33,7 @@ import java.util.function.Function;
public class FieldposType extends FieldType {
public int get_byte_id() {return fieldposType;}
public inputTypes getInputType(){return inputTypes.FIELDPOS;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public FieldposType(){}
public String get_type_name(){return "Field Pos";}
@@ -62,7 +60,7 @@ public class FieldposType extends FieldType {
public FieldPosView field = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
field = new FieldPosView(context, pos -> {
onUpdate.apply(new IntArrType(name, pos));
});
@@ -90,7 +88,7 @@ public class FieldposType extends FieldType {
isBlank = true;
field.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(field == null) return null;
if(field.getVisibility() == View.GONE) return IntArrType.newNull(name);
return new IntArrType(name, field.getPos());
@@ -98,7 +96,7 @@ public class FieldposType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
FieldPosView fp = new FieldPosView(parent.getContext());
@@ -141,7 +139,7 @@ public class FieldposType extends FieldType {
return entries;
}
private static int findMin(DataType[] data){
private static int findMin(RawDataType[] data){
int min = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min)
@@ -149,7 +147,7 @@ public class FieldposType extends FieldType {
return min;
}
private static int findMax(DataType[] data){
private static int findMax(RawDataType[] data){
int max = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max)
@@ -157,7 +155,7 @@ public class FieldposType extends FieldType {
return max;
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
MultiFieldPosView mfp = new MultiFieldPosView(parent.getContext());
for(int i = 0; i < data.length; i++){
if(data[i].isNull()) continue;
@@ -166,7 +164,7 @@ public class FieldposType extends FieldType {
parent.addView(mfp);
}
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -223,11 +221,11 @@ public class FieldposType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
int[] intarr = (int[]) data.get();
return "[" + intarr[0] + "," + intarr[1] + "]";
}
@@ -2,7 +2,6 @@ package com.ridgebotics.ridgescout.types.input;
import static android.text.InputType.TYPE_CLASS_NUMBER;
import static com.ridgebotics.ridgescout.utility.Colors.background_color;
import static com.ridgebotics.ridgescout.utility.Colors.chart_background;
import static com.ridgebotics.ridgescout.utility.Colors.chart_text;
import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_1;
@@ -10,7 +9,6 @@ import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_2;
import static com.ridgebotics.ridgescout.utility.Colors.number_data;
import android.content.Context;
import android.graphics.Color;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
@@ -27,7 +25,7 @@ import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -40,7 +38,7 @@ import java.util.function.Function;
public class NumberType extends FieldType {
public int get_byte_id() {return numberType;}
public inputTypes getInputType(){return inputTypes.NUMBER;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public NumberType(){}
public String get_type_name(){return "Number";}
@@ -66,7 +64,7 @@ public class NumberType extends FieldType {
public EditText num = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
num = new EditText(context);
num.setInputType(TYPE_CLASS_NUMBER);
num.addTextChangedListener(new TextWatcher() {
@@ -97,7 +95,7 @@ public class NumberType extends FieldType {
isBlank = true;
num.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(num == null) return null;
if(num.getVisibility() == View.GONE) return IntType.newNull(name);
return new IntType(name, safeToInt(num.getText().toString()));
@@ -118,7 +116,7 @@ public class NumberType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
TextView tv = new TextView(parent.getContext());
@@ -165,7 +163,7 @@ public class NumberType extends FieldType {
return entries;
}
private static int findMin(DataType[] data){
private static int findMin(RawDataType[] data){
int min = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min)
@@ -173,7 +171,7 @@ public class NumberType extends FieldType {
return min;
}
private static int findMax(DataType[] data){
private static int findMax(RawDataType[] data){
int max = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max)
@@ -181,7 +179,7 @@ public class NumberType extends FieldType {
return max;
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -260,7 +258,7 @@ public class NumberType extends FieldType {
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -318,11 +316,11 @@ public class NumberType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
return String.valueOf((int) data.get());
}
}
@@ -7,7 +7,6 @@ import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_2;
import static com.ridgebotics.ridgescout.utility.Colors.slider_data;
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -16,7 +15,7 @@ import android.widget.TableLayout;
import androidx.annotation.NonNull;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
@@ -39,7 +38,7 @@ public class SliderType extends FieldType {
public int max;
public int get_byte_id() {return slider_type_id;}
public inputTypes getInputType(){return inputTypes.SLIDER;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public SliderType(){};
public String get_type_name(){return "Slider";}
@@ -69,7 +68,7 @@ public class SliderType extends FieldType {
public Slider slider = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
slider = new Slider(context);
setViewValue(default_value);
slider.setStepSize((float) 1 / (max-min));
@@ -104,7 +103,7 @@ public class SliderType extends FieldType {
slider.setVisibility(View.VISIBLE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(slider == null) return null;
if(slider.getVisibility() == View.GONE) return IntType.newNull(name);
return new IntType(name, min + (int) (slider.getValue() * (max-min)));
@@ -119,7 +118,7 @@ public class SliderType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
Slider slider = new Slider(parent.getContext());
@@ -173,7 +172,7 @@ public class SliderType extends FieldType {
return entries;
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -249,7 +248,7 @@ public class SliderType extends FieldType {
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -304,11 +303,11 @@ public class SliderType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
return String.valueOf((int) data.get());
}
}
@@ -7,7 +7,6 @@ import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_2;
import static com.ridgebotics.ridgescout.utility.Colors.tally_data;
import android.content.Context;
import android.graphics.Color;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -17,12 +16,12 @@ import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.ui.CandlestickHeader;
import com.ridgebotics.ridgescout.ui.CandlestickView;
import com.ridgebotics.ridgescout.ui.views.CandlestickHeader;
import com.ridgebotics.ridgescout.ui.views.CandlestickView;
import com.ridgebotics.ridgescout.ui.data.DataProcessing;
import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView;
import com.ridgebotics.ridgescout.ui.views.TallyCounterView;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.github.mikephil.charting.charts.LineChart;
@@ -40,7 +39,7 @@ import java.util.function.Function;
public class TallyType extends FieldType {
public int get_byte_id() {return tallyType;}
public inputTypes getInputType(){return inputTypes.TALLY;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;}
public TallyType(){}
public String get_type_name(){return "Tally";}
@@ -66,7 +65,7 @@ public class TallyType extends FieldType {
public TallyCounterView tally = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
tally = new TallyCounterView(context);
tally.setOnCountChangedListener(n -> onUpdate.apply(getViewValue()));
@@ -91,7 +90,7 @@ public class TallyType extends FieldType {
isBlank = true;
tally.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(tally == null) return null;
if(tally.getVisibility() == View.GONE) return IntType.newNull(name);
return new IntType(name, tally.getValue());
@@ -102,7 +101,7 @@ public class TallyType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
TextView tv = new TextView(parent.getContext());
@@ -149,7 +148,7 @@ public class TallyType extends FieldType {
return entries;
}
private static int findMin(DataType[] data){
private static int findMin(RawDataType[] data){
int min = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min)
@@ -157,7 +156,7 @@ public class TallyType extends FieldType {
return min;
}
private static int findMax(DataType[] data){
private static int findMax(RawDataType[] data){
int max = (int)data[0].get();
for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max)
@@ -165,7 +164,7 @@ public class TallyType extends FieldType {
return max;
}
public void add_compiled_view(LinearLayout parent, DataType[] data){
public void add_compiled_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -244,7 +243,7 @@ public class TallyType extends FieldType {
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -302,7 +301,7 @@ public class TallyType extends FieldType {
parent.addView(chart);
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
int[] tmp_abs_bounds = DataProcessing.getNumberBounds(data);
int absmin = tmp_abs_bounds[0];
int absmax = tmp_abs_bounds[1];
@@ -361,7 +360,7 @@ public class TallyType extends FieldType {
}
}
public String toString(DataType data){
public String toString(RawDataType data){
return String.valueOf((int) data.get());
}
}
@@ -7,7 +7,6 @@ import static com.ridgebotics.ridgescout.utility.Colors.dropdown_value_text_2;
import static com.ridgebotics.ridgescout.utility.Colors.text_data;
import android.content.Context;
import android.graphics.Color;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
@@ -19,7 +18,7 @@ import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.utility.SentimentAnalysis;
import com.ridgebotics.ridgescout.utility.BuiltByteParser;
@@ -39,7 +38,7 @@ public class TextType extends FieldType {
public int get_byte_id() {return notesType;}
public inputTypes getInputType(){return inputTypes.NOTES_INPUT;}
public DataType.valueTypes getValueType(){return DataType.valueTypes.STRING;}
public RawDataType.valueTypes getValueType(){return RawDataType.valueTypes.STRING;}
public Object get_fallback_value(){return "<no-notes>";}
public TextType(){}
public TextType(String UUID, String name, String description, String default_text){
@@ -76,7 +75,7 @@ public class TextType extends FieldType {
public EditText text = null;
public View createView(Context context, Function<DataType, Integer> onUpdate){
public View createView(Context context, Function<RawDataType, Integer> onUpdate){
text = new EditText(context);
text.setText((String)default_value);
text.addTextChangedListener(new TextWatcher() {
@@ -102,7 +101,7 @@ public class TextType extends FieldType {
isBlank = true;
text.setVisibility(View.GONE);
}
public DataType getViewValue(){
public RawDataType getViewValue(){
if(text == null) return null;
if(text.getVisibility() == View.GONE) return new StringType(name, StringType.nullval);
return new StringType(name, text.getText().toString());
@@ -111,7 +110,7 @@ public class TextType extends FieldType {
public void add_individual_view(LinearLayout parent, DataType data){
public void add_individual_view(LinearLayout parent, RawDataType data){
if(data.isNull()) return;
TextView tv = new TextView(parent.getContext());
tv.setLayoutParams(new FrameLayout.LayoutParams(
@@ -141,7 +140,7 @@ public class TextType extends FieldType {
TextView positive_text;
public void add_compiled_view(LinearLayout parent, DataType[] data) {
public void add_compiled_view(LinearLayout parent, RawDataType[] data) {
positive_mean = 0;
count = 0;
@@ -170,7 +169,7 @@ public class TextType extends FieldType {
}
public void add_history_view(LinearLayout parent, DataType[] data){
public void add_history_view(LinearLayout parent, RawDataType[] data){
LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -229,11 +228,11 @@ public class TextType extends FieldType {
}
public void addDataToTable(TableLayout parent, Map<Integer, List<DataType>> data){
public void addDataToTable(TableLayout parent, Map<Integer, List<RawDataType>> data){
}
public String toString(DataType data){
public String toString(RawDataType data){
return String.valueOf(data.get());
}
}
@@ -1,94 +0,0 @@
package com.ridgebotics.ridgescout.ui;
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.event;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TableLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTeamSelectorBinding;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager;
import java.util.Arrays;
public class TeamSelectorFragment extends Fragment {
private FragmentTeamSelectorBinding binding;
private static boolean pits_mode;
public static void setPits_mode(boolean mode){
pits_mode = mode;
}
private static onTeamSelected onSelect = new onTeamSelected() {@Override public void onSelect(TeamSelectorFragment self, frcTeam team) {}};
public interface onTeamSelected {
void onSelect(TeamSelectorFragment self, frcTeam team);
}
public static void setOnSelect(onTeamSelected tmponSelect){
onSelect = tmponSelect;
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
binding = FragmentTeamSelectorBinding.inflate(inflater, container, false);
// event = fileEditor.g
DataManager.reload_event();
if(evcode == null || evcode.equals("unset")){
AlertManager.addSimpleError("You somehow have not loaded an event!");
return binding.getRoot();
}
load_teams();
return binding.getRoot();
}
public void load_teams(){
int[] teamNums = new int[event.teams.size()];
for(int i = 0 ; i < event.teams.size(); i++){
teamNums[i] = event.teams.get(i).teamNumber;
}
Arrays.sort(teamNums);
TableLayout table = new TableLayout(getContext());
table.setStretchAllColumns(true);
binding.teams.addView(table);
for(int i = 0; i < event.teams.size(); i++){
frcTeam team = null;
for(int a = 0 ; a < event.teams.size(); a++){
if(event.teams.get(a).teamNumber == teamNums[i]){
team = event.teams.get(a);
break;
}
}
assert team != null;
TeamListOption teamRow = new TeamListOption(getContext());
table.addView(teamRow);
teamRow.fromTeam(team);
frcTeam finalTeam = team;
teamRow.setOnClickListener(v -> {
onSelect.onSelect(this, finalTeam);
});
}
}
}
@@ -3,7 +3,6 @@ package com.ridgebotics.ridgescout.ui.data;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static androidx.navigation.fragment.FragmentKt.findNavController;
import static com.ridgebotics.ridgescout.utility.Colors.datafragment_option_1;
import static com.ridgebotics.ridgescout.utility.Colors.datafragment_option_2;
@@ -20,12 +19,10 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.FieldBorderedRow;
import com.ridgebotics.ridgescout.ui.TeamListOption;
import com.ridgebotics.ridgescout.ui.views.FieldBorderedRow;
import com.ridgebotics.ridgescout.ui.views.TeamListOption;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
@@ -33,6 +30,9 @@ import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
import java.util.Arrays;
import java.util.List;
// Fragment for the menu of the data tab.
// Shows either by field type or by team.
// This is held in a sub-fragment under DataParentFragment
public class DataFragment extends Fragment {
private FragmentDataBinding binding;
@@ -4,17 +4,11 @@ package com.ridgebotics.ridgescout.ui.data;
import static android.content.Context.CLIPBOARD_SERVICE;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import static androidx.core.content.ContextCompat.getSystemService;
import static androidx.navigation.fragment.FragmentKt.findNavController;
import static com.ridgebotics.ridgescout.utility.Colors.datafragment_option_1;
import static com.ridgebotics.ridgescout.utility.Colors.datafragment_option_2;
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.event;
import static com.ridgebotics.ridgescout.utility.DataManager.match_latest_values;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
@@ -31,17 +25,15 @@ import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentDataParentBinding;
import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.FieldBorderedRow;
import com.ridgebotics.ridgescout.ui.TeamListOption;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.AutoSaveManager;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.SettingsManager;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
// Holds the scouting data editor aswell as the sub-fragment for the scouting data browser
public class DataParentFragment extends Fragment {
private FragmentDataParentBinding binding;
@@ -1,20 +1,21 @@
package com.ridgebotics.ridgescout.ui.data;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
// Helper class for scouting data by fields.
public class DataProcessing {
public static int[] getNumberBounds(Map<Integer, List<DataType>> data){
public static int[] getNumberBounds(Map<Integer, List<RawDataType>> data){
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for(Integer teamNum : data.keySet()){
List<DataType> teamData = data.get(teamNum);
List<RawDataType> teamData = data.get(teamNum);
int[] locBounds = getNumberBounds(teamData);
@@ -26,13 +27,13 @@ public class DataProcessing {
return new int[]{min, max};
}
public static int[] getNumberBounds(List<DataType> data){
public static int[] getNumberBounds(List<RawDataType> data){
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
if(data == null) return new int[]{min, max};
for(int i = 0; i < data.size(); i++){
DataType dataPoint = data.get(i);
RawDataType dataPoint = data.get(i);
// if(dataPoint == null) continue;
int num = (int) dataPoint.get();
if(num > max) max = num;
@@ -44,7 +45,7 @@ public class DataProcessing {
//https://stackoverflow.com/questions/42381759/finding-first-quartile-and-third-quartile-in-integer-array-using-java#63891545
public static float[] getQuartiles(List<DataType> data) {
public static float[] getQuartiles(List<RawDataType> data) {
float ans[] = new float[3];
float[] val = new float[data.size()];
@@ -20,7 +20,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentDataFieldDataBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
@@ -29,6 +29,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
// Fragment for viewing the data of a specfic field.
public class FieldDataFragment extends Fragment {
private FragmentDataFieldDataBinding binding;
@@ -52,13 +53,13 @@ public class FieldDataFragment extends Fragment {
Thread t = new Thread(() -> {
Map<Integer, List<DataType>> data = new HashMap<>();
Map<Integer, List<RawDataType>> data = new HashMap<>();
for (int teamIndex = 0; teamIndex < event.teams.size(); teamIndex++) {
int teamNum = event.teams.get(teamIndex).teamNumber;
List<String> filenames = new ArrayList<>(List.of(FileEditor.getMatchesByTeamNum(evcode, event.teams.get(teamIndex).teamNumber)));
filenames.removeAll(rescout_list);
ArrayList<DataType> teamData = new ArrayList<>();
ArrayList<RawDataType> teamData = new ArrayList<>();
for (int i = 0; i < filenames.size(); i++) {
try {
@@ -26,7 +26,7 @@ import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentDataTeamsBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
@@ -34,6 +34,7 @@ import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.ArrayList;
import java.util.List;
// Fragment for viewing the data of a team.
public class TeamsFragment extends Fragment {
FragmentDataTeamsBinding binding;
@@ -279,7 +280,7 @@ public class TeamsFragment extends Fragment {
public void add_compiled_views(String[] files){
DataType[][] data = new DataType[match_latest_values.length][files.length];
RawDataType[][] data = new RawDataType[match_latest_values.length][files.length];
for (int i = 0; i < files.length; i++) {
try {
ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues);
@@ -314,7 +315,7 @@ public class TeamsFragment extends Fragment {
public void add_history_views(String[] files){
DataType[][] data = new DataType[match_latest_values.length][files.length];
RawDataType[][] data = new RawDataType[match_latest_values.length][files.length];
for (int i = 0; i < files.length; i++) {
try {
ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues);
@@ -23,7 +23,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingEventBinding;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.views.CustomSpinnerView;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.types.frcEvent;
@@ -34,6 +34,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
// Fragment to show the status of scouting, aswell as adding or removing matches and teams manually.
public class EventFragment extends Fragment {
FragmentScoutingEventBinding binding;
@@ -19,11 +19,11 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.ui.ToggleTitleView;
import com.ridgebotics.ridgescout.ui.views.ToggleTitleView;
import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingMatchBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.FieldType;
@@ -32,6 +32,7 @@ import com.ridgebotics.ridgescout.utility.AutoSaveManager;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
// Fragment for match scouting data editing.
public class MatchScoutingFragment extends Fragment {
private FragmentScoutingMatchBinding binding;
@@ -347,7 +348,7 @@ public class MatchScoutingFragment extends Fragment {
public void get_fields(){
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues);
DataType[] types = psdr.data.array;
RawDataType[] types = psdr.data.array;
fileUsernames = psdr.username;
@@ -369,7 +370,7 @@ public class MatchScoutingFragment extends Fragment {
public void save_fields(){
DataType[] types = new DataType[DataManager.match_latest_values.length];
RawDataType[] types = new RawDataType[DataManager.match_latest_values.length];
for(int i = 0; i < DataManager.match_latest_values.length; i++){
types[i] = DataManager.match_latest_values[i].getViewValue();
@@ -19,12 +19,12 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.ui.ToggleTitleView;
import com.ridgebotics.ridgescout.ui.views.ToggleTitleView;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingPitBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.utility.AutoSaveManager;
@@ -34,6 +34,7 @@ import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.ArrayList;
import java.util.function.Function;
// Fragment for pit scouting data editing
public class PitScoutingFragment extends Fragment {
FragmentScoutingPitBinding binding;
@@ -77,13 +78,13 @@ public class PitScoutingFragment extends Fragment {
AutoSaveManager asm = new AutoSaveManager(this::save, AUTO_SAVE_DELAY);
ArrayList<DataType> dataTypes;
ArrayList<RawDataType> rawDataTypes;
public void save(){
edited = false;
enableRescoutButton();
DataType[] types = new DataType[pit_latest_values.length];
RawDataType[] types = new RawDataType[pit_latest_values.length];
for(int i = 0; i < pit_latest_values.length; i++){
types[i] = pit_latest_values[i].getViewValue();
@@ -201,9 +202,9 @@ public class PitScoutingFragment extends Fragment {
}
});
View v = pit_latest_values[i].createView(getContext(), new Function<DataType, Integer>() {
View v = pit_latest_values[i].createView(getContext(), new Function<RawDataType, Integer>() {
@Override
public Integer apply(DataType dataType) {
public Integer apply(RawDataType dataType) {
// edited = true;
if(asm.isRunning)
update_asm();
@@ -226,7 +227,7 @@ public class PitScoutingFragment extends Fragment {
public void get_fields(){
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, pit_values, pit_transferValues);
DataType[] types = psdr.data.array;
RawDataType[] types = psdr.data.array;
fileUsernames = psdr.username;
@@ -3,7 +3,6 @@ package com.ridgebotics.ridgescout.ui.scouting;
import static com.ridgebotics.ridgescout.utility.Colors.color_found;
import static com.ridgebotics.ridgescout.utility.Colors.color_not_found;
import static com.ridgebotics.ridgescout.utility.Colors.color_rescout;
import static com.ridgebotics.ridgescout.utility.Colors.rescout_color;
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.event;
@@ -19,21 +18,17 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTeamSelectorBinding;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.TeamListOption;
import com.ridgebotics.ridgescout.ui.views.TeamListOption;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.Arrays;
// Fragment for choosing which team to pit scout
public class PitSelectorFragment extends Fragment {
private FragmentTeamSelectorBinding binding;
private static boolean pits_mode;
public static void setPits_mode(boolean mode){
pits_mode = mode;
}
private static onTeamSelected onSelect = new onTeamSelected() {@Override public void onSelect(PitSelectorFragment self, frcTeam team) {}};
public interface onTeamSelected {
@@ -30,6 +30,7 @@ import com.ridgebotics.ridgescout.utility.DataManager;
import java.util.ArrayList;
import java.util.Set;
// Main dashbord page
public class ScoutingFragment extends Fragment {
private FragmentScoutingBinding binding;
@@ -23,6 +23,7 @@ import com.ridgebotics.ridgescout.utility.AlertManager;
import java.lang.reflect.Field;
import java.util.UUID;
// Class to help with fields editor fragment, containing the defaults for each field.
public class FieldEditorHelper {
private enum parameterTypeEnum {
paramNumber,
@@ -8,7 +8,6 @@ import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
@@ -26,14 +25,15 @@ import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentSettingsFieldsBinding;
import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.FieldDisplay;
import com.ridgebotics.ridgescout.ui.views.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.views.FieldDisplay;
import com.ridgebotics.ridgescout.utility.AlertManager;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
// Fragment that shows the field editor.
public class FieldsFragment extends Fragment {
FragmentSettingsFieldsBinding binding;
@@ -18,7 +18,6 @@ import static com.ridgebotics.ridgescout.utility.SettingsManager.prefs;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputType;
@@ -43,8 +42,8 @@ import com.google.android.material.textfield.TextInputLayout;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding;
import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView;
import com.ridgebotics.ridgescout.ui.views.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.views.TallyCounterView;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
@@ -53,7 +52,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
// Fragment to edit settings, aswell as redirect to the fields editor.
public class SettingsFragment extends Fragment {
private FragmentSettingsBinding binding;
@@ -9,13 +9,14 @@ import static com.ridgebotics.ridgescout.utility.SharePrompt.shareContent;
import android.content.Context;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.FileEditor;
// Static class to export matches to a string.
public class CSVExport {
private static String[] alliances = {"red", "blue"};
@@ -62,7 +63,7 @@ public class CSVExport {
try {
String tempData = "";
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues);
DataType[] matchData = psdr.data.array;
RawDataType[] matchData = psdr.data.array;
FieldType[] types = psdr.data.values[psdr.data.values.length-1];
for (int i = 0; i < types.length; i++) {
tempData += (safeCSV(types[i].toString(matchData[i])) + ",");
@@ -114,7 +115,7 @@ public class CSVExport {
try {
String tempData = "";
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.pit_values, DataManager.pit_transferValues);
DataType[] teamData = psdr.data.array;
RawDataType[] teamData = psdr.data.array;
FieldType[] types = psdr.data.values[psdr.data.values.length-1];
for (int i = 0; i < types.length; i++) {
tempData += (safeCSV(types[i].toString(teamData[i])) + ",");
@@ -1,6 +1,5 @@
package com.ridgebotics.ridgescout.ui.transfer;
//import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.FileEditor.baseDir;
@@ -27,6 +26,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
// Class to synchronise data over FTP.
public class FTPSync extends Thread {
public static final String remoteBasePath = "/RidgeScout/";
public static final String timestampsFilename = "timestamps";
@@ -20,28 +20,8 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
// Class to create the share and receive popups to transfer scouting data.
public class FileBundle {
private static final Intent FILE_SELECT_CODE = new Intent();
public static void send(String[] files, Context c){
try {
ByteBuilder b = new ByteBuilder();
for(int i = 0; i < files.length; i++){
if(!FileEditor.fileExist(files[i])) continue;
// byte[] data = fileEditor.readFile(files[i]);
ScoutingFile f = new ScoutingFile(files[i]);
b.addRaw(ScoutingFile.typecode, f.encode());
}
byte[] data = b.build();
send(data, c);
} catch (ByteBuilder.buildingException e) {
AlertManager.error(e);
}
}
public static void send(byte[] data, Context c){
String filename = DataManager.getevcode() + "-" + System.currentTimeMillis() + ".scoutbundle";
SharePrompt.shareContent(c, filename, data, "application/ridgescout");
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
// Class to show a file browseer
public class FileSelectorFragment extends Fragment {
private static on_file_select onSelect = files -> {};
@@ -41,6 +41,7 @@ import org.json.JSONObject;
import java.util.ArrayList;
import java.util.Arrays;
// Class to download data from a specific event and encode it.
public class TBAEventFragment extends Fragment {
private TableLayout Table;
@@ -21,7 +21,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding;
import com.ridgebotics.ridgescout.ui.TBAEventOption;
import com.ridgebotics.ridgescout.ui.views.TBAEventOption;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.RequestTask;
import com.ridgebotics.ridgescout.utility.SettingsManager;
@@ -37,6 +37,7 @@ import java.util.Calendar;
import java.util.Date;
import java.util.List;
// Class to select an event from TBA and redirect to TBAEventFragment.java.
public class TBASelectorFragment extends Fragment {
private android.widget.TableLayout Table;
@@ -19,6 +19,7 @@ import com.ridgebotics.ridgescout.databinding.FragmentTransferBinding;
import com.ridgebotics.ridgescout.ui.transfer.bluetooth.BluetoothSenderFragment;
import com.ridgebotics.ridgescout.ui.transfer.codes.CodeGeneratorView;
// Class to do transference.
public class TransferFragment extends Fragment {
private FragmentTransferBinding binding;
@@ -11,6 +11,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTransferSelectorBinding;
// The transfer method selector
public class TransferSelectorFragment extends Fragment {
// Declaring three blank funcs in one line lol
@@ -20,11 +20,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
// Helper class for bluetooth reciever.
public class BluetoothReceiver {
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final String NAME = "BluetoothReceiverApp";
private static final int REQUEST_ENABLE_BT = 1;
private static final int REQUEST_PERMISSIONS = 2;
private Context context;
private BluetoothAdapter bluetoothAdapter;
@@ -22,6 +22,7 @@ import java.util.ArrayList;
import java.util.List;
import java.util.zip.DataFormatException;
// Class to receive bluetooth transmissions from other devices
public class BluetoothReceiverFragment extends Fragment {
private BluetoothReceiver bluetoothReceiver;
private Button startListeningButton;
@@ -21,10 +21,9 @@ import java.util.List;
import java.util.Set;
import java.util.UUID;
// Helper class with sending bluetooth scouting data
public class BluetoothSender {
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final int REQUEST_ENABLE_BT = 1;
private static final int REQUEST_PERMISSIONS = 2;
private Context context;
private BluetoothAdapter bluetoothAdapter;
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Set;
// Class to send scouting data over bluetooth.
public class BluetoothSenderFragment extends Fragment {
private BluetoothSender bluetoothSender;
private ListView deviceListView;
@@ -30,6 +30,7 @@ import java.util.EnumMap;
import java.util.Map;
import java.util.Random;
// Class to show the code transfer thing.
public class CodeGeneratorView extends Fragment {
private ImageView qrImage;
private SeekBar qrSpeedSlider;
@@ -17,6 +17,7 @@ import android.view.View;
import androidx.annotation.NonNull;
// Shows the progress of receiving data over codes.
public class CodeOverlayView extends View {
PointF[] points;
@@ -20,6 +20,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
// Background task for code scanning, to not slow down the scanner.
public class CodeScanTask extends AsyncTask<String, String, String>{
private Function<String, String> resultFunction = null;
private Bitmap image;
@@ -47,7 +47,7 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
//public class scannerView extends androidx.appcompat.widget.AppCompatImageView {
// Recieves data from the camera, scanning codes.
public class CodeScannerView extends Fragment {
private CodeOverlayView CodeOverlayView;
private Handler uiHandler;
@@ -1,14 +1,9 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Shader;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewTreeObserver;
@@ -18,6 +13,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Random;
// Unused. AI-generated dynamic wallpaper for 2025 season.
public class BackgroundView extends View {
private List<Circle> circles;
private Paint whitePaint;
@@ -1,14 +1,14 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import static com.ridgebotics.ridgescout.utility.Colors.candlestick_color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
// Shows the scale for a candlestick chart.
public class CandlestickHeader extends View {
private float absoluteMin = 0;
@@ -1,20 +1,20 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import static com.ridgebotics.ridgescout.utility.Colors.candlestick_color;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.RawDataType;
import com.ridgebotics.ridgescout.ui.data.DataProcessing;
import java.util.List;
// A single candlestick chart row.
public class CandlestickView extends View {
// Data points
@@ -181,7 +181,7 @@ public class CandlestickView extends View {
public int teamNum;
public void fromTeamData(List<DataType> teamData, Integer teamNum, float absmin, float absmax){
public void fromTeamData(List<RawDataType> teamData, Integer teamNum, float absmin, float absmax){
this.teamNum = teamNum;
int[] tmp_loc_bounds = DataProcessing.getNumberBounds(teamData);
int locmin = tmp_loc_bounds[0];
@@ -1,29 +1,17 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.appbar.MaterialToolbar;
import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.R;
import java.util.ArrayList;
import java.util.List;
// The notification view of a Custom dropdown notification
public class CustomSpinnerPopup extends TableLayout {
public CustomSpinnerPopup(Context context) {
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import static android.app.PendingIntent.getActivity;
@@ -16,6 +16,7 @@ import com.ridgebotics.ridgescout.R;
import java.util.List;
// The dropdown element of a custom spinner view.
public class CustomSpinnerView extends LinearLayout {
public interface onClickListener {
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Color;
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Color;
@@ -9,17 +9,14 @@ import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.input.FieldType;
import java.util.function.Function;
// Shows a display of the view in the view editor.
public class FieldDisplay extends ConstraintLayout {
public FieldDisplay(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -36,7 +33,6 @@ public class FieldDisplay extends ConstraintLayout {
public Button editButton;
// private View fieldView;
private LinearLayout buttonBox;
private ConstraintLayout box;
public View coloredBackground;
private LinearLayout fieldDisplayBox;
@@ -50,7 +46,6 @@ public class FieldDisplay extends ConstraintLayout {
editButton = findViewById(R.id.button_edit);
buttonBox = findViewById(R.id.buttons);
}
private ToggleTitleView toggleTitleView;
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui.scouting;
package com.ridgebotics.ridgescout.ui.views;
import android.annotation.SuppressLint;
import android.content.Context;
@@ -15,6 +15,7 @@ import android.widget.ImageView;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.utility.SettingsManager;
// Custom view to display a field position.
public class FieldPosView extends FrameLayout {
private int x = -1;
private int y = -1;
@@ -1,14 +1,11 @@
package com.ridgebotics.ridgescout.ui.scouting;
package com.ridgebotics.ridgescout.ui.views;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -1,14 +1,12 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -16,8 +14,8 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.frcTeam;
// Class for custom view displaying an event in the TBASelector.java
public class TBAEventOption extends LinearLayout {
public TBAEventOption(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui.scouting;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.util.AttributeSet;
@@ -9,6 +9,7 @@ import android.widget.TextView;
import com.ridgebotics.ridgescout.R;
// Unused. This would be almost the same as the Fieldpos field, except it would support multiple positions.
public class TallyCounterView extends LinearLayout {
private int count = 0;
private TextView countDisplay;
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Bitmap;
@@ -18,6 +18,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.frcTeam;
// A view for displaying information about a team.
public class TeamCard extends LinearLayout {
public TeamCard(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.graphics.Bitmap;
@@ -18,6 +18,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.frcTeam;
// A view that acts as a row specifically to display a team and their icon in a list formmt.
public class TeamListOption extends LinearLayout {
public TeamListOption(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -1,4 +1,4 @@
package com.ridgebotics.ridgescout.ui;
package com.ridgebotics.ridgescout.ui.views;
import static com.ridgebotics.ridgescout.utility.Colors.toggletitle_black_background;
import static com.ridgebotics.ridgescout.utility.Colors.toggletitle_no_background;
@@ -9,7 +9,6 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -18,6 +17,7 @@ import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
// The enable and disable button for match and pit scouting
public class ToggleTitleView extends ConstraintLayout {
public ToggleTitleView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
@@ -1,5 +1,6 @@
package com.ridgebotics.ridgescout.utility;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
@@ -11,7 +12,9 @@ import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
// Class to cause alerts and popups
public class AlertManager {
@SuppressLint("StaticFieldLeak")
public static Context context;
public static void init(Context c){
@@ -3,6 +3,8 @@ package com.ridgebotics.ridgescout.utility;
import android.os.Handler;
import android.os.Looper;
// Class to run a save function after a timeout of not calling the update function has been reached.
// Used for auto-saving in pit and match scouting.
public class AutoSaveManager {
public static final long AUTO_SAVE_DELAY = 2000; // 2 seconds
@@ -5,6 +5,7 @@ import static com.ridgebotics.ridgescout.utility.FileEditor.lengthHeaderBytes;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
// Class to decode the raw types from any of the scouting files
public class BuiltByteParser {
public static final Integer boolType = 0;
public static final Integer intType = 1;
@@ -5,6 +5,7 @@ import static com.ridgebotics.ridgescout.utility.FileEditor.lengthHeaderBytes;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
// Class to encode the raw types from any of the scouting files
public class ByteBuilder {
public static final int bool_id = 0;
public static final int int_id = 1;
@@ -2,6 +2,7 @@ package com.ridgebotics.ridgescout.utility;
import android.graphics.Color;
// Constants for most of the colors in the entire app.
public class Colors {
// Lists and stuff
public static final int color_found = 0x7f00ff00;
@@ -63,7 +64,7 @@ public class Colors {
// fileselector
public static final int fileselector_selected_color = 0x5000ff00;
public static final int fileselector_unselected_color = 0x5000ff00;
public static final int fileselector_unselected_color = 0x50006600;
// TBA
public static final int tba_previous = 0x30FF0000;
@@ -9,6 +9,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
// Static class to hold loaded data, for ease of access.
public class DataManager {
public static String evcode;
public static frcEvent event;
@@ -25,6 +25,7 @@ import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
// Helper class for binary editing
public final class FileEditor {
public final static String baseDir = "/data/data/com.ridgebotics.ridgescout/";
public static final byte internalDataVersion = 0x01;
@@ -15,6 +15,8 @@ import java.util.function.Function;
import javax.net.ssl.HttpsURLConnection;
// Class to retrieve team icon from TBA
// https://stackoverflow.com/questions/37510411/download-an-image-into-bitmap-file-in-android
public class ImageRequestTask extends AsyncTask<String, Void, Bitmap> {
@@ -6,6 +6,7 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
// Literally just sorting json
public class JSONUtil {
public static JSONArray sort(JSONArray array, Comparator c){
List asList = new ArrayList(array.length());
@@ -12,6 +12,8 @@ import java.util.function.Function;
import javax.net.ssl.HttpsURLConnection;
// Class to send an http request
// Used for TBA
public class RequestTask extends AsyncTask<String, String, String> {
private Function<String, String> resultFunction = null;
@@ -7,6 +7,8 @@ import org.tensorflow.lite.task.text.nlclassifier.NLClassifier;
import java.util.List;
// Class that runs a sentiment analysis model of a string
// This would be very cool if it was useful at all.
public class SentimentAnalysis {
private static NLClassifier textClassifier;
@@ -7,6 +7,7 @@ import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
// Helper class for loading settings from android SharedPreferences
public class SettingsManager {
public static SharedPreferences prefs;
public static SharedPreferences.Editor editor;
@@ -10,6 +10,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
// Class to cause the share popup.
public class SharePrompt {
public static void shareContent(Context context, String fileName, String content, String mimeType) {
shareContent(context, fileName, content.getBytes(), mimeType);
+1 -1
View File
@@ -36,7 +36,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.ridgebotics.ridgescout.ui.CustomSpinnerView
<com.ridgebotics.ridgescout.ui.views.CustomSpinnerView
android:id="@+id/data_type_dropdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -19,12 +19,12 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<com.ridgebotics.ridgescout.ui.CustomSpinnerView
<com.ridgebotics.ridgescout.ui.views.CustomSpinnerView
android:id="@+id/data_type_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<com.ridgebotics.ridgescout.ui.TeamCard
<com.ridgebotics.ridgescout.ui.views.TeamCard
android:id="@+id/data_team_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -38,7 +38,7 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.ridgebotics.ridgescout.ui.TeamCard
<com.ridgebotics.ridgescout.ui.views.TeamCard
android:id="@+id/match_team_card"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
@@ -73,7 +73,7 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.ridgebotics.ridgescout.ui.TeamCard
<com.ridgebotics.ridgescout.ui.views.TeamCard
android:id="@+id/pits_team_card"
android:layout_width="wrap_content"
android:layout_height="wrap_content"