Start work on match scouting ui

This commit is contained in:
astatin3
2024-06-26 22:33:05 -06:00
parent 3dd6560a75
commit d183e3c913
9 changed files with 448 additions and 45 deletions
@@ -7,7 +7,7 @@ import com.astatin3.scoutingapp2025.fileEditor;
import java.util.ArrayList;
public class fields {
private static ScoutingVersion sv = new ScoutingVersion();
public static ScoutingVersion sv = new ScoutingVersion();
public static final String fieldsFilename = "data.fields";
public static ScoutingVersion.inputType[][] values = new ScoutingVersion.inputType[][]{};
@@ -1,7 +1,7 @@
package com.astatin3.scoutingapp2025.SettingsVersionStack;
public class latestSettings {
public static sv0 settings = new sv0();
public static sv1 settings = new sv1();
public static void update(){
settings.init_settings();
settings.update();
@@ -0,0 +1,51 @@
package com.astatin3.scoutingapp2025.SettingsVersionStack;
public class sv1 extends sv0 {
@Override
public int getVersion() {
return 0;
}
@Override
public void update(){
int file_version = get_file_version();
if(file_version == getVersion()) {
return;
}else if(file_version < getVersion()){
super.update();
}
set_file_version(getVersion());
}
@Override
public void defaultSettings() {
writeTag("username", "Username");
writeTag("selected_event_code", "unset");
// writeTag("practice_mode", "false");
writeTag("wifi_mode", "false");
writeTag("match_num", "0");
writeTag("alliance_pos", "red-1");
}
public int get_match_num(){
return Integer.parseInt(readTag("match_num"));
}
public void set_match_num(int num){
writeTag("match_num", String.valueOf(num));
}
@Override
public void set_evcode(String evcode){
set_match_num(0);
writeTag("selected_event_code", evcode);
}
public String get_alliance_pos(){
return readTag("alliance_pos");
}
public void set_alliance_pos(String pos){
writeTag("alliance_pos", pos);
}
}
@@ -1,12 +1,148 @@
package com.astatin3.scoutingapp2025.ui.scouting;
import static com.astatin3.scoutingapp2025.ScoutingDataVersion.fields.sv;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.astatin3.scoutingapp2025.ScoutingDataVersion.ScoutingVersion;
import com.astatin3.scoutingapp2025.ScoutingDataVersion.fields;
import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings;
import com.astatin3.scoutingapp2025.databinding.FragmentScoutingBinding;
import com.astatin3.scoutingapp2025.fileEditor;
import com.astatin3.scoutingapp2025.types.frcEvent;
import com.astatin3.scoutingapp2025.types.frcMatch;
import com.astatin3.scoutingapp2025.types.frcTeam;
public class matchScoutingView extends ConstraintLayout {
public matchScoutingView(@NonNull Context context) {
public matchScoutingView(Context context) {
super(context);
}
public matchScoutingView(Context context, AttributeSet attributeSet){
super(context, attributeSet);
}
FragmentScoutingBinding binding;
String alliance_position;
String evcode;
int cur_match_num;
frcEvent event;
public void init(FragmentScoutingBinding tmp_binding){
binding = tmp_binding;
alliance_position = latestSettings.settings.get_alliance_pos();
evcode = latestSettings.settings.get_evcode();
event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata"));
binding.eventcode.setText(evcode);
binding.alliancePosText.setText(alliance_position);
cur_match_num = latestSettings.settings.get_match_num();
update_match_num();
binding.nextButton.setOnClickListener(v -> {
latestSettings.settings.set_match_num(cur_match_num+1);
cur_match_num += 1;
update_match_num();
});
binding.backButton.setOnClickListener(v -> {
latestSettings.settings.set_match_num(cur_match_num-1);
cur_match_num -= 1;
update_match_num();
});
}
private void update_match_num(){
// cur_match_num = latestSettings.settings.get_match_num();
binding.matchnum.setText(String.valueOf(cur_match_num+1));
System.out.println(cur_match_num);
if(cur_match_num <= 0){
binding.backButton.setVisibility(View.GONE);
}else{
binding.backButton.setVisibility(View.VISIBLE);
}
if(cur_match_num >= event.matches.size()-1){
binding.nextButton.setVisibility(View.GONE);
}else{
binding.nextButton.setVisibility(View.VISIBLE);
}
update_scouting_data();
}
public void update_scouting_data(){
frcMatch match = event.matches.get(cur_match_num);
// Get team number
String[] split = alliance_position.split("-");
Integer team_num = null;
switch (split[0]){
case "red":
team_num = match.redAlliance[Integer.parseInt(split[1])-1];
break;
case "blue":
team_num = match.blueAlliance[Integer.parseInt(split[1])-1];
break;
}
binding.barTeamNum.setText(String.valueOf(team_num));
frcTeam team = null;
for(int i=0; i < event.teams.size(); i++){
frcTeam tmpteam = event.teams.get(i);
if(tmpteam.teamNumber == team_num){
team = tmpteam;
break;
}
}
binding.teamName.setText(team.teamName);
binding.teamDescription.setText(team.getDescription());
fields.load();
ScoutingVersion.inputType[] values = fields.values[fields.values.length-1];
int prev_text = binding.teamDescription.getId();
for(int i = 0 ; i < values.length; i++){
TextView tv = new TextView(getContext());
// RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
//// params.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
// params.addRule(RelativeLayout.ALIGN_LEFT, prev_text);
// tv.setLayoutParams(params);
String text = "Fallback";
switch (values[i].getInputType()){
case SLIDER:
text = "Slider";
break;
case DROPDOWN:
text = "Dropdown";
break;
case NOTES_INPUT:
text = "Notes";
break;
}
System.out.println(text);
tv.setText(text);
binding.MatchScoutArea.addView(tv);
prev_text = tv.getId();
}
}
}
@@ -0,0 +1,12 @@
package com.astatin3.scoutingapp2025.ui.scouting;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
public class pitScoutingView extends ConstraintLayout {
public pitScoutingView(@NonNull Context context) {
super(context);
}
}
@@ -28,20 +28,23 @@ public class scoutingFragment extends Fragment {
binding = FragmentScoutingBinding.inflate(inflater, container, false);
View root = binding.getRoot();
binding.buttons.setVisibility(View.VISIBLE);
binding.matchScoutingView.setVisibility(View.GONE);
if(latestSettings.settings.get_evcode().equals("unset")){
binding.noEventError.setVisibility(View.VISIBLE);
binding.buttons.setVisibility(View.GONE);
}
binding.matchScoutingButton.setOnClickListener(v -> {
binding.buttons.setVisibility(View.GONE);
binding.matchScoutingView.setVisibility(View.VISIBLE);
binding.matchScoutingView.init(binding);
// byte[] bytes = fields.save();
// System.out.println(bytes.length);
// System.out.println(fields.load(bytes)[0].length);
System.out.println(fields.load());
fields.test();
// fields.test();
// ByteBuilder bb = new ByteBuilder();
@@ -108,6 +108,53 @@ public class settingsFragment extends Fragment {
PowerSpinnerView alliance_pos_spinnerView = binding.alliancePosDropdown;
List<IconSpinnerItem> alliance_pos_iconSpinnerItems = new ArrayList<>();
String target_alliance_pos = latestSettings.settings.get_alliance_pos();
int alliance_pos_target_index = -1;
String[] alliance_pos_list = new String[]{"red-1", "red-2", "red-3",
"blue-1", "blue-2", "blue-3"};
for(int i = 0; i < alliance_pos_list.length; i++){
if(alliance_pos_list[i].equals(target_alliance_pos)){
alliance_pos_target_index = i;
}
alliance_pos_iconSpinnerItems.add(new IconSpinnerItem(alliance_pos_list[i]));
}
IconSpinnerAdapter alliance_pos_iconSpinnerAdapter = new IconSpinnerAdapter(alliance_pos_spinnerView);
alliance_pos_spinnerView.setSpinnerAdapter(alliance_pos_iconSpinnerAdapter);
alliance_pos_spinnerView.setItems(alliance_pos_iconSpinnerItems);
alliance_pos_spinnerView.setLifecycleOwner(this);
if(alliance_pos_target_index != -1){
alliance_pos_spinnerView.selectItemByIndex(alliance_pos_target_index);
}
alliance_pos_spinnerView.setOnSpinnerItemSelectedListener(new OnSpinnerItemSelectedListener<IconSpinnerItem>() {
@Override
public void onItemSelected(int oldIndex, @Nullable IconSpinnerItem oldItem, int newIndex,
IconSpinnerItem newItem) {
latestSettings.settings.set_alliance_pos(newItem.getText().toString());
}
});
//
// CheckBox practice_mode = binding.practiceMode;
// practice_mode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@@ -155,6 +202,7 @@ public class settingsFragment extends Fragment {
spinnerView.clearSelectedItem();
// practice_mode.setChecked(latestSettings.settings.get_practice_mode());
wifi_mode.setChecked(latestSettings.settings.get_wifi_mode());
alliance_pos_spinnerView.selectItemByIndex(0);
});
alert.setNegativeButton("Cancel", null);