Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ plugins {

android {
namespace = "com.example.myapplication"
compileSdk = 35
compileSdk = 36

signingConfigs {
getByName("debug") {
Expand Down
145 changes: 74 additions & 71 deletions app/src/main/java/com/example/myapplication/EndGame.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,11 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.RadioButton;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;

import com.example.myapplication.databinding.EndGameBinding;

Expand All @@ -24,10 +25,7 @@ public class EndGame extends Fragment {
private EndGameBinding binding;
ViewGroup v = null;

// Climb level selection

// Star rating
private int currentRating = 4; // Default 4 stars
private int currentRating = 0;
private ImageView[] stars;

@SuppressLint("SetTextI18n")
Expand All @@ -40,7 +38,6 @@ public View onCreateView(
binding = EndGameBinding.inflate(inflater, container, false);
v = container;

// Initialize star array
stars = new ImageView[]{
binding.star1,
binding.star2,
Expand All @@ -49,26 +46,47 @@ public View onCreateView(
binding.star5
};

binding.rbNone.setButtonDrawable(null);
binding.rbFail.setButtonDrawable(null);
binding.rbL1.setButtonDrawable(null);
binding.rbL2.setButtonDrawable(null);
binding.rbL3.setButtonDrawable(null);

return binding.getRoot();
}

@SuppressLint({"ClickableViewAccessibility", "SetTextI18n"})
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

// Setup climb level toggle buttons

binding.ivLogo.setOnClickListener(view12 -> NavHostFragment.findNavController(EndGame.this)
.navigate(R.id.action_SecondFragment2_to_SecondFragment));

MatchData data = UserModel.getMatchData();

setupClimbLevelButtons();

// Setup sliders
setupSliders();

// Setup star rating
setupStarRating();

// Reset button
binding.tvReset.setOnClickListener(v -> resetAllFields());
((RadioButton) binding.radioGroupClimbLevel.getChildAt(data.getTeleOpClimb())).setChecked(true);
binding.sliderDefense.setValue(data.getDefDuration());
binding.sliderUnderDefense.setValue(data.getunderDefDuration());
binding.sliderBroke.setValue(data.getBrokeDuration());
currentRating = data.getDefEffectiveness();
updateStars(currentRating);
updateQualityBadge(currentRating);
binding.tvDefenseValue.setText(String.valueOf(data.getDefDuration()));
binding.tvUnderDefenseValue.setText(String.valueOf(data.getunderDefDuration()));
binding.tvBrokeValue.setText(String.valueOf(data.getBrokeDuration()));
binding.etMatchNotes.setText(data.getNotes());

binding.tvTitle.setText("Endgame Team " + data.getTeamNumber());

binding.tvReset.setOnClickListener(v -> UIHelpers.makeConfirmationAlert("Reset Data", "Do you want to reset all Endgame fields?", this::resetAllFields, () -> {}, getContext()));

// Match notes input
binding.etMatchNotes.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
Expand All @@ -79,92 +97,78 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {}
@SuppressLint("SetTextI18n")
@Override
public void afterTextChanged(Editable s) {
// Save notes to your data model
// UserModel.getMatchData().setNotes(s.toString());
data.setNotes(s.toString());
}
});

// Submit button
binding.btnSubmit.setOnClickListener(view1 -> UIHelpers.makeConfirmationAlert("Submit Match Data",
"Do you want to submit your match data?", () -> {
try {
data.toJson();
} catch (Exception e) {
UIHelpers.makeHelpAlert("Unknown Data Transfer Error!", e.getMessage(), getContext());
}
NavHostFragment.findNavController(EndGame.this).navigate(R.id.action_SecondFragment2_to_FirstFragment);
}, () -> {}, getContext()));


}

private void setupClimbLevelButtons() {
TextView[] buttons = {
binding.btnNone,
binding.btnFail,
binding.btnL1,
binding.btnL2,
binding.btnL3
};
MatchData data = UserModel.getMatchData();

((RadioButton) binding.radioGroupClimbLevel.getChildAt(data.getTeleOpClimb())).setChecked(true);
Comment thread
cliclye marked this conversation as resolved.

for (int i = 0; i < buttons.length; i++) {
final int index = i;
buttons[i].setOnClickListener(v -> updateClimbButtons(buttons, index));
}

// Set initial selection (L3 is selected by default)
updateClimbButtons(buttons, 4);
binding.radioGroupClimbLevel.setOnCheckedChangeListener((r, i) -> {
int selectedIndex = binding.radioGroupClimbLevel.indexOfChild(binding.radioGroupClimbLevel.findViewById(i));
data.setTeleOpClimb(selectedIndex);
});
}

private void updateClimbButtons(TextView[] buttons, int selectedIndex) {
for (int i = 0; i < buttons.length; i++) {
if (i == selectedIndex) {
// Selected state
buttons[i].setBackgroundResource(R.drawable.cr6b0d59f2);
buttons[i].setTextColor(Color.WHITE);
buttons[i].setTypeface(null, android.graphics.Typeface.BOLD);
buttons[i].setElevation(4f);
} else {
// Unselected state
buttons[i].setBackground(null);
buttons[i].setTextColor(Color.parseColor("#94A3B8"));
buttons[i].setTypeface(null, android.graphics.Typeface.NORMAL);
buttons[i].setElevation(0f);
}
}
}

private void setupSliders() {
// Defense Duration Slider
binding.sliderDefense.addOnChangeListener((slider, value, fromUser) -> binding.tvDefenseValue.setText(String.valueOf((int) value)));
MatchData data = UserModel.getMatchData();

// Under Defense Slider
binding.sliderUnderDefense.addOnChangeListener((slider, value, fromUser) -> binding.tvUnderDefenseValue.setText(String.valueOf((int) value)));
binding.sliderDefense.addOnChangeListener((slider, value, fromUser) -> {
binding.tvDefenseValue.setText(String.valueOf((int) value));
data.setDefDuration((int) value);
});

binding.sliderUnderDefense.addOnChangeListener((slider, value, fromUser) -> {
binding.tvUnderDefenseValue.setText(String.valueOf((int) value));
data.setunderDefDuration((int) value);
});

// Broke Duration Slider
binding.sliderBroke.addOnChangeListener((slider, value, fromUser) -> binding.tvBrokeValue.setText(String.valueOf((int) value)));
binding.sliderBroke.addOnChangeListener((slider, value, fromUser) -> {
binding.tvBrokeValue.setText(String.valueOf((int) value));
data.setBrokeDuration((int) value);
});
}

private void setupStarRating() {
// Set initial rating
MatchData data = UserModel.getMatchData();

updateStars(currentRating);

// Add click listeners to stars
for (int i = 0; i < stars.length; i++) {
final int rating = i + 1;
stars[i].setOnClickListener(v -> {
currentRating = rating;
updateStars(rating);
updateQualityBadge(rating);
data.setDefEffectiveness(rating);
});
}

// Set initial badge
updateQualityBadge(currentRating);
}

private void updateStars(int rating) {
for (int i = 0; i < stars.length; i++) {
if (i < rating) {
// Filled star
stars[i].setImageResource(android.R.drawable.btn_star_big_on);
stars[i].setColorFilter(Color.parseColor("#0D59F2"), PorterDuff.Mode.SRC_IN);
} else {
// Empty star
stars[i].setImageResource(android.R.drawable.btn_star_big_off);
stars[i].setColorFilter(Color.parseColor("#4A5568"), PorterDuff.Mode.SRC_IN);
}
Expand Down Expand Up @@ -197,28 +201,27 @@ private void updateQualityBadge(int rating) {
}

private void resetAllFields() {
// Reset climb level to default
TextView[] buttons = {
binding.btnNone,
binding.btnFail,
binding.btnL1,
binding.btnL2,
binding.btnL3
};
updateClimbButtons(buttons, 4);
MatchData data = UserModel.getMatchData();

((RadioButton) binding.radioGroupClimbLevel.getChildAt(0)).setChecked(true);
data.setTeleOpClimb(0);

binding.sliderDefense.setValue(0);
data.setDefDuration(0);

// Reset sliders
binding.sliderDefense.setValue(30);
binding.sliderUnderDefense.setValue(0);
data.setunderDefDuration(0);

binding.sliderBroke.setValue(0);
data.setBrokeDuration(0);

// Reset star rating
currentRating = 4;
currentRating = 0;
updateStars(currentRating);
updateQualityBadge(currentRating);
data.setDefEffectiveness(0);

// Clear notes
binding.etMatchNotes.setText("");
data.setNotes("");
}


Expand Down
6 changes: 3 additions & 3 deletions app/src/main/java/com/example/myapplication/MatchData.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public class MatchData {

private int teleOpHub, teleOpHubMissed, teleOpPassed, teleOpClimb = 0;

private double defEffectiveness = 0.0;
private int defEffectiveness = 0;

private int defDuration, brokeDuration, underDefDuration = 0;

Expand Down Expand Up @@ -80,11 +80,11 @@ public void setDefDuration(int defDuration) {

public void setunderDefDuration(int underDefDuration){this.underDefDuration = underDefDuration;}

public double getDefEffectiveness() {
public int getDefEffectiveness() {
return defEffectiveness;
}

public void setDefEffectiveness(double defEffectiveness) {this.defEffectiveness = defEffectiveness; }
public void setDefEffectiveness(int defEffectiveness) {this.defEffectiveness = defEffectiveness; }

public int getBrokeDuration() {
return brokeDuration;
Expand Down
Loading