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);
+118 -1
View File
@@ -28,10 +28,12 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="48dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
app:layout_constraintTop_toTopOf="parent"
tools:visibility="gone">
<Button
android:id="@+id/matchScoutingButton"
@@ -57,5 +59,120 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.astatin3.scoutingapp2025.ui.scouting.matchScoutingView
android:id="@+id/matchScoutingView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="48dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0">
<TextView
android:id="@+id/bar_team_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temp"
android:textSize="24sp"
app:layout_constraintEnd_toStartOf="@+id/next_button"
app:layout_constraintStart_toEndOf="@+id/matchnum"
app:layout_constraintTop_toTopOf="parent" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/back_button">
<LinearLayout
android:id="@+id/MatchScoutArea"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="48dp">
<TextView
android:id="@+id/team_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textAlignment="center"
android:textSize="24sp" />
<TextView
android:id="@+id/team_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:text="TextView"
android:textAlignment="center" />
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/middle_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/next_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/alliance_pos_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temp"
android:textAlignment="center"
app:layout_constraintEnd_toStartOf="@+id/matchnum"
app:layout_constraintStart_toEndOf="@+id/back_button"
app:layout_constraintTop_toBottomOf="@id/eventcode" />
<TextView
android:id="@+id/eventcode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temp"
android:textAlignment="center"
app:layout_constraintEnd_toStartOf="@+id/matchnum"
app:layout_constraintStart_toEndOf="@+id/back_button"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/matchnum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Temp"
android:textAlignment="center"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</com.astatin3.scoutingapp2025.ui.scouting.matchScoutingView>
</androidx.constraintlayout.widget.ConstraintLayout>
+73 -37
View File
@@ -40,39 +40,20 @@
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@+id/eventDropdown" />-->
<CheckBox
android:id="@+id/wifi_mode"
android:layout_width="412dp"
android:layout_height="79dp"
android:layout_marginTop="20dp"
android:text="Wifi Mode"
android:textSize="24sp"
<TextView
android:id="@+id/textView2"
android:layout_width="66dp"
android:layout_height="24dp"
android:layout_marginStart="172dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="173dp"
android:text="Name"
android:textAlignment="center"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/eventDropdown" />
<com.skydoves.powerspinner.PowerSpinnerView
android:id="@+id/eventDropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black_2"
android:gravity="center"
android:hint="No events selected"
android:padding="10dp"
android:textColor="@color/main_500"
android:textColorHint="@color/teal_700"
android:textSize="14.5sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1"
app:spinner_arrow_gravity="end"
app:spinner_arrow_padding="8dp"
app:spinner_divider_color="@color/teal_200"
app:spinner_divider_show="true"
app:spinner_divider_size="0.4dp"
app:spinner_item_height="46dp"
app:spinner_popup_background="@color/black_2"
app:spinner_popup_elevation="14dp" />
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/username"
@@ -101,20 +82,75 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/username" />
<com.skydoves.powerspinner.PowerSpinnerView
android:id="@+id/eventDropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black_2"
android:gravity="center"
android:hint="No events selected"
android:padding="10dp"
android:textColor="@color/main_500"
android:textColorHint="@color/teal_700"
android:textSize="14.5sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView1"
app:spinner_arrow_gravity="end"
app:spinner_arrow_padding="8dp"
app:spinner_divider_color="@color/teal_200"
app:spinner_divider_show="true"
app:spinner_divider_size="0.4dp"
app:spinner_item_height="46dp"
app:spinner_popup_background="@color/black_2"
app:spinner_popup_elevation="14dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="66dp"
android:id="@+id/alliance_pos_text"
android:layout_width="107dp"
android:layout_height="24dp"
android:layout_marginStart="172dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="173dp"
android:text="Name"
android:layout_marginStart="152dp"
android:layout_marginTop="20dp"
android:layout_marginEnd="152dp"
android:text="Alliance Position"
android:textAlignment="center"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/eventDropdown" />
<com.skydoves.powerspinner.PowerSpinnerView
android:id="@+id/alliance_pos_dropdown"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/black_2"
android:gravity="center"
android:hint="No events selected"
android:padding="10dp"
android:textColor="@color/main_500"
android:textColorHint="@color/teal_700"
android:textSize="14.5sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/alliance_pos_text"
app:spinner_arrow_gravity="end"
app:spinner_arrow_padding="8dp"
app:spinner_divider_color="@color/teal_200"
app:spinner_divider_show="true"
app:spinner_divider_size="0.4dp"
app:spinner_item_height="46dp"
app:spinner_popup_background="@color/black_2"
app:spinner_popup_elevation="14dp" />
<CheckBox
android:id="@+id/wifi_mode"
android:layout_width="412dp"
android:layout_height="79dp"
android:layout_marginTop="20dp"
android:text="Wifi Mode"
android:textSize="24sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/alliance_pos_dropdown" />
<Button
android:id="@+id/reset_button"