diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3ed4760..d529d7c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,7 +4,7 @@ plugins { android { namespace = "com.example.myapplication" - compileSdk = 35 + compileSdk = 36 signingConfigs { getByName("debug") { diff --git a/app/src/main/java/com/example/myapplication/EndGame.java b/app/src/main/java/com/example/myapplication/EndGame.java index 6187085..af1b274 100644 --- a/app/src/main/java/com/example/myapplication/EndGame.java +++ b/app/src/main/java/com/example/myapplication/EndGame.java @@ -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; @@ -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") @@ -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, @@ -49,6 +46,12 @@ 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(); } @@ -56,19 +59,34 @@ public View onCreateView( 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) {} @@ -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); - 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); } @@ -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(""); } diff --git a/app/src/main/java/com/example/myapplication/MatchData.java b/app/src/main/java/com/example/myapplication/MatchData.java index 3ea687f..21b3590 100644 --- a/app/src/main/java/com/example/myapplication/MatchData.java +++ b/app/src/main/java/com/example/myapplication/MatchData.java @@ -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; @@ -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; diff --git a/app/src/main/res/layout/end_game.xml b/app/src/main/res/layout/end_game.xml index 1e4a798..25118b9 100644 --- a/app/src/main/res/layout/end_game.xml +++ b/app/src/main/res/layout/end_game.xml @@ -7,12 +7,62 @@ android:layout_height="match_parent" android:background="#FFFFFF"> - + + + + + + + + + @@ -20,45 +70,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#101622" - android:paddingBottom="16dp"> - - - - - - - + android:paddingBottom="24dp"> + app:layout_constraintTop_toTopOf="parent" /> @@ -139,16 +154,17 @@ android:layout_height="wrap_content" android:layout_marginStart="12dp" android:text="How high it climbed." + android:fontFamily="@font/interbold" android:textColor="#94A3B8" android:textSize="12sp" app:layout_constraintStart_toEndOf="@id/ivClimbIcon" app:layout_constraintTop_toBottomOf="@id/tvClimbLevelTitle" /> - - + android:button="@null" + android:background="@drawable/radio_button_bg" /> - + android:button="@null" + android:background="@drawable/radio_button_bg" /> - + android:button="@null" + android:textStyle="bold" + android:fontFamily="@font/interbold" + android:textColor="#FFFFFF" + android:background="@drawable/radio_button_bg" /> - + android:textStyle="bold" + android:fontFamily="@font/interbold" + android:textColor="#FFFFFF" android:textSize="14sp" + android:button="@null" + android:background="@drawable/radio_button_bg" /> - - + @@ -244,6 +268,7 @@ android:textColor="#94A3B8" android:textSize="12sp" android:textStyle="bold" + android:fontFamily="@font/interbold" android:textAllCaps="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardClimbLevel" /> @@ -287,6 +312,7 @@ android:textColor="#FFFFFF" android:textSize="18sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toEndOf="@id/ivDefenseIcon" app:layout_constraintTop_toTopOf="@id/ivDefenseIcon" /> @@ -297,6 +323,7 @@ android:layout_marginStart="8dp" android:text="Duration in seconds" android:textColor="#94A3B8" + android:fontFamily="@font/interbold" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/tvDefenseTitle" app:layout_constraintBottom_toBottomOf="@id/tvDefenseTitle" /> @@ -332,6 +359,7 @@ android:textColor="#FFFFFF" android:textSize="20sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -369,6 +397,7 @@ android:textColor="#94A3B8" android:textSize="12sp" android:textStyle="bold" + android:fontFamily="@font/interbold" android:textAllCaps="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardDefenseDuration" /> @@ -412,6 +441,7 @@ android:textColor="#FFFFFF" android:textSize="16sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toEndOf="@id/ivQualityIcon" app:layout_constraintTop_toTopOf="@id/ivQualityIcon" app:layout_constraintBottom_toBottomOf="@id/ivQualityIcon" /> @@ -427,6 +457,7 @@ android:textColor="#0D59F2" android:textSize="10sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="@id/ivQualityIcon" app:layout_constraintBottom_toBottomOf="@id/ivQualityIcon" /> @@ -514,6 +545,7 @@ android:textColor="#94A3B8" android:textSize="12sp" android:textStyle="bold" + android:fontFamily="@font/interbold" android:textAllCaps="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardQualitative" /> @@ -557,6 +589,7 @@ android:textColor="#FFFFFF" android:textSize="18sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toEndOf="@id/ivUnderDefenseIcon" app:layout_constraintTop_toTopOf="@id/ivUnderDefenseIcon" /> @@ -566,6 +599,7 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:text="Duration in seconds" + android:fontFamily="@font/interbold" android:textColor="#94A3B8" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/tvUnderDefenseTitle" @@ -601,6 +635,7 @@ android:textColor="#FFFFFF" android:textSize="20sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -638,6 +673,7 @@ android:textColor="#94A3B8" android:textSize="12sp" android:textStyle="bold" + android:fontFamily="@font/interbold" android:textAllCaps="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardUnderDefense" /> @@ -681,6 +717,7 @@ android:textColor="#FFFFFF" android:textSize="18sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toEndOf="@id/ivBrokeIcon" app:layout_constraintTop_toTopOf="@id/ivBrokeIcon" /> @@ -690,6 +727,7 @@ android:layout_height="wrap_content" android:layout_marginStart="8dp" android:text="Duration in seconds" + android:fontFamily="@font/interbold" android:textColor="#94A3B8" android:textSize="14sp" app:layout_constraintStart_toEndOf="@id/tvBrokeTitle" @@ -725,6 +763,7 @@ android:textColor="#FFFFFF" android:textSize="20sp" android:textStyle="bold" + android:fontFamily="@font/interbold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -762,6 +801,7 @@ android:textColor="#94A3B8" android:textSize="12sp" android:textStyle="bold" + android:fontFamily="@font/interbold" android:textAllCaps="true" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cardBrokeDuration" /> @@ -815,29 +855,39 @@ - - - - + + + + + \ No newline at end of file