Solve random things

This commit is contained in:
Michael Mikovsky
2025-07-25 12:51:01 -06:00
parent 5279c085e1
commit 890b879ef9
20 changed files with 255 additions and 92 deletions
+16 -1
View File
@@ -28,9 +28,24 @@
- Statbotics intgration - Statbotics intgration
- Scout error estimation using OPR-like calculation - Scout error estimation using OPR-like calculation
- - Would most likely require Statbotics - - Would most likely require Statbotics
https://www.thebluealliance.com/avatars
### Screenshots ### Screenshots
|Match scouting interface|Field editor|Teams data viewer| |Match scouting interface|Field editor|Teams data viewer|
|-|-|-| |-|-|-|
|![Screenshot1](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/1.png?raw=true)|![Screenshot2](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/2.png?raw=true)|![Screenshot3](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/3.png?raw=true)| |![Screenshot1](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/1.png?raw=true)|![Screenshot2](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/2.png?raw=true)|![Screenshot3](https://github.com/Team4388/ScoutingApp2025/blob/main/metadata/en-US/images/phoneScreenshots/3.png?raw=true)|
<!--
Things:
- Added verbosity on could not find team number error
- Tally counter now has more visible font (@style/TextAppearance.MaterialComponents.Headline6)
- Match scouting title bar's background now fills its container (There was a small gap before)
- Added border around match title bar buttons
- Changed the rescout color to be a less obnoxious blue
- Removed blank space above pit scouting team selector
- Added new scouting indicator for pit scouting
- TBA now sometimes does not let you download all of the team images, go to https://www.thebluealliance.com/avatars in a web browser to try to fix this
- Moved dropdown title text box slightly farther up
- Added downwards pointing triangle to dropdown
- Removed slight gap in icon of the team option
-->
@@ -20,6 +20,7 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.google.android.material.divider.MaterialDivider; import com.google.android.material.divider.MaterialDivider;
import com.ridgebotics.ridgescout.ui.views.PitScoutingIndicator;
import com.ridgebotics.ridgescout.ui.views.ToggleTitleView; import com.ridgebotics.ridgescout.ui.views.ToggleTitleView;
import com.ridgebotics.ridgescout.utility.AlertManager; import com.ridgebotics.ridgescout.utility.AlertManager;
import com.ridgebotics.ridgescout.utility.SettingsManager; import com.ridgebotics.ridgescout.utility.SettingsManager;
@@ -76,7 +77,6 @@ public class PitScoutingFragment extends Fragment {
String fileUsernames = ""; String fileUsernames = "";
ToggleTitleView[] titles; ToggleTitleView[] titles;
AutoSaveManager asm = new AutoSaveManager(this::save, AUTO_SAVE_DELAY); AutoSaveManager asm = new AutoSaveManager(this::save, AUTO_SAVE_DELAY);
ArrayList<RawDataType> rawDataTypes; ArrayList<RawDataType> rawDataTypes;
@@ -99,7 +99,7 @@ public class PitScoutingFragment extends Fragment {
} }
public void set_indicator_color(int color){ public void set_indicator_color(int color){
binding.pitFileIndicator.setBackgroundColor(color); binding.pitIndicator.setColor(color);
} }
public void update_asm(){ public void update_asm(){
@@ -114,10 +114,9 @@ public class PitScoutingFragment extends Fragment {
public void loadTeam(){ public void loadTeam(){
// clear_fields(); // clear_fields();
binding.pitFileIndicator.setVisibility(View.VISIBLE);
binding.pitsTeamCard.setVisibility(View.VISIBLE); binding.pitsTeamCard.setVisibility(View.VISIBLE);
binding.pitBarTeamNum.setText(String.valueOf(team.teamNumber)); binding.pitIndicator.setTeamNum(team.teamNumber);
binding.pitUsername.setText(SettingsManager.getUsername()); binding.pitIndicator.setUsername(SettingsManager.getUsername());
binding.pitsTeamCard.fromTeam(team); binding.pitsTeamCard.fromTeam(team);
filename = evcode + "-" + team.teamNumber + ".pitscoutdata"; filename = evcode + "-" + team.teamNumber + ".pitscoutdata";
@@ -146,7 +145,7 @@ public class PitScoutingFragment extends Fragment {
} }
} }
binding.pitFileIndicator.bringToFront(); binding.pitIndicator.bringToFront();
asm.start(); asm.start();
@@ -154,7 +153,7 @@ public class PitScoutingFragment extends Fragment {
private void enableRescoutButton(){ private void enableRescoutButton(){
set_indicator_color(rescout ? rescout_color : saved_color); set_indicator_color(rescout ? rescout_color : saved_color);
binding.pitFileIndicator.setOnLongClickListener(v -> { binding.pitIndicator.setOnLongClickListener(v -> {
rescout = !rescout; rescout = !rescout;
if(rescout){ if(rescout){
set_indicator_color(rescout_color); set_indicator_color(rescout_color);
@@ -171,7 +170,7 @@ public class PitScoutingFragment extends Fragment {
} }
private void disableRescoutButton(){ private void disableRescoutButton(){
binding.pitFileIndicator.setOnLongClickListener(null); binding.pitIndicator.setOnLongClickListener(null);
} }
@@ -128,10 +128,11 @@ public class ScoutingFragment extends Fragment {
int matchNum = SettingsManager.getMatchNum(); int matchNum = SettingsManager.getMatchNum();
int nextMatch = -1; int nextMatch = -1;
int teamNum = SettingsManager.getTeamNum();
try { try {
nextMatch = event.getNextTeamMatch(SettingsManager.getTeamNum(), matchNum).matchIndex; nextMatch = event.getNextTeamMatch(teamNum, matchNum).matchIndex;
} catch (Exception e){ } catch (Exception e){
AlertManager.error(e); AlertManager.error("Sorry, in event ("+evcode+"), your team number ("+teamNum+") wasn't found!", e);
} }
binding.textNextMatch.setText("Our next match: Match " + nextMatch); binding.textNextMatch.setText("Our next match: Match " + nextMatch);
@@ -28,7 +28,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
// This is now deprecated // This is now deprecated. use HTTPSync
// Class to synchronise data over FTP. // Class to synchronise data over FTP.
public class FTPSync extends Thread { public class FTPSync extends Thread {
public static final String remoteBasePath = "/RidgeScout/"; public static final String remoteBasePath = "/RidgeScout/";
@@ -30,8 +30,7 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
// This is now deprsicated // Class to synchronise data over HTTP.
// Class to syncronise data over FTP.
public class HttpSync extends Thread { public class HttpSync extends Thread {
public static final String timestampsFilename = "timestamps"; public static final String timestampsFilename = "timestamps";
@@ -78,7 +78,7 @@ public class CustomSpinnerView extends LinearLayout {
CustomSpinnerPopup popup = new CustomSpinnerPopup(getContext()).init(options, option -> { CustomSpinnerPopup popup = new CustomSpinnerPopup(getContext()).init(options, option -> {
// dialog.(); // dialog.();
if(!isEnabled()) return; if(!isEnabled()) return;
item.setText(option); item.setText("" + option);
index = options.indexOf(option); index = options.indexOf(option);
if(onClickListener != null) { if(onClickListener != null) {
onClickListener.onClick(option, options.indexOf(option)); onClickListener.onClick(option, options.indexOf(option));
@@ -105,7 +105,7 @@ public class CustomSpinnerView extends LinearLayout {
} }
public void setOption(String option) { public void setOption(String option) {
item.setText(option); item.setText("" + option);
index = options.indexOf(option); index = options.indexOf(option);
} }
@@ -1,6 +1,7 @@
package com.ridgebotics.ridgescout.ui.views; package com.ridgebotics.ridgescout.ui.views;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
@@ -54,6 +55,20 @@ public class MatchScoutingIndicator extends RelativeLayout {
match_indicator_bar_team_num = findViewById(R.id.match_indicator_bar_team_num); match_indicator_bar_team_num = findViewById(R.id.match_indicator_bar_team_num);
box = findViewById(R.id.file_indicator_box); box = findViewById(R.id.file_indicator_box);
coloredBackground = findViewById(R.id.match_indicator_background); coloredBackground = findViewById(R.id.match_indicator_background);
int currentNightMode = getContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
switch (currentNightMode) {
case Configuration.UI_MODE_NIGHT_NO:
// Night mode is not active on device
match_indicator_back_button.setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
match_indicator_next_button.setColorFilter(Color.BLACK, PorterDuff.Mode.SRC_IN);
break;
case Configuration.UI_MODE_NIGHT_YES:
// Night mode is active on device
match_indicator_back_button.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
match_indicator_next_button.setColorFilter(Color.WHITE, PorterDuff.Mode.SRC_IN);
break;
}
} }
public void setUsername(String username){ public void setUsername(String username){
@@ -73,19 +88,31 @@ public class MatchScoutingIndicator extends RelativeLayout {
} }
public void setColor(int color){ public void setColor(int color){
Drawable drawable = box.getBackground(); // Set color of main background rectangle
drawable.mutate(); Drawable box_drawable = box.getBackground();
drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP); box_drawable.mutate();
box_drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
float[] hsv = new float[3]; float[] hsv = new float[3];
Color.colorToHSV(color,hsv); Color.colorToHSV(color,hsv);
int background_color = Color.HSVToColor(220, new float[]{
hsv[0],
Math.min(hsv[1], 0.75f),
Math.min(hsv[2], 0.5f)
});
// Set color of main background rectangle, slightly dimmer
coloredBackground.setBackgroundColor( coloredBackground.setBackgroundColor(
Color.HSVToColor(220, new float[]{ background_color
hsv[0],
Math.min(hsv[1], 0.75f),
Math.min(hsv[2], 0.5f)
})
); );
Drawable left_drawable = match_indicator_back_button.getBackground();
left_drawable.mutate();
left_drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
Drawable right_drawable = match_indicator_next_button.getBackground();
right_drawable.mutate();
right_drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
} }
} }
@@ -0,0 +1,75 @@
package com.ridgebotics.ridgescout.ui.views;
import android.content.Context;
import android.content.res.Configuration;
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.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import com.ridgebotics.ridgescout.R;
// A view for displaying information about a team.
public class PitScoutingIndicator extends RelativeLayout {
public PitScoutingIndicator(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init(context);
}
public PitScoutingIndicator(Context context) {
super(context);
init(context);
}
public TextView pit_indicator_username;
public TextView pit_indicator_team_num;
private ConstraintLayout box;
private View coloredBackground;
public void init(Context context) {
LayoutInflater.from(context).inflate(R.layout.view_pit_scouting_indicator, this, true);
pit_indicator_username = findViewById(R.id.pit_indicator_username);
pit_indicator_team_num = findViewById(R.id.pit_indicator_teamnum);
box = findViewById(R.id.pit_indicator_box);
coloredBackground = findViewById(R.id.pit_indicator_background);
}
public void setUsername(String username){
pit_indicator_username.setText(username);
}
public void setTeamNum(int teamNum) {
pit_indicator_team_num.setText(String.valueOf(teamNum));
}
public void setColor(int color){
// Set color of main background rectangle
Drawable box_drawable = box.getBackground();
box_drawable.mutate();
box_drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
float[] hsv = new float[3];
Color.colorToHSV(color,hsv);
int background_color = Color.HSVToColor(220, new float[]{
hsv[0],
Math.min(hsv[1], 0.75f),
Math.min(hsv[2], 0.5f)
});
// Set color of main background rectangle, slightly dimmer
coloredBackground.setBackgroundColor(
background_color
);
}
}
@@ -6,7 +6,7 @@ import android.graphics.Color;
public class Colors { public class Colors {
// Lists and stuff // Lists and stuff
public static final int color_found = 0x7f00ff00; public static final int color_found = 0x7f00ff00;
public static final int color_rescout = 0x7f0000ff; public static final int color_rescout = 0xff007fff;
public static final int color_not_found = 0x7f7f0000; public static final int color_not_found = 0x7f7f0000;
@@ -14,9 +14,9 @@ public class Colors {
public static final int unfocused_background_color = 0x50118811; public static final int unfocused_background_color = 0x50118811;
public static final int unsaved_color = 0x60ff0000; public static final int unsaved_color = 0xffaa0000;
public static final int saved_color = 0x6000ff00; public static final int saved_color = 0xff00aa00;
public static final int rescout_color = 0x600000ff; public static final int rescout_color = 0xff007fff;
// Data graphs // Data graphs
@@ -25,11 +25,24 @@ public class ImageRequestTask extends AsyncTask<String, Void, Bitmap> {
try { try {
URL url = new URL(src); URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection(); HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// We do a little bit of spoofing
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.setDoInput(true); connection.setDoInput(true);
connection.connect(); connection.connect();
InputStream input = connection.getInputStream();
return BitmapFactory.decodeStream(input); int code = connection.getResponseCode();
} catch (FileNotFoundException e) { switch (code) {
case 200:
InputStream input = connection.getInputStream();
return BitmapFactory.decodeStream(input);
case 403:
// AlertManager.error("Got 403, Going to https://www.thebluealliance.com/avatars may fix this");
return null;
default:
AlertManager.error("Error downloading image " + src, "Got response code: " + code);
return null;
}
} catch (FileNotFoundException e){
return null; return null;
} catch (IOException e){ } catch (IOException e){
AlertManager.error("Error downloading image " + src, e); AlertManager.error("Error downloading image " + src, e);
@@ -45,7 +45,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:text="Scouting Notice" android:text="Scouting Notice"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"></TextView> android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"/>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
@@ -4,54 +4,27 @@
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<androidx.constraintlayout.widget.ConstraintLayout <com.ridgebotics.ridgescout.ui.views.PitScoutingIndicator
android:id="@+id/pit_file_indicator" android:id="@+id/pit_indicator"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="60dp"
android:background="#60ff0000"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pit_bar_team_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="4388"
android:textAlignment="center"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pitUsername"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Username"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/pit_bar_team_num"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ScrollView <ScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintEnd_toEndOf="parent"> app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout <LinearLayout
android:id="@+id/pitScoutArea" android:id="@+id/pitScoutArea"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical"
android:paddingTop="48dp"> android:paddingTop="60dp">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/scouting_notice_box" android:id="@+id/scouting_notice_box"
@@ -60,16 +33,15 @@
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:layout_margin="5dp" android:layout_margin="5dp"
android:background="@drawable/border" android:background="@drawable/border"
android:padding="10dp" android:orientation="horizontal"
android:orientation="horizontal"> android:padding="10dp">
<TextView <TextView
android:id="@+id/scouting_notice_text" android:id="@+id/scouting_notice_text"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1" android:text="Scouting Notice"
android:text="Scouting Notice"> android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"></TextView>
</TextView>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
@@ -14,8 +14,7 @@
android:id="@+id/teams" android:id="@+id/teams"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical" android:orientation="vertical" />
android:paddingTop="48dp" />
</ScrollView> </ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
@@ -8,9 +8,12 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="3dp" android:layout_marginLeft="3dp"
android:orientation="horizontal" android:layout_marginTop="5dp"
android:layout_marginRight="3dp"
android:layout_marginBottom="3dp"
android:background="@drawable/border" android:background="@drawable/border"
android:orientation="horizontal"
tools:ignore="UselessParent"> tools:ignore="UselessParent">
<TextView <TextView
@@ -18,8 +21,9 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_margin="10dp" android:layout_margin="10dp"
android:textSize="24sp" android:overlapAnchor="false"
android:overlapAnchor="false"/> android:text="▼ Options"
android:textSize="24sp" />
</LinearLayout> </LinearLayout>
@@ -28,9 +32,9 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="9dp" android:layout_marginStart="9dp"
android:layout_marginTop="-5dp" android:layout_marginTop="-6dp"
android:paddingLeft="3dp" android:paddingLeft="3dp"
android:paddingRight="3dp" android:paddingRight="3dp"
android:text="Test" android:text="Test"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"/> android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1" />
</RelativeLayout> </RelativeLayout>
@@ -11,7 +11,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5dp" android:layout_margin="5dp"
android:background="@drawable/border" android:background="@drawable/border"
android:padding="3dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
@@ -23,16 +22,18 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent"
tools:visibility="gone" />
<ImageButton <ImageButton
android:id="@+id/match_indicator_back_button" android:id="@+id/match_indicator_back_button"
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="50dp" android:layout_height="50dp"
android:contentDescription="Back"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:src="@drawable/triangle_left" android:src="@drawable/triangle_left"
android:text="Back" android:text="Back"
android:background="@color/zxing_transparent" android:background="@drawable/border"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@@ -42,9 +43,10 @@
android:layout_width="50dp" android:layout_width="50dp"
android:layout_height="50dp" android:layout_height="50dp"
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:contentDescription="Next"
android:src="@drawable/triangle_right" android:src="@drawable/triangle_right"
android:text="Next" android:text="Next"
android:background="@color/zxing_transparent" android:background="@drawable/border"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@@ -53,24 +55,24 @@
android:id="@+id/match_indicator_alliance_pos_text" android:id="@+id/match_indicator_alliance_pos_text"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="4dp" android:layout_marginEnd="58dp"
android:text="Temp" android:text="Temp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
android:textAlignment="center" android:textAlignment="center"
android:textAppearance="@style/TextAppearance.MaterialComponents.Subtitle1"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/match_indicator_next_button" app:layout_constraintEnd_toEndOf="@+id/match_indicator_next_button"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/match_indicator_username" android:id="@+id/match_indicator_username"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="4dp" android:layout_marginStart="58dp"
android:text="Temp" android:text="Temp"
android:textAlignment="center" android:textAlignment="center"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6" android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/match_indicator_back_button" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/pit_indicator_box"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:background="@drawable/border"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<View
android:id="@+id/pit_indicator_background"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="gone" />
<TextView
android:id="@+id/pit_indicator_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="58dp"
android:text="Username"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/pit_indicator_teamnum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:text="4388"
android:textAlignment="center"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline5"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</RelativeLayout>
@@ -17,6 +17,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
android:gravity="center" android:gravity="center"
android:text="0"
android:textAppearance="@style/TextAppearance.MaterialComponents.Headline6"
android:textSize="24sp" /> android:textSize="24sp" />
<Button <Button
+1 -1
View File
@@ -28,7 +28,7 @@
android:id="@+id/team_option_logo" android:id="@+id/team_option_logo"
android:layout_width="54dp" android:layout_width="54dp"
android:layout_height="54dp" android:layout_height="54dp"
android:layout_margin="3dp" android:layout_margin="2dp"
android:scaleType="fitXY" android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1:1" app:layout_constraintDimensionRatio="1:1"
+1 -1
View File
@@ -1,5 +1,5 @@
[versions] [versions]
agp = "8.8.0" agp = "8.11.1"
junit = "4.13.2" junit = "4.13.2"
junitVersion = "1.1.5" junitVersion = "1.1.5"
espressoCore = "3.5.1" espressoCore = "3.5.1"
+1 -1
View File
@@ -1,6 +1,6 @@
#Sun Mar 24 10:48:55 MDT 2024 #Sun Mar 24 10:48:55 MDT 2024
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists