From 5279c085e1b97055d90db4a3d2ea81d481514521 Mon Sep 17 00:00:00 2001 From: Daniel Carta <79732052+immortaldan10@users.noreply.github.com> Date: Tue, 17 Jun 2025 11:15:36 -0600 Subject: [PATCH] Match Scouting Indicator Overhaul Redo of the UI for the scouting indicator and overall enhancement of the UI --- .../ui/scouting/MatchScoutingFragment.java | 31 +++--- .../ui/views/MatchScoutingIndicator.java | 91 ++++++++++++++++ app/src/main/res/.DS_Store | Bin 0 -> 6148 bytes app/src/main/res/drawable/triangle_left.xml | 9 ++ app/src/main/res/drawable/triangle_right.xml | 9 ++ .../res/layout/fragment_scouting_match.xml | 96 ++++------------- .../layout/view_match_scouting_indicator.xml | 101 ++++++++++++++++++ 7 files changed, 244 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/com/ridgebotics/ridgescout/ui/views/MatchScoutingIndicator.java create mode 100644 app/src/main/res/.DS_Store create mode 100644 app/src/main/res/drawable/triangle_left.xml create mode 100644 app/src/main/res/drawable/triangle_right.xml create mode 100644 app/src/main/res/layout/view_match_scouting_indicator.xml diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/scouting/MatchScoutingFragment.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/scouting/MatchScoutingFragment.java index ffcdd1f..be0acb8 100644 --- a/app/src/main/java/com/ridgebotics/ridgescout/ui/scouting/MatchScoutingFragment.java +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/scouting/MatchScoutingFragment.java @@ -49,8 +49,9 @@ public class MatchScoutingFragment extends Fragment { alliance_position = SettingsManager.getAllyPos(); username = SettingsManager.getUsername(); - binding.username.setText(username); - binding.alliancePosText.setText(alliance_position); + binding.bindicator.setUsername(username); + binding.bindicator.setAlliancePos(alliance_position); + binding.bindicator.bringToFront(); binding.matchTeamCard.setVisibility(View.GONE); clear_fields(); @@ -66,7 +67,7 @@ public class MatchScoutingFragment extends Fragment { - binding.nextButton.setOnClickListener(v -> { + binding.bindicator.match_indicator_next_button.setOnClickListener(v -> { if(edited) save(); SettingsManager.setMatchNum(cur_match_num+1); cur_match_num += 1; @@ -75,21 +76,21 @@ public class MatchScoutingFragment extends Fragment { }); if(SettingsManager.getEnableQuickAlliancePosChange()) - binding.fileIndicator.setOnClickListener(v -> { + binding.bindicator.setOnClickListener(v -> { // if(e.getAction() != MotionEvent.ACTION_MOVE) return true; // System.out.println(e.getAxisValue(0)); if(edited) save(); alliance_position = incrementMatchPos(alliance_position); SettingsManager.setAllyPos(alliance_position); - binding.alliancePosText.setText(alliance_position); + binding.bindicator.setAlliancePos(alliance_position); update_match_num(); update_scouting_data(); // return true; }); - binding.backButton.setOnClickListener(v -> { + binding.bindicator.match_indicator_back_button.setOnClickListener(v -> { if(edited) save(); SettingsManager.setMatchNum(cur_match_num-1); cur_match_num -= 1; @@ -159,7 +160,7 @@ public class MatchScoutingFragment extends Fragment { } public void set_indicator_color(int color){ - binding.fileIndicator.setBackgroundColor(color); + binding.bindicator.setColor(color); } public void update_asm(){ @@ -239,18 +240,18 @@ public class MatchScoutingFragment extends Fragment { edited = false; - binding.matchnum.setText(String.valueOf(cur_match_num+1)); + binding.bindicator.setMatchNum(String.valueOf(cur_match_num+1)); if(cur_match_num <= 0){ - binding.backButton.setVisibility(View.GONE); + binding.bindicator.match_indicator_back_button.setVisibility(View.GONE); }else{ - binding.backButton.setVisibility(View.VISIBLE); + binding.bindicator.match_indicator_back_button.setVisibility(View.VISIBLE); } if(cur_match_num >= event.matches.size()-1){ - binding.nextButton.setVisibility(View.GONE); + binding.bindicator.match_indicator_next_button.setVisibility(View.GONE); }else{ - binding.nextButton.setVisibility(View.VISIBLE); + binding.bindicator.match_indicator_next_button.setVisibility(View.VISIBLE); } } @@ -272,7 +273,7 @@ public class MatchScoutingFragment extends Fragment { break; } - binding.barTeamNum.setText(String.valueOf(team_num)); + binding.bindicator.setTeamNum(String.valueOf(team_num)); frcTeam team = null; for(int i=0; i < event.teams.size(); i++){ @@ -385,7 +386,7 @@ public class MatchScoutingFragment extends Fragment { private void enableRescoutButton(){ set_indicator_color(rescout ? rescout_color : saved_color); - binding.fileIndicator.setOnLongClickListener(v -> { + binding.bindicator.setOnLongClickListener(v -> { rescout = !rescout; if(rescout){ set_indicator_color(rescout_color); @@ -402,6 +403,6 @@ public class MatchScoutingFragment extends Fragment { } private void disableRescoutButton(){ - binding.fileIndicator.setOnLongClickListener(null); + binding.bindicator.setOnLongClickListener(null); } } diff --git a/app/src/main/java/com/ridgebotics/ridgescout/ui/views/MatchScoutingIndicator.java b/app/src/main/java/com/ridgebotics/ridgescout/ui/views/MatchScoutingIndicator.java new file mode 100644 index 0000000..8571d85 --- /dev/null +++ b/app/src/main/java/com/ridgebotics/ridgescout/ui/views/MatchScoutingIndicator.java @@ -0,0 +1,91 @@ +package com.ridgebotics.ridgescout.ui.views; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.ridgebotics.ridgescout.R; +import com.ridgebotics.ridgescout.types.frcTeam; + +import org.w3c.dom.Text; + +// A view for displaying information about a team. +public class MatchScoutingIndicator extends RelativeLayout { + public MatchScoutingIndicator(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public MatchScoutingIndicator(Context context) { + super(context); + init(context); + } + + public TextView match_indicator_alliance_pos_text; + public TextView match_indicator_bar_team_num; + public TextView match_indicator_matchnum; + public TextView match_indicator_username; + public ImageButton match_indicator_back_button; + public ImageButton match_indicator_next_button; + private ConstraintLayout box; + private View coloredBackground; + + public void init(Context context) { + LayoutInflater.from(context).inflate(R.layout.view_match_scouting_indicator, this, true); + match_indicator_back_button = findViewById(R.id.match_indicator_back_button); + match_indicator_next_button = findViewById(R.id.match_indicator_next_button); + match_indicator_alliance_pos_text = findViewById(R.id.match_indicator_alliance_pos_text); + match_indicator_username = findViewById(R.id.match_indicator_username); + match_indicator_matchnum = findViewById(R.id.match_indicator_matchnum); + match_indicator_bar_team_num = findViewById(R.id.match_indicator_bar_team_num); + box = findViewById(R.id.file_indicator_box); + coloredBackground = findViewById(R.id.match_indicator_background); + } + + public void setUsername(String username){ + match_indicator_username.setText(username); + } + + public void setAlliancePos(String alliancePos){ + match_indicator_alliance_pos_text.setText(alliancePos); + } + + public void setMatchNum(String matchNum){ + match_indicator_matchnum.setText(matchNum); + } + + public void setTeamNum(String teamNum){ + match_indicator_bar_team_num.setText(teamNum); + } + + public void setColor(int color){ + Drawable drawable = box.getBackground(); + drawable.mutate(); + drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); + + float[] hsv = new float[3]; + Color.colorToHSV(color,hsv); + + coloredBackground.setBackgroundColor( + Color.HSVToColor(220, new float[]{ + hsv[0], + Math.min(hsv[1], 0.75f), + Math.min(hsv[2], 0.5f) + }) + ); + } +} diff --git a/app/src/main/res/.DS_Store b/app/src/main/res/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..746f05cb831a48c095180b17fe6153229e3404c7 GIT binary patch literal 6148 zcmeHKJ8Hu~5S>X}2-2ubxmWNF7UP^i7qEj&8lix}NvkU7%F*)XL$Hw27}A(GF!Oe2 z=dI8yG#U}n-KF1(v?9{L4du(i((K%PVGo&6ARKobQN5lpZX>;%!Tr4E z5AWk!+`CR>mI_b-DnJFO02R1N0qec6<|&Yo3Qz$m@T-7*9}3*CCQgC==|J!i0JuTg z4QrnzfW;EPnm7d_1Jj@agQ_`VXwZ=_SyvOMz@Urf@S*u+%?U;Q>A1gmxo8b!qyki6 zuE1k#TkHQX@IU7NIf*+eKn3nf0p0Ao{SL2`y>;<&)@uv=0JoZNxEa + + diff --git a/app/src/main/res/drawable/triangle_right.xml b/app/src/main/res/drawable/triangle_right.xml new file mode 100644 index 0000000..a4cabee --- /dev/null +++ b/app/src/main/res/drawable/triangle_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/fragment_scouting_match.xml b/app/src/main/res/layout/fragment_scouting_match.xml index b494abd..21e688a 100644 --- a/app/src/main/res/layout/fragment_scouting_match.xml +++ b/app/src/main/res/layout/fragment_scouting_match.xml @@ -5,16 +5,28 @@ xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto"> + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.0"> @@ -25,16 +37,15 @@ android:layout_alignParentEnd="true" android:layout_margin="5dp" android:background="@drawable/border" - android:padding="10dp" - android:orientation="horizontal"> + android:orientation="horizontal" + android:padding="10dp"> - + android:text="Scouting Notice" + android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"> @@ -46,75 +57,4 @@ - - -