diff --git a/README.md b/README.md index d62bd85..d9f7e14 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ Ridgebotics 2025 scouting app in Android TODO: -- Allow the option to save event data without matches, and handle only having matches. This is where practice mode should be selected. - Make the file browser UI - Add white border around the datamatrix code to allow file transfer in dark mode - Fix the code scanning progress indicator 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 6b7f9ad..550f796 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 @@ -49,12 +49,22 @@ public class dataFragment extends Fragment { submenu = true; }); + binding.searchButton.setOnClickListener(v -> { + binding.buttons.setVisibility(View.GONE); + binding.searchView.setVisibility(View.VISIBLE); + binding.searchView.init(binding, event); + submenu = true; + }); + + show_ui(); + return root; } public void show_ui(){ binding.buttons.setVisibility(View.VISIBLE); binding.overviewView.setVisibility(View.GONE); + binding.searchView.setVisibility(View.GONE); submenu = false; } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/overviewView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/overviewView.java index ea1f8b2..2a3296e 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/overviewView.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/overviewView.java @@ -81,7 +81,8 @@ public class overviewView extends ScrollView { } tr.addView(text); } - binding.matchTable.addView(tr); + if(tr != null) + binding.matchTable.addView(tr); } diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/searchView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/searchView.java new file mode 100644 index 0000000..94dde6c --- /dev/null +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/data/searchView.java @@ -0,0 +1,26 @@ +package com.astatin3.scoutingapp2025.ui.data; + +import android.content.Context; +import android.util.AttributeSet; + +import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.astatin3.scoutingapp2025.databinding.FragmentDataBinding; +import com.astatin3.scoutingapp2025.types.frcEvent; + +public class searchView extends ConstraintLayout { + public searchView(@NonNull Context context) { + super(context); + } + public searchView(Context context, AttributeSet attributeSet){ + super(context, attributeSet); + } + + FragmentDataBinding binding; + + public void init(FragmentDataBinding binding, frcEvent event){ + this.binding = binding; + + } +} 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 8404039..3647c1d 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 @@ -91,12 +91,12 @@ public class matchScoutingView extends ConstraintLayout { } - public void init(FragmentScoutingBinding tmp_binding){ + public void init(FragmentScoutingBinding tmp_binding, frcEvent event){ binding = tmp_binding; alliance_position = latestSettings.settings.get_alliance_pos(); - evcode = latestSettings.settings.get_evcode(); - event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata")); + evcode = event.eventCode; + this.event = event; username = latestSettings.settings.get_username(); binding.eventcode.setText(evcode); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/pitScoutingView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/pitScoutingView.java index e59f790..3898d84 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/pitScoutingView.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/pitScoutingView.java @@ -81,11 +81,11 @@ public class pitScoutingView extends ConstraintLayout { } - public void init(FragmentScoutingBinding tmp_binding){ + public void init(FragmentScoutingBinding tmp_binding, frcEvent event){ binding = tmp_binding; - evcode = latestSettings.settings.get_evcode(); - event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata")); + evcode = event.eventCode; + this.event = event; username = latestSettings.settings.get_username(); binding.eventcode.setText(evcode); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/scoutingFragment.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/scoutingFragment.java index 671c8a4..e9bc589 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/scoutingFragment.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/scouting/scoutingFragment.java @@ -14,6 +14,8 @@ import androidx.fragment.app.Fragment; import com.astatin3.scoutingapp2025.MainActivity; import com.astatin3.scoutingapp2025.SettingsVersionStack.latestSettings; import com.astatin3.scoutingapp2025.databinding.FragmentScoutingBinding; +import com.astatin3.scoutingapp2025.types.frcEvent; +import com.astatin3.scoutingapp2025.utility.fileEditor; public class scoutingFragment extends Fragment { @@ -30,7 +32,14 @@ public class scoutingFragment extends Fragment { binding.matchScoutingView.setVisibility(View.GONE); binding.pitScoutingView.setVisibility(View.GONE); - if(latestSettings.settings.get_evcode().equals("unset")){ + String evcode = latestSettings.settings.get_evcode(); + frcEvent event = frcEvent.decode(fileEditor.readFile(evcode + ".eventdata")); + + if(event.matches.isEmpty()) + binding.matchScoutingButton.setVisibility(View.GONE); + + + if(evcode.equals("unset")){ binding.noEventError.setVisibility(View.VISIBLE); binding.buttons.setVisibility(View.GONE); is_main_page = false; @@ -39,7 +48,7 @@ public class scoutingFragment extends Fragment { binding.matchScoutingButton.setOnClickListener(v -> { binding.buttons.setVisibility(View.GONE); binding.matchScoutingView.setVisibility(View.VISIBLE); - binding.matchScoutingView.init(binding); + binding.matchScoutingView.init(binding, event); is_main_page = false; }); @@ -47,7 +56,7 @@ public class scoutingFragment extends Fragment { binding.pitScoutingView.setVisibility(View.VISIBLE); binding.buttons.setVisibility(View.GONE); // binding.pitScoutArea.setVisibility(View.VISIBLE); - binding.pitScoutingView.init(binding); + binding.pitScoutingView.init(binding, event); is_main_page = false; }); diff --git a/app/src/main/java/com/astatin3/scoutingapp2025/ui/transfer/TBAView.java b/app/src/main/java/com/astatin3/scoutingapp2025/ui/transfer/TBAView.java index d80d842..df7a060 100644 --- a/app/src/main/java/com/astatin3/scoutingapp2025/ui/transfer/TBAView.java +++ b/app/src/main/java/com/astatin3/scoutingapp2025/ui/transfer/TBAView.java @@ -19,6 +19,7 @@ import com.astatin3.scoutingapp2025.types.frcTeam; import com.astatin3.scoutingapp2025.databinding.FragmentTransferBinding; import com.astatin3.scoutingapp2025.utility.fileEditor; import com.astatin3.scoutingapp2025.utility.JSONUtil; +import com.google.android.material.tabs.TabLayout; import org.json.JSONArray; import org.json.JSONException; @@ -26,6 +27,7 @@ import org.json.JSONObject; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Comparator; import java.util.Date; @@ -202,7 +204,8 @@ public class TBAView extends ScrollView { Table.bringToFront(); try { - final JSONArray matchData = new JSONArray(matchesString); +// final JSONArray matchData = new JSONArray(matchesString); + final JSONArray matchData = new JSONArray(); final JSONArray teamData = new JSONArray(teamsString); String matchKey = eventData.getString("key"); @@ -234,15 +237,7 @@ public class TBAView extends ScrollView { tv.setTextSize(28); Table.addView(tv); - if(matchData.length() == 0){ - TableRow tr = new TableRow(getContext()); - addTableText(tr, "This event has no matches released yet..."); - Table.addView(tr); - tr = new TableRow(getContext()); - addTableText(tr, "Try manually adding practice matches."); - Table.addView(tr); - return; - } + // Save button Button btn = new Button(getContext()); @@ -255,7 +250,130 @@ public class TBAView extends ScrollView { Table.addView(btn); - TableRow tr = new TableRow(getContext()); + + + if(teamData.length() == 0){ + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("This event has no teams released yet..."); + tv.setTextSize(18); + Table.addView(tv); + + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("This event has no teams released yet..."); + tv.setTextSize(18); + Table.addView(tv); + + btn.setVisibility(View.GONE); + return; + }else if(matchData.length() == 0){ + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("This event has no matches released yet..."); + tv.setTextSize(18); + Table.addView(tv); + + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("Try manually adding practice matches."); + tv.setTextSize(18); + Table.addView(tv); + } + + + + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("Teams"); + tv.setTextSize(28); + Table.addView(tv); + + + + + + + int[] teams = new int[teamData.length()]; + + for(int i = 0 ; i < teamData.length(); i++){ + teams[i] = teamData.getJSONObject(i).getInt("team_number"); + } + + Arrays.sort(teams); + + TableRow tr = null; + for(int i=0; i < teamData.length(); i++){ +// frcTeam team = event.teams.get(i); + int num = teams[i]; + + if(i % 7 == 0){ + if(i != 0) + Table.addView(tr); + tr = new TableRow(getContext()); + } + + TextView text = new TextView(getContext()); + text.setTextSize(18); + text.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); + + text.setText(String.valueOf(num)); +// if(fileEditor.fileExist(event.eventCode + "-" + num + ".pitscoutdata")){ +// text.setBackgroundColor(0x3000FF00); +// }else{ +// text.setBackgroundColor(0x30FF0000); +// } + tr.addView(text); + } + if(tr != null) + Table.addView(tr); + + final ArrayList matchesOBJ = new ArrayList<>(); + + btn.setOnClickListener(v -> { + if(saveData(matchesOBJ, teamData, eventData)){ + alert("Info", "Saved!"); + }else{ + alert("Error", "Error saving files."); + } + }); + + + + tv = new TextView(getContext()); + tv.setLayoutParams(new LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + )); + tv.setGravity(Gravity.CENTER_HORIZONTAL); + tv.setText("Matches"); + tv.setTextSize(28); + Table.addView(tv); + + + + + tr = new TableRow(getContext()); addTableText(tr, "#"); addTableText(tr, "Red-1"); addTableText(tr, "Red-2"); @@ -266,6 +384,10 @@ public class TBAView extends ScrollView { Table.addView(tr); + if(matchData.length() == 0) + return; + + final JSONArray sortedMatchData = JSONUtil.sort(matchData, (a, b) -> { JSONObject ja = (JSONObject)a; JSONObject jb = (JSONObject)b; @@ -277,7 +399,6 @@ public class TBAView extends ScrollView { }); - final ArrayList matchesOBJ = new ArrayList<>(); boolean toggle = false; int matchCount = 1; @@ -335,13 +456,13 @@ public class TBAView extends ScrollView { toggle = !toggle; } - btn.setOnClickListener(v -> { - if(saveData(matchesOBJ, teamData, eventData)){ - alert("Info", "Saved!"); - }else{ - alert("Error", "Error saving files."); - } - }); +// btn.setOnClickListener(v -> { +// if(saveData(matchesOBJ, teamData, eventData)){ +// alert("Info", "Saved!"); +// }else{ +// alert("Error", "Error saving files."); +// } +// }); }catch (JSONException j){ j.printStackTrace(); diff --git a/app/src/main/res/layout/fragment_data.xml b/app/src/main/res/layout/fragment_data.xml index 275b03e..939a720 100644 --- a/app/src/main/res/layout/fragment_data.xml +++ b/app/src/main/res/layout/fragment_data.xml @@ -5,43 +5,6 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file