diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/scoutingData/ScoutingDataWriter.java b/app/src/main/java/com/astatin3/scoutingapp2025/scoutingData/ScoutingDataWriter.java index ea6ecef..629c0e7 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/scoutingData/ScoutingDataWriter.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/scoutingData/ScoutingDataWriter.java @@ -60,13 +60,13 @@ public class ScoutingDataWriter { for(int i = 0; i < values[version].length; i++){ switch (objects.get(i+2).getType()){ - case 0: + case 1: dataTypes[i] = new intType(values[version][i].name, (int) objects.get(i+2).get()); break; - case 1: + case 2: String name = values[version][i].name; String value = (String) objects.get(i+2).get(); - dataTypes[i] = new stringType(name,value); + dataTypes[i] = new stringType(name, value); break; } } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/dataType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/dataType.java index 4289242..1583ed5 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/dataType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/dataType.java @@ -7,6 +7,9 @@ public abstract class dataType { } public String name; public Object value; + + public abstract boolean isNull(); +// public abstract Object getNullValue(); public abstract valueTypes getValueType(); public Object get(){ return value; diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/intType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/intType.java index 51cc539..76da3c5 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/intType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/intType.java @@ -1,9 +1,21 @@ package com.astatin3.scoutingapp2025.types.data; -public class intType extends dataType{ - public valueTypes getValueType() {return valueTypes.NUM;} - public intType(String name, int value){ +public class intType extends dataType { + private static final int nulval = 255; + + public valueTypes getValueType() { + return valueTypes.NUM; + } + + public intType(String name, int value) { super(name); this.value = value; } -} + + public boolean isNull() { + return ((int) value) == nulval; + } + public static Object getNullValue(){ + return nulval; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/stringType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/stringType.java index e919942..ddb09a6 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/data/stringType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/data/stringType.java @@ -1,9 +1,17 @@ package com.astatin3.scoutingapp2025.types.data; public class stringType extends dataType{ + private static final String nulval = "Joe"; + public valueTypes getValueType() {return valueTypes.STRING;} public stringType(String name, String value){ super(name); this.value = value; } + public boolean isNull(){ + return value.equals(nulval); + } + public static Object getNullValue(){ + return nulval; + } } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/dropdownType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/dropdownType.java index ec2ded5..48de5fb 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/dropdownType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/dropdownType.java @@ -109,6 +109,7 @@ public class dropdownType extends inputType { } public dataType getViewValue(){ if(dropdown == null) return null; + if(dropdown.getVisibility() == View.GONE) return new intType(name, (int)intType.getNullValue()); return new intType(name, dropdown.getSelectedIndex()); } public void add_individual_view(LinearLayout parent, dataType data){ diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/inputType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/inputType.java index 9ffe256..f7ca0db 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/inputType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/inputType.java @@ -2,8 +2,11 @@ package com.astatin3.scoutingapp2025.types.input; import android.content.Context; import android.view.View; +import android.widget.CheckBox; import android.widget.LinearLayout; +import androidx.constraintlayout.widget.ConstraintLayout; + import com.astatin3.scoutingapp2025.types.data.dataType; import com.astatin3.scoutingapp2025.utility.BuiltByteParser; import com.astatin3.scoutingapp2025.utility.ByteBuilder; @@ -21,8 +24,6 @@ public abstract class inputType { NOTES_INPUT } - - public String name; public Object default_value; public abstract inputTypes getInputType(); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/notesType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/notesType.java index 19a650d..61ae023 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/notesType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/notesType.java @@ -12,6 +12,7 @@ import android.widget.LinearLayout; import android.widget.TextView; import com.astatin3.scoutingapp2025.types.data.dataType; +import com.astatin3.scoutingapp2025.types.data.intType; import com.astatin3.scoutingapp2025.types.data.stringType; import com.astatin3.scoutingapp2025.utility.BuiltByteParser; import com.astatin3.scoutingapp2025.utility.ByteBuilder; @@ -64,6 +65,7 @@ public class notesType extends inputType { } public dataType getViewValue(){ if(text == null) return null; + if(text.getVisibility() == View.GONE) return new stringType(name, (String) stringType.getNullValue()); return new stringType(name, text.getText().toString()); } public void add_individual_view(LinearLayout parent, dataType data){ diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/sliderType.java b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/sliderType.java index 2b8fdf6..e469398 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/types/input/sliderType.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/types/input/sliderType.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import com.astatin3.scoutingapp2025.types.data.dataType; import com.astatin3.scoutingapp2025.types.data.intType; +import com.astatin3.scoutingapp2025.types.data.stringType; import com.astatin3.scoutingapp2025.utility.BuiltByteParser; import com.astatin3.scoutingapp2025.utility.ByteBuilder; import com.github.mikephil.charting.charts.LineChart; @@ -81,7 +82,8 @@ public class sliderType extends inputType { } public dataType getViewValue(){ if(slider == null) return null; - return new intType(name, min + (int) (slider.getValue() * (max-min))); + if(slider.getVisibility() == View.GONE) return new intType(name, (int) intType.getNullValue()); + return new intType(name, min + (int) (slider.getValue() * (max-min))); } public void add_individual_view(LinearLayout parent, dataType data){ Slider slider = new Slider(parent.getContext()); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/dataFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/dataFragment.java index 23d3740..1dd27bd 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/dataFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/dataFragment.java @@ -72,6 +72,7 @@ public class dataFragment extends Fragment { // binding.teamsView.setVisibility(View.VISIBLE); // binding.teamsView.init(binding, event); // submenu = true; + }); binding.fieldsButton.setOnClickListener(v -> { @@ -90,6 +91,7 @@ public class dataFragment extends Fragment { binding.buttons.setVisibility(View.VISIBLE); binding.statusView.setVisibility(View.GONE); binding.teamsView.setVisibility(View.GONE); + binding.fieldsView.setVisibility(View.GONE); submenu = false; } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/fieldsView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/fieldsView.java index 4423b59..2a826e8 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/fieldsView.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/fieldsView.java @@ -35,6 +35,7 @@ public class fieldsView extends ConstraintLayout { this.binding = binding; binding.fieldsSelectButtons.setVisibility(VISIBLE); + binding.fieldsArea.removeAllViews(); binding.fieldsSelectButtons.bringToFront(); binding.fieldsArea.setStretchAllColumns(true); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/matchScoutingView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/matchScoutingView.java index a14982e..0c2ed74 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/matchScoutingView.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/matchScoutingView.java @@ -2,7 +2,9 @@ package com.astatin3.scoutingapp2025.ui.scouting; import android.content.Context; import android.util.AttributeSet; +import android.util.TypedValue; import android.view.View; +import android.widget.CheckBox; import android.widget.TextView; import androidx.constraintlayout.widget.ConstraintLayout; @@ -13,6 +15,7 @@ import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.databinding.FragmentScoutingBinding; import com.astatin3.scoutingapp2025.scoutingData.transfer.transferType; import com.astatin3.scoutingapp2025.types.data.dataType; +import com.astatin3.scoutingapp2025.types.data.intType; import com.astatin3.scoutingapp2025.types.input.inputType; import com.astatin3.scoutingapp2025.utility.fileEditor; import com.astatin3.scoutingapp2025.types.frcEvent; @@ -147,8 +150,7 @@ public class matchScoutingView extends ConstraintLayout { update_scouting_data(); } - - + private int default_text_color = 0; private void create_fields(){ if(asm.isRunning){ @@ -156,13 +158,15 @@ public class matchScoutingView extends ConstraintLayout { } for(int i = 0 ; i < latest_values.length; i++) { - TextView tv = new TextView(getContext()); + final TextView tv = new TextView(getContext()); tv.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); tv.setText(latest_values[i].name); + tv.setPadding(8,8,8,8); tv.setTextSize(24); - binding.MatchScoutArea.addView(tv); - View v = latest_values[i].createView(getContext(), new Function() { + default_text_color = tv.getCurrentTextColor(); + + final View v = latest_values[i].createView(getContext(), new Function() { @Override public Integer apply(dataType dataType) { // edited = true; @@ -172,6 +176,26 @@ public class matchScoutingView extends ConstraintLayout { } }); + binding.MatchScoutArea.addView(tv); + int fi = i; + tv.setOnClickListener(p -> { + boolean blank = latest_values[fi].getViewValue().isNull(); + + System.out.println(blank); + + if(blank){ + tv.setBackgroundColor(0xffff0000); + tv.setTextColor(0xff000000); + v.setVisibility(GONE); + latest_values[fi].setViewValue(intType.getNullValue()); + }else{ + tv.setBackgroundColor(0x00000000); + tv.setTextColor(default_text_color); + v.setVisibility(VISIBLE); + latest_values[fi].setViewValue(latest_values[fi].default_value); + } + }); + binding.MatchScoutArea.addView(v); } } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/utility/BuiltByteParser.java b/app/src/main/java/com/astatin3/scoutingapp2025/utility/BuiltByteParser.java index ace9f06..337eeb3 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/utility/BuiltByteParser.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/utility/BuiltByteParser.java @@ -4,10 +4,11 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; public class BuiltByteParser { - public static final Integer intType = 0; - public static final Integer stringType = 1; - public static final Integer intArrayType = 2; - public static final Integer stringArrayType = 3; + public static final Integer boolType = 0; + public static final Integer intType = 1; + public static final Integer stringType = 2; + public static final Integer intArrayType = 3; + public static final Integer stringArrayType = 4; public class byteParsingExeption extends Exception { public byteParsingExeption() {} @@ -22,6 +23,11 @@ public class BuiltByteParser { public abstract Object get(); } + public class boolObject extends parsedObject{ + boolean val; + public Integer getType(){return boolType;} + public Object get(){return val;} + } public class intObject extends parsedObject{ int num; @@ -83,16 +89,21 @@ public class BuiltByteParser { switch(type){ case 0: + boolObject bo = new boolObject(); + bo.val = block[0] == (byte) 1; + objects.add(bo); + break; + case 1: intObject io = new intObject(); io.num = fileEditor.fromBytes(block, length); objects.add(io); break; - case 1: + case 2: stringObject so = new stringObject(); so.str = new String(block, StandardCharsets.UTF_8); objects.add(so); break; - case 2: + case 3: BuiltByteParser int_bbp = new BuiltByteParser(block); ArrayList intArrayObjects = int_bbp.parse(); @@ -106,7 +117,7 @@ public class BuiltByteParser { ia.arr = intArr; objects.add(ia); break; - case 3: + case 4: BuiltByteParser str_bbp = new BuiltByteParser(block); ArrayList strArrayObjects = str_bbp.parse(); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/utility/ByteBuilder.java b/app/src/main/java/com/astatin3/scoutingapp2025/utility/ByteBuilder.java index 8371208..e2f8473 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/utility/ByteBuilder.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/utility/ByteBuilder.java @@ -4,10 +4,11 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; public class ByteBuilder { - public static final int int_id = 0; - public static final int string_id = 1; - public static final int int_arr_id = 2; - public static final int string_arr_id = 3; + public static final int bool_id = 0; + public static final int int_id = 1; + public static final int string_id = 2; + public static final int int_arr_id = 3; + public static final int string_arr_id = 4; ArrayList bytesToBuild = new ArrayList<>(); @@ -24,6 +25,23 @@ public class ByteBuilder { public abstract byte[] build(); } + private class boolType extends byteType { + public boolean val; + public byte getType(){return bool_id;} + public int length(){return 1;} + public byte[] build(){ + return new byte[]{(byte) (val ? 1 : 0)}; + } + } + + public ByteBuilder addBool(boolean n) throws buildingException { + boolType boolType = new boolType(); + boolType.val = n; + + bytesToBuild.add(boolType); + return this; + } + private class intType extends byteType { public int precision; public int num;