Work on Field Editor, Improve capitalization of classes

This commit is contained in:
Michael Mikovsky
2025-04-04 14:15:30 -06:00
parent a371f2f449
commit eaa14adbd9
56 changed files with 849 additions and 733 deletions
+1 -1
View File
@@ -57,7 +57,7 @@ dependencies {
implementation(libs.constraintlayout) implementation(libs.constraintlayout)
implementation(libs.lifecycle.livedata.ktx) implementation(libs.lifecycle.livedata.ktx)
implementation(libs.lifecycle.viewmodel.ktx) implementation(libs.lifecycle.viewmodel.ktx)
implementation(libs.navigation.fragment) implementation("androidx.navigation:navigation-fragment:2.8.9")
implementation(libs.navigation.ui) implementation(libs.navigation.ui)
implementation(libs.preference) implementation(libs.preference)
// implementation(libs.support.annotations) // implementation(libs.support.annotations)
@@ -3,16 +3,14 @@ package com.ridgebotics.ridgescout;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.MenuItem;
import com.ridgebotics.ridgescout.databinding.ActivityMainBinding; import com.ridgebotics.ridgescout.databinding.ActivityMainBinding;
import com.ridgebotics.ridgescout.scoutingData.fields; import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.utility.SentimentAnalysis; import com.ridgebotics.ridgescout.utility.SentimentAnalysis;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController; import androidx.navigation.NavController;
import androidx.navigation.NavOptions; import androidx.navigation.NavOptions;
@@ -21,8 +19,7 @@ import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI; import androidx.navigation.ui.NavigationUI;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.google.android.material.navigation.NavigationBarView;
import java.util.Objects; import java.util.Objects;
import java.util.TimeZone; import java.util.TimeZone;
@@ -41,15 +38,15 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
settingsManager.prefs = this.getSharedPreferences( SettingsManager.prefs = this.getSharedPreferences(
"com.ridgebotics.ridgescout", Context.MODE_PRIVATE); "com.ridgebotics.ridgescout", Context.MODE_PRIVATE);
if(!fileEditor.fileExist(fields.matchFieldsFilename)){ if(!FileEditor.fileExist(Fields.matchFieldsFilename)){
fields.save(fields.matchFieldsFilename, fields.default_match_fields); Fields.save(Fields.matchFieldsFilename, Fields.default_match_fields);
} }
if(!fileEditor.fileExist(fields.pitsFieldsFilename)){ if(!FileEditor.fileExist(Fields.pitsFieldsFilename)){
fields.save(fields.pitsFieldsFilename, fields.default_pit_fields); Fields.save(Fields.pitsFieldsFilename, Fields.default_pit_fields);
} }
@@ -1,22 +1,22 @@
package com.ridgebotics.ridgescout.scoutingData; package com.ridgebotics.ridgescout.scoutingData;
import com.ridgebotics.ridgescout.types.input.checkboxType; import com.ridgebotics.ridgescout.types.input.CheckboxType;
import com.ridgebotics.ridgescout.types.input.dropdownType; import com.ridgebotics.ridgescout.types.input.DropdownType;
import com.ridgebotics.ridgescout.types.input.fieldposType; import com.ridgebotics.ridgescout.types.input.FieldposType;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.types.input.numberType; import com.ridgebotics.ridgescout.types.input.NumberType;
import com.ridgebotics.ridgescout.types.input.tallyType; import com.ridgebotics.ridgescout.types.input.TallyType;
import com.ridgebotics.ridgescout.types.input.textType; import com.ridgebotics.ridgescout.types.input.TextType;
import com.ridgebotics.ridgescout.types.input.sliderType; import com.ridgebotics.ridgescout.types.input.SliderType;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.UUID; import java.util.UUID;
public class fields { public class Fields {
// public static ScoutingVersion sv = new ScoutingVersion(); // public static ScoutingVersion sv = new ScoutingVersion();
public static final String matchFieldsFilename = "matches.fields"; public static final String matchFieldsFilename = "matches.fields";
@@ -26,77 +26,77 @@ public class fields {
return UUID.randomUUID().toString(); return UUID.randomUUID().toString();
} }
public static final inputType[][] default_match_fields = new inputType[][] { public static final FieldType[][] default_match_fields = new FieldType[][] {
{ {
new fieldposType(uuid(),"Auto start pos", "Where does the robot start its auto?", new int[]{0,0}), new FieldposType(uuid(),"Auto start pos", "Where does the robot start its auto?", new int[]{0,0}),
new tallyType(uuid(),"Auto L4 Coral", "How many coral did this robot score in L4 during auto?", 0), new TallyType(uuid(),"Auto L4 Coral", "How many coral did this robot score in L4 during auto?", 0),
new tallyType(uuid(),"Auto L3 Coral", "How many coral did this robot score in L3 during auto?", 0), new TallyType(uuid(),"Auto L3 Coral", "How many coral did this robot score in L3 during auto?", 0),
new tallyType(uuid(),"Auto L2 Coral", "How many coral did this robot score in L2 during auto?", 0), new TallyType(uuid(),"Auto L2 Coral", "How many coral did this robot score in L2 during auto?", 0),
new tallyType(uuid(),"Auto L1/Trough Coral", "How many coral did this robot score in L1 during auto?", 0), new TallyType(uuid(),"Auto L1/Trough Coral", "How many coral did this robot score in L1 during auto?", 0),
new tallyType(uuid(),"Auto Processor Algae", "How many algae did this robot score in the Barge during auto?", 0), new TallyType(uuid(),"Auto Processor Algae", "How many algae did this robot score in the Barge during auto?", 0),
new tallyType(uuid(),"Auto Barge Algae", "How many algae did this robot score in the Barge during auto?", 0), new TallyType(uuid(),"Auto Barge Algae", "How many algae did this robot score in the Barge during auto?", 0),
new dropdownType(uuid(),"Auto Quality", "How did the robot drive during auto?", new String[]{"Smooth", "Jittery"}, 0), new DropdownType(uuid(),"Auto Quality", "How did the robot drive during auto?", new String[]{"Smooth", "Jittery"}, 0),
new textType(uuid(),"Auto Comments", "Anything interesting about auto", ""), new TextType(uuid(),"Auto Comments", "Anything interesting about auto", ""),
new tallyType(uuid(),"Teleop L4 Coral", "How many coral did this robot score in L4 during auto?", 0), new TallyType(uuid(),"Teleop L4 Coral", "How many coral did this robot score in L4 during auto?", 0),
new tallyType(uuid(),"Teleop L3 Coral", "How many coral did this robot score in L3 during auto?", 0), new TallyType(uuid(),"Teleop L3 Coral", "How many coral did this robot score in L3 during auto?", 0),
new tallyType(uuid(),"Teleop L2 Coral", "How many coral did this robot score in L2 during auto?", 0), new TallyType(uuid(),"Teleop L2 Coral", "How many coral did this robot score in L2 during auto?", 0),
new tallyType(uuid(),"Teleop L1 Coral", "How many coral did this robot score in L1 during auto?", 0), new TallyType(uuid(),"Teleop L1 Coral", "How many coral did this robot score in L1 during auto?", 0),
new tallyType(uuid(),"Teleop Processor Algae", "How many algae did this robot score in the Barge during auto?", 0), new TallyType(uuid(),"Teleop Processor Algae", "How many algae did this robot score in the Barge during auto?", 0),
new tallyType(uuid(),"Teleop Barge Algae", "How many algae did this robot score in the Barge during auto?", 0), new TallyType(uuid(),"Teleop Barge Algae", "How many algae did this robot score in the Barge during auto?", 0),
new checkboxType(uuid(),"Upper Algae Removal", "Did the robot remove upper Algae?", 0), new CheckboxType(uuid(),"Upper Algae Removal", "Did the robot remove upper Algae?", 0),
new checkboxType(uuid(),"Lower Algae Removal", "Did the robot remove lower Algae?", 0), new CheckboxType(uuid(),"Lower Algae Removal", "Did the robot remove lower Algae?", 0),
new dropdownType(uuid(),"Teleop Quality", "How did the robot drive during Teleop?", new String[]{"Smooth", "Jittery"}, 0), new DropdownType(uuid(),"Teleop Quality", "How did the robot drive during Teleop?", new String[]{"Smooth", "Jittery"}, 0),
new textType(uuid(),"Teleop Comments", "Anything interesting about Teleop", ""), new TextType(uuid(),"Teleop Comments", "Anything interesting about Teleop", ""),
new dropdownType(uuid(),"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(uuid(),"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(uuid(),"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 DropdownType(uuid(),"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(uuid(),"Other Comments", "Any other comments you have", "") new TextType(uuid(),"Other Comments", "Any other comments you have", "")
} }
}; };
public static final inputType[][] default_pit_fields = new inputType[][] { public static final FieldType[][] default_pit_fields = new FieldType[][] {
{ {
new dropdownType(uuid(),"Drivetrain type", "What type of drivetrain does this team have?", new String[]{"Swerve Drive", "Tank Drive (Differential)", "Other, Info in comments"}, 0), new DropdownType(uuid(),"Drivetrain type", "What type of drivetrain does this team have?", new String[]{"Swerve Drive", "Tank Drive (Differential)", "Other, Info in comments"}, 0),
new dropdownType(uuid(),"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(uuid(),"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(uuid(),"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(uuid(),"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(uuid(),"Score Area", "What does this robot score?", new String[]{"Only Algae", "Mostly Algae", "Both", "Mostly Coral", "Only Coral"}, 0), new DropdownType(uuid(),"Score Area", "What does this robot score?", new String[]{"Only Algae", "Mostly Algae", "Both", "Mostly Coral", "Only Coral"}, 0),
new checkboxType(uuid(),"L4 Scoring", "Will the robot score in Layer 4?", 0), new CheckboxType(uuid(),"L4 Scoring", "Will the robot score in Layer 4?", 0),
new checkboxType(uuid(),"L3 Scoring", "Will the robot score in Layer 3?", 0), new CheckboxType(uuid(),"L3 Scoring", "Will the robot score in Layer 3?", 0),
new checkboxType(uuid(),"L2 Scoring", "Will the robot score in Layer 3?", 0), new CheckboxType(uuid(),"L2 Scoring", "Will the robot score in Layer 3?", 0),
new checkboxType(uuid(),"L1/Trough Scoring", "Will the robot score in Layer 1?", 0), new CheckboxType(uuid(),"L1/Trough Scoring", "Will the robot score in Layer 1?", 0),
new checkboxType(uuid(),"Processor Scoring", "Will the robot score in the Processor?", 0), new CheckboxType(uuid(),"Processor Scoring", "Will the robot score in the Processor?", 0),
new checkboxType(uuid(),"Barge Scoring", "Will the robot score algae in the Barge?", 0), new CheckboxType(uuid(),"Barge Scoring", "Will the robot score algae in the Barge?", 0),
new dropdownType(uuid(),"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 DropdownType(uuid(),"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(uuid(),"Auto Capability", "What autos does this team have?", ""), new TextType(uuid(),"Auto Capability", "What autos does this team have?", ""),
new dropdownType(uuid(),"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(uuid(),"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(uuid(),"Climb type", "What does the robot do to climb?", new String[]{"No Climb", "Only Shallow", "Only Deep", "Both Shallow and Deep"}, 0), new DropdownType(uuid(),"Climb type", "What does the robot do to climb?", new String[]{"No Climb", "Only Shallow", "Only Deep", "Both Shallow and Deep"}, 0),
new dropdownType(uuid(),"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 DropdownType(uuid(),"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(uuid(),"Cool Comments", "Is there anything cool about the robot?", ""), new TextType(uuid(),"Cool Comments", "Is there anything cool about the robot?", ""),
new textType(uuid(),"Comments", "Things go here", "Day 1:\n\nDay 2:\n\nDay 3:\n") new TextType(uuid(),"Comments", "Things go here", "Day 1:\n\nDay 2:\n\nDay 3:\n")
} }
}; };
public static boolean save(String filename, inputType[][] values){ public static boolean save(String filename, FieldType[][] values){
try { try {
ByteBuilder bb = new ByteBuilder(); ByteBuilder bb = new ByteBuilder();
for (int i = 0; i < values.length; i++) { for (int i = 0; i < values.length; i++) {
bb.addRaw(127, save_version(values[i])); bb.addRaw(127, save_version(values[i]));
} }
fileEditor.writeFile(filename, bb.build()); FileEditor.writeFile(filename, bb.build());
return true; return true;
}catch (ByteBuilder.buildingException e) { }catch (ByteBuilder.buildingException e) {
AlertManager.error(e); AlertManager.error(e);
@@ -105,7 +105,7 @@ public class fields {
} }
} }
private static byte[] save_version(inputType[] values) throws ByteBuilder.buildingException { private static byte[] save_version(FieldType[] values) throws ByteBuilder.buildingException {
ByteBuilder bb = new ByteBuilder(); ByteBuilder bb = new ByteBuilder();
for(int i =0; i < values.length; i++){ for(int i =0; i < values.length; i++){
bb.addRaw(values[i].get_byte_id(), values[i].encode()); bb.addRaw(values[i].get_byte_id(), values[i].encode());
@@ -113,15 +113,15 @@ public class fields {
return bb.build(); return bb.build();
} }
public static inputType[][] load(String filename){ public static FieldType[][] load(String filename){
byte[] bytes = fileEditor.readFile(filename); byte[] bytes = FileEditor.readFile(filename);
// System.out.println(bytes); // System.out.println(bytes);
try { try {
BuiltByteParser bbp = new BuiltByteParser(bytes); BuiltByteParser bbp = new BuiltByteParser(bytes);
ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse(); ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse();
inputType[][] values = new inputType[objects.size()][]; FieldType[][] values = new FieldType[objects.size()][];
for(int i = 0 ; i < objects.size(); i++){ for(int i = 0 ; i < objects.size(); i++){
values[i] = load_version((byte[]) objects.get(i).get()); values[i] = load_version((byte[]) objects.get(i).get());
@@ -135,35 +135,35 @@ public class fields {
} }
} }
private static inputType[] load_version(byte[] bytes) throws BuiltByteParser.byteParsingExeption{ private static FieldType[] load_version(byte[] bytes) throws BuiltByteParser.byteParsingExeption{
BuiltByteParser bbp = new BuiltByteParser(bytes); BuiltByteParser bbp = new BuiltByteParser(bytes);
ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse(); ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse();
inputType[] output = new inputType[objects.size()]; FieldType[] output = new FieldType[objects.size()];
for(int i = 0 ; i < objects.size(); i++){ for(int i = 0 ; i < objects.size(); i++){
BuiltByteParser.parsedObject obj = objects.get(i); BuiltByteParser.parsedObject obj = objects.get(i);
inputType t = null; FieldType t = null;
switch (obj.getType()){ switch (obj.getType()){
case inputType.slider_type_id: case FieldType.slider_type_id:
t = new sliderType(); t = new SliderType();
break; break;
case inputType.dropdownType: case FieldType.dropdownType:
t = new dropdownType(); t = new DropdownType();
break; break;
case inputType.notesType: case FieldType.notesType:
t = new textType(); t = new TextType();
break; break;
case inputType.tallyType: case FieldType.tallyType:
t = new tallyType(); t = new TallyType();
break; break;
case inputType.numberType: case FieldType.numberType:
t = new numberType(); t = new NumberType();
break; break;
case inputType.checkboxType: case FieldType.checkboxType:
t = new checkboxType(); t = new CheckboxType();
break; break;
case inputType.fieldposType: case FieldType.fieldposType:
t = new fieldposType(); t = new FieldposType();
break; break;
} }
@@ -1,14 +1,14 @@
package com.ridgebotics.ridgescout.scoutingData; package com.ridgebotics.ridgescout.scoutingData;
import com.ridgebotics.ridgescout.scoutingData.transfer.transferType; import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
import com.ridgebotics.ridgescout.types.ScoutingArray; import com.ridgebotics.ridgescout.types.ScoutingArray;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intArrType; import com.ridgebotics.ridgescout.types.data.IntArrType;
import com.ridgebotics.ridgescout.types.data.stringType; import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -19,7 +19,7 @@ public class ScoutingDataWriter {
// private static final int int_type_id = 255; // private static final int int_type_id = 255;
// private static final int string_type_id = 254; // 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, DataType[] data){
ByteBuilder bb = new ByteBuilder(); ByteBuilder bb = new ByteBuilder();
try { try {
bb.addInt(version); bb.addInt(version);
@@ -40,7 +40,7 @@ public class ScoutingDataWriter {
} }
} }
byte[] bytes = bb.build(); byte[] bytes = bb.build();
fileEditor.writeFile(filename, bytes); FileEditor.writeFile(filename, bytes);
return true; return true;
} catch (ByteBuilder.buildingException e) { } catch (ByteBuilder.buildingException e) {
AlertManager.error(e); AlertManager.error(e);
@@ -55,12 +55,12 @@ public class ScoutingDataWriter {
public ScoutingArray data; public ScoutingArray data;
} }
public static ParsedScoutingDataResult load(String filename, inputType[][] values , transferType[][] transferValues){ public static ParsedScoutingDataResult load(String filename, FieldType[][] values , TransferType[][] transferValues){
byte[] bytes = fileEditor.readFile(filename); byte[] bytes = FileEditor.readFile(filename);
BuiltByteParser bbp = new BuiltByteParser(bytes); BuiltByteParser bbp = new BuiltByteParser(bytes);
try { try {
ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse(); ArrayList<BuiltByteParser.parsedObject> objects = bbp.parse();
dataType[] dataTypes = new dataType[objects.size()-2]; DataType[] dataTypes = new DataType[objects.size()-2];
int version = ((int)objects.get(0).get()); int version = ((int)objects.get(0).get());
// System.out.println(version); // System.out.println(version);
@@ -69,17 +69,17 @@ public class ScoutingDataWriter {
for(int i = 0; i < values[version].length; i++){ for(int i = 0; i < values[version].length; i++){
switch (objects.get(i+2).getType()){ switch (objects.get(i+2).getType()){
case 1: // Int case 1: // Int
dataTypes[i] = intType.newNull(values[version][i].name); dataTypes[i] = IntType.newNull(values[version][i].name);
dataTypes[i].forceSetValue(objects.get(i+2).get()); dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded INT: " + values[version][i].name + ", ("+ dataTypes[i].get() +")"); System.out.println("Loaded INT: " + values[version][i].name + ", ("+ dataTypes[i].get() +")");
break; break;
case 2: // String case 2: // String
dataTypes[i] = stringType.newNull(values[version][i].name); dataTypes[i] = StringType.newNull(values[version][i].name);
dataTypes[i].forceSetValue(objects.get(i+2).get()); dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded STR: " + values[version][i].name + ", ("+ dataTypes[i].get() +")"); System.out.println("Loaded STR: " + values[version][i].name + ", ("+ dataTypes[i].get() +")");
break; break;
case 3: // Int array case 3: // Int array
dataTypes[i] = intArrType.newNull(values[version][i].name); dataTypes[i] = IntArrType.newNull(values[version][i].name);
dataTypes[i].forceSetValue(objects.get(i+2).get()); dataTypes[i].forceSetValue(objects.get(i+2).get());
System.out.println("Loaded intARR: " + values[version][i].name + ", ("+ Arrays.toString((int[])dataTypes[i].get()) +")"); System.out.println("Loaded intARR: " + values[version][i].name + ", ("+ Arrays.toString((int[])dataTypes[i].get()) +")");
break; break;
@@ -1,8 +1,8 @@
package com.ridgebotics.ridgescout.scoutingData.transfer; package com.ridgebotics.ridgescout.scoutingData.transfer;
public class createTransferType extends transferType { public class CreateTransferType extends TransferType {
public transferValue getType() {return transferValue.CREATE;} public transferValue getType() {return transferValue.CREATE;}
public createTransferType(String name){ public CreateTransferType(String name){
super(name); super(name);
} }
} }
@@ -1,8 +1,8 @@
package com.ridgebotics.ridgescout.scoutingData.transfer; package com.ridgebotics.ridgescout.scoutingData.transfer;
public class directTransferType extends transferType { public class DirectTransferType extends TransferType {
public transferValue getType() {return transferValue.DIRECT;} public transferValue getType() {return transferValue.DIRECT;}
public directTransferType(String name){ public DirectTransferType(String name){
super(name); super(name);
} }
} }
@@ -1,20 +1,20 @@
package com.ridgebotics.ridgescout.scoutingData.transfer; package com.ridgebotics.ridgescout.scoutingData.transfer;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
public abstract class transferType { public abstract class TransferType {
public enum transferValue { public enum transferValue {
DIRECT, DIRECT,
CREATE CREATE
} }
public String name; public String name;
public abstract transferValue getType(); public abstract transferValue getType();
public transferType(String name){ public TransferType(String name){
this.name = name; this.name = name;
} }
private static inputType get_input_type_by_name(inputType[] values, String name){ private static FieldType get_input_type_by_name(FieldType[] values, String name){
for(inputType it : values){ for(FieldType it : values){
if(it.name.equals(name)){ if(it.name.equals(name)){
return it; return it;
} }
@@ -22,16 +22,16 @@ public abstract class transferType {
return null; return null;
} }
public static transferType[][] get_transfer_values(inputType[][] values) { public static TransferType[][] get_transfer_values(FieldType[][] values) {
transferType[][] output = new transferType[values.length][]; TransferType[][] output = new TransferType[values.length][];
for(int a = 1; a < values.length; a++){ for(int a = 1; a < values.length; a++){
transferType[] v = new transferType[values[a].length]; TransferType[] v = new TransferType[values[a].length];
for(int b = 0; b < values[a].length; b++){ for(int b = 0; b < values[a].length; b++){
String name = values[a][b].name; String name = values[a][b].name;
if(get_input_type_by_name(values[a-1], name) != null){ if(get_input_type_by_name(values[a-1], name) != null){
v[b] = new directTransferType(name); v[b] = new DirectTransferType(name);
}else{ }else{
v[b] = new createTransferType(name); v[b] = new CreateTransferType(name);
} }
} }
output[a-1] = v; output[a-1] = v;
@@ -1,21 +1,21 @@
package com.ridgebotics.ridgescout.types; package com.ridgebotics.ridgescout.types;
import com.ridgebotics.ridgescout.scoutingData.transfer.createTransferType; import com.ridgebotics.ridgescout.scoutingData.transfer.CreateTransferType;
import com.ridgebotics.ridgescout.scoutingData.transfer.directTransferType; import com.ridgebotics.ridgescout.scoutingData.transfer.DirectTransferType;
import com.ridgebotics.ridgescout.scoutingData.transfer.transferType; import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.types.data.stringType; import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
public class ScoutingArray { public class ScoutingArray {
public int version; public int version;
public dataType[] array; public DataType[] array;
public inputType[][] values; public FieldType[][] values;
public int latest_version_num; public int latest_version_num;
public transferType[][] transfer_values; public TransferType[][] transfer_values;
public ScoutingArray(int version, dataType[] array, inputType[][] values, transferType[][] transfer_values){ public ScoutingArray(int version, DataType[] array, FieldType[][] values, TransferType[][] transfer_values){
this.version = version; this.version = version;
this.array = array; this.array = array;
this.values = values; this.values = values;
@@ -23,24 +23,24 @@ public class ScoutingArray {
this.transfer_values = transfer_values; this.transfer_values = transfer_values;
} }
public ScoutingArray(int version, dataType[] array, inputType[][] values){ public ScoutingArray(int version, DataType[] array, FieldType[][] values){
this(version, array, values, transferType.get_transfer_values(values)); this(version, array, values, TransferType.get_transfer_values(values));
} }
public void update(){ public void update(){
while(version<latest_version_num){ while(version<latest_version_num){
dataType[] new_values = new dataType[transfer_values[version].length]; DataType[] new_values = new DataType[transfer_values[version].length];
for(int i = 0; i < transfer_values[version].length; i++){ for(int i = 0; i < transfer_values[version].length; i++){
transferType tv = transfer_values[version][i]; TransferType tv = transfer_values[version][i];
switch (tv.getType()){ switch (tv.getType()){
case DIRECT: case DIRECT:
new_values[i] = direct_transfer((directTransferType) tv); new_values[i] = direct_transfer((DirectTransferType) tv);
continue; continue;
// case RENAME: // case RENAME:
// new_values[i] = rename_transfer((renameTransferType) tv); // new_values[i] = rename_transfer((renameTransferType) tv);
// continue; // continue;
case CREATE: case CREATE:
new_values[i] = create_transfer((createTransferType) tv); new_values[i] = create_transfer((CreateTransferType) tv);
continue; continue;
} }
} }
@@ -50,8 +50,8 @@ public class ScoutingArray {
} }
} }
private inputType get_input_type_by_name(int version, String name){ private FieldType get_input_type_by_name(int version, String name){
for(inputType it : values[version]){ for(FieldType it : values[version]){
if(it.name.equals(name)){ if(it.name.equals(name)){
return it; return it;
} }
@@ -59,8 +59,8 @@ public class ScoutingArray {
return null; return null;
} }
private dataType get_data_type_by_name(String name){ private DataType get_data_type_by_name(String name){
for(dataType dt : array){ for(DataType dt : array){
if(dt.getName().equals(name)){ if(dt.getName().equals(name)){
return dt; return dt;
} }
@@ -68,7 +68,7 @@ public class ScoutingArray {
return null; return null;
} }
private dataType direct_transfer(directTransferType tv){ private DataType direct_transfer(DirectTransferType tv){
return get_data_type_by_name(tv.name); return get_data_type_by_name(tv.name);
} }
@@ -78,13 +78,13 @@ public class ScoutingArray {
// return dt; // return dt;
// } // }
private dataType create_transfer(createTransferType tv){ private DataType create_transfer(CreateTransferType tv){
inputType it = get_input_type_by_name(version+1, tv.name); FieldType it = get_input_type_by_name(version+1, tv.name);
switch (it.getValueType()){ switch (it.getValueType()){
case NUM: case NUM:
return intType.newNull(it.name); return IntType.newNull(it.name);
case STRING: case STRING:
return stringType.newNull(it.name); return StringType.newNull(it.name);
} }
return null; return null;
} }
@@ -3,25 +3,24 @@ package com.ridgebotics.ridgescout.types;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects; import java.util.Objects;
public class file { public class ScoutingFile {
public static final int typecode = 255; public static final int typecode = 255;
public String filename; public String filename;
public byte[] data; public byte[] data;
public file(){} public ScoutingFile(){}
public file(String filename){ public ScoutingFile(String filename){
this(filename, fileEditor.readFile(filename)); this(filename, FileEditor.readFile(filename));
} }
public file(String filename, byte[] data){ public ScoutingFile(String filename, byte[] data){
this.filename = filename; this.filename = filename;
this.data = data; this.data = data;
} }
@@ -37,7 +36,7 @@ public class file {
// bb.addRaw(255, fileEditor.getByteBlock(data, i*65535, (i+1)*65535)); // bb.addRaw(255, fileEditor.getByteBlock(data, i*65535, (i+1)*65535));
// } // }
bb.addRaw(255, Objects.requireNonNull(fileEditor.readFile(filename))); bb.addRaw(255, Objects.requireNonNull(FileEditor.readFile(filename)));
return bb.build(); return bb.build();
@@ -47,11 +46,11 @@ public class file {
} }
} }
public static file decode(byte[] bytes){ public static ScoutingFile decode(byte[] bytes){
try{ try{
ArrayList<BuiltByteParser.parsedObject> objects = new BuiltByteParser(bytes).parse(); ArrayList<BuiltByteParser.parsedObject> objects = new BuiltByteParser(bytes).parse();
file f = new file(); ScoutingFile f = new ScoutingFile();
f.filename = (String) objects.get(0).get(); f.filename = (String) objects.get(0).get();
@@ -74,6 +73,6 @@ public class file {
public boolean write(){ public boolean write(){
if(data == null || filename == null) return false; if(data == null || filename == null) return false;
return fileEditor.writeFile(filename, data); return FileEditor.writeFile(filename, data);
} }
} }
@@ -1,10 +1,6 @@
package com.ridgebotics.ridgescout.types.data; package com.ridgebotics.ridgescout.types.data;
import androidx.annotation.NonNull; public abstract class DataType {
import org.jetbrains.annotations.NotNull;
public abstract class dataType {
public enum valueTypes { public enum valueTypes {
NUM, NUM,
NUMARR, NUMARR,
@@ -30,7 +26,7 @@ public abstract class dataType {
public String getName() {return name;} public String getName() {return name;}
public dataType(String name){ public DataType(String name){
this.name = name; this.name = name;
} }
} }
@@ -1,6 +1,6 @@
package com.ridgebotics.ridgescout.types.data; package com.ridgebotics.ridgescout.types.data;
public class intArrType extends dataType { public class IntArrType extends DataType {
public static final int[] nullval = new int[]{255, 255}; public static final int[] nullval = new int[]{255, 255};
// public static final int unselectedval = 1; // public static final int unselectedval = 1;
@@ -23,13 +23,13 @@ public class intArrType extends dataType {
forceSetValue((int[]) value); forceSetValue((int[]) value);
} }
public intArrType(String name, int[] value) { public IntArrType(String name, int[] value) {
super(name); super(name);
set(value); set(value);
} }
public static intArrType newNull(String name){ public static IntArrType newNull(String name){
return new intArrType(name, nullval); return new IntArrType(name, nullval);
} }
// public static intType newUnselected(String name){ // public static intType newUnselected(String name){
@@ -1,6 +1,6 @@
package com.ridgebotics.ridgescout.types.data; package com.ridgebotics.ridgescout.types.data;
public class intType extends dataType { public class IntType extends DataType {
public static final int nullval = 255; public static final int nullval = 255;
// public static final int unselectedval = 1; // public static final int unselectedval = 1;
@@ -23,13 +23,13 @@ public class intType extends dataType {
forceSetValue((int) value); forceSetValue((int) value);
} }
public intType(String name, int value) { public IntType(String name, int value) {
super(name); super(name);
set(value); set(value);
} }
public static intType newNull(String name){ public static IntType newNull(String name){
final intType a = new intType(name, 0); final IntType a = new IntType(name, 0);
a.forceSetValue(nullval); a.forceSetValue(nullval);
return a; return a;
} }
@@ -1,6 +1,6 @@
package com.ridgebotics.ridgescout.types.data; package com.ridgebotics.ridgescout.types.data;
public class stringType extends dataType{ public class StringType extends DataType {
public static final String nullval = "null"; public static final String nullval = "null";
// public static final String unselectedval = ""; // public static final String unselectedval = "";
@@ -23,13 +23,13 @@ public class stringType extends dataType{
forceSetValue(value); forceSetValue(value);
} }
public stringType(String name, String value) { public StringType(String name, String value) {
super(name); super(name);
forceSetValue(value); forceSetValue(value);
} }
public static stringType newNull(String name){ public static StringType newNull(String name){
final stringType a = new stringType(name, ""); final StringType a = new StringType(name, "");
a.forceSetValue(nullval); a.forceSetValue(nullval);
return a; return a;
} }
@@ -2,14 +2,11 @@ package com.ridgebotics.ridgescout.types;
import static com.ridgebotics.ridgescout.utility.DataManager.event; import static com.ridgebotics.ridgescout.utility.DataManager.event;
import android.widget.TableRow;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -37,8 +34,8 @@ public class frcEvent {
bb.addRaw(frcMatch.typecode, match.encode()); bb.addRaw(frcMatch.typecode, match.encode());
} }
if(settingsManager.getEVCode().equals("unset")){ if(SettingsManager.getEVCode().equals("unset")){
settingsManager.setEVCode(eventCode); SettingsManager.setEVCode(eventCode);
} }
return bb.build(); return bb.build();
@@ -1,20 +1,12 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.CheckBox; import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.charts.PieChart; import com.github.mikephil.charting.charts.PieChart;
@@ -25,8 +17,8 @@ import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet; import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.data.PieEntry;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -34,14 +26,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class checkboxType extends inputType { public class CheckboxType extends FieldType {
public int get_byte_id() {return checkboxType;} public int get_byte_id() {return checkboxType;}
public inputTypes getInputType(){return inputTypes.CHECKBOX;} public inputTypes getInputType(){return inputTypes.CHECKBOX;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public checkboxType(){}; public CheckboxType(){};
public String get_type_name(){return "Checkbox";} public String get_type_name(){return "Checkbox";}
public checkboxType(String UUID, String name, String description, int isChecked){ public CheckboxType(String UUID, String name, String description, int isChecked){
super(UUID, name, description); super(UUID, name, description);
this.default_value = isChecked; this.default_value = isChecked;
} }
@@ -59,7 +51,7 @@ public class checkboxType extends inputType {
public CheckBox checkBox = null; public CheckBox checkBox = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
checkBox = new CheckBox(context); checkBox = new CheckBox(context);
checkBox.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6); checkBox.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6);
checkBox.setText(name); checkBox.setText(name);
@@ -72,7 +64,7 @@ public class checkboxType extends inputType {
} }
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(checkBox == null) return; if(checkBox == null) return;
if(intType.isNull((int) value)){ if(IntType.isNull((int) value)){
nullify(); nullify();
return; return;
} }
@@ -86,10 +78,10 @@ public class checkboxType extends inputType {
isBlank = true; isBlank = true;
checkBox.setVisibility(View.GONE); checkBox.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(checkBox == null) return null; if(checkBox == null) return null;
if(checkBox.getVisibility() == View.GONE) return new intType(name, intType.nullval); if(checkBox.getVisibility() == View.GONE) return new IntType(name, IntType.nullval);
return new intType(name, checkBox.isChecked() ? 1 : 0); return new IntType(name, checkBox.isChecked() ? 1 : 0);
} }
@@ -97,7 +89,7 @@ public class checkboxType extends inputType {
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
CheckBox cb = new CheckBox(parent.getContext()); CheckBox cb = new CheckBox(parent.getContext());
cb.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6); cb.setTextAppearance(com.google.android.material.R.style.TextAppearance_MaterialComponents_Headline6);
@@ -112,7 +104,7 @@ public class checkboxType extends inputType {
public static int[] colors = {0x7f00ff00, 0x7f7f0000}; public static int[] colors = {0x7f00ff00, 0x7f7f0000};
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
PieChart chart = new PieChart(parent.getContext()); PieChart chart = new PieChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -152,7 +144,7 @@ public class checkboxType extends inputType {
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -212,11 +204,11 @@ public class checkboxType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
return (int) data.get() == 1 ? "true" : "false"; return (int) data.get() == 1 ? "true" : "false";
} }
} }
@@ -1,8 +1,5 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import static com.google.android.material.internal.ContextUtils.getActivity;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.view.Gravity; import android.view.Gravity;
@@ -12,10 +9,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.Nullable; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.types.data.dataType;
import com.ridgebotics.ridgescout.types.data.intType;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView; import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -34,15 +29,15 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class dropdownType extends inputType { public class DropdownType extends FieldType {
public String[] text_options; public String[] text_options;
public int get_byte_id() {return dropdownType;} public int get_byte_id() {return dropdownType;}
public inputTypes getInputType(){return inputTypes.DROPDOWN;} public inputTypes getInputType(){return inputTypes.DROPDOWN;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public dropdownType(){}; public DropdownType(){};
public String get_type_name(){return "Dropdown";} public String get_type_name(){return "Dropdown";}
public dropdownType(String UUID, String name, String description, String[] text_options, int defaultSelIndex){ public DropdownType(String UUID, String name, String description, String[] text_options, int defaultSelIndex){
super(UUID, name, description); super(UUID, name, description);
this.text_options = text_options; this.text_options = text_options;
this.default_value = defaultSelIndex; this.default_value = defaultSelIndex;
@@ -60,7 +55,7 @@ public class dropdownType extends inputType {
public CustomSpinnerView dropdown = null; public CustomSpinnerView dropdown = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
dropdown = new CustomSpinnerView(context); dropdown = new CustomSpinnerView(context);
ArrayList<String> iconSpinnerItems = new ArrayList<>(Arrays.asList(text_options)); ArrayList<String> iconSpinnerItems = new ArrayList<>(Arrays.asList(text_options));
@@ -76,7 +71,7 @@ public class dropdownType extends inputType {
} }
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(dropdown == null) return; if(dropdown == null) return;
if(intType.isNull((int) value)){ if(IntType.isNull((int) value)){
nullify(); nullify();
return; return;
} }
@@ -90,10 +85,10 @@ public class dropdownType extends inputType {
isBlank = true; isBlank = true;
dropdown.setVisibility(View.GONE); dropdown.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(dropdown == null) return null; if(dropdown == null) return null;
if(dropdown.getVisibility() == View.GONE) return new intType(name, intType.nullval); if(dropdown.getVisibility() == View.GONE) return new IntType(name, IntType.nullval);
return new intType(name, dropdown.getIndex()); return new IntType(name, dropdown.getIndex());
} }
@@ -101,7 +96,7 @@ public class dropdownType extends inputType {
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
TextView tv = new TextView(parent.getContext()); TextView tv = new TextView(parent.getContext());
tv.setLayoutParams(new FrameLayout.LayoutParams( tv.setLayoutParams(new FrameLayout.LayoutParams(
@@ -137,7 +132,7 @@ public class dropdownType extends inputType {
return colors; return colors;
} }
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
PieChart chart = new PieChart(parent.getContext()); PieChart chart = new PieChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -171,7 +166,7 @@ public class dropdownType extends inputType {
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -237,11 +232,11 @@ public class dropdownType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
return text_options[(int) data.get()]; return text_options[(int) data.get()];
} }
} }
@@ -1,11 +1,10 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -13,7 +12,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public abstract class inputType { public abstract class FieldType {
public static final int slider_type_id = 255; public static final int slider_type_id = 255;
public static final int dropdownType = 254; public static final int dropdownType = 254;
public static final int notesType = 253; public static final int notesType = 253;
@@ -36,11 +35,11 @@ public abstract class inputType {
public String description; public String description;
public Object default_value; public Object default_value;
public abstract inputTypes getInputType(); public abstract inputTypes getInputType();
public abstract dataType.valueTypes getValueType(); public abstract DataType.valueTypes getValueType();
public abstract Object get_fallback_value(); public abstract Object get_fallback_value();
public abstract int get_byte_id(); public abstract int get_byte_id();
public inputType(){} public FieldType(){}
public inputType(String UUID, String name, String description){ public FieldType(String UUID, String name, String description){
this.UUID = UUID; this.UUID = UUID;
this.name = name; this.name = name;
this.description = description; this.description = description;
@@ -79,34 +78,34 @@ public abstract class inputType {
// public abstract dataType[] getConfig(); // public abstract dataType[] getConfig();
// public abstract void setConfig(dataType[] config); // public abstract void setConfig(dataType[] config);
public abstract View createView(Context context, Function<dataType, Integer> onUpdate); public abstract View createView(Context context, Function<DataType, Integer> onUpdate);
public boolean isBlank = false; public boolean isBlank = false;
public abstract void nullify(); public abstract void nullify();
public void setViewValue(dataType type){setViewValue(type.get());} public void setViewValue(DataType type){setViewValue(type.get());}
public abstract void setViewValue(Object value); public abstract void setViewValue(Object value);
public abstract dataType getViewValue(); public abstract DataType getViewValue();
public abstract void add_individual_view(LinearLayout parent, dataType data); public abstract void add_individual_view(LinearLayout parent, DataType data);
public abstract void add_compiled_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_history_view(LinearLayout parent, DataType[] data);
public abstract void addDataToTable(LinearLayout parent, List<dataType>[] data); public abstract void addDataToTable(LinearLayout parent, List<DataType>[] data);
public abstract String toString(dataType data); public abstract String toString(DataType data);
public int[] getNumberBounds(List<dataType>[] data){ public int[] getNumberBounds(List<DataType>[] data){
int min = Integer.MAX_VALUE; int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE; int max = Integer.MIN_VALUE;
for(int teamNum = 0; teamNum < data.length; teamNum++){ for(int teamNum = 0; teamNum < data.length; teamNum++){
if(data[teamNum] == null) continue; if(data[teamNum] == null) continue;
for(int i = 0; i < data[teamNum].size(); i++){ for(int i = 0; i < data[teamNum].size(); i++){
dataType dataPoint = data[teamNum].get(i); DataType dataPoint = data[teamNum].get(i);
if(dataPoint == null || dataPoint.getValueType() != getValueType()) continue; if(dataPoint == null || dataPoint.getValueType() != getValueType()) continue;
int num = (int) dataPoint.get(); int num = (int) dataPoint.get();
if(num > max) max = num; if(num > max) max = num;
@@ -1,29 +1,19 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import static android.text.InputType.TYPE_CLASS_NUMBER;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView;
import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.data.LineDataSet;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.IntArrType;
import com.ridgebotics.ridgescout.types.data.intArrType;
import com.ridgebotics.ridgescout.types.data.intType;
import com.ridgebotics.ridgescout.ui.scouting.FieldPosView; import com.ridgebotics.ridgescout.ui.scouting.FieldPosView;
import com.ridgebotics.ridgescout.ui.scouting.MultiFieldPosView; import com.ridgebotics.ridgescout.ui.scouting.MultiFieldPosView;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
@@ -33,14 +23,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class fieldposType extends inputType { public class FieldposType extends FieldType {
public int get_byte_id() {return fieldposType;} public int get_byte_id() {return fieldposType;}
public inputTypes getInputType(){return inputTypes.FIELDPOS;} public inputTypes getInputType(){return inputTypes.FIELDPOS;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public fieldposType(){} public FieldposType(){}
public String get_type_name(){return "Field Pos";} public String get_type_name(){return "Field Pos";}
public fieldposType(String UUID, String name, String description, int[] default_value){ public FieldposType(String UUID, String name, String description, int[] default_value){
super(UUID, name, description); super(UUID, name, description);
this.default_value = default_value; this.default_value = default_value;
} }
@@ -63,9 +53,9 @@ public class fieldposType extends inputType {
public FieldPosView field = null; public FieldPosView field = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
field = new FieldPosView(context, pos -> { field = new FieldPosView(context, pos -> {
onUpdate.apply(new intArrType(name, pos)); onUpdate.apply(new IntArrType(name, pos));
}); });
setViewValue(default_value); setViewValue(default_value);
return field; return field;
@@ -74,7 +64,7 @@ public class fieldposType extends inputType {
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(field == null) return; if(field == null) return;
if(intArrType.isNull((int[]) value)){ if(IntArrType.isNull((int[]) value)){
nullify(); nullify();
return; return;
} }
@@ -91,15 +81,15 @@ public class fieldposType extends inputType {
isBlank = true; isBlank = true;
field.setVisibility(View.GONE); field.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(field == null) return null; if(field == null) return null;
if(field.getVisibility() == View.GONE) return intArrType.newNull(name); if(field.getVisibility() == View.GONE) return IntArrType.newNull(name);
return new intArrType(name, field.getPos()); return new IntArrType(name, field.getPos());
} }
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
FieldPosView fp = new FieldPosView(parent.getContext()); FieldPosView fp = new FieldPosView(parent.getContext());
@@ -142,7 +132,7 @@ public class fieldposType extends inputType {
return entries; return entries;
} }
private static int findMin(dataType[] data){ private static int findMin(DataType[] data){
int min = (int)data[0].get(); int min = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min) if((int)data[i].get() < min)
@@ -150,7 +140,7 @@ public class fieldposType extends inputType {
return min; return min;
} }
private static int findMax(dataType[] data){ private static int findMax(DataType[] data){
int max = (int)data[0].get(); int max = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max) if((int)data[i].get() > max)
@@ -158,7 +148,7 @@ public class fieldposType extends inputType {
return max; return max;
} }
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
MultiFieldPosView mfp = new MultiFieldPosView(parent.getContext()); MultiFieldPosView mfp = new MultiFieldPosView(parent.getContext());
for(int i = 0; i < data.length; i++){ for(int i = 0; i < data.length; i++){
if(data[i].isNull()) continue; if(data[i].isNull()) continue;
@@ -167,7 +157,7 @@ public class fieldposType extends inputType {
parent.addView(mfp); parent.addView(mfp);
} }
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -224,11 +214,11 @@ public class fieldposType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
int[] intarr = (int[]) data.get(); int[] intarr = (int[]) data.get();
return "[" + intarr[0] + "," + intarr[1] + "]"; 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 android.text.InputType.TYPE_CLASS_NUMBER;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.text.Editable; import android.text.Editable;
@@ -20,8 +19,8 @@ import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.data.LineDataSet;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -29,14 +28,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class numberType extends inputType { public class NumberType extends FieldType {
public int get_byte_id() {return numberType;} public int get_byte_id() {return numberType;}
public inputTypes getInputType(){return inputTypes.NUMBER;} public inputTypes getInputType(){return inputTypes.NUMBER;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public numberType(){} public NumberType(){}
public String get_type_name(){return "Number";} public String get_type_name(){return "Number";}
public numberType(String UUID, String name, String description, int default_value){ public NumberType(String UUID, String name, String description, int default_value){
super(UUID, name, description); super(UUID, name, description);
this.default_value = default_value; this.default_value = default_value;
} }
@@ -58,7 +57,7 @@ public class numberType extends inputType {
public EditText num = null; public EditText num = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
num = new EditText(context); num = new EditText(context);
num.setInputType(TYPE_CLASS_NUMBER); num.setInputType(TYPE_CLASS_NUMBER);
num.addTextChangedListener(new TextWatcher() { num.addTextChangedListener(new TextWatcher() {
@@ -76,7 +75,7 @@ public class numberType extends inputType {
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(num == null) return; if(num == null) return;
if(intType.isNull((int)value)){ if(IntType.isNull((int)value)){
nullify(); nullify();
return; return;
} }
@@ -89,28 +88,28 @@ public class numberType extends inputType {
isBlank = true; isBlank = true;
num.setVisibility(View.GONE); num.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(num == null) return null; if(num == null) return null;
if(num.getVisibility() == View.GONE) return intType.newNull(name); if(num.getVisibility() == View.GONE) return IntType.newNull(name);
return new intType(name, safeToInt(num.getText().toString())); return new IntType(name, safeToInt(num.getText().toString()));
} }
private int safeToInt(String num){ private int safeToInt(String num){
if(num.isEmpty()) if(num.isEmpty())
return intType.nullval; return IntType.nullval;
try { try {
return Integer.parseInt(num); return Integer.parseInt(num);
}catch (NumberFormatException e){ }catch (NumberFormatException e){
return intType.nullval; return IntType.nullval;
} }
} }
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
TextView tv = new TextView(parent.getContext()); TextView tv = new TextView(parent.getContext());
@@ -157,7 +156,7 @@ public class numberType extends inputType {
return entries; return entries;
} }
private static int findMin(dataType[] data){ private static int findMin(DataType[] data){
int min = (int)data[0].get(); int min = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min) if((int)data[i].get() < min)
@@ -165,7 +164,7 @@ public class numberType extends inputType {
return min; return min;
} }
private static int findMax(dataType[] data){ private static int findMax(DataType[] data){
int max = (int)data[0].get(); int max = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max) if((int)data[i].get() > max)
@@ -173,7 +172,7 @@ public class numberType extends inputType {
return max; return max;
} }
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -252,7 +251,7 @@ public class numberType extends inputType {
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -310,11 +309,11 @@ public class numberType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
return String.valueOf((int) data.get()); return String.valueOf((int) data.get());
} }
} }
@@ -9,8 +9,8 @@ import android.widget.LinearLayout;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -25,17 +25,17 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class sliderType extends inputType { public class SliderType extends FieldType {
// public int defaultValue; // public int defaultValue;
public int min; public int min;
public int max; public int max;
public int get_byte_id() {return slider_type_id;} public int get_byte_id() {return slider_type_id;}
public inputTypes getInputType(){return inputTypes.SLIDER;} public inputTypes getInputType(){return inputTypes.SLIDER;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public sliderType(){}; public SliderType(){};
public String get_type_name(){return "Slider";} public String get_type_name(){return "Slider";}
public sliderType(String UUID, String name, String description, int defaultValue, int min, int max){ public SliderType(String UUID, String name, String description, int defaultValue, int min, int max){
super(UUID, name, description); super(UUID, name, description);
this.default_value = defaultValue; this.default_value = defaultValue;
this.min = min; this.min = min;
@@ -61,7 +61,7 @@ public class sliderType extends inputType {
public Slider slider = null; public Slider slider = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
slider = new Slider(context); slider = new Slider(context);
setViewValue(default_value); setViewValue(default_value);
slider.setStepSize((float) 1 / (max-min)); slider.setStepSize((float) 1 / (max-min));
@@ -76,7 +76,7 @@ public class sliderType extends inputType {
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(slider == null) return; if(slider == null) return;
if(intType.isNull((int) value)){ if(IntType.isNull((int) value)){
nullify(); nullify();
return; return;
} }
@@ -96,10 +96,10 @@ public class sliderType extends inputType {
slider.setVisibility(View.VISIBLE); slider.setVisibility(View.VISIBLE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(slider == null) return null; if(slider == null) return null;
if(slider.getVisibility() == View.GONE) return intType.newNull(name); if(slider.getVisibility() == View.GONE) return IntType.newNull(name);
return new intType(name, min + (int) (slider.getValue() * (max-min))); return new IntType(name, min + (int) (slider.getValue() * (max-min)));
} }
public void nullify(){ public void nullify(){
isBlank = true; isBlank = true;
@@ -111,7 +111,7 @@ public class sliderType extends inputType {
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
Slider slider = new Slider(parent.getContext()); Slider slider = new Slider(parent.getContext());
@@ -165,7 +165,7 @@ public class sliderType extends inputType {
return entries; return entries;
} }
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -241,7 +241,7 @@ public class sliderType extends inputType {
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -296,11 +296,11 @@ public class sliderType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
return String.valueOf((int) data.get()); return String.valueOf((int) data.get());
} }
} }
@@ -1,6 +1,5 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.view.Gravity; import android.view.Gravity;
@@ -10,8 +9,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.intType; import com.ridgebotics.ridgescout.types.data.IntType;
import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView; import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
@@ -26,14 +25,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class tallyType extends inputType { public class TallyType extends FieldType {
public int get_byte_id() {return tallyType;} public int get_byte_id() {return tallyType;}
public inputTypes getInputType(){return inputTypes.TALLY;} public inputTypes getInputType(){return inputTypes.TALLY;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.NUM;} public DataType.valueTypes getValueType(){return DataType.valueTypes.NUM;}
public Object get_fallback_value(){return 0;} public Object get_fallback_value(){return 0;}
public tallyType(){} public TallyType(){}
public String get_type_name(){return "Tally";} public String get_type_name(){return "Tally";}
public tallyType(String UUID, String name, String description, int default_value){ public TallyType(String UUID, String name, String description, int default_value){
super(UUID, name, description); super(UUID, name, description);
this.default_value = default_value; this.default_value = default_value;
} }
@@ -55,7 +54,7 @@ public class tallyType extends inputType {
public TallyCounterView tally = null; public TallyCounterView tally = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
tally = new TallyCounterView(context); tally = new TallyCounterView(context);
tally.setOnCountChangedListener(n -> onUpdate.apply(getViewValue())); tally.setOnCountChangedListener(n -> onUpdate.apply(getViewValue()));
@@ -67,7 +66,7 @@ public class tallyType extends inputType {
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(tally == null) return; if(tally == null) return;
if(intType.isNull((int)value)){ if(IntType.isNull((int)value)){
nullify(); nullify();
return; return;
} }
@@ -80,10 +79,10 @@ public class tallyType extends inputType {
isBlank = true; isBlank = true;
tally.setVisibility(View.GONE); tally.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(tally == null) return null; if(tally == null) return null;
if(tally.getVisibility() == View.GONE) return intType.newNull(name); if(tally.getVisibility() == View.GONE) return IntType.newNull(name);
return new intType(name, tally.getValue()); return new IntType(name, tally.getValue());
} }
@@ -91,7 +90,7 @@ public class tallyType extends inputType {
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
TextView tv = new TextView(parent.getContext()); TextView tv = new TextView(parent.getContext());
@@ -138,7 +137,7 @@ public class tallyType extends inputType {
return entries; return entries;
} }
private static int findMin(dataType[] data){ private static int findMin(DataType[] data){
int min = (int)data[0].get(); int min = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() < min) if((int)data[i].get() < min)
@@ -146,7 +145,7 @@ public class tallyType extends inputType {
return min; return min;
} }
private static int findMax(dataType[] data){ private static int findMax(DataType[] data){
int max = (int)data[0].get(); int max = (int)data[0].get();
for(int i = 1; i < data.length; i++) for(int i = 1; i < data.length; i++)
if((int)data[i].get() > max) if((int)data[i].get() > max)
@@ -154,7 +153,7 @@ public class tallyType extends inputType {
return max; return max;
} }
public void add_compiled_view(LinearLayout parent, dataType[] data){ public void add_compiled_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -233,7 +232,7 @@ public class tallyType extends inputType {
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -291,14 +290,14 @@ public class tallyType extends inputType {
parent.addView(chart); parent.addView(chart);
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
int min = Integer.MAX_VALUE; int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE; int max = Integer.MIN_VALUE;
for(int teamNum = 0; teamNum < data.length; teamNum++){ for(int teamNum = 0; teamNum < data.length; teamNum++){
if(data[teamNum] == null) continue; if(data[teamNum] == null) continue;
for(int i = 0; i < data[teamNum].size(); i++){ for(int i = 0; i < data[teamNum].size(); i++){
dataType dataPoint = data[teamNum].get(i); DataType dataPoint = data[teamNum].get(i);
if(dataPoint == null || dataPoint.getValueType() != getValueType()) continue; if(dataPoint == null || dataPoint.getValueType() != getValueType()) continue;
int num = (int) dataPoint.get(); int num = (int) dataPoint.get();
System.out.println(num); System.out.println(num);
@@ -310,7 +309,7 @@ public class tallyType extends inputType {
AlertManager.alert("Results","Min: " + min + " Max: " + max); AlertManager.alert("Results","Min: " + min + " Max: " + max);
} }
public String toString(dataType data){ public String toString(DataType data){
return String.valueOf((int) data.get()); return String.valueOf((int) data.get());
} }
} }
@@ -1,6 +1,5 @@
package com.ridgebotics.ridgescout.types.input; package com.ridgebotics.ridgescout.types.input;
import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.text.Editable; import android.text.Editable;
@@ -13,8 +12,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.data.stringType; import com.ridgebotics.ridgescout.types.data.StringType;
import com.ridgebotics.ridgescout.utility.SentimentAnalysis; import com.ridgebotics.ridgescout.utility.SentimentAnalysis;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
@@ -28,14 +27,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Function; import java.util.function.Function;
public class textType extends inputType { public class TextType extends FieldType {
public int get_byte_id() {return notesType;} public int get_byte_id() {return notesType;}
public inputTypes getInputType(){return inputTypes.NOTES_INPUT;} public inputTypes getInputType(){return inputTypes.NOTES_INPUT;}
public dataType.valueTypes getValueType(){return dataType.valueTypes.STRING;} public DataType.valueTypes getValueType(){return DataType.valueTypes.STRING;}
public Object get_fallback_value(){return "<no-notes>";} public Object get_fallback_value(){return "<no-notes>";}
public textType(){} public TextType(){}
public textType(String UUID, String name, String description, String default_text){ public TextType(String UUID, String name, String description, String default_text){
super(UUID, name, description); super(UUID, name, description);
this.default_value = default_text; this.default_value = default_text;
} }
@@ -69,7 +68,7 @@ public class textType extends inputType {
public EditText text = null; public EditText text = null;
public View createView(Context context, Function<dataType, Integer> onUpdate){ public View createView(Context context, Function<DataType, Integer> onUpdate){
text = new EditText(context); text = new EditText(context);
text.setText((String)default_value); text.setText((String)default_value);
text.addTextChangedListener(new TextWatcher() { text.addTextChangedListener(new TextWatcher() {
@@ -83,7 +82,7 @@ public class textType extends inputType {
} }
public void setViewValue(Object value) { public void setViewValue(Object value) {
if(text == null) return; if(text == null) return;
if(stringType.isNull((String) value)){ if(StringType.isNull((String) value)){
nullify(); nullify();
return; return;
} }
@@ -95,16 +94,16 @@ public class textType extends inputType {
isBlank = true; isBlank = true;
text.setVisibility(View.GONE); text.setVisibility(View.GONE);
} }
public dataType getViewValue(){ public DataType getViewValue(){
if(text == null) return null; if(text == null) return null;
if(text.getVisibility() == View.GONE) return new stringType(name, stringType.nullval); if(text.getVisibility() == View.GONE) return new StringType(name, StringType.nullval);
return new stringType(name, text.getText().toString()); return new StringType(name, text.getText().toString());
} }
public void add_individual_view(LinearLayout parent, dataType data){ public void add_individual_view(LinearLayout parent, DataType data){
if(data.isNull()) return; if(data.isNull()) return;
TextView tv = new TextView(parent.getContext()); TextView tv = new TextView(parent.getContext());
tv.setLayoutParams(new FrameLayout.LayoutParams( tv.setLayoutParams(new FrameLayout.LayoutParams(
@@ -134,7 +133,7 @@ public class textType extends inputType {
TextView positive_text; TextView positive_text;
public void add_compiled_view(LinearLayout parent, dataType[] data) { public void add_compiled_view(LinearLayout parent, DataType[] data) {
positive_mean = 0; positive_mean = 0;
count = 0; count = 0;
@@ -163,7 +162,7 @@ public class textType extends inputType {
} }
public void add_history_view(LinearLayout parent, dataType[] data){ public void add_history_view(LinearLayout parent, DataType[] data){
LineChart chart = new LineChart(parent.getContext()); LineChart chart = new LineChart(parent.getContext());
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams( FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -222,11 +221,11 @@ public class textType extends inputType {
} }
public void addDataToTable(LinearLayout parent, List<dataType>[] data){ public void addDataToTable(LinearLayout parent, List<DataType>[] data){
} }
public String toString(dataType data){ public String toString(DataType data){
return String.valueOf(data.get()); return String.valueOf(data.get());
} }
} }
@@ -1,27 +1,19 @@
package com.ridgebotics.ridgescout.ui; package com.ridgebotics.ridgescout.ui;
import static android.app.PendingIntent.getActivity; import static android.app.PendingIntent.getActivity;
import static com.ridgebotics.ridgescout.utility.settingsManager.getEditor;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.os.Bundle;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentManager;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.ViewCustomSpinnerBinding;
import java.util.ArrayList;
import java.util.List; import java.util.List;
public class CustomSpinnerView extends LinearLayout { public class CustomSpinnerView extends LinearLayout {
@@ -7,7 +7,6 @@ import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.LinearLayout;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
@@ -15,7 +14,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
public class FieldBorderedRow extends TableRow { public class FieldBorderedRow extends TableRow {
public FieldBorderedRow(Context context, @Nullable AttributeSet attrs) { public FieldBorderedRow(Context context, @Nullable AttributeSet attrs) {
@@ -55,7 +54,7 @@ public class FieldBorderedRow extends TableRow {
); );
} }
public void fromField(inputType field){ public void fromField(FieldType field){
((TextView) findViewById(R.id.field_option_name)).setText(field.name); ((TextView) findViewById(R.id.field_option_name)).setText(field.name);
((TextView) findViewById(R.id.field_option_type)).setText(field.get_type_name()); ((TextView) findViewById(R.id.field_option_type)).setText(field.get_type_name());
} }
@@ -15,7 +15,7 @@ import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
public class FieldDisplay extends ConstraintLayout { public class FieldDisplay extends ConstraintLayout {
public FieldDisplay(Context context, @Nullable AttributeSet attrs) { public FieldDisplay(Context context, @Nullable AttributeSet attrs) {
@@ -28,7 +28,7 @@ public class FieldDisplay extends ConstraintLayout {
init(context); init(context);
} }
private inputType field; private FieldType field;
public Button editButton; public Button editButton;
@@ -46,13 +46,15 @@ public class FieldDisplay extends ConstraintLayout {
box = findViewById(R.id.field_box); box = findViewById(R.id.field_box);
coloredBackground = findViewById(R.id.field_background); coloredBackground = findViewById(R.id.field_background);
editButton = findViewById(R.id.button_edit);
titleText = findViewById(R.id.field_title); titleText = findViewById(R.id.field_title);
typeText = findViewById(R.id.field_description); typeText = findViewById(R.id.field_description);
buttonBox = findViewById(R.id.buttons); buttonBox = findViewById(R.id.buttons);
} }
public void setInputType(inputType field){ public void setInputType(FieldType field){
this.field = field; this.field = field;
titleText.setText(field.name); titleText.setText(field.name);
@@ -87,6 +89,10 @@ public class FieldDisplay extends ConstraintLayout {
findViewById(R.id.buttons).setVisibility(View.GONE); findViewById(R.id.buttons).setVisibility(View.GONE);
} }
public FieldType getField(){
return field;
}
public void setColor(int color){ public void setColor(int color){
Drawable drawable = box.getBackground(); Drawable drawable = box.getBackground();
drawable.mutate(); drawable.mutate();
@@ -17,7 +17,6 @@ import com.ridgebotics.ridgescout.databinding.FragmentTeamSelectorBinding;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor;
import java.util.Arrays; import java.util.Arrays;
@@ -2,7 +2,6 @@ package com.ridgebotics.ridgescout.ui.data;
import static android.view.View.GONE; import static android.view.View.GONE;
import static android.view.View.TEXT_ALIGNMENT_VIEW_END;
import static android.view.View.VISIBLE; import static android.view.View.VISIBLE;
import static androidx.navigation.fragment.FragmentKt.findNavController; import static androidx.navigation.fragment.FragmentKt.findNavController;
@@ -11,34 +10,23 @@ import static com.ridgebotics.ridgescout.utility.DataManager.event;
import static com.ridgebotics.ridgescout.utility.DataManager.match_latest_values; import static com.ridgebotics.ridgescout.utility.DataManager.match_latest_values;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TableRow;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.scoutingData.fields;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.FieldBorderedRow; import com.ridgebotics.ridgescout.ui.FieldBorderedRow;
import com.ridgebotics.ridgescout.ui.TeamListOption; import com.ridgebotics.ridgescout.ui.TeamListOption;
import com.ridgebotics.ridgescout.ui.settings.FieldsFragment;
import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding; import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
import com.ridgebotics.ridgescout.ui.TeamSelectorFragment;
import com.ridgebotics.ridgescout.utility.fileEditor;
import com.ridgebotics.ridgescout.types.frcEvent;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -62,7 +50,7 @@ public class DataFragment extends Fragment {
return root; return root;
} }
option = settingsManager.getDataMode(); option = SettingsManager.getDataMode();
binding.dataTypeDropdown.setTitle("Data type"); binding.dataTypeDropdown.setTitle("Data type");
binding.dataTypeDropdown.setOptions(List.of(new String[]{ binding.dataTypeDropdown.setOptions(List.of(new String[]{
@@ -70,7 +58,7 @@ public class DataFragment extends Fragment {
}), option); }), option);
binding.dataTypeDropdown.setOnClickListener((item, index) -> { binding.dataTypeDropdown.setOnClickListener((item, index) -> {
option = index; option = index;
settingsManager.setDataMode(option); SettingsManager.setDataMode(option);
reload_views(); reload_views();
}); });
@@ -1,9 +1,6 @@
package com.ridgebotics.ridgescout.ui.data; 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.DataManager.evcode; import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.event; import static com.ridgebotics.ridgescout.utility.DataManager.event;
import static com.ridgebotics.ridgescout.utility.DataManager.match_latest_values; import static com.ridgebotics.ridgescout.utility.DataManager.match_latest_values;
@@ -21,21 +18,13 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentDataBinding;
import com.ridgebotics.ridgescout.databinding.FragmentDataFieldDataBinding; import com.ridgebotics.ridgescout.databinding.FragmentDataFieldDataBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter; import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
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.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.fileEditor;
import com.ridgebotics.ridgescout.utility.settingsManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
public class FieldDataFragment extends Fragment { public class FieldDataFragment extends Fragment {
@@ -61,10 +50,10 @@ public class FieldDataFragment extends Fragment {
Thread t = new Thread(() -> { Thread t = new Thread(() -> {
List<dataType>[] data = new ArrayList[event.teams.size()]; List<DataType>[] data = new ArrayList[event.teams.size()];
for (int teamIndex = 0; teamIndex < event.teams.size(); teamIndex++) { for (int teamIndex = 0; teamIndex < event.teams.size(); teamIndex++) {
List<String> filenames = new ArrayList<>(List.of(fileEditor.getMatchesByTeamNum(evcode, event.teams.get(teamIndex).teamNumber))); List<String> filenames = new ArrayList<>(List.of(FileEditor.getMatchesByTeamNum(evcode, event.teams.get(teamIndex).teamNumber)));
filenames.removeAll(rescout_list); filenames.removeAll(rescout_list);
for (int i = 0; i < filenames.size(); i++) { for (int i = 0; i < filenames.size(); i++) {
@@ -14,24 +14,20 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentDataTeamsBinding; import com.ridgebotics.ridgescout.databinding.FragmentDataTeamsBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter; import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.google.android.material.divider.MaterialDivider;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -60,14 +56,14 @@ public class TeamsFragment extends Fragment {
options.add("Compiled"); options.add("Compiled");
options.add("History"); options.add("History");
binding.dataTypeSpinner.setOptions(options, settingsManager.getTeamsDataMode()); binding.dataTypeSpinner.setOptions(options, SettingsManager.getTeamsDataMode());
binding.dataTypeSpinner.setOnClickListener((item, index) -> { binding.dataTypeSpinner.setOnClickListener((item, index) -> {
settingsManager.setTeamsDataMode(index); SettingsManager.setTeamsDataMode(index);
loadTeam(index); loadTeam(index);
}); });
loadTeam(settingsManager.getTeamsDataMode()); loadTeam(SettingsManager.getTeamsDataMode());
return binding.getRoot(); return binding.getRoot();
} }
@@ -117,7 +113,7 @@ public class TeamsFragment extends Fragment {
// ll.addView(new MaterialDivider(getContext())); // ll.addView(new MaterialDivider(getContext()));
if(!fileEditor.fileExist(filename)){ if(!FileEditor.fileExist(filename)){
TextView tv = new TextView(getContext()); TextView tv = new TextView(getContext());
tv.setLayoutParams(new FrameLayout.LayoutParams( tv.setLayoutParams(new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT,
@@ -173,7 +169,7 @@ public class TeamsFragment extends Fragment {
public void add_match_data(frcTeam team, int mode){ public void add_match_data(frcTeam team, int mode){
binding.matchArea.removeAllViews(); binding.matchArea.removeAllViews();
binding.individualViewSelector.setVisibility(View.GONE); binding.individualViewSelector.setVisibility(View.GONE);
String[] files = fileEditor.getMatchesByTeamNum(evcode, team.teamNumber); String[] files = FileEditor.getMatchesByTeamNum(evcode, team.teamNumber);
if(files.length == 0){ if(files.length == 0){
TextView tv = new TextView(getContext()); TextView tv = new TextView(getContext());
@@ -281,7 +277,7 @@ public class TeamsFragment extends Fragment {
public void add_compiled_views(String[] files){ public void add_compiled_views(String[] files){
dataType[][] data = new dataType[match_latest_values.length][files.length]; DataType[][] data = new DataType[match_latest_values.length][files.length];
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
try { try {
ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues);
@@ -316,7 +312,7 @@ public class TeamsFragment extends Fragment {
public void add_history_views(String[] files){ public void add_history_views(String[] files){
dataType[][] data = new dataType[match_latest_values.length][files.length]; DataType[][] data = new DataType[match_latest_values.length][files.length];
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
try { try {
ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psda = ScoutingDataWriter.load(files[i], match_values, match_transferValues);
@@ -1,18 +1,13 @@
package com.ridgebotics.ridgescout.ui.scouting; package com.ridgebotics.ridgescout.ui.scouting;
import static android.widget.LinearLayout.HORIZONTAL;
import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.DataManager.event; import static com.ridgebotics.ridgescout.utility.DataManager.event;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.text.InputType; import android.text.InputType;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ScrollView; import android.widget.ScrollView;
@@ -21,17 +16,16 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingEventBinding; import com.ridgebotics.ridgescout.databinding.FragmentScoutingEventBinding;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView; import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcEvent;
import com.ridgebotics.ridgescout.types.frcMatch; import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -74,7 +68,7 @@ public class EventFragment extends Fragment {
public void add_pit_scouting(frcEvent event){ public void add_pit_scouting(frcEvent event){
if(settingsManager.getCustomEvents()){ if(SettingsManager.getCustomEvents()){
binding.teamsMinusBtn.setVisibility(View.VISIBLE); binding.teamsMinusBtn.setVisibility(View.VISIBLE);
binding.teamsMinusBtn.setOnClickListener(view -> removeTeam()); binding.teamsMinusBtn.setOnClickListener(view -> removeTeam());
binding.teamsPlusBtn.setVisibility(View.VISIBLE); binding.teamsPlusBtn.setVisibility(View.VISIBLE);
@@ -106,7 +100,7 @@ public class EventFragment extends Fragment {
text.setText(String.valueOf(num)); text.setText(String.valueOf(num));
final String filename = event.eventCode + "-" + num + ".pitscoutdata"; final String filename = event.eventCode + "-" + num + ".pitscoutdata";
if(fileEditor.fileExist(filename)){ if(FileEditor.fileExist(filename)){
final boolean[] rescout = {DataManager.rescout_list.contains(filename)}; final boolean[] rescout = {DataManager.rescout_list.contains(filename)};
text.setBackgroundColor(rescout[0] ? color_rescout : color_found); text.setBackgroundColor(rescout[0] ? color_rescout : color_found);
@@ -137,7 +131,7 @@ public class EventFragment extends Fragment {
public void add_match_scouting(frcEvent event){ public void add_match_scouting(frcEvent event){
if(settingsManager.getCustomEvents()){ if(SettingsManager.getCustomEvents()){
binding.matchesMinusBtn.setVisibility(View.VISIBLE); binding.matchesMinusBtn.setVisibility(View.VISIBLE);
binding.matchesMinusBtn.setOnClickListener(view -> removeMatch()); binding.matchesMinusBtn.setOnClickListener(view -> removeMatch());
binding.matchesPlusBtn.setVisibility(View.VISIBLE); binding.matchesPlusBtn.setVisibility(View.VISIBLE);
@@ -177,7 +171,7 @@ public class EventFragment extends Fragment {
text.setText(String.valueOf(team_num)); text.setText(String.valueOf(team_num));
final String filename = event.eventCode + "-" + match.matchIndex + "-" + alliance_position + "-" + team_num + ".matchscoutdata"; final String filename = event.eventCode + "-" + match.matchIndex + "-" + alliance_position + "-" + team_num + ".matchscoutdata";
if(fileEditor.fileExist(filename)){ if(FileEditor.fileExist(filename)){
final boolean[] rescout = {DataManager.rescout_list.contains(filename)}; final boolean[] rescout = {DataManager.rescout_list.contains(filename)};
text.setBackgroundColor(rescout[0] ? color_rescout : color_found); text.setBackgroundColor(rescout[0] ? color_rescout : color_found);
@@ -258,7 +252,7 @@ public class EventFragment extends Fragment {
team.startingYear = safeToInt(startingYear.getText().toString()); team.startingYear = safeToInt(startingYear.getText().toString());
event.teams.add(team); event.teams.add(team);
fileEditor.setEvent(event); FileEditor.setEvent(event);
reloadTable(); reloadTable();
}); });
@@ -289,7 +283,7 @@ public class EventFragment extends Fragment {
if(!(index >= 0 && index < teamNums.size())) return; if(!(index >= 0 && index < teamNums.size())) return;
event.teams.remove(index); event.teams.remove(index);
fileEditor.setEvent(event); FileEditor.setEvent(event);
reloadTable(); reloadTable();
}); });
@@ -370,7 +364,7 @@ public class EventFragment extends Fragment {
}; };
event.matches.add(match); event.matches.add(match);
fileEditor.setEvent(event); FileEditor.setEvent(event);
reloadTable(); reloadTable();
}); });
@@ -400,7 +394,7 @@ public class EventFragment extends Fragment {
builder.setPositiveButton("OK", (dialogInterface, i) -> { builder.setPositiveButton("OK", (dialogInterface, i) -> {
if(dropdown.getIndex() == -1) return; if(dropdown.getIndex() == -1) return;
event.matches.remove(dropdown.getIndex()); event.matches.remove(dropdown.getIndex());
fileEditor.setEvent(event); FileEditor.setEvent(event);
reloadTable(); reloadTable();
}); });
@@ -16,18 +16,17 @@ import androidx.fragment.app.Fragment;
import com.google.android.material.divider.MaterialDivider; import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.ui.ToggleTitleView; import com.ridgebotics.ridgescout.ui.ToggleTitleView;
import com.ridgebotics.ridgescout.ui.settings.settingsFragment; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.utility.settingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingMatchBinding; import com.ridgebotics.ridgescout.databinding.FragmentScoutingMatchBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter; import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.frcMatch; import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.AutoSaveManager; import com.ridgebotics.ridgescout.utility.AutoSaveManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
public class MatchScoutingFragment extends Fragment { public class MatchScoutingFragment extends Fragment {
@@ -41,8 +40,8 @@ public class MatchScoutingFragment extends Fragment {
DataManager.reload_match_fields(); DataManager.reload_match_fields();
alliance_position = settingsManager.getAllyPos(); alliance_position = SettingsManager.getAllyPos();
username = settingsManager.getUsername(); username = SettingsManager.getUsername();
binding.username.setText(username); binding.username.setText(username);
binding.alliancePosText.setText(alliance_position); binding.alliancePosText.setText(alliance_position);
@@ -63,20 +62,20 @@ public class MatchScoutingFragment extends Fragment {
binding.nextButton.setOnClickListener(v -> { binding.nextButton.setOnClickListener(v -> {
if(edited) save(); if(edited) save();
settingsManager.setMatchNum(cur_match_num+1); SettingsManager.setMatchNum(cur_match_num+1);
cur_match_num += 1; cur_match_num += 1;
update_match_num(); update_match_num();
update_scouting_data(); update_scouting_data();
}); });
if(settingsManager.getEnableQuickAlliancePosChange()) if(SettingsManager.getEnableQuickAlliancePosChange())
binding.fileIndicator.setOnClickListener(v -> { binding.fileIndicator.setOnClickListener(v -> {
// if(e.getAction() != MotionEvent.ACTION_MOVE) return true; // if(e.getAction() != MotionEvent.ACTION_MOVE) return true;
// System.out.println(e.getAxisValue(0)); // System.out.println(e.getAxisValue(0));
if(edited) save(); if(edited) save();
alliance_position = incrementMatchPos(alliance_position); alliance_position = incrementMatchPos(alliance_position);
settingsManager.setAllyPos(alliance_position); SettingsManager.setAllyPos(alliance_position);
binding.alliancePosText.setText(alliance_position); binding.alliancePosText.setText(alliance_position);
update_match_num(); update_match_num();
@@ -86,7 +85,7 @@ public class MatchScoutingFragment extends Fragment {
binding.backButton.setOnClickListener(v -> { binding.backButton.setOnClickListener(v -> {
if(edited) save(); if(edited) save();
settingsManager.setMatchNum(cur_match_num-1); SettingsManager.setMatchNum(cur_match_num-1);
cur_match_num -= 1; cur_match_num -= 1;
update_match_num(); update_match_num();
update_scouting_data(); update_scouting_data();
@@ -96,11 +95,11 @@ public class MatchScoutingFragment extends Fragment {
// if(edited) save(); // if(edited) save();
// }); // });
cur_match_num = settingsManager.getMatchNum(); cur_match_num = SettingsManager.getMatchNum();
if(cur_match_num >= event.matches.size()) { if(cur_match_num >= event.matches.size()) {
cur_match_num = 0; cur_match_num = 0;
settingsManager.setMatchNum(0); SettingsManager.setMatchNum(0);
} }
update_match_num(); update_match_num();
@@ -300,7 +299,7 @@ public class MatchScoutingFragment extends Fragment {
binding.matchTeamCard.fromTeam(team); binding.matchTeamCard.fromTeam(team);
boolean new_file = !fileEditor.fileExist(filename); boolean new_file = !FileEditor.fileExist(filename);
if(asm.isRunning){ if(asm.isRunning){
asm.stop(); asm.stop();
@@ -330,7 +329,7 @@ public class MatchScoutingFragment extends Fragment {
public void default_fields(){ public void default_fields(){
for(int i = 0; i < DataManager.match_latest_values.length; i++){ for(int i = 0; i < DataManager.match_latest_values.length; i++){
inputType input = DataManager.match_latest_values[i]; FieldType input = DataManager.match_latest_values[i];
input.setViewValue(input.default_value); input.setViewValue(input.default_value);
titles[i].enable(); titles[i].enable();
@@ -342,7 +341,7 @@ public class MatchScoutingFragment extends Fragment {
public void get_fields(){ public void get_fields(){
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues);
dataType[] types = psdr.data.array; DataType[] types = psdr.data.array;
for(int i = 0; i < DataManager.match_latest_values.length; i++){ for(int i = 0; i < DataManager.match_latest_values.length; i++){
@@ -363,7 +362,7 @@ public class MatchScoutingFragment extends Fragment {
public void save_fields(){ public void save_fields(){
dataType[] types = new dataType[DataManager.match_latest_values.length]; DataType[] types = new DataType[DataManager.match_latest_values.length];
for(int i = 0; i < DataManager.match_latest_values.length; i++){ for(int i = 0; i < DataManager.match_latest_values.length; i++){
types[i] = DataManager.match_latest_values[i].getViewValue(); types[i] = DataManager.match_latest_values[i].getViewValue();
@@ -9,7 +9,6 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@@ -17,17 +16,16 @@ import androidx.fragment.app.Fragment;
import com.google.android.material.divider.MaterialDivider; import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.ui.ToggleTitleView; import com.ridgebotics.ridgescout.ui.ToggleTitleView;
import com.ridgebotics.ridgescout.ui.settings.settingsFragment;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingPitBinding; import com.ridgebotics.ridgescout.databinding.FragmentScoutingPitBinding;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter; import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.utility.AutoSaveManager; import com.ridgebotics.ridgescout.utility.AutoSaveManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.function.Function; import java.util.function.Function;
@@ -47,7 +45,7 @@ public class PitScoutingFragment extends Fragment {
binding = FragmentScoutingPitBinding.inflate(inflater, container, false); binding = FragmentScoutingPitBinding.inflate(inflater, container, false);
username = settingsManager.getUsername(); username = SettingsManager.getUsername();
DataManager.reload_pit_fields(); DataManager.reload_pit_fields();
if(pit_latest_values == null) { if(pit_latest_values == null) {
@@ -75,13 +73,13 @@ public class PitScoutingFragment extends Fragment {
AutoSaveManager asm = new AutoSaveManager(this::save); AutoSaveManager asm = new AutoSaveManager(this::save);
ArrayList<dataType> dataTypes; ArrayList<DataType> dataTypes;
public void save(){ public void save(){
edited = false; edited = false;
enableRescoutButton(); enableRescoutButton();
dataType[] types = new dataType[pit_latest_values.length]; DataType[] types = new DataType[pit_latest_values.length];
for(int i = 0; i < pit_latest_values.length; i++){ for(int i = 0; i < pit_latest_values.length; i++){
types[i] = pit_latest_values[i].getViewValue(); types[i] = pit_latest_values[i].getViewValue();
@@ -113,7 +111,7 @@ public class PitScoutingFragment extends Fragment {
binding.pitFileIndicator.setVisibility(View.VISIBLE); binding.pitFileIndicator.setVisibility(View.VISIBLE);
binding.pitsTeamCard.setVisibility(View.VISIBLE); binding.pitsTeamCard.setVisibility(View.VISIBLE);
binding.pitBarTeamNum.setText(String.valueOf(team.teamNumber)); binding.pitBarTeamNum.setText(String.valueOf(team.teamNumber));
binding.pitUsername.setText(settingsManager.getUsername()); binding.pitUsername.setText(SettingsManager.getUsername());
binding.pitsTeamCard.fromTeam(team); binding.pitsTeamCard.fromTeam(team);
filename = evcode + "-" + team.teamNumber + ".pitscoutdata"; filename = evcode + "-" + team.teamNumber + ".pitscoutdata";
@@ -125,7 +123,7 @@ public class PitScoutingFragment extends Fragment {
create_fields(); create_fields();
if(!fileEditor.fileExist(filename)){ if(!FileEditor.fileExist(filename)){
default_fields(); default_fields();
set_indicator_color(unsaved_color); set_indicator_color(unsaved_color);
disableRescoutButton(); disableRescoutButton();
@@ -199,9 +197,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<DataType, Integer>() {
@Override @Override
public Integer apply(dataType dataType) { public Integer apply(DataType dataType) {
// edited = true; // edited = true;
if(asm.isRunning) if(asm.isRunning)
update_asm(); update_asm();
@@ -215,7 +213,7 @@ public class PitScoutingFragment extends Fragment {
public void default_fields(){ public void default_fields(){
for(int i = 0; i < pit_latest_values.length; i++){ for(int i = 0; i < pit_latest_values.length; i++){
inputType input = pit_latest_values[i]; FieldType input = pit_latest_values[i];
input.setViewValue(input.default_value); input.setViewValue(input.default_value);
titles[i].enable(); titles[i].enable();
} }
@@ -224,7 +222,7 @@ public class PitScoutingFragment extends Fragment {
public void get_fields(){ public void get_fields(){
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, pit_values, pit_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, pit_values, pit_transferValues);
dataType[] types = psdr.data.array; DataType[] types = psdr.data.array;
for(int i = 0; i < pit_latest_values.length; i++){ for(int i = 0; i < pit_latest_values.length; i++){
pit_latest_values[i].setViewValue(types[i]); pit_latest_values[i].setViewValue(types[i]);
@@ -18,7 +18,7 @@ import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.TeamListOption; import com.ridgebotics.ridgescout.ui.TeamListOption;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.Arrays; import java.util.Arrays;
@@ -106,7 +106,7 @@ public class PitSelectorFragment extends Fragment {
String filename = evcode + "-" + team.teamNumber + ".pitscoutdata"; String filename = evcode + "-" + team.teamNumber + ".pitscoutdata";
if (fileEditor.fileExist(filename)) { if (FileEditor.fileExist(filename)) {
final boolean[] rescout = {DataManager.rescout_list.contains(filename)}; final boolean[] rescout = {DataManager.rescout_list.contains(filename)};
teamRow.setColor(DataManager.rescout_list.contains(filename) ? 0x300000FF : 0x3000FF00); teamRow.setColor(DataManager.rescout_list.contains(filename) ? 0x300000FF : 0x3000FF00);
@@ -21,11 +21,9 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcEvent;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentScoutingBinding; import com.ridgebotics.ridgescout.databinding.FragmentScoutingBinding;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.TeamSelectorFragment;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import java.util.ArrayList; import java.util.ArrayList;
@@ -44,7 +42,7 @@ public class ScoutingFragment extends Fragment {
DataManager.reload_event(); DataManager.reload_event();
if(settingsManager.getCustomEvents()){ if(SettingsManager.getCustomEvents()){
binding.eventAddButton.setVisibility(View.VISIBLE); binding.eventAddButton.setVisibility(View.VISIBLE);
binding.eventAddButton.setOnClickListener(view -> { binding.eventAddButton.setOnClickListener(view -> {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
@@ -71,7 +69,7 @@ public class ScoutingFragment extends Fragment {
event.teams = new ArrayList<>(); event.teams = new ArrayList<>();
event.matches = new ArrayList<>(); event.matches = new ArrayList<>();
fileEditor.setEvent(event); FileEditor.setEvent(event);
}); });
@@ -4,20 +4,25 @@ import static android.text.InputType.TYPE_CLASS_NUMBER;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TableLayout; import android.widget.TableLayout;
import android.widget.TextView; import android.widget.TextView;
import com.ridgebotics.ridgescout.types.input.checkboxType; import com.ridgebotics.ridgescout.types.input.CheckboxType;
import com.ridgebotics.ridgescout.types.input.dropdownType; import com.ridgebotics.ridgescout.types.input.DropdownType;
import com.ridgebotics.ridgescout.types.input.fieldposType; import com.ridgebotics.ridgescout.types.input.FieldposType;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.types.input.numberType; import com.ridgebotics.ridgescout.types.input.NumberType;
import com.ridgebotics.ridgescout.types.input.sliderType; import com.ridgebotics.ridgescout.types.input.SliderType;
import com.ridgebotics.ridgescout.types.input.tallyType; import com.ridgebotics.ridgescout.types.input.TallyType;
import com.ridgebotics.ridgescout.types.input.textType; import com.ridgebotics.ridgescout.types.input.TextType;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import java.lang.reflect.Field;
import java.util.UUID;
public class FieldEditorHelper { public class FieldEditorHelper {
private enum parameterTypeEnum { private enum parameterTypeEnum {
paramNumber, paramNumber,
@@ -68,41 +73,49 @@ public class FieldEditorHelper {
// } // }
public static final parameterType[] defaultSliderParams = new parameterType[]{ public static final parameterType[] defaultSliderParams = new parameterType[]{
new paramString("Name", "New Slider"),
new paramString("Description", ""), new paramString("Description", ""),
new paramNumber("Min", 0), new paramNumber("Min", 0),
new paramNumber("Max", 10), new paramNumber("Max", 10),
new paramNumber("Default Value", 5) new paramNumber("Default Value", 5)
}; };
public static final parameterType[] defaultDropdownParams = new parameterType[]{ public static final parameterType[] defaultDropdownParams = new parameterType[]{
new paramString("Name", "New Dropdown"),
new paramString("Description", ""), new paramString("Description", ""),
new paramStringArray("Default Value", new String[]{"Zero","One","Two","Three"}), new paramStringArray("Default Value", new String[]{"Zero","One","Two","Three"}),
new paramNumber("Default Option", 0), new paramNumber("Default Option", 0),
}; };
public static final parameterType[] defaultTextParams = new parameterType[]{ public static final parameterType[] defaultTextParams = new parameterType[]{
new paramString("Name", "New Text"),
new paramString("Description", ""), new paramString("Description", ""),
new paramString("Default Value", "") new paramString("Default Value", "")
}; };
public static final parameterType[] defaultTallyParams = new parameterType[]{ public static final parameterType[] defaultTallyParams = new parameterType[]{
new paramString("Name", "New Tally"),
new paramString("Description", ""), new paramString("Description", ""),
new paramNumber("Default Value", 0) new paramNumber("Default Value", 0)
}; };
public static final parameterType[] defaultNumberParams = new parameterType[]{ public static final parameterType[] defaultNumberParams = new parameterType[]{
new paramString("Name", "New Number"),
new paramString("Description", ""), new paramString("Description", ""),
new paramNumber("Default Value", 0) new paramNumber("Default Value", 0)
}; };
public static final parameterType[] defaultCheckboxParam = new parameterType[]{ public static final parameterType[] defaultCheckboxParam = new parameterType[]{
new paramString("Name", "New Checkbox"),
new paramString("Description", ""), new paramString("Description", ""),
new paramNumber("Default Value ( 1 or 0 )", 0) new paramNumber("Default Value ( 1 or 0 )", 0)
}; };
public static final parameterType[] defaultFieldPosParam = new parameterType[]{ public static final parameterType[] defaultFieldPosParam = new parameterType[]{
new paramString("Name", "New Field Position"),
new paramString("Description", ""), new paramString("Description", ""),
new paramNumber("Default X", 0), new paramNumber("Default X", 0),
new paramNumber("Default Y", 0) new paramNumber("Default Y", 0)
}; };
private static parameterType[] getSliderParams(sliderType s){ private static parameterType[] getSliderParams(SliderType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramNumber("Min", s.min), new paramNumber("Min", s.min),
new paramNumber("Max", s.max), new paramNumber("Max", s.max),
@@ -110,44 +123,50 @@ public class FieldEditorHelper {
}; };
} }
private static parameterType[] getDropdownParams(dropdownType s){ private static parameterType[] getDropdownParams(DropdownType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramStringArray("Default Value",s.text_options), new paramStringArray("Default Value",s.text_options),
new paramNumber("Default Option", (int) s.default_value), new paramNumber("Default Option", (int) s.default_value),
}; };
} }
private static parameterType[] getTextParams(textType s){ private static parameterType[] getTextParams(TextType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramString("Default Value", (String) s.default_value) new paramString("Default Value", (String) s.default_value)
}; };
} }
private static parameterType[] getTallyParams(tallyType s){ private static parameterType[] getTallyParams(TallyType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramNumber("Default Value", (int) s.default_value) new paramNumber("Default Value", (int) s.default_value)
}; };
} }
private static parameterType[] getNumberParams(numberType s){ private static parameterType[] getNumberParams(NumberType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramNumber("Default Value", (int) s.default_value) new paramNumber("Default Value", (int) s.default_value)
}; };
} }
private static parameterType[] getCheckboxParam(checkboxType s){ private static parameterType[] getCheckboxParam(CheckboxType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramNumber("Default Value ( 1 or 0 )", (int) s.default_value) new paramNumber("Default Value ( 1 or 0 )", (int) s.default_value)
}; };
} }
private static parameterType[] getFieldPosParam(fieldposType s){ private static parameterType[] getFieldPosParam(FieldposType s){
return new parameterType[]{ return new parameterType[]{
new paramString("Name", s.name),
new paramString("Description", s.description), new paramString("Description", s.description),
new paramNumber("Default X", ((int[]) s.default_value)[0]), new paramNumber("Default X", ((int[]) s.default_value)[0]),
new paramNumber("Default Y", ((int[]) s.default_value)[1]) new paramNumber("Default Y", ((int[]) s.default_value)[1])
@@ -156,92 +175,99 @@ public class FieldEditorHelper {
public static void setSliderParams(sliderType s, parameterType[] types){ public static void setSliderParams(SliderType s, parameterType[] types){
s.description = ((paramString) types[0]).val; s.name = ((paramString) types[0]).val;
s.min = ((paramNumber) types[1]).val; s.description = ((paramString) types[1]).val;
s.max = ((paramNumber) types[2]).val; s.min = ((paramNumber) types[2]).val;
s.max = ((paramNumber) types[3]).val;
s.default_value = ((paramNumber) types[4]).val;
}
public static void setDropdownParams(DropdownType s, parameterType[] types){
s.name = ((paramString) types[0]).val;
s.description = ((paramString) types[1]).val;
s.text_options = ((paramStringArray) types[2]).val;
s.default_value = ((paramNumber) types[3]).val; s.default_value = ((paramNumber) types[3]).val;
} }
public static void setDropdownParams(dropdownType s, parameterType[] types){ public static void setTextParams(TextType s, parameterType[] types){
s.description = ((paramString) types[0]).val; s.name = ((paramString) types[0]).val;
s.text_options = ((paramStringArray) types[1]).val; s.description = ((paramString) types[1]).val;
s.default_value = ((paramString) types[2]).val;
}
public static void setTallyParams(TallyType s, parameterType[] types){
s.name = ((paramString) types[0]).val;
s.description = ((paramString) types[1]).val;
s.default_value = ((paramNumber) types[2]).val; s.default_value = ((paramNumber) types[2]).val;
} }
public static void setTextParams(textType s, parameterType[] types){ public static void setNumberParams(NumberType s, parameterType[] types){
s.description = ((paramString) types[0]).val; s.name = ((paramString) types[0]).val;
s.default_value = ((paramString) types[1]).val; s.description = ((paramString) types[1]).val;
s.default_value = ((paramNumber) types[2]).val;
} }
public static void setTallyParams(tallyType s, parameterType[] types){ public static void setCheckboxParam(CheckboxType s, parameterType[] types){
s.description = ((paramString) types[0]).val; s.name = ((paramString) types[0]).val;
s.default_value = ((paramNumber) types[1]).val; s.description = ((paramString) types[1]).val;
s.default_value = ((paramNumber) types[2]).val;
} }
public static void setNumberParams(numberType s, parameterType[] types){ public static void setFieldPosParam(FieldposType s, parameterType[] types){
s.description = ((paramString) types[0]).val; s.name = ((paramString) types[0]).val;
s.default_value = ((paramNumber) types[1]).val; s.description = ((paramString) types[1]).val;
}
public static void setCheckboxParam(checkboxType s, parameterType[] types){
s.description = ((paramString) types[0]).val;
s.default_value = ((paramNumber) types[1]).val;
}
public static void setFieldPosParam(fieldposType s, parameterType[] types){
s.description = ((paramString) types[0]).val;
s.default_value = new int[]{ s.default_value = new int[]{
((paramNumber) types[1]).val, ((paramNumber) types[2]).val,
((paramNumber) types[2]).val ((paramNumber) types[3]).val
}; };
} }
private static void setInputParameter(inputType t, parameterType[] types){ private static void setInputParameter(FieldType t, parameterType[] types){
switch (t.getInputType()){ switch (t.getInputType()){
case TALLY: case TALLY:
setTallyParams((tallyType) t, types); setTallyParams((TallyType) t, types);
break; break;
case SLIDER: case SLIDER:
setSliderParams((sliderType) t, types); setSliderParams((SliderType) t, types);
break; break;
case DROPDOWN: case DROPDOWN:
setDropdownParams((dropdownType) t, types); setDropdownParams((DropdownType) t, types);
break; break;
case NOTES_INPUT: case NOTES_INPUT:
setTextParams((textType) t, types); setTextParams((TextType) t, types);
break; break;
case NUMBER: case NUMBER:
setNumberParams((numberType) t, types); setNumberParams((NumberType) t, types);
break; break;
case CHECKBOX: case CHECKBOX:
setCheckboxParam((checkboxType) t, types); setCheckboxParam((CheckboxType) t, types);
break; break;
case FIELDPOS: case FIELDPOS:
setFieldPosParam((fieldposType) t, types); setFieldPosParam((FieldposType) t, types);
break; break;
} }
} }
private static parameterType[] getParamsFromInputType(inputType t){ private static parameterType[] getParamsFromInputType(FieldType t){
switch (t.getInputType()){ switch (t.getInputType()){
case TALLY: case TALLY:
return getTallyParams((tallyType) t); return getTallyParams((TallyType) t);
case SLIDER: case SLIDER:
return getSliderParams((sliderType) t); return getSliderParams((SliderType) t);
case DROPDOWN: case DROPDOWN:
return getDropdownParams((dropdownType) t); return getDropdownParams((DropdownType) t);
case NOTES_INPUT: case NOTES_INPUT:
return getTextParams((textType) t); return getTextParams((TextType) t);
case NUMBER: case NUMBER:
return getNumberParams((numberType) t); return getNumberParams((NumberType) t);
case CHECKBOX: case CHECKBOX:
return getCheckboxParam((checkboxType) t); return getCheckboxParam((CheckboxType) t);
case FIELDPOS: case FIELDPOS:
return getFieldPosParam((fieldposType) t); return getFieldPosParam((FieldposType) t);
} }
return new parameterType[]{}; return new parameterType[]{};
} }
@@ -252,18 +278,30 @@ public class FieldEditorHelper {
EditText text = new EditText(c); EditText text = new EditText(c);
text.setInputType(TYPE_CLASS_NUMBER); text.setInputType(TYPE_CLASS_NUMBER);
text.setText(String.valueOf(value)); text.setText(String.valueOf(value));
text.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
return text; return text;
} }
private static View createStringEdit(Context c, String value){ private static View createStringEdit(Context c, String value){
EditText text = new EditText(c); EditText text = new EditText(c);
text.setText(value); text.setText(value);
text.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
return text; return text;
} }
private static View createStringArrayEdit(Context c, String[] value){ private static View createStringArrayEdit(Context c, String[] value){
EditText text = new EditText(c); EditText text = new EditText(c);
text.setText(String.join("\n", value)); text.setText(String.join("\n", value));
text.setLayoutParams(new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
));
return text; return text;
} }
@@ -308,11 +346,52 @@ public class FieldEditorHelper {
return true; return true;
} }
public static FieldType createNewFieldType(int n){
switch(n){
case 0:
SliderType slider = new SliderType();
slider.UUID = UUID.randomUUID().toString();
setSliderParams(slider, defaultSliderParams);
return slider;
case 1:
TextType textType = new TextType();
textType.UUID = UUID.randomUUID().toString();
setTextParams(textType, defaultTextParams);
return textType;
case 2:
DropdownType dropdownType = new DropdownType();
dropdownType.UUID = UUID.randomUUID().toString();
setDropdownParams(dropdownType, defaultDropdownParams);
return dropdownType;
case 3:
TallyType tallyType = new TallyType();
tallyType.UUID = UUID.randomUUID().toString();
setTallyParams(tallyType, defaultTallyParams);
return tallyType;
case 4:
NumberType numberType = new NumberType();
numberType.UUID = UUID.randomUUID().toString();
setNumberParams(numberType, defaultNumberParams);
return numberType;
case 5:
CheckboxType checkboxType = new CheckboxType();
checkboxType.UUID = UUID.randomUUID().toString();
setCheckboxParam(checkboxType, defaultCheckboxParam);
return checkboxType;
case 6:
FieldposType fieldposType = new FieldposType();
fieldposType.UUID = UUID.randomUUID().toString();
setFieldPosParam(fieldposType, defaultFieldPosParam);
return fieldposType;
}
return null;
}
private parameterType[] types; private parameterType[] types;
private View[] views; private View[] views;
private inputType t; private FieldType t;
public FieldEditorHelper(Context c, inputType t, TableLayout parentView, parameterType[] tmptypes){ public FieldEditorHelper(Context c, FieldType t, TableLayout parentView, parameterType[] tmptypes){
this.types = tmptypes; this.types = tmptypes;
this.t = t; this.t = t;
views = new View[types.length]; views = new View[types.length];
@@ -327,7 +406,7 @@ public class FieldEditorHelper {
parentView.addView(views[i]); parentView.addView(views[i]);
} }
} }
public FieldEditorHelper(Context c, inputType t, TableLayout parentView){ public FieldEditorHelper(Context c, FieldType t, TableLayout parentView){
this(c,t,parentView,getParamsFromInputType(t)); this(c,t,parentView,getParamsFromInputType(t));
} }
@@ -1,18 +1,18 @@
package com.ridgebotics.ridgescout.ui.settings; package com.ridgebotics.ridgescout.ui.settings;
import android.annotation.SuppressLint; import static com.ridgebotics.ridgescout.utility.DataManager.match_values;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.text.InputType;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText; import android.widget.Button;
import android.widget.FrameLayout; import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TableLayout; import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -23,26 +23,15 @@ import androidx.navigation.Navigation;
import com.ridgebotics.ridgescout.MainActivity; import com.ridgebotics.ridgescout.MainActivity;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentSettingsFieldsBinding; import com.ridgebotics.ridgescout.databinding.FragmentSettingsFieldsBinding;
import com.ridgebotics.ridgescout.scoutingData.fields; import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.types.input.checkboxType;
import com.ridgebotics.ridgescout.types.input.dropdownType;
import com.ridgebotics.ridgescout.types.input.fieldposType;
import com.ridgebotics.ridgescout.types.input.inputType;
import com.ridgebotics.ridgescout.types.input.numberType;
import com.ridgebotics.ridgescout.types.input.sliderType;
import com.ridgebotics.ridgescout.types.input.tallyType;
import com.ridgebotics.ridgescout.types.input.textType;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView; import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.FieldDisplay; import com.ridgebotics.ridgescout.ui.FieldDisplay;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.DataManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Function;
public class FieldsFragment extends Fragment { public class FieldsFragment extends Fragment {
FragmentSettingsFieldsBinding binding; FragmentSettingsFieldsBinding binding;
@@ -54,7 +43,9 @@ public class FieldsFragment extends Fragment {
private int index = -1; private int index = -1;
List<inputType> values; private boolean edited = false;
List<FieldType> values;
List<FieldDisplay> views; List<FieldDisplay> views;
@@ -68,38 +59,19 @@ public class FieldsFragment extends Fragment {
binding.upButton.setEnabled(false); binding.upButton.setEnabled(false);
binding.downButton.setEnabled(false); binding.downButton.setEnabled(false);
binding.saveButton.setEnabled(false);
inputType[][] tmp_values = fields.load(filename); FieldType[][] tmp_values = Fields.load(filename);
if(tmp_values == null || tmp_values.length == 0) return binding.getRoot(); if(tmp_values == null || tmp_values.length == 0) return binding.getRoot();
values = new ArrayList(List.of(tmp_values[tmp_values.length-1])); values = new ArrayList(List.of(tmp_values[tmp_values.length-1]));
views = new ArrayList<>(); views = new ArrayList<>();
for(int i = 0; i < values.size(); i++){ for(int i = 0; i < values.size(); i++){
final FieldDisplay fd = new FieldDisplay(getContext()); createFieldDisplay(values.get(i));
views.add(fd);
fd.setInputType(values.get(i));
fd.setColor(unfocused_background_color);
final int fi = i;
fd.setOnClickListener(v -> {
index = views.indexOf(fd);
for(int a = 0; a < values.size(); a++) {
views.get(a).setColor(unfocused_background_color);
views.get(a).hideButtons();
}
fd.setColor(background_color);
fd.showButtons();
binding.upButton.setEnabled(index > 0);
binding.downButton.setEnabled(index < views.size()-1);
});
binding.fieldsArea.addView(fd);
} }
// Up and down buttons
binding.upButton.setOnClickListener(v -> { binding.upButton.setOnClickListener(v -> {
if(index <= 0) return; if(index <= 0) return;
Collections.swap(values, index, index-1); Collections.swap(values, index, index-1);
@@ -115,19 +87,198 @@ public class FieldsFragment extends Fragment {
updateRowOrder(); updateRowOrder();
}); });
// Add Field button
binding.addButton.setOnClickListener(v -> {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Select Type");
final CustomSpinnerView dropdown = new CustomSpinnerView(getContext());
List<String> options = new ArrayList<>();
options.add("Slider");
options.add("Text");
options.add("Dropdown");
options.add("Tally");
options.add("Number");
options.add("Checkbox");
options.add("Field Position");
dropdown.setOptions(options, 0);
dropdown.setTitle("Type");
builder.setView(dropdown);
builder.setNegativeButton("Cancel", (dialog, which) -> dialog.cancel());
builder.setPositiveButton("OK", (dialog, which) -> addField(dropdown.getIndex()));
builder.show();
});
// Back button listener
((MainActivity) getActivity()).setOnBackPressed(() -> {
if(!edited) 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) -> {
edited = false;
if(getActivity() != null)
getActivity().onBackPressed();
});
alert.setCancelable(true);
alert.create().show();
return false;
});
binding.saveButton.setOnClickListener(l -> save());
return binding.getRoot(); return binding.getRoot();
} }
private void createFieldDisplay(FieldType field){
final FieldDisplay fd = new FieldDisplay(getContext());
views.add(fd);
fd.setInputType(field);
fd.setColor(unfocused_background_color);
fd.setOnClickListener(v -> setFocus(fd,false));
fd.editButton.setOnClickListener(v -> openEditor(fd));
binding.fieldsArea.addView(fd);
}
private void updateRowOrder(){ private void updateRowOrder(){
binding.fieldsArea.removeAllViews(); binding.fieldsArea.removeAllViews();
for(int i = 0; i < views.size(); i++){ for(int i = 0; i < views.size(); i++){
binding.fieldsArea.addView(views.get(i)); binding.fieldsArea.addView(views.get(i));
} }
binding.upButton.setEnabled(index > 0); binding.upButton.setEnabled(index != -1 && index > 0);
binding.downButton.setEnabled(index < views.size()-1); binding.downButton.setEnabled(index != -1 && index < views.size()-1);
enableEditing();
} }
private void setFocus(FieldDisplay fd, boolean scroll){
index = views.indexOf(fd);
for(int a = 0; a < values.size(); a++) {
views.get(a).setColor(unfocused_background_color);
views.get(a).hideButtons();
}
fd.setColor(background_color);
fd.showButtons();
binding.upButton.setEnabled(index != -1 && index > 0);
binding.downButton.setEnabled(index != -1 && index < views.size()-1);
if(scroll)
binding.scrollView.post(() -> binding.scrollView.scrollTo(0, fd.getTop()));
}
private void openEditor(FieldDisplay fd){
FieldType field = fd.getField();
ScrollView sv = new ScrollView(getContext());
TableLayout table = new TableLayout(getContext());
table.setStretchAllColumns(true);
table.setPadding(10, 10, 10, 10);
sv.addView(table);
TextView UUID = new TextView(getContext());
UUID.setText("Type: " + field.get_type_name() + "\nUUID: " + field.UUID);
table.addView(UUID);
FieldEditorHelper f = new FieldEditorHelper(getContext(), field, table);
AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
alert.setTitle("Edit " + field.name);
alert.setView(sv);
alert.setCancelable(false);
alert.setNeutralButton("Cancel", (dialogInterface, i) -> {});
alert.setPositiveButton("Save", (dialogInterface, i) -> {
f.save();
fd.setInputType(field);
enableEditing();
});
AlertDialog dialog = alert.create();
dialog.show();
Button deleteButton = new Button(getContext());
deleteButton.setText("DELETE");
deleteButton.setOnClickListener(l -> {
AlertDialog.Builder alert2 = new AlertDialog.Builder(getContext());
alert2.setTitle("Warning!");
alert2.setMessage("This may destroy any data after being saved!");
alert2.setPositiveButton("Return", (dialogInterface, i) -> {});
alert2.setNeutralButton("DELETE", (dialogInterface, i) -> {
removeField(field);
dialog.cancel();
});
alert2.setCancelable(true);
alert2.create().show();
});
table.addView(deleteButton);
}
private void enableEditing(){
edited = true;
binding.saveButton.setEnabled(true);
}
private void addField(int n){
FieldType field = FieldEditorHelper.createNewFieldType(n);
values.add(field);
createFieldDisplay(field);
setFocus(views.get(views.size()-1), true);
}
private void removeField(FieldType field){
int fieldIndex = values.indexOf(field);
views.remove(fieldIndex);
values.remove(fieldIndex);
index = -1;
updateRowOrder();
}
private void save(){
AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
alert.setTitle("Warning!");
alert.setMessage("Changing or removing some values will result in lost data!\nBut this will create a new field version, and you can revert at any time.");
alert.setPositiveButton("OK", (dialog, which) -> {
FieldType[][] currentValues = Fields.load(filename);
assert currentValues != null;
FieldType[][] newValues = new FieldType[currentValues.length][];
newValues[newValues.length-1] = new FieldType[values.size()];
for(int i = 0; i < currentValues.length; i++) {
newValues[i] = currentValues[i];
}
for(int i = 0; i < values.size(); i++) {
newValues[newValues.length - 1][i] = values.get(i);
}
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_settings);
});
alert.setNegativeButton("Cancel", null);
alert.setCancelable(true);
alert.create().show();
}
// @SuppressLint("ClickableViewAccessibility") // @SuppressLint("ClickableViewAccessibility")
// public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, // public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
// @Nullable Bundle savedInstanceState) { // @Nullable Bundle savedInstanceState) {
@@ -523,7 +674,7 @@ public class FieldsFragment extends Fragment {
// private void addField_Part_3(String title, int typeIndex) { // private void addField_Part_3(String title, int typeIndex) {
// switch (typeIndex){ // switch (typeIndex){
// case 0: // case 0:
// sliderType slider = new sliderType(); // SliderType slider = new SliderType();
// slider.name = title; // slider.name = title;
// FieldEditorHelper.setSliderParams(slider, FieldEditorHelper.defaultSliderParams); // FieldEditorHelper.setSliderParams(slider, FieldEditorHelper.defaultSliderParams);
// addField_Part_4(slider); // addField_Part_4(slider);
@@ -2,18 +2,18 @@ package com.ridgebotics.ridgescout.ui.settings;
import static android.view.View.VISIBLE; import static android.view.View.VISIBLE;
import static androidx.navigation.fragment.FragmentKt.findNavController; import static androidx.navigation.fragment.FragmentKt.findNavController;
import static com.ridgebotics.ridgescout.utility.settingsManager.AllyPosKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.AllyPosKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.CustomEventsKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.CustomEventsKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.EnableQuickAllianceChangeKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.EnableQuickAllianceChangeKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.MatchNumKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.MatchNumKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.SelEVCodeKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.SelEVCodeKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.TeamNumKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.TeamNumKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.UnameKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.UnameKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.WifiModeKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.WifiModeKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.YearNumKey; import static com.ridgebotics.ridgescout.utility.SettingsManager.YearNumKey;
import static com.ridgebotics.ridgescout.utility.settingsManager.defaults; import static com.ridgebotics.ridgescout.utility.SettingsManager.defaults;
import static com.ridgebotics.ridgescout.utility.settingsManager.getEditor; import static com.ridgebotics.ridgescout.utility.SettingsManager.getEditor;
import static com.ridgebotics.ridgescout.utility.settingsManager.prefs; import static com.ridgebotics.ridgescout.utility.SettingsManager.prefs;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
@@ -25,26 +25,22 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TableLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.checkbox.MaterialCheckBox; import com.google.android.material.checkbox.MaterialCheckBox;
import com.google.android.material.textfield.TextInputEditText; import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout; import com.google.android.material.textfield.TextInputLayout;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding; import com.ridgebotics.ridgescout.databinding.FragmentSettingsBinding;
import com.ridgebotics.ridgescout.scoutingData.fields; import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.ui.CustomSpinnerPopup;
import com.ridgebotics.ridgescout.ui.CustomSpinnerView; import com.ridgebotics.ridgescout.ui.CustomSpinnerView;
import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView; import com.ridgebotics.ridgescout.ui.scouting.TallyCounterView;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.settingsManager;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -52,7 +48,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
public class settingsFragment extends Fragment { public class SettingsFragment extends Fragment {
private FragmentSettingsBinding binding; private FragmentSettingsBinding binding;
public View onCreateView(@NonNull LayoutInflater inflater, public View onCreateView(@NonNull LayoutInflater inflater,
@@ -69,12 +65,12 @@ public class settingsFragment extends Fragment {
}); });
binding.fieldsMatchesButton.setOnClickListener(v -> { binding.fieldsMatchesButton.setOnClickListener(v -> {
FieldsFragment.set_filename(fields.matchFieldsFilename); FieldsFragment.set_filename(Fields.matchFieldsFilename);
findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields); findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields);
}); });
binding.fieldsPitsButton.setOnClickListener(v -> { binding.fieldsPitsButton.setOnClickListener(v -> {
FieldsFragment.set_filename(fields.pitsFieldsFilename); FieldsFragment.set_filename(Fields.pitsFieldsFilename);
findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields); findNavController(this).navigate(R.id.action_navigation_settings_to_navigation_data_fields);
}); });
@@ -91,11 +87,11 @@ public class settingsFragment extends Fragment {
manager.addItem(new CheckboxSettingsItem(CustomEventsKey, "Custom Events")); manager.addItem(new CheckboxSettingsItem(CustomEventsKey, "Custom Events"));
StringSettingsItem FTPServer = new StringSettingsItem(settingsManager.FTPServer, "FTP Server (Sync)"); StringSettingsItem FTPServer = new StringSettingsItem(com.ridgebotics.ridgescout.utility.SettingsManager.FTPServer, "FTP Server (Sync)");
manager.addItem(FTPServer); manager.addItem(FTPServer);
CheckboxSettingsItem FTPSendMetaFiles = new CheckboxSettingsItem(settingsManager.FTPSendMetaFiles, "Sync meta files"); CheckboxSettingsItem FTPSendMetaFiles = new CheckboxSettingsItem(com.ridgebotics.ridgescout.utility.SettingsManager.FTPSendMetaFiles, "Sync meta files");
manager.addItem(FTPSendMetaFiles); manager.addItem(FTPSendMetaFiles);
CheckboxSettingsItem FTPEnabled = new CheckboxSettingsItem(settingsManager.FTPEnabled, "FTP Enabled", FTPServer, FTPSendMetaFiles); CheckboxSettingsItem FTPEnabled = new CheckboxSettingsItem(com.ridgebotics.ridgescout.utility.SettingsManager.FTPEnabled, "FTP Enabled", FTPServer, FTPSendMetaFiles);
manager.addItem(FTPEnabled); manager.addItem(FTPEnabled);
manager.addItem(new CheckboxSettingsItem(WifiModeKey, "Wifi Mode", FTPEnabled)); manager.addItem(new CheckboxSettingsItem(WifiModeKey, "Wifi Mode", FTPEnabled));
@@ -116,7 +112,7 @@ public class settingsFragment extends Fragment {
matchNum.setEnabled(hasEvent); matchNum.setEnabled(hasEvent);
manager.addItem(matchNum); manager.addItem(matchNum);
DropdownSettingsItem eventCode = new DropdownSettingsItem(SelEVCodeKey, "Event Code", fileEditor.getEventList().toArray(new String[0])); DropdownSettingsItem eventCode = new DropdownSettingsItem(SelEVCodeKey, "Event Code", FileEditor.getEventList().toArray(new String[0]));
eventCode.reloadOnChange(true); eventCode.reloadOnChange(true);
manager.addItem(eventCode); manager.addItem(eventCode);
@@ -9,12 +9,12 @@ import static com.ridgebotics.ridgescout.utility.SharePrompt.shareContent;
import android.content.Context; import android.content.Context;
import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter; import com.ridgebotics.ridgescout.scoutingData.ScoutingDataWriter;
import com.ridgebotics.ridgescout.types.data.dataType; import com.ridgebotics.ridgescout.types.data.DataType;
import com.ridgebotics.ridgescout.types.frcMatch; import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
public class CSVExport { public class CSVExport {
private static String[] alliances = {"red", "blue"}; private static String[] alliances = {"red", "blue"};
@@ -56,14 +56,14 @@ public class CSVExport {
data += (teamNum + ","); data += (teamNum + ",");
String filename = evcode+"-"+matchNum+"-"+alliance+"-"+alliancePos+"-"+teamNum+".matchscoutdata"; String filename = evcode+"-"+matchNum+"-"+alliance+"-"+alliancePos+"-"+teamNum+".matchscoutdata";
if(!fileEditor.fileExist(filename)){ if(!FileEditor.fileExist(filename)){
data += ("null,".repeat(match_latest_values.length)); data += ("null,".repeat(match_latest_values.length));
}else{ }else{
try { try {
String tempData = ""; String tempData = "";
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.match_values, DataManager.match_transferValues);
dataType[] matchData = psdr.data.array; DataType[] matchData = psdr.data.array;
inputType[] types = psdr.data.values[psdr.data.values.length-1]; FieldType[] types = psdr.data.values[psdr.data.values.length-1];
for (int i = 0; i < types.length; i++) { for (int i = 0; i < types.length; i++) {
tempData += (safeCSV(types[i].toString(matchData[i])) + ","); tempData += (safeCSV(types[i].toString(matchData[i])) + ",");
} }
@@ -108,14 +108,14 @@ public class CSVExport {
data += (team.startingYear + ","); data += (team.startingYear + ",");
String filename = evcode+"-"+team.teamNumber+".pitscoutdata"; String filename = evcode+"-"+team.teamNumber+".pitscoutdata";
if(!fileEditor.fileExist(filename)){ if(!FileEditor.fileExist(filename)){
data += ("null,".repeat(pit_latest_values.length)); data += ("null,".repeat(pit_latest_values.length));
}else{ }else{
try { try {
String tempData = ""; String tempData = "";
ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.pit_values, DataManager.pit_transferValues); ScoutingDataWriter.ParsedScoutingDataResult psdr = ScoutingDataWriter.load(filename, DataManager.pit_values, DataManager.pit_transferValues);
dataType[] teamData = psdr.data.array; DataType[] teamData = psdr.data.array;
inputType[] types = psdr.data.values[psdr.data.values.length-1]; FieldType[] types = psdr.data.values[psdr.data.values.length-1];
for (int i = 0; i < types.length; i++) { for (int i = 0; i < types.length; i++) {
tempData += (safeCSV(types[i].toString(teamData[i])) + ","); tempData += (safeCSV(types[i].toString(teamData[i])) + ",");
} }
@@ -2,13 +2,13 @@ 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.DataManager.evcode; import static com.ridgebotics.ridgescout.utility.DataManager.evcode;
import static com.ridgebotics.ridgescout.utility.fileEditor.baseDir; import static com.ridgebotics.ridgescout.utility.FileEditor.baseDir;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPClient;
@@ -116,7 +116,7 @@ public class FTPSync extends Thread {
public void run() { public void run() {
isRunning = true; isRunning = true;
boolean sendMetaFiles = settingsManager.getFTPSendMetaFiles(); boolean sendMetaFiles = SettingsManager.getFTPSendMetaFiles();
// Meta files // Meta files
List<String> meta_string_array = Arrays.asList( List<String> meta_string_array = Arrays.asList(
@@ -128,7 +128,7 @@ public class FTPSync extends Thread {
try { try {
// Login to FTP // Login to FTP
ftpClient = new FTPClient(); ftpClient = new FTPClient();
InetAddress address = InetAddress.getByName(settingsManager.getFTPServer()); InetAddress address = InetAddress.getByName(SettingsManager.getFTPServer());
ftpClient.connect(address); ftpClient.connect(address);
ftpClient.login("anonymous", null); ftpClient.login("anonymous", null);
ftpClient.enterLocalPassiveMode(); ftpClient.enterLocalPassiveMode();
@@ -229,7 +229,7 @@ public class FTPSync extends Thread {
bb.addLong(timestamps.get(filenames[i]).getTime()); bb.addLong(timestamps.get(filenames[i]).getTime());
} }
fileEditor.writeFile(timestampsFilename, bb.build()); FileEditor.writeFile(timestampsFilename, bb.build());
uploadFile(new File(baseDir + timestampsFilename)); uploadFile(new File(baseDir + timestampsFilename));
return true; return true;
@@ -243,7 +243,7 @@ public class FTPSync extends Thread {
try { try {
downloadFile(timestampsFilename, new File(baseDir + timestampsFilename)); downloadFile(timestampsFilename, new File(baseDir + timestampsFilename));
byte[] data = fileEditor.readFile(timestampsFilename); byte[] data = FileEditor.readFile(timestampsFilename);
if(data == null || data.length == 0) if(data == null || data.length == 0)
return new HashMap<>(); return new HashMap<>();
@@ -6,13 +6,13 @@ import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import com.ridgebotics.ridgescout.MainActivity; import com.ridgebotics.ridgescout.MainActivity;
import com.ridgebotics.ridgescout.types.file; import com.ridgebotics.ridgescout.types.ScoutingFile;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.SharePrompt; import com.ridgebotics.ridgescout.utility.SharePrompt;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
@@ -28,10 +28,10 @@ public class FileBundle {
ByteBuilder b = new ByteBuilder(); ByteBuilder b = new ByteBuilder();
for(int i = 0; i < files.length; i++){ for(int i = 0; i < files.length; i++){
if(!fileEditor.fileExist(files[i])) continue; if(!FileEditor.fileExist(files[i])) continue;
// byte[] data = fileEditor.readFile(files[i]); // byte[] data = fileEditor.readFile(files[i]);
file f = new file(files[i]); ScoutingFile f = new ScoutingFile(files[i]);
b.addRaw(file.typecode, f.encode()); b.addRaw(ScoutingFile.typecode, f.encode());
} }
byte[] data = b.build(); byte[] data = b.build();
@@ -91,11 +91,11 @@ public class FileBundle {
for(int i = 0; i < parsedObjectList.size(); i++){ for(int i = 0; i < parsedObjectList.size(); i++){
BuiltByteParser.parsedObject pa = parsedObjectList.get(i); BuiltByteParser.parsedObject pa = parsedObjectList.get(i);
if(pa.getType() != file.typecode) continue; if(pa.getType() != ScoutingFile.typecode) continue;
file f = file.decode((byte[]) pa.get()); ScoutingFile f = ScoutingFile.decode((byte[]) pa.get());
if(f == null) continue; if(f == null) continue;
filenames.add(f.filename); filenames.add(f.filename);
fileEditor.writeFile(f.filename, f.data); FileEditor.writeFile(f.filename, f.data);
} }
AlertManager.alert("Saved", AlertManager.alert("Saved",
@@ -17,11 +17,11 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTransferFileSelectorBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferFileSelectorBinding;
import com.ridgebotics.ridgescout.types.file; import com.ridgebotics.ridgescout.types.ScoutingFile;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.ByteBuilder; import com.ridgebotics.ridgescout.utility.ByteBuilder;
import com.ridgebotics.ridgescout.utility.DataManager; import com.ridgebotics.ridgescout.utility.DataManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -51,7 +51,7 @@ public class FileSelectorFragment extends Fragment {
evcode+".eventdata" evcode+".eventdata"
}; };
String[] files = fileEditor.getEventFiles(evcode); String[] files = FileEditor.getEventFiles(evcode);
Boolean[] selected_arr = new Boolean[files.length]; Boolean[] selected_arr = new Boolean[files.length];
Arrays.fill(selected_arr, Boolean.TRUE); Arrays.fill(selected_arr, Boolean.TRUE);
@@ -195,9 +195,9 @@ public class FileSelectorFragment extends Fragment {
ByteBuilder b = new ByteBuilder(); ByteBuilder b = new ByteBuilder();
for(int i = 0; i < filenames.size(); i++){ for(int i = 0; i < filenames.size(); i++){
file f = new file(filenames.get(i)); ScoutingFile f = new ScoutingFile(filenames.get(i));
if(!fileEditor.fileExist(f.filename)) { if(!FileEditor.fileExist(f.filename)) {
AlertManager.addSimpleError("File " + f.filename + " Does not exist!"); AlertManager.addSimpleError("File " + f.filename + " Does not exist!");
continue; continue;
}; };
@@ -209,7 +209,7 @@ public class FileSelectorFragment extends Fragment {
continue; continue;
}; };
b.addRaw(file.typecode, bytes); b.addRaw(ScoutingFile.typecode, bytes);
} }
return b.build(); return b.build();
@@ -1,8 +1,8 @@
package com.ridgebotics.ridgescout.ui.transfer; package com.ridgebotics.ridgescout.ui.transfer;
import static androidx.navigation.fragment.FragmentKt.findNavController; import static androidx.navigation.fragment.FragmentKt.findNavController;
import static com.ridgebotics.ridgescout.utility.fileEditor.TBAAddress; import static com.ridgebotics.ridgescout.utility.FileEditor.TBAAddress;
import static com.ridgebotics.ridgescout.utility.fileEditor.TBAHeader; import static com.ridgebotics.ridgescout.utility.FileEditor.TBAHeader;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.os.Bundle; import android.os.Bundle;
@@ -24,31 +24,26 @@ import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcEvent;
import com.ridgebotics.ridgescout.types.frcMatch; import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.ui.TBAEventOption;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.ImageRequestTask; import com.ridgebotics.ridgescout.utility.ImageRequestTask;
import com.ridgebotics.ridgescout.utility.JSONUtil; import com.ridgebotics.ridgescout.utility.JSONUtil;
import com.ridgebotics.ridgescout.utility.RequestTask; import com.ridgebotics.ridgescout.utility.RequestTask;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
public class TBAEventFragment extends Fragment { public class TBAEventFragment extends Fragment {
private TableLayout Table; private TableLayout Table;
private FragmentTransferTbaBinding binding; private FragmentTransferTbaBinding binding;
private final int year = settingsManager.getYearNum(); private final int year = SettingsManager.getYearNum();
private ProgressDialog loadingDialog; private ProgressDialog loadingDialog;
@@ -428,7 +423,7 @@ public class TBAEventFragment extends Fragment {
event.teams = teams; event.teams = teams;
event.matches = matchData; event.matches = matchData;
fileEditor.setEvent(event); FileEditor.setEvent(event);
AlertManager.toast("Saved!"); AlertManager.toast("Saved!");
getActivity().runOnUiThread(() -> findNavController(this).navigate(R.id.action_navigation_tba_event_to_navigation_transfer)); getActivity().runOnUiThread(() -> findNavController(this).navigate(R.id.action_navigation_tba_event_to_navigation_transfer));
@@ -1,16 +1,14 @@
package com.ridgebotics.ridgescout.ui.transfer; package com.ridgebotics.ridgescout.ui.transfer;
import static androidx.navigation.fragment.FragmentKt.findNavController; import static androidx.navigation.fragment.FragmentKt.findNavController;
import static com.ridgebotics.ridgescout.utility.fileEditor.TBAAddress; import static com.ridgebotics.ridgescout.utility.FileEditor.TBAAddress;
import static com.ridgebotics.ridgescout.utility.fileEditor.TBAHeader; import static com.ridgebotics.ridgescout.utility.FileEditor.TBAHeader;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.os.Bundle; import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TableRow; import android.widget.TableRow;
import android.widget.TextView; import android.widget.TextView;
@@ -22,14 +20,8 @@ import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferTbaBinding;
import com.ridgebotics.ridgescout.ui.TBAEventOption; import com.ridgebotics.ridgescout.ui.TBAEventOption;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.ImageRequestTask;
import com.ridgebotics.ridgescout.utility.RequestTask; import com.ridgebotics.ridgescout.utility.RequestTask;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.types.frcMatch;
import com.ridgebotics.ridgescout.types.frcTeam;
import com.ridgebotics.ridgescout.utility.fileEditor;
import com.ridgebotics.ridgescout.utility.JSONUtil;
import com.ridgebotics.ridgescout.utility.settingsManager;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
@@ -38,10 +30,7 @@ import org.json.JSONObject;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@@ -50,7 +39,7 @@ public class TBASelectorFragment extends Fragment {
private android.widget.TableLayout Table; private android.widget.TableLayout Table;
private FragmentTransferTbaBinding binding; private FragmentTransferTbaBinding binding;
private final int year = settingsManager.getYearNum(); private final int year = SettingsManager.getYearNum();
private ProgressDialog loadingDialog; private ProgressDialog loadingDialog;
@@ -3,7 +3,6 @@ package com.ridgebotics.ridgescout.ui.transfer;
import static androidx.navigation.fragment.FragmentKt.findNavController; import static androidx.navigation.fragment.FragmentKt.findNavController;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@@ -15,15 +14,11 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.R; import com.ridgebotics.ridgescout.R;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.settingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
import com.ridgebotics.ridgescout.databinding.FragmentTransferBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferBinding;
import com.ridgebotics.ridgescout.ui.transfer.bluetooth.BluetoothSenderFragment; import com.ridgebotics.ridgescout.ui.transfer.bluetooth.BluetoothSenderFragment;
import com.ridgebotics.ridgescout.ui.transfer.codes.CodeGeneratorView; import com.ridgebotics.ridgescout.ui.transfer.codes.CodeGeneratorView;
import org.apache.commons.net.ftp.FTP;
import java.util.Date;
public class TransferFragment extends Fragment { public class TransferFragment extends Fragment {
private FragmentTransferBinding binding; private FragmentTransferBinding binding;
@@ -50,7 +45,7 @@ public class TransferFragment extends Fragment {
binding = FragmentTransferBinding.inflate(inflater, container, false); binding = FragmentTransferBinding.inflate(inflater, container, false);
evcode = settingsManager.getEVCode(); evcode = SettingsManager.getEVCode();
binding.downloadButton.setOnClickListener(v -> { binding.downloadButton.setOnClickListener(v -> {
start_download(); start_download();
@@ -61,12 +56,12 @@ public class TransferFragment extends Fragment {
}); });
if(!settingsManager.getWifiMode()) { if(!SettingsManager.getWifiMode()) {
binding.TBAButton.setEnabled(false); binding.TBAButton.setEnabled(false);
binding.SyncButton.setEnabled(false); binding.SyncButton.setEnabled(false);
} }
if(!settingsManager.getFTPEnabled()) { if(!SettingsManager.getFTPEnabled()) {
binding.SyncButton.setEnabled(false); binding.SyncButton.setEnabled(false);
} }
@@ -12,10 +12,10 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTransferBluetoothReceiverBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferBluetoothReceiverBinding;
import com.ridgebotics.ridgescout.types.file; import com.ridgebotics.ridgescout.types.ScoutingFile;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -115,7 +115,7 @@ public class BluetoothReceiverFragment extends Fragment {
private List<byte[]> recievedBytes; private List<byte[]> recievedBytes;
private void receiveData(byte[] data, int bytes) { private void receiveData(byte[] data, int bytes) {
byte[] newBytes = fileEditor.getByteBlock(data, 0, bytes); byte[] newBytes = FileEditor.getByteBlock(data, 0, bytes);
System.out.println("Recieved " + bytes + " Bytes over bluetooth!"); System.out.println("Recieved " + bytes + " Bytes over bluetooth!");
recievedBytes.add(newBytes); recievedBytes.add(newBytes);
} }
@@ -125,16 +125,16 @@ public class BluetoothReceiverFragment extends Fragment {
String result_filenames = ""; String result_filenames = "";
try { try {
byte[] resultBytes = fileEditor.combineByteArrays(recievedBytes); byte[] resultBytes = FileEditor.combineByteArrays(recievedBytes);
resultBytes = fileEditor.blockUncompress(resultBytes); resultBytes = FileEditor.blockUncompress(resultBytes);
BuiltByteParser bbp = new BuiltByteParser(resultBytes); BuiltByteParser bbp = new BuiltByteParser(resultBytes);
ArrayList<BuiltByteParser.parsedObject> result = bbp.parse(); ArrayList<BuiltByteParser.parsedObject> result = bbp.parse();
for (int i = 0; i < result.size(); i++) { for (int i = 0; i < result.size(); i++) {
if (result.get(i).getType() != file.typecode) continue; if (result.get(i).getType() != ScoutingFile.typecode) continue;
file f = file.decode((byte[]) result.get(i).get()); ScoutingFile f = ScoutingFile.decode((byte[]) result.get(i).get());
if (f != null) { if (f != null) {
System.out.println(f.filename); System.out.println(f.filename);
@@ -17,7 +17,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTransferBluetoothSenderBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferBluetoothSenderBinding;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@@ -101,10 +101,10 @@ public class BluetoothSenderFragment extends Fragment {
private void sendData() { private void sendData() {
try { try {
byte[] compressed = fileEditor.blockCompress(data_to_send); byte[] compressed = FileEditor.blockCompress(data_to_send);
for(int i = 0; i < Math.ceil((double) compressed.length/1024); i++){ for(int i = 0; i < Math.ceil((double) compressed.length/1024); i++){
bluetoothSender.sendData(fileEditor.getByteBlock(compressed, i*1024, (i+1)*1024)); bluetoothSender.sendData(FileEditor.getByteBlock(compressed, i*1024, (i+1)*1024));
} }
bluetoothSender.close(); bluetoothSender.close();
@@ -17,7 +17,7 @@ import androidx.fragment.app.Fragment;
import com.ridgebotics.ridgescout.databinding.FragmentTransferCodeSenderBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferCodeSenderBinding;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType; import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter; import com.google.zxing.MultiFormatWriter;
@@ -76,7 +76,7 @@ public class CodeGeneratorView extends Fragment {
qrIndexN = binding.qrIndexN; qrIndexN = binding.qrIndexN;
qrIndexD = binding.qrIndexD; qrIndexD = binding.qrIndexD;
String compressed = new String(fileEditor.blockCompress(data), StandardCharsets.ISO_8859_1); String compressed = new String(FileEditor.blockCompress(data), StandardCharsets.ISO_8859_1);
if(compressed.isEmpty()){ if(compressed.isEmpty()){
AlertManager.alert("Error!", "Empty data!"); AlertManager.alert("Error!", "Empty data!");
@@ -190,10 +190,10 @@ public class CodeGeneratorView extends Fragment {
try { try {
// alert("test", ""+Math.ceil((double)data.length()/(double)qrSize)); // alert("test", ""+Math.ceil((double)data.length()/(double)qrSize));
qrBitmaps.add(generateQrCode( qrBitmaps.add(generateQrCode(
fileEditor.byteToChar(fileEditor.internalDataVersion) + FileEditor.byteToChar(FileEditor.internalDataVersion) +
String.valueOf(fileEditor.byteToChar(randID)) + String.valueOf(FileEditor.byteToChar(randID)) +
fileEditor.byteToChar(i) + FileEditor.byteToChar(i) +
fileEditor.byteToChar(qrCount - 1) + FileEditor.byteToChar(qrCount - 1) +
data.substring(start, end) data.substring(start, end)
)); ));
// alert("title", ""+(qrCount-1)); // alert("title", ""+(qrCount-1));
@@ -33,11 +33,10 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.LifecycleOwner;
import com.ridgebotics.ridgescout.databinding.FragmentTransferCodeReceiverBinding; import com.ridgebotics.ridgescout.databinding.FragmentTransferCodeReceiverBinding;
import com.ridgebotics.ridgescout.databinding.FragmentTransferCodeSenderBinding; import com.ridgebotics.ridgescout.types.ScoutingFile;
import com.ridgebotics.ridgescout.types.file;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.BuiltByteParser; import com.ridgebotics.ridgescout.utility.BuiltByteParser;
import com.ridgebotics.ridgescout.utility.fileEditor; import com.ridgebotics.ridgescout.utility.FileEditor;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
@@ -120,10 +119,10 @@ public class CodeScannerView extends Fragment {
if(data != null){ if(data != null){
// alert("test", ""+fileEditor.byteFromChar(data.charAt(0))); // alert("test", ""+fileEditor.byteFromChar(data.charAt(0)));
compileData( compileData(
fileEditor.byteFromChar(data.charAt(0)), FileEditor.byteFromChar(data.charAt(0)),
fileEditor.byteFromChar(data.charAt(1)), FileEditor.byteFromChar(data.charAt(1)),
fileEditor.byteFromChar(data.charAt(2)), FileEditor.byteFromChar(data.charAt(2)),
(fileEditor.byteFromChar(data.charAt(3))+1), (FileEditor.byteFromChar(data.charAt(3))+1),
data.substring(4) data.substring(4)
); );
} }
@@ -284,8 +283,8 @@ public class CodeScannerView extends Fragment {
private int randID; private int randID;
private int prevQrIndex; private int prevQrIndex;
private void compileData(int dataVersion, int randID, int qrIndex, int qrCount, String qrData){ private void compileData(int dataVersion, int randID, int qrIndex, int qrCount, String qrData){
if(dataVersion != fileEditor.internalDataVersion){ if(dataVersion != FileEditor.internalDataVersion){
alert("Error", "Incorrect data version ("+dataVersion+" != "+fileEditor.internalDataVersion+")"); alert("Error", "Incorrect data version ("+dataVersion+" != "+ FileEditor.internalDataVersion+")");
return; return;
} }
@@ -321,7 +320,7 @@ public class CodeScannerView extends Fragment {
try { try {
byte[] compiledBytes = compiledString.getBytes(StandardCharsets.ISO_8859_1); byte[] compiledBytes = compiledString.getBytes(StandardCharsets.ISO_8859_1);
byte[] resultBytes = fileEditor.blockUncompress(compiledBytes); byte[] resultBytes = FileEditor.blockUncompress(compiledBytes);
String result_filenames = ""; String result_filenames = "";
@@ -330,8 +329,8 @@ public class CodeScannerView extends Fragment {
ArrayList<BuiltByteParser.parsedObject> result = bbp.parse(); ArrayList<BuiltByteParser.parsedObject> result = bbp.parse();
for(int i = 0; i < result.size(); i++){ for(int i = 0; i < result.size(); i++){
if(result.get(i).getType() != file.typecode) continue; if(result.get(i).getType() != ScoutingFile.typecode) continue;
file f = file.decode((byte[]) result.get(i).get()); ScoutingFile f = ScoutingFile.decode((byte[]) result.get(i).get());
if(f != null) if(f != null)
if(f.write()) if(f.write())
@@ -1,10 +1,9 @@
package com.ridgebotics.ridgescout.utility; package com.ridgebotics.ridgescout.utility;
import static com.ridgebotics.ridgescout.utility.fileEditor.lengthHeaderBytes; import static com.ridgebotics.ridgescout.utility.FileEditor.lengthHeaderBytes;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
public class BuiltByteParser { public class BuiltByteParser {
public static final Integer boolType = 0; public static final Integer boolType = 0;
@@ -86,7 +85,7 @@ public class BuiltByteParser {
int curIndex = 0; int curIndex = 0;
while(true){ while(true){
// Log.i("t", String.valueOf(curIndex)); // Log.i("t", String.valueOf(curIndex));
final int length = fileEditor.fromBytes(fileEditor.getByteBlock(bytes, curIndex, curIndex+lengthHeaderBytes), lengthHeaderBytes); final int length = FileEditor.fromBytes(FileEditor.getByteBlock(bytes, curIndex, curIndex+lengthHeaderBytes), lengthHeaderBytes);
final int type = bytes[curIndex+lengthHeaderBytes] & 0xFF; final int type = bytes[curIndex+lengthHeaderBytes] & 0xFF;
if(length == 0){ if(length == 0){
@@ -97,7 +96,7 @@ public class BuiltByteParser {
final byte[] block; final byte[] block;
try { try {
block = fileEditor.getByteBlock(bytes, curIndex + lengthHeaderBytes + 1, curIndex + length + lengthHeaderBytes + 1); block = FileEditor.getByteBlock(bytes, curIndex + lengthHeaderBytes + 1, curIndex + length + lengthHeaderBytes + 1);
} catch(Exception e){ } catch(Exception e){
throw new byteParsingExeption("Array out of bounds"); throw new byteParsingExeption("Array out of bounds");
} }
@@ -110,7 +109,7 @@ public class BuiltByteParser {
break; break;
case 1: case 1:
intObject io = new intObject(); intObject io = new intObject();
io.num = fileEditor.fromBytes(block, length); io.num = FileEditor.fromBytes(block, length);
objects.add(io); objects.add(io);
break; break;
case 2: case 2:
@@ -150,7 +149,7 @@ public class BuiltByteParser {
break; break;
case 5: case 5:
longObject lo = new longObject(); longObject lo = new longObject();
lo.num = fileEditor.fromBytesLong(block, length); lo.num = FileEditor.fromBytesLong(block, length);
objects.add(lo); objects.add(lo);
break; break;
default: default:
@@ -1,6 +1,6 @@
package com.ridgebotics.ridgescout.utility; package com.ridgebotics.ridgescout.utility;
import static com.ridgebotics.ridgescout.utility.fileEditor.lengthHeaderBytes; import static com.ridgebotics.ridgescout.utility.FileEditor.lengthHeaderBytes;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.ArrayList; import java.util.ArrayList;
@@ -58,7 +58,7 @@ public class ByteBuilder {
public byte getType(){return int_id;} public byte getType(){return int_id;}
public int length(){return precision;} public int length(){return precision;}
public byte[] build(){ public byte[] build(){
return fileEditor.toBytes(num, precision); return FileEditor.toBytes(num, precision);
} }
} }
private int getLeastBytePrecision(int num){ private int getLeastBytePrecision(int num){
@@ -162,7 +162,7 @@ public class ByteBuilder {
public byte getType(){return long_id;} public byte getType(){return long_id;}
public int length(){return precision;} public int length(){return precision;}
public byte[] build(){ public byte[] build(){
return fileEditor.toBytes(num, precision); return FileEditor.toBytes(num, precision);
} }
} }
private int getLeastBytePrecision(long num){ private int getLeastBytePrecision(long num){
@@ -225,7 +225,7 @@ public class ByteBuilder {
for(byteType bt : bytesToBuild){ for(byteType bt : bytesToBuild){
byte[] blockLength = fileEditor.toBytes(bt.length(), lengthHeaderBytes + 1); byte[] blockLength = FileEditor.toBytes(bt.length(), lengthHeaderBytes + 1);
for(int i = 0; i < lengthHeaderBytes; i++) { for(int i = 0; i < lengthHeaderBytes; i++) {
bytes[bytesFilled] = blockLength[i]; bytes[bytesFilled] = blockLength[i];
@@ -1,11 +1,10 @@
package com.ridgebotics.ridgescout.utility; package com.ridgebotics.ridgescout.utility;
import com.ridgebotics.ridgescout.scoutingData.fields; import com.ridgebotics.ridgescout.scoutingData.Fields;
import com.ridgebotics.ridgescout.scoutingData.transfer.transferType; import com.ridgebotics.ridgescout.scoutingData.transfer.TransferType;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcEvent;
import com.ridgebotics.ridgescout.types.input.inputType; import com.ridgebotics.ridgescout.types.input.FieldType;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -19,11 +18,11 @@ public class DataManager {
if(evcode.equals("unset")) return; if(evcode.equals("unset")) return;
event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata")); event = frcEvent.decode(FileEditor.readFile(evcode + ".eventdata"));
if(event == null) { if(event == null) {
AlertManager.addSimpleError("Failed to load event!"); AlertManager.addSimpleError("Failed to load event!");
settingsManager.setEVCode("unset"); SettingsManager.setEVCode("unset");
evcode = "unset"; evcode = "unset";
}else{ }else{
AlertManager.toast("Reloaded event!"); AlertManager.toast("Reloaded event!");
@@ -32,30 +31,30 @@ public class DataManager {
} }
public static String getevcode() { public static String getevcode() {
return settingsManager.getEVCode(); return SettingsManager.getEVCode();
} }
public static inputType[][] match_values; public static FieldType[][] match_values;
public static inputType[] match_latest_values; public static FieldType[] match_latest_values;
public static transferType[][] match_transferValues; public static TransferType[][] match_transferValues;
public static void reload_match_fields(){ public static void reload_match_fields(){
try { try {
match_values = fields.load(fields.matchFieldsFilename); match_values = Fields.load(Fields.matchFieldsFilename);
match_latest_values = match_values[match_values.length - 1]; match_latest_values = match_values[match_values.length - 1];
match_transferValues = transferType.get_transfer_values(match_values); match_transferValues = TransferType.get_transfer_values(match_values);
} catch (Exception e){ } catch (Exception e){
AlertManager.error("Error reading match fields", e); AlertManager.error("Error reading match fields", e);
} }
} }
public static inputType[][] pit_values; public static FieldType[][] pit_values;
public static inputType[] pit_latest_values; public static FieldType[] pit_latest_values;
public static transferType[][] pit_transferValues; public static TransferType[][] pit_transferValues;
public static void reload_pit_fields(){ public static void reload_pit_fields(){
try { try {
pit_values = fields.load(fields.pitsFieldsFilename); pit_values = Fields.load(Fields.pitsFieldsFilename);
pit_latest_values = pit_values[pit_values.length-1]; pit_latest_values = pit_values[pit_values.length-1];
pit_transferValues = transferType.get_transfer_values(pit_values); pit_transferValues = TransferType.get_transfer_values(pit_values);
} catch (Exception e){ } catch (Exception e){
AlertManager.error("Error reading pit fields", e); AlertManager.error("Error reading pit fields", e);
} }
@@ -63,8 +62,8 @@ public class DataManager {
public static List<String> rescout_list = new ArrayList<>(); public static List<String> rescout_list = new ArrayList<>();
public static void reload_rescout_list(){ public static void reload_rescout_list(){
if(!fileEditor.fileExist(evcode + ".rescout")) {rescout_list = new ArrayList<>(); return;} if(!FileEditor.fileExist(evcode + ".rescout")) {rescout_list = new ArrayList<>(); return;}
byte[] file = fileEditor.readFile(evcode + ".rescout"); byte[] file = FileEditor.readFile(evcode + ".rescout");
if(file == null) {rescout_list = new ArrayList<>(); return;} if(file == null) {rescout_list = new ArrayList<>(); return;}
try { try {
@@ -80,13 +79,13 @@ public class DataManager {
public static void save_rescout_list() { public static void save_rescout_list() {
try { try {
if(rescout_list.size() == 0){ if(rescout_list.size() == 0){
fileEditor.deleteFile(evcode + ".rescout"); FileEditor.deleteFile(evcode + ".rescout");
return; return;
} }
ByteBuilder bb = new ByteBuilder(); ByteBuilder bb = new ByteBuilder();
bb.addStringArray(rescout_list.toArray(new String[0])); bb.addStringArray(rescout_list.toArray(new String[0]));
fileEditor.writeFile(evcode + ".rescout", bb.build()); FileEditor.writeFile(evcode + ".rescout", bb.build());
} catch (Exception e){ } catch (Exception e){
AlertManager.error("Error saving scout fields", e); AlertManager.error("Error saving scout fields", e);
} }
@@ -1,8 +1,6 @@
package com.ridgebotics.ridgescout.utility; package com.ridgebotics.ridgescout.utility;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.ridgebotics.ridgescout.types.frcEvent; import com.ridgebotics.ridgescout.types.frcEvent;
import com.ridgebotics.ridgescout.types.frcTeam; import com.ridgebotics.ridgescout.types.frcTeam;
@@ -17,21 +15,17 @@ import java.io.IOException;
import java.nio.BufferOverflowException; import java.nio.BufferOverflowException;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Calendar;
import java.util.Collections; import java.util.Collections;
import java.util.Comparator; import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.TimeZone;
import java.util.zip.DataFormatException; import java.util.zip.DataFormatException;
import java.util.zip.Deflater; import java.util.zip.Deflater;
import java.util.zip.Inflater; import java.util.zip.Inflater;
public final class fileEditor { public final class FileEditor {
public final static String baseDir = "/data/data/com.ridgebotics.ridgescout/"; public final static String baseDir = "/data/data/com.ridgebotics.ridgescout/";
public static final byte internalDataVersion = 0x01; public static final byte internalDataVersion = 0x01;
public static final int maxCompressedBlockSize = 4096; public static final int maxCompressedBlockSize = 4096;
@@ -142,18 +136,18 @@ public final class fileEditor {
public static byte[] blockCompress(byte[] inputData) { public static byte[] blockCompress(byte[] inputData) {
List<byte[]> compiledData = new ArrayList<>(); List<byte[]> compiledData = new ArrayList<>();
for(int i=0;i<Math.ceil((double) inputData.length / fileEditor.maxCompressedBlockSize);i++){ for(int i = 0; i<Math.ceil((double) inputData.length / FileEditor.maxCompressedBlockSize); i++){
final int start = i*fileEditor.maxCompressedBlockSize; final int start = i* FileEditor.maxCompressedBlockSize;
int end = ((i+1)*fileEditor.maxCompressedBlockSize); int end = ((i+1)* FileEditor.maxCompressedBlockSize);
if(end > inputData.length) { if(end > inputData.length) {
end = inputData.length; end = inputData.length;
} }
byte[] dataBlock = fileEditor.getByteBlock(inputData, start, end); byte[] dataBlock = FileEditor.getByteBlock(inputData, start, end);
final byte[] compressedBlock = fileEditor.compress(dataBlock); final byte[] compressedBlock = FileEditor.compress(dataBlock);
compiledData.add(fileEditor.toBytes(compressedBlock.length, 2)); compiledData.add(FileEditor.toBytes(compressedBlock.length, 2));
compiledData.add(compressedBlock); compiledData.add(compressedBlock);
} }
return combineByteArrays(compiledData); return combineByteArrays(compiledData);
@@ -164,11 +158,11 @@ public final class fileEditor {
int curIndex = 0; int curIndex = 0;
while (curIndex < data.length) { while (curIndex < data.length) {
final int blockLength = fileEditor.fromBytes(fileEditor.getByteBlock(data, curIndex, curIndex + 2), 2); final int blockLength = FileEditor.fromBytes(FileEditor.getByteBlock(data, curIndex, curIndex + 2), 2);
uncompressedData.add( uncompressedData.add(
decompress( decompress(
fileEditor.getByteBlock(data, curIndex + 2, curIndex + blockLength + 2) FileEditor.getByteBlock(data, curIndex + 2, curIndex + blockLength + 2)
) )
); );
@@ -324,8 +318,8 @@ public final class fileEditor {
public static boolean setEvent(frcEvent event){ public static boolean setEvent(frcEvent event){
final String filename = (event.eventCode + ".eventdata"); final String filename = (event.eventCode + ".eventdata");
if(settingsManager.getEVCode().equals("unset")){ if(SettingsManager.getEVCode().equals("unset")){
settingsManager.setEVCode(event.eventCode); SettingsManager.setEVCode(event.eventCode);
} }
return writeFile(filename, event.encode()); return writeFile(filename, event.encode());
@@ -2,12 +2,11 @@ package com.ridgebotics.ridgescout.utility;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
public class settingsManager { public class SettingsManager {
public static SharedPreferences prefs; public static SharedPreferences prefs;
public static SharedPreferences.Editor editor; public static SharedPreferences.Editor editor;
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".ui.settings.settingsFragment"> tools:context=".ui.settings.SettingsFragment">
<ScrollView <ScrollView
android:id="@+id/scrollView2" android:id="@+id/scrollView2"
@@ -53,14 +53,15 @@
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<ScrollView <ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent">
<TableLayout <TableLayout
android:id="@+id/fieldsArea" android:id="@+id/fieldsArea"
android:paddingBottom="60dp"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:paddingBottom="60dp">
</TableLayout> </TableLayout>
</ScrollView> </ScrollView>
@@ -250,7 +250,7 @@
<fragment <fragment
android:id="@+id/navigation_settings" android:id="@+id/navigation_settings"
android:name="com.ridgebotics.ridgescout.ui.settings.settingsFragment" android:name="com.ridgebotics.ridgescout.ui.settings.SettingsFragment"
android:label="@string/title_settings" android:label="@string/title_settings"
tools:layout="@layout/fragment_settings"> tools:layout="@layout/fragment_settings">
<action <action